import { Meta } from "@storybook/addon-docs";

<Meta title="Tokens/Animation" />

<style>{`
  .subheading {
    --mediumdark: '#999999';
    font-weight: 900;
    font-size: 13px;
    color: var(--black);
    letter-spacing: 6px;
    line-height: 24px;
    text-transform: uppercase;
    margin-bottom: 12px;
    margin-top: 40px;
  }

  .preview-list {
    display: grid;
    grid-template-columns: 1fr;
    row-gap: 10px;
  }

  @media (min-width: 620px) {
    .preview-list {
      row-gap: 20px;
      column-gap: 20px;
      grid-template-columns: 1fr;
    }
  }

  @media (min-width: 865px) {
    .preview-list {
      row-gap: 20px;
      column-gap: 20px;
      grid-template-columns: 1fr 1fr;
    }
  }

  @media (min-width: 1024px) {
    .preview-list {
      grid-template-columns: 1fr 1fr 1fr;
    }
  }
  .preview-item {
    display: block;
    border: 1px solid #00000010;
    border-radius: var(--radius-base);
    color: #333333;
    display: flex;
    align-items: center;
    gap: 20px;
  }

  .preview-item-preview {
    width: var(--spacing-24);
    height: var(--spacing-24);
    border-radius: var(--radius-base);
    background-color: var(--neutral-100);
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    padding: var(--spacing-4);
  }
  .preview-item-preview-animation {
    width: var(--spacing-10);
    height: var(--spacing-10);
    border-left: 1px solid var(--neutral-500);
    border-top: 1px solid var(--neutral-500);
    box-shadow: var(--shadow-inherit-md);
    border-radius: var(--radius-base);
    color: var(--neutral-300);
    background-color: var(--neutral-500);
  }

  .example-fade-in {
    animation: var(--animation-fade) alternate;
    animation-duration: var(--duration-2000);
    animation-iteration-count: infinite;
  }
  .example-scale {
    animation: var(--animation-scale) alternate;
    animation-duration: var(--duration-2000);
    animation-iteration-count: infinite;
  }
  .example-scale-50 {
    animation: var(--animation-scale-50) alternate;
    animation-duration: var(--duration-2000);
    animation-iteration-count: infinite;
  }
  .example-slide-vertical {
    animation: var(--animation-slide-vertical) alternate;
    animation-duration: var(--duration-2000);
    animation-iteration-count: infinite;
  }
  .example-slide-vertical-50 {
    animation: var(--animation-slide-vertical-50) alternate;
    animation-duration: var(--duration-2000);
    animation-iteration-count: infinite;
  }
  .example-slide-vertical-10 {
    animation: var(--animation-slide-vertical-10) alternate;
    animation-duration: var(--duration-2000);
    animation-iteration-count: infinite;
  }
  .example-slide-horizontal {
    animation: var(--animation-slide-horizontal) alternate;
    animation-duration: var(--duration-2000);
    animation-iteration-count: infinite;
  }
  .example-slide-horizontal-50 {
    animation: var(--animation-slide-horizontal-50) alternate;
    animation-duration: var(--duration-2000);
    animation-iteration-count: infinite;
  }
  .example-slide-horizontal-10 {
    animation: var(--animation-slide-horizontal-10) alternate;
    animation-duration: var(--duration-2000);
    animation-iteration-count: infinite;
  }
  .example-slide-combined-1 {
    animation: var(--animation-fade) alternate, var(--animation-slide-horizontal) alternate;
    animation-duration: var(--duration-2000);
    animation-iteration-count: infinite;
  }
  .example-slide-combined-2 {
    animation: var(--animation-scale) alternate, var(--animation-fade) alternate;
    animation-duration: var(--duration-2000);
    animation-iteration-count: infinite;
  }
  .example-shake-x {
    animation: var(--animation-shake-x);
    animation-duration: var(--duration-1000);
    animation-iteration-count: infinite;
  }
  .example-shake-y {
    animation: var(--animation-shake-y);
    animation-duration: var(--duration-1000);
    animation-iteration-count: infinite;
  }
  .example-spin {
    animation: var(--animation-spin);
    animation-duration: var(--duration-1000);
    animation-iteration-count: infinite;
  }
  .example-ping {
    animation: var(--animation-ping);
    animation-duration: var(--duration-1000);
    animation-iteration-count: infinite;
  }
  .example-blink {
    animation: var(--animation-blink);
    animation-duration: var(--duration-1000);
    animation-iteration-count: infinite;
  }
  .example-float {
    animation: var(--animation-float);
    animation-duration: var(--duration-1000);
    animation-iteration-count: infinite;
  }
  .example-bounce {
    animation: var(--animation-bounce);
    animation-duration: var(--duration-1000);
    animation-iteration-count: infinite;
  }
  .example-pulse {
    animation: var(--animation-pulse);
    animation-duration: var(--duration-1000);
    animation-iteration-count: infinite;
  }

  .example-easing {
    animation: var(--animation-slide-horizontal) alternate;
    animation-duration: var(--duration-1000);
    animation-iteration-count: infinite;
  }
  .ease-1 {
    animation-timing-function: var(--ease-1);
  }
  .ease-2 {
    animation-timing-function: var(--ease-2);
  }
  .ease-3 {
    animation-timing-function: var(--ease-3);
  }
  .ease-4 {
    animation-timing-function: var(--ease-4);
  }
  .ease-5 {
    animation-timing-function: var(--ease-5);
  }
  .ease-elastic-1 {
    animation-timing-function: var(--ease-elastic-1);
  }
  .ease-elastic-2 {
    animation-timing-function: var(--ease-elastic-2);
  }
  .ease-elastic-3 {
    animation-timing-function: var(--ease-elastic-3);
  }
  .ease-elastic-4 {
    animation-timing-function: var(--ease-elastic-4);
  }
  .ease-elastic-5 {
    animation-timing-function: var(--ease-elastic-5);
  }
  .ease-squish-1 {
    animation-timing-function: var(--ease-squish-1);
  }
  .ease-squish-2 {
    animation-timing-function: var(--ease-squish-2);
  }
  .ease-squish-3 {
    animation-timing-function: var(--ease-squish-3);
  }
  .ease-squish-4 {
    animation-timing-function: var(--ease-squish-4);
  }
  .ease-squish-5 {
    animation-timing-function: var(--ease-squish-5);
  }
  .ease-step-1 {
    animation-timing-function: var(--ease-step-1);
  }
  .ease-step-2 {
    animation-timing-function: var(--ease-step-2);
  }
  .ease-step-3 {
    animation-timing-function: var(--ease-step-3);
  }
  .ease-step-4 {
    animation-timing-function: var(--ease-step-4);
  }
  .ease-step-5 {
    animation-timing-function: var(--ease-step-5);
  }
  .example-duration {
    animation: var(--animation-slide-horizontal) alternate;
    animation-duration: var(--duration-1000);
    animation-iteration-count: infinite;
  }
  .duration-75 {
    animation-duration: var(--duration-75);
  }
  .duration-100 {
    animation-duration: var(--duration-100);
  }
  .duration-150 {
    animation-duration: var(--duration-150);
  }
  .duration-200 {
    animation-duration: var(--duration-200);
  }
  .duration-300 {
    animation-duration: var(--duration-300);
  }
  .duration-500 {
    animation-duration: var(--duration-500);
  }
  .duration-700 {
    animation-duration: var(--duration-700);
  }
  .duration-1000 {
    animation-duration: var(--duration-1000);
  }
  .duration-1500 {
    animation-duration: var(--duration-1500);
  }
  .duration-2000 {
    animation-duration: var(--duration-2000);
  }
  .duration-3000 {
    animation-duration: var(--duration-3000);
  }

  .preview-item strong {
    font-weight: 600;
    display: block;
    letter-spacing: 0.25px;
    color: var(--neutral-600);
  }

  .preview-item span {
    font-size: var(--sizing-sm);
    line-height: 20px;
  }

  .tip {
    display: inline-block;
    border-radius: 1em;
    font-size: 15px;
    line-height: 12px;
    font-weight: 700;
    background: #E7FDD8;
    color: #66BF3C;
    padding: 4px 12px;
    margin-right: 10px;
    vertical-align: top;
  }

  .tip-wrapper {
    margin-top: var(--spacing-8);
    margin-bottom: var(--spacing-8);
  }

  .tip-wrapper code {
    display: inline-block;
  }

  
`}</style>

