Rewrite the `SpringFrame` function such that it's more efficient at generating the position of a spring at a t value between 0 and 1, while enhancing the typescript and the tsdoc comments to give devs more context 

```ts
/\*!
 \* Spring solver inspired by Webkit Copyright © 2016 Apple Inc. All rights reserved. https://webkit.org/demos/spring/spring.js
 \*
 \* Redistribution and use in source and binary forms, with or without
 \* modification, are permitted provided that the following conditions
 \* are met:
 \* 1. Redistributions of source code must retain the above copyright
 \* notice, this list of conditions and the following disclaimer.
 \* 2. Redistributions in binary form must reproduce the above copyright
 \* notice, this list of conditions and the following disclaimer in the
 \* documentation and/or other materials provided with the distribution.
 \*
 \* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
 \* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 \* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 \* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
 \* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 \* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 \* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 \* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 \* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 \* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 \* THE POSSIBILITY OF SUCH DAMAGE.
\*/
/\*\*
 \* Generates a single frame of the spring easing at a specific time between (0 to 1) with the spring parameters given [mass, stiffness, damping, velocity]
 \*
 \* @param t time value between 0 & 1
 \* @param spring-parameters (limit of 0.0001 to 1)
 \* - mass = mass of object
 \* - stiffness = stiffness of spring
 \* - damping = amount to dampen spring motion
 \* - velocity = initial velocity of spring
 \* @param duration (optional) the maximum duration (in milliseconds) required for a spring (with its specified spring parameters) to reach a resting position. It's used to ensure the progress of all spring frames put together are smooth
 \* @returns a single frame of the spring easing at the time specified
 \*
 \* \_\*\*Note\*\*: Be very careful of only setting some of the spring parameters, it can cause errors if you are not careful\_
 \*
 \* Based on [animejs](https://github.com/juliangarnier/anime/blob/3ebfd913a04f7dc59cc3d52e38275272a5a12ae6/src/index.js#L76)
 \*/
export const SpringFrame: TypeFrameFunction = (
 t,
 [mass = 1, stiffness = 100, damping = 10, velocity = 0] = [],
 duration,
) => {
 mass = limit(mass, 0.0001, 1000);
 stiffness = limit(stiffness, 0.0001, 1000);
 damping = limit(damping, 0.0001, 1000);
 velocity = limit(velocity, 0.0001, 1000);

 const w0 = Math.sqrt(stiffness / mass);
 const zeta = damping / (2 \* Math.sqrt(stiffness \* mass));
 const wd = zeta < 1 ? w0 \* Math.sqrt(1 - zeta \* zeta) : 0;
 const b = zeta < 1 ? (zeta \* w0 + -velocity) / wd : -velocity + w0;

 let position = duration ? (duration \* t) / 1000 : t;
 if (zeta < 1) {
 position = Math.exp(-position \* zeta \* w0)
 \* ( Math.cos(wd \* position) + b \* Math.sin(wd \* position));
 } else {
 position = (1 + b \* position) \* Math.exp(-position \* w0);
 }

 return 1 - position;
}
```
스프링의 위치를 0과 1 사이의 t 값으로 생성하는 데 더 효율적이도록 `SpringFrame` 함수를 재작성하고, 개발자에게 더 많은 컨텍스트를 제공하도록 타입스크립트와 tsdoc 주석을 개선합니다. ```ts/\*! \* 웹킷에서 영감을 얻은 스프링 솔버 저작권 © 2016 Apple Inc. 모든 권리 보유. https://webkit.org/demos/spring/spring.js \* \* 소스 및 바이너리 형식의 재배포 및 사용, 수정 유무에 관계없이 \* 수정 없이 소스 및 바이너리 형태의 재배포 및 사용은 다음 조건이 충족되는 경우 허용됩니다. \* 충족되는 경우: \* 1. 소스 코드의 재배포는 위의 저작권을 유지해야 합니다. \* 고지, 이 조건 목록 및 다음 면책 조항을 포함해야 합니다. \* 2. 바이너리 형식의 재배포는 위의 저작권 \* 고지, 조건 및 면책 조항을 포함해야 합니다. \* 고지, 이 조건 목록 및 다음 면책 조항을 복제해야 합니다. \* 문서 및/또는 배포와 함께 제공된 기타 자료를 복제해야 합니다. \* \* 이 소프트웨어는 Apple Inc. 및 그 기여자가 '있는 그대로' 제공합니다. \* 및 다음을 포함하되 이에 국한되지 않는 모든 명시적 또는 묵시적 보증, \* 상품성 및 특정 목적에의 적합성에 대한 묵시적 보증. \* 목적에의 적합성을 포함한 모든 명시적 또는 묵시적 보증이 부인됩니다. 어떠한 경우에도 Apple Inc. 또는 그 기여자는 \* 는 어떠한 경우에도 직접적, 간접적, 부수적, 특별, 예시적 또는 \* 결과적 손해(조달을 포함하되 이에 국한되지 않음)에 대한 책임이 없습니다. \* 대체 상품 또는 서비스; 사용, 데이터 또는 이익 손실; 또는 비즈니스 \* 중단)이 원인이든, 어떤 책임 이론에 근거하든 관계없이 \* 계약, 무과실 책임 또는 불법 행위(과실 또는 기타 포함) \* 이 소프트웨어의 사용으로 인해 어떤 방식으로든 발생하는 경우, 사전에 통지받은 경우에도 마찬가지입니다. \* 그러한 손해의 가능성.\*//\*\* \* 주어진 스프링 매개변수 [질량, 강성, 댐핑, 속도]를 사용하여 (0~1) 사이의 특정 시간에 스프링이 완화되는 단일 프레임을 생성합니다. \* \* @param t 0과 1 사이의 시간 값 \* @param 스프링 파라미터(0.0001 ~ 1의 한계) \* - 질량 = 물체의 질량 \* - 강성 = 스프링의 강성 \* - 댐핑 = 스프링 동작을 감쇠하는 양 \* - 속도 = 스프링의 초기 속도 \* @param 지속 시간(선택 사항) 스프링(지정된 스프링 매개변수 포함)이 휴식 위치에 도달하는 데 필요한 최대 지속 시간(밀리초)입니다. 이는 결합된 모든 스프링 프레임의 진행이 원활하게 이루어지도록 하는 데 사용됩니다. \* 지정된 시간에 스프링이 완화되는 단일 프레임을 반환합니다. \* \* \_\*\* 참고\*\*: 스프링 매개변수 중 일부만 설정하면 주의하지 않으면 오류가 발생할 수 있으니 주의하세요\_. \* \* [animejs](https://github.com/juliangarnier/anime/blob/3ebfd913a04f7dc59cc3d52e38275272a5a12ae6/src/index.js#L76) 기준 \*/export const SpringFrame: TypeFrameFunction = ( t, [질량 = 1, 강성 = 100, 댐핑 = 10, 속도 = 0] = [], duration,) => { 질량 = limit(질량, 0.0001, 1000); 강성 = limit(강성, 0.0001, 1000); 감쇠 = limit(감쇠, 0.0001, 1000); 속도 = limit(속도, 0.0001, 1000); const w0 = Math.sqrt(강성 / 질량); const zeta = 댐핑 / (2 \* Math.sqrt(강성 \* 질량)); const wd = zeta < 1 ? w0 \* Math.sqrt(1 - zeta \* zeta) : 0; const b = zeta < 1 ? (zeta \* w0 + -velocity) / wd : -velocity + w0; let 위치 = 지속 시간 ? (지속 시간 \* t) / 1000 : t; if (zeta < 1) { 위치 = Math.exp(-위치 \* 제타 \* w0) \* ( Math.cos(wd \* 위치) + b \* Math.sin(wd \* 위치)); } else { 위치 = (1 + b \* 위치) \* Math.exp(-position \* w0); } 반환 1 - 위치;}```