<script lang="ts">
  export let streamingElement: HTMLElement | undefined;
  export let editModeActive: boolean = false;
</script>

<div class="container" class:edit-mode={editModeActive} bind:this={streamingElement}>
  <span class="📦"></span>
  <span class="📦"></span>
  <span class="📦"></span>
  <span class="📦"></span>
  <span class="📦"></span>
</div>

<style>
  :root {
    --duration: 1.5s;
    --container-size: 100px;
    --box-size: 12px;
    --box-border-radius: 15%;
  }

  .container {
    width: var(--container-size);
    display: flex;
    justify-content: space-between;
    align-items: center;
    position: relative;
    margin-left: 4px;
    padding-top: 12px;
    --streaming-color: var(--interactive-accent);
  }

  .container.edit-mode {
    --streaming-color: var(--alt-interactive-accent);
  }

  .📦 {
    width: var(--box-size);
    height: var(--box-size);
    position: relative;
    display: block;
    transform-origin: -50% center;
    border-radius: var(--box-border-radius);
  }
  .📦:after {
    content: "";
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    right: 0;
    background-color: color-mix(in srgb, var(--streaming-color) 85%, white 15%);
    border-radius: var(--box-border-radius);
    box-shadow: 0px 0px 8px 4px color-mix(in srgb, var(--streaming-color) 40%, transparent 80%);
  }
  .📦:nth-child(1) {
    animation: slide var(--duration) ease-in-out infinite alternate;
  }
  .📦:nth-child(1):after {
    animation: color-change var(--duration) ease-in-out infinite alternate;
  }
  .📦:nth-child(2) {
    animation: flip-1 var(--duration) ease-in-out infinite alternate;
  }
  .📦:nth-child(2):after {
    animation: squidge-1 var(--duration) ease-in-out infinite alternate;
  }
  .📦:nth-child(3) {
    animation: flip-2 var(--duration) ease-in-out infinite alternate;
  }
  .📦:nth-child(3):after {
    animation: squidge-2 var(--duration) ease-in-out infinite alternate;
  }
  .📦:nth-child(4) {
    animation: flip-3 var(--duration) ease-in-out infinite alternate;
  }
  .📦:nth-child(4):after {
    animation: squidge-3 var(--duration) ease-in-out infinite alternate;
  }
  .📦:nth-child(5) {
    animation: flip-4 var(--duration) ease-in-out infinite alternate;
  }
  .📦:nth-child(5):after {
    animation: squidge-4 var(--duration) ease-in-out infinite alternate;
  }
  .📦:nth-child(2):after {
    background-color: color-mix(in srgb, var(--streaming-color) 75%, white 25%);
  }
  .📦:nth-child(3):after {
    background-color: color-mix(in srgb, var(--streaming-color) 80%, white 20%);
  }
  .📦:nth-child(4):after {
    background-color: color-mix(in srgb, var(--streaming-color) 90%, white 10%);
  }
  .📦:nth-child(5):after {
    background-color: color-mix(in srgb, var(--streaming-color) 95%, white 5%);
  }

  @keyframes slide {
    0% {
      background-color: color-mix(in srgb, var(--streaming-color) 70%, white 30%);
      transform: translatex(0vw);
    }
    100% {
      background-color: color-mix(in srgb, var(--streaming-color) 95%, white 5%);
      transform: translatex(
        calc(var(--container-size) - (var(--box-size) * 1.25))
      );
    }
  }

  @keyframes color-change {
    0% {
      background-color: color-mix(in srgb, var(--streaming-color) 70%, white 30%);
    }
    100% {
      background-color: color-mix(in srgb, var(--streaming-color) 95%, white 5%);
    }
  }

  @keyframes flip-1 {
    0%,
    15% {
      transform: rotate(0);
    }
    35%,
    100% {
      transform: rotate(-180deg);
    }
  }

  @keyframes squidge-1 {
    5% {
      transform-origin: center bottom;
      transform: scalex(1) scaley(1);
    }
    15% {
      transform-origin: center bottom;
      transform: scalex(1.3) scaley(0.7);
    }
    25%,
    20% {
      transform-origin: center bottom;
      transform: scalex(0.8) scaley(1.4);
    }
    55%,
    100% {
      transform-origin: center top;
      transform: scalex(1) scaley(1);
    }
    40% {
      transform-origin: center top;
      transform: scalex(1.3) scaley(0.7);
    }
  }

  @keyframes flip-2 {
    0%,
    30% {
      transform: rotate(0);
    }
    50%,
    100% {
      transform: rotate(-180deg);
    }
  }

  @keyframes squidge-2 {
    20% {
      transform-origin: center bottom;
      transform: scalex(1) scaley(1);
    }
    30% {
      transform-origin: center bottom;
      transform: scalex(1.3) scaley(0.7);
    }
    40%,
    35% {
      transform-origin: center bottom;
      transform: scalex(0.8) scaley(1.4);
    }
    70%,
    100% {
      transform-origin: center top;
      transform: scalex(1) scaley(1);
    }
    55% {
      transform-origin: center top;
      transform: scalex(1.3) scaley(0.7);
    }
  }

  @keyframes flip-3 {
    0%,
    45% {
      transform: rotate(0);
    }
    65%,
    100% {
      transform: rotate(-180deg);
    }
  }

  @keyframes squidge-3 {
    35% {
      transform-origin: center bottom;
      transform: scalex(1) scaley(1);
    }
    45% {
      transform-origin: center bottom;
      transform: scalex(1.3) scaley(0.7);
    }
    55%,
    50% {
      transform-origin: center bottom;
      transform: scalex(0.8) scaley(1.4);
    }
    85%,
    100% {
      transform-origin: center top;
      transform: scalex(1) scaley(1);
    }
    70% {
      transform-origin: center top;
      transform: scalex(1.3) scaley(0.7);
    }
  }

  @keyframes flip-4 {
    0%,
    60% {
      transform: rotate(0);
    }
    80%,
    100% {
      transform: rotate(-180deg);
    }
  }

  @keyframes squidge-4 {
    50% {
      transform-origin: center bottom;
      transform: scalex(1) scaley(1);
    }
    60% {
      transform-origin: center bottom;
      transform: scalex(1.3) scaley(0.7);
    }
    70%,
    65% {
      transform-origin: center bottom;
      transform: scalex(0.8) scaley(1.4);
    }
    100%,
    100% {
      transform-origin: center top;
      transform: scalex(1) scaley(1);
    }
    85% {
      transform-origin: center top;
      transform: scalex(1.3) scaley(0.7);
    }
  }
</style>