# Animation tokens

Premade keyframe effects allow you to orchestrate your own animations. Plus, a few nice attention-grabbers and indeterminate state animations.

## Using animation tokens

<div className="tip-wrapper">
  <span className="tip">Tip</span>Animations are defined as CSS Custom
  properties, to use them, use: <code>var(--animation-fade)</code> as the CSS
  property value.
</div>

```
animation: var(--animation-fade) forward; // forward for in, reverse for out, alternate or alternate-reverse
animation-duration: var(--duration-500);
```

### Enter/Exit Animations

For adding/removing elements in the interface. These can be combined for more advanced animations.

<div className="preview-list">
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-fade-in"></span>
    </div>
    <span>
      <strong>--animation-fade</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-scale"></span>
    </div>
    <span>
      <strong>--animation-scale</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-scale-50"></span>
    </div>
    <span>
      <strong>--animation-scale-50</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-slide-vertical"></span>
    </div>
    <span>
      <strong>--animation-slide-vertical</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-slide-vertical-50"></span>
    </div>
    <span>
      <strong>--animation-slide-vertical-50</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-slide-vertical-10"></span>
    </div>
    <span>
      <strong>--animation-slide-vertical-10</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-slide-horizontal"></span>
    </div>
    <span>
      <strong>--animation-slide-horizontal</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-slide-horizontal-50"></span>
    </div>
    <span>
      <strong>--animation-slide-horizontal-50</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-slide-horizontal-10"></span>
    </div>
    <span>
      <strong>--animation-slide-horizontal-10</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-slide-combined-1"></span>
    </div>
    <span>
      <strong>--animation-fade</strong>
      <strong>--animation-slide-vertical</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-slide-combined-2"></span>
    </div>
    <span>
      <strong>--animation-scale</strong>
      <strong>--animation-fade</strong>
    </span>
  </div>
