# Spring

<pre class="nacara-api__signature nacara-api__signature--hanging"><code><span class="tok-keyword">module</span> <span class="tok-type">Spring</span></code></pre>

| | |
|---|---|
| Assembly | `Partas.Nacara.Plugins.Motion` |

Springs, solved the way anime.js 4.5.0 solves them, so that a spring written to CSS as
`linear()` and the same spring run by the bundled anime.js settle alike.

## Functions and values

<div class="nacara-api__entry" id="foranime">
<a class="nacara-api__anchor"
                           href="#foranime"
                           aria-label="Link to forAnime"
                           data-pagefind-ignore></a>
<details class="nacara-api__member">
<summary>
<pre class="nacara-api__signature nacara-api__signature--hanging"><code><span class="tok-function">forAnime</span> <span class="tok-punctuation">(</span><span class="tok-parameter">spring</span><span class="tok-punctuation">:</span> <a class="tok-type" href="/Partas.Nacara.Plugins/reference/partas-nacara-plugins-motion/nacara-plugins/springparameters/">SpringParameters</a><span class="tok-punctuation">)</span> <span class="tok-punctuation">:</span> <a class="tok-type" href="/Partas.Nacara.Plugins/reference/partas-nacara-plugins-motion/nacara-plugins/springparameters/">SpringParameters</a></code></pre>
</summary>
<div class="nacara-api__body">

The spring rewritten for anime.js, which clamps mass to at least 1.

A mass below 1 is rescaled to mass 1 by dividing stiffness and damping by it, which keeps the natural frequency and damping ratio, so the motion is unchanged.


</div>
</details>
</div>

<div class="nacara-api__entry" id="linear">
<a class="nacara-api__anchor"
                           href="#linear"
                           aria-label="Link to linear"
                           data-pagefind-ignore></a>
<details class="nacara-api__member">
<summary>
<pre class="nacara-api__signature nacara-api__signature--hanging"><code><span class="tok-function">linear</span> <span class="tok-punctuation">(</span><span class="tok-parameter">spring</span><span class="tok-punctuation">:</span> <a class="tok-type" href="/Partas.Nacara.Plugins/reference/partas-nacara-plugins-motion/nacara-plugins/springparameters/">SpringParameters</a><span class="tok-punctuation">)</span> <span class="tok-punctuation">:</span> <span class="tok-type">string</span></code></pre>
</summary>
<div class="nacara-api__body">

The spring as a CSS `linear()` easing of 32 samples over its settling time.

Each sample is rounded to 3 decimals. The first is `0` and the last is `1`.


</div>
</details>
</div>

<div class="nacara-api__entry" id="position">
<a class="nacara-api__anchor"
                           href="#position"
                           aria-label="Link to position"
                           data-pagefind-ignore></a>
<details class="nacara-api__member">
<summary>
<pre class="nacara-api__signature nacara-api__signature--hanging"><code><span class="tok-function">position</span> <span class="tok-punctuation">(</span><span class="tok-parameter">spring</span><span class="tok-punctuation">:</span> <a class="tok-type" href="/Partas.Nacara.Plugins/reference/partas-nacara-plugins-motion/nacara-plugins/springparameters/">SpringParameters</a><span class="tok-punctuation">)</span> <span class="tok-punctuation">(</span><span class="tok-parameter">seconds</span><span class="tok-punctuation">:</span> <span class="tok-type">float</span><span class="tok-punctuation">)</span> <span class="tok-punctuation">:</span> <span class="tok-type">float</span></code></pre>
</summary>
<div class="nacara-api__body">

The position of the spring after `seconds`, from 0 at rest to 1 at the target.

This is anime.js's `solve(t)`, which is itself `1 - displacement`; a spring that overshoots exceeds 1.


</div>
</details>
</div>

<div class="nacara-api__entry" id="preset">
<a class="nacara-api__anchor"
                           href="#preset"
                           aria-label="Link to preset"
                           data-pagefind-ignore></a>
<details class="nacara-api__member">
<summary>
<pre class="nacara-api__signature nacara-api__signature--hanging"><code><span class="tok-function">preset</span> <span class="tok-punctuation">(</span><span class="tok-parameter">name</span><span class="tok-punctuation">:</span> <span class="tok-type">string</span><span class="tok-punctuation">)</span> <span class="tok-punctuation">:</span> <a class="tok-type" href="/Partas.Nacara.Plugins/reference/partas-nacara-plugins-motion/nacara-plugins/springparameters/">SpringParameters</a> <span class="tok-type">option</span></code></pre>
</summary>
<div class="nacara-api__body">

The stand-in spring for one of Figma's named spring presets, or `None` for any other name.

Figma does not publish the parameters of `GENTLE`, `QUICK`, `BOUNCY` and `SLOW`; this is the one place that chooses them.


</div>
</details>
</div>

<div class="nacara-api__entry" id="settle">
<a class="nacara-api__anchor"
                           href="#settle"
                           aria-label="Link to settle"
                           data-pagefind-ignore></a>
<details class="nacara-api__member">
<summary>
<pre class="nacara-api__signature nacara-api__signature--hanging"><code><span class="tok-function">settle</span> <span class="tok-punctuation">(</span><span class="tok-parameter">spring</span><span class="tok-punctuation">:</span> <a class="tok-type" href="/Partas.Nacara.Plugins/reference/partas-nacara-plugins-motion/nacara-plugins/springparameters/">SpringParameters</a><span class="tok-punctuation">)</span> <span class="tok-punctuation">:</span> <span class="tok-type">int</span></code></pre>
</summary>
<div class="nacara-api__body">

The milliseconds a spring takes to settle.

This is `round(solverDuration * 1000)`, anime.js's `settlingDuration`.


</div>
</details>
</div>

<div class="nacara-api__entry" id="solverduration">
<a class="nacara-api__anchor"
                           href="#solverduration"
                           aria-label="Link to solverDuration"
                           data-pagefind-ignore></a>
<details class="nacara-api__member">
<summary>
<pre class="nacara-api__signature nacara-api__signature--hanging"><code><span class="tok-function">solverDuration</span> <span class="tok-punctuation">(</span><span class="tok-parameter">spring</span><span class="tok-punctuation">:</span> <a class="tok-type" href="/Partas.Nacara.Plugins/reference/partas-nacara-plugins-motion/nacara-plugins/springparameters/">SpringParameters</a><span class="tok-punctuation">)</span> <span class="tok-punctuation">:</span> <span class="tok-type">float</span></code></pre>
</summary>
<div class="nacara-api__body">

The seconds the solver runs before the spring has rested, as anime.js measures it.

It steps 0.02s at a time and stops on the 11th consecutive step within 0.0005 of the target.


</div>
</details>
</div>