</div>

### Continuous Animations

For loading or attention grabbers

<div className="preview-list">
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-shake-x"></span>
    </div>
    <span>
      <strong>--animation-shake-x</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-shake-y"></span>
    </div>
    <span>
      <strong>--animation-shake-y</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-spin"></span>
    </div>
    <span>
      <strong>--animation-spin</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-ping"></span>
    </div>
    <span>
      <strong>--animation-ping</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-blink"></span>
    </div>
    <span>
      <strong>--animation-blink</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-float"></span>
    </div>
    <span>
      <strong>--animation-float</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-bounce"></span>
    </div>
    <span>
      <strong>--animation-bounce</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-pulse"></span>
    </div>
    <span>
      <strong>--animation-pulse</strong>
    </span>
  </div>
</div>

## Easing Tokens

Applying easing tokens can change the way animations are played.

### Using Easing tokens

```
animation-timing-function: var(--ease-1);
```

<div className="preview-list">
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-easing ease-1"></span>
    </div>
    <span>
      <strong>--ease-1</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-easing ease-3"></span>
    </div>
    <span>
      <strong>--ease-3</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-easing ease-5"></span>
    </div>
    <span>
      <strong>--ease-5</strong>
    </span>
  </div>

<div className="preview-item">
  <div className="preview-item-preview">
    <span className="preview-item-preview-animation example-easing ease-elastic-1"></span>
  </div>
  <span>
    <strong>--ease-elastic-1</strong>
  </span>
</div>
<div className="preview-item">
  <div className="preview-item-preview">
    <span className="preview-item-preview-animation example-easing ease-elastic-3"></span>
  </div>
  <span>
    <strong>--ease-elastic-3</strong>
  </span>
</div>
<div className="preview-item">
  <div className="preview-item-preview">
    <span className="preview-item-preview-animation example-easing ease-elastic-5"></span>
  </div>
  <span>
    <strong>--ease-elastic-5</strong>
  </span>
</div>

<div className="preview-item">
  <div className="preview-item-preview">
    <span className="preview-item-preview-animation example-easing ease-squish-1"></span>
  </div>
  <span>
    <strong>--ease-squish-1</strong>
  </span>
</div>
<div className="preview-item">
  <div className="preview-item-preview">
    <span className="preview-item-preview-animation example-easing ease-squish-3"></span>
  </div>
  <span>
    <strong>--ease-squish-3</strong>
  </span>
</div>
<div className="preview-item">
  <div className="preview-item-preview">
    <span className="preview-item-preview-animation example-easing ease-squish-5"></span>
  </div>
  <span>
    <strong>--ease-squish-5</strong>
  </span>
</div>

  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-easing ease-step-1"></span>
    </div>
    <span>
      <strong>--ease-step-1</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-easing ease-step-3"></span>
    </div>
    <span>
      <strong>--ease-step-3</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-easing ease-step-5"></span>
    </div>
    <span>
      <strong>--ease-step-5</strong>
    </span>
  </div>
</div>

## Duration Tokens

Applying easing tokens can change the duration of an animation

### Using Easing tokens

```
animation-duration: var(--duration-500);
```

<div className="preview-list">
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-duration duration-75"></span>
    </div>
    <span>
      <strong>--duration-75</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-duration duration-100"></span>
    </div>
    <span>
      <strong>--duration-100</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-duration duration-150"></span>
    </div>
    <span>
      <strong>--duration-150</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-duration duration-200"></span>
    </div>
    <span>
      <strong>--duration-200</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-duration duration-300"></span>
    </div>
    <span>
      <strong>--duration-300</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-duration duration-500"></span>
    </div>
    <span>
      <strong>--duration-500</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-duration duration-700"></span>
    </div>
    <span>
      <strong>--duration-700</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-duration duration-1000"></span>
    </div>
    <span>
      <strong>--duration-1000</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-duration duration-1500"></span>
    </div>
    <span>
      <strong>--duration-1500</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-duration duration-2000"></span>
    </div>
    <span>
      <strong>--duration-2000</strong>
    </span>
  </div>
  <div className="preview-item">
    <div className="preview-item-preview">
      <span className="preview-item-preview-animation example-duration duration-3000"></span>
    </div>
    <span>
      <strong>--duration-3000</strong>
    </span>
  </div>
</div>
