@applemusic-like-lyrics/core 0.2.0-alpha.0 → 0.2.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/amll-core.js +811 -691
- package/dist/amll-core.js.map +1 -1
- package/dist/style.css +1 -0
- package/package.json +4 -1
package/dist/amll-core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amll-core.js","sources":["../src/bg-render/base.ts","../src/utils/resource.ts","../src/bg-render/pixi-renderer.ts","../../../node_modules/.pnpm/gl-matrix@4.0.0-beta.2/node_modules/gl-matrix/dist/esm/common.js","../../../node_modules/.pnpm/gl-matrix@4.0.0-beta.2/node_modules/gl-matrix/dist/esm/mat4.js","../../../node_modules/.pnpm/gl-matrix@4.0.0-beta.2/node_modules/gl-matrix/dist/esm/vec3.js","../../../node_modules/.pnpm/gl-matrix@4.0.0-beta.2/node_modules/gl-matrix/dist/esm/vec4.js","../../../node_modules/.pnpm/gl-matrix@4.0.0-beta.2/node_modules/gl-matrix/dist/esm/vec2.js","../src/bg-render/img.ts","../src/bg-render/mesh-renderer/blend.frag.glsl?raw","../src/bg-render/mesh-renderer/blend.vert.glsl?raw","../src/bg-render/mesh-renderer/cp-presets.ts","../src/bg-render/mesh-renderer/mesh.frag.glsl?raw","../src/bg-render/mesh-renderer/mesh.vert.glsl?raw","../src/bg-render/mesh-renderer/index.ts","../src/bg-render/index.ts","../src/utils/debounce.ts","../src/utils/eq-set.ts","../src/utils/derivative.ts","../src/utils/spring.ts","../src/lyric-player/bottom-line.ts","../src/lyric-player/interlude-dots.ts","../../../node_modules/.pnpm/bezier-easing@2.1.0/node_modules/bezier-easing/src/index.js","../src/utils/matrix.ts","../src/utils/schedule.ts","../src/lyric-player/lyric-line.ts","../src/lyric-player/index.ts"],"sourcesContent":["import { Disposable, HasElement } from \"../interfaces\";\n\nexport abstract class AbstractBaseRenderer implements Disposable, HasElement {\n\t/**\n\t * 修改背景的流动速度,数字越大越快,默认为 8\n\t * @param speed 背景的流动速度,默认为 8\n\t */\n\tabstract setFlowSpeed(speed: number): void;\n\t/**\n\t * 修改背景的渲染比例,默认是 0.5\n\t *\n\t * 一般情况下这个程度既没有明显瑕疵也不会特别吃性能\n\t * @param scale 背景的渲染比例\n\t */\n\tabstract setRenderScale(scale: number): void;\n\t/**\n\t * 是否启用静态模式,即图片在更换后就会保持静止状态并禁用更新,以节省性能\n\t * @param enable 是否启用静态模式\n\t */\n\tabstract setStaticMode(enable: boolean): void;\n\t/**\n\t * 修改背景动画帧率,默认是 30 FPS\n\t *\n\t * 如果设置成 0 则会停止动画\n\t * @param fps 目标帧率,默认 30 FPS\n\t */\n\tabstract setFPS(fps: number): void;\n\t/**\n\t * 暂停背景动画,画面即便是更新了图片也不会发生变化\n\t */\n\tabstract pause(): void;\n\t/**\n\t * 恢复播放背景动画\n\t */\n\tabstract resume(): void;\n\t/**\n\t * 设置背景专辑资源,纹理加载并设置完成后会返回\n\t * @param albumSource 专辑的资源链接,可以是图片或视频链接,抑或是任意 img/video 元素,如果提供字符串链接且为视频则需要指定第二个参数\n\t */\n\tabstract setAlbum(\n\t\talbumSource: string | HTMLImageElement | HTMLVideoElement,\n\t\tisVideo?: boolean,\n\t): Promise<void>;\n\t/**\n\t * 设置低频的音量大小,范围在 80hz-120hz 之间为宜,取值范围在 [0.0-1.0] 之间\n\t *\n\t * 部分渲染器会根据音量大小调整背景效果(例如根据鼓点跳动)\n\t *\n\t * 如果无法获取到类似的数据,请传入 1.0 作为默认值,或不做任何处理(默认值即 1.0)\n\t * @param volume 低频的音量大小,范围在 50hz-120hz 之间为宜,取值范围在 [0.0-1.0] 之间\n\t */\n\tabstract setLowFreqVolume(volume: number): void;\n\t/**\n\t * 设置背景是否根据“是否有歌词”这个特征调整自身效果,例如有歌词时会变得更加活跃\n\t *\n\t * 部分渲染器会根据这个特征调整自身效果\n\t *\n\t * 如果不确定是否需要赋值或无法知晓是否包含歌词,请传入 true 或不做任何处理(默认值为 true)\n\t *\n\t * @param hasLyric 是否有歌词,如不确定是否需要赋值,请传入 true 或不做任何处理(默认值为 true)\n\t */\n\tabstract setHasLyric(hasLyric: boolean): void;\n\tabstract dispose(): void;\n\tabstract getElement(): HTMLElement;\n}\n\nexport abstract class BaseRenderer extends AbstractBaseRenderer {\n\tprivate observer: ResizeObserver;\n\tprotected flowSpeed = 4;\n\tprotected currerntRenderScale = 0.75;\n\tconstructor(protected canvas: HTMLCanvasElement) {\n\t\tsuper();\n\t\tthis.observer = new ResizeObserver(() => {\n\t\t\tconst width = Math.max(\n\t\t\t\t1,\n\t\t\t\tcanvas.clientWidth * window.devicePixelRatio * this.currerntRenderScale,\n\t\t\t);\n\t\t\tconst height = Math.max(\n\t\t\t\t1,\n\t\t\t\tcanvas.clientHeight *\n\t\t\t\t\twindow.devicePixelRatio *\n\t\t\t\t\tthis.currerntRenderScale,\n\t\t\t);\n\t\t\tthis.onResize(width, height);\n\t\t});\n\t\tthis.observer.observe(canvas);\n\t}\n\tsetRenderScale(scale: number) {\n\t\tthis.currerntRenderScale = scale;\n\t\tthis.onResize(\n\t\t\tthis.canvas.clientWidth *\n\t\t\t\twindow.devicePixelRatio *\n\t\t\t\tthis.currerntRenderScale,\n\t\t\tthis.canvas.clientHeight *\n\t\t\t\twindow.devicePixelRatio *\n\t\t\t\tthis.currerntRenderScale,\n\t\t);\n\t}\n\t/**\n\t * 当画板元素大小发生变化时此函数会被调用\n\t * 可以在此处重设和渲染器相关的尺寸设置\n\t * 考虑到初始化的时候元素不一定在文档中或出于某些特殊样式状态,尺寸长宽有可能会为 0,请注意进行特判处理\n\t * @param width 画板元素实际的物理像素宽度,有可能为 0\n\t * @param height 画板元素实际的物理像素高度,有可能为 0\n\t */\n\tprotected onResize(width: number, height: number): void {\n\t\tthis.canvas.width = width;\n\t\tthis.canvas.height = height;\n\t}\n\t/**\n\t * 修改背景的流动速度,数字越大越快,默认为 4\n\t * @param speed 背景的流动速度,默认为 4\n\t */\n\tsetFlowSpeed(speed: number) {\n\t\tthis.flowSpeed = speed;\n\t}\n\t/**\n\t * 是否启用静态模式,即图片在更换后就会保持静止状态并禁用更新,以节省性能\n\t * @param enable 是否启用静态模式\n\t */\n\tabstract setStaticMode(enable: boolean): void;\n\t/**\n\t * 修改背景动画帧率,默认是 30 FPS\n\t *\n\t * 如果设置成 0 则会停止动画\n\t * @param fps 目标帧率,默认 30 FPS\n\t */\n\tabstract setFPS(fps: number): void;\n\t/**\n\t * 暂停背景动画,画面即便是更新了图片也不会发生变化\n\t */\n\tabstract pause(): void;\n\t/**\n\t * 恢复播放背景动画\n\t */\n\tabstract resume(): void;\n\t/**\n\t * 设置背景专辑资源,纹理加载并设置完成后会返回\n\t * @param albumSource 专辑的资源链接,可以是图片或视频链接,抑或是任意 img/video 元素,如果提供字符串链接且为视频则需要指定第二个参数\n\t */\n\tabstract setAlbum(\n\t\talbumSource: string | HTMLImageElement | HTMLVideoElement,\n\t\tisVideo?: boolean,\n\t): Promise<void>;\n\tdispose(): void {\n\t\tthis.observer.disconnect();\n\t\tthis.canvas.remove();\n\t}\n\toverride getElement(): HTMLElement {\n\t\treturn this.canvas;\n\t}\n}\n","export function loadImage(imageUrl: string): Promise<HTMLImageElement> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst img = document.createElement(\"img\");\n\t\timg.onload = () => resolve(img);\n\t\timg.onerror = reject;\n\t\timg.src = imageUrl;\n\t\timg.crossOrigin = \"anonymous\";\n\t\timg.loading = \"eager\";\n\t});\n}\n\nexport function loadVideo(videoUrl: string): Promise<HTMLVideoElement> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst video = document.createElement(\"video\");\n\t\tlet playing = false;\n\t\tlet timeupdate = false;\n\t\tlet rejected = false;\n\t\tvideo.addEventListener(\n\t\t\t\"playing\",\n\t\t\t() => {\n\t\t\t\tplaying = true;\n\t\t\t\tcheckReady();\n\t\t\t},\n\t\t\ttrue,\n\t\t);\n\t\tvideo.addEventListener(\n\t\t\t\"timeupdate\",\n\t\t\t() => {\n\t\t\t\ttimeupdate = true;\n\t\t\t\tcheckReady();\n\t\t\t},\n\t\t\ttrue,\n\t\t);\n\t\tvideo.addEventListener(\n\t\t\t\"error\",\n\t\t\t(err) => {\n\t\t\t\trejected = true;\n\t\t\t\treject(err);\n\t\t\t},\n\t\t\ttrue,\n\t\t);\n\t\tfunction checkReady() {\n\t\t\tif (playing && timeupdate && !rejected) {\n\t\t\t\tresolve(video);\n\t\t\t}\n\t\t}\n\t\tvideo.src = videoUrl;\n\t\tvideo.playsInline = true;\n\t\tvideo.crossOrigin = \"anonymous\";\n\t\tvideo.autoplay = true;\n\t\tvideo.loop = true;\n\t\tvideo.muted = true;\n\t\tvideo.play();\n\t});\n}\n\nexport function loadResourceFromUrl(\n\turl: string,\n\tisVideo = false,\n): Promise<HTMLImageElement | HTMLVideoElement> {\n\treturn isVideo ? loadVideo(url) : loadImage(url);\n}\n\nexport function loadResourceFromElement(\n\telement: HTMLImageElement | HTMLVideoElement,\n): Promise<HTMLImageElement | HTMLVideoElement> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (\n\t\t\telement instanceof HTMLImageElement\n\t\t\t\t? element.complete\n\t\t\t\t: element.readyState >= 3\n\t\t) {\n\t\t\tresolve(element);\n\t\t} else {\n\t\t\telement.onload = () => resolve(element);\n\t\t\telement.onerror = reject;\n\t\t}\n\t});\n}\n","import { Container } from \"@pixi/display\";\nimport { Application } from \"@pixi/app\";\nimport { BlurFilter } from \"@pixi/filter-blur\";\nimport { ColorMatrixFilter } from \"@pixi/filter-color-matrix\";\nimport { Texture } from \"@pixi/core\";\nimport { Sprite } from \"@pixi/sprite\";\nimport { BulgePinchFilter } from \"@pixi/filter-bulge-pinch\";\nimport { BaseRenderer } from \"./base\";\nimport {\n\tloadResourceFromElement,\n\tloadResourceFromUrl,\n} from \"../utils/resource\";\n\nclass TimedContainer extends Container {\n\tpublic time = 0;\n}\n\nexport class PixiRenderer extends BaseRenderer {\n\tprivate app: Application;\n\tprivate curContainer?: TimedContainer;\n\tprivate staticMode = false;\n\tprivate lastContainer: Set<TimedContainer> = new Set();\n\tprivate onTick = (delta: number): void => {\n\t\tfor (const lastContainer of this.lastContainer) {\n\t\t\tlastContainer.alpha = Math.max(0, lastContainer.alpha - delta / 60);\n\t\t\tif (lastContainer.alpha <= 0) {\n\t\t\t\tthis.app.stage.removeChild(lastContainer);\n\t\t\t\tthis.lastContainer.delete(lastContainer);\n\t\t\t\tlastContainer.destroy(true);\n\t\t\t}\n\t\t}\n\n\t\tif (this.curContainer) {\n\t\t\tthis.curContainer.alpha = Math.min(\n\t\t\t\t1,\n\t\t\t\tthis.curContainer.alpha + delta / 60,\n\t\t\t);\n\t\t\tconst [s1, s2, s3, s4] = this.curContainer.children as Sprite[];\n\t\t\tconst maxSize = Math.max(this.app.screen.width, this.app.screen.height);\n\t\t\ts1.position.set(this.app.screen.width / 2, this.app.screen.height / 2);\n\t\t\ts2.position.set(\n\t\t\t\tthis.app.screen.width / 2.5,\n\t\t\t\tthis.app.screen.height / 2.5,\n\t\t\t);\n\t\t\ts3.position.set(this.app.screen.width / 2, this.app.screen.height / 2);\n\t\t\ts4.position.set(this.app.screen.width / 2, this.app.screen.height / 2);\n\t\t\ts1.width = maxSize * Math.sqrt(2);\n\t\t\ts1.height = s1.width;\n\t\t\ts2.width = maxSize * 0.8;\n\t\t\ts2.height = s2.width;\n\t\t\ts3.width = maxSize * 0.5;\n\t\t\ts3.height = s3.width;\n\t\t\ts4.width = maxSize * 0.25;\n\t\t\ts4.height = s4.width;\n\n\t\t\tthis.curContainer.time += delta * this.flowSpeed;\n\n\t\t\ts1.rotation += (delta / 1000) * this.flowSpeed;\n\t\t\ts2.rotation -= (delta / 500) * this.flowSpeed;\n\t\t\ts3.rotation += (delta / 1000) * this.flowSpeed;\n\t\t\ts4.rotation -= (delta / 750) * this.flowSpeed;\n\n\t\t\ts3.x =\n\t\t\t\tthis.app.screen.width / 2 +\n\t\t\t\t(this.app.screen.width / 4) *\n\t\t\t\t\tMath.cos((this.curContainer.time / 1000) * 0.75);\n\t\t\ts3.y =\n\t\t\t\tthis.app.screen.height / 2 +\n\t\t\t\t(this.app.screen.width / 4) *\n\t\t\t\t\tMath.cos((this.curContainer.time / 1000) * 0.75);\n\n\t\t\ts4.x =\n\t\t\t\tthis.app.screen.width / 2 +\n\t\t\t\t(this.app.screen.width / 4) * 0.1 +\n\t\t\t\tMath.cos(this.curContainer.time * 0.006 * 0.75);\n\t\t\ts4.y =\n\t\t\t\tthis.app.screen.height / 2 +\n\t\t\t\t(this.app.screen.width / 4) * 0.1 +\n\t\t\t\tMath.cos(this.curContainer.time * 0.006 * 0.75);\n\n\t\t\tif (\n\t\t\t\tthis.curContainer.alpha >= 1 &&\n\t\t\t\tthis.lastContainer.size === 0 &&\n\t\t\t\tthis.staticMode\n\t\t\t) {\n\t\t\t\tthis.app.ticker.stop();\n\t\t\t}\n\t\t}\n\t};\n\tconstructor(protected canvas: HTMLCanvasElement) {\n\t\tsuper(canvas);\n\t\tthis.app = new Application({\n\t\t\tview: canvas,\n\t\t\tresizeTo: this.canvas,\n\t\t\tpowerPreference: \"low-power\",\n\t\t\tbackgroundAlpha: 1,\n\t\t});\n\t\tthis.rebuildFilters();\n\t\tthis.app.ticker.maxFPS = 30;\n\t\tthis.app.ticker.add(this.onTick);\n\t\tthis.app.ticker.start();\n\t}\n\n\tprotected override onResize(width: number, height: number): void {\n\t\tsuper.onResize(width, height);\n\t\tthis.app.resize();\n\t\tthis.rebuildFilters();\n\t}\n\n\toverride setRenderScale(scale: number) {\n\t\tsuper.setRenderScale(scale);\n\t\tthis.rebuildFilters();\n\t}\n\tprivate rebuildFilters() {\n\t\tconst minBorder = Math.min(this.canvas.width, this.canvas.height);\n\t\tconst maxBorder = Math.max(this.canvas.width, this.canvas.height);\n\t\tconst c0 = new ColorMatrixFilter();\n\t\tc0.saturate(1.2, false);\n\t\tconst c1 = new ColorMatrixFilter();\n\t\tc1.brightness(0.6, false);\n\t\tconst c2 = new ColorMatrixFilter();\n\t\tc2.contrast(0.3, true);\n\t\tthis.app.stage.filters?.forEach((filter) => {\n\t\t\tfilter.destroy();\n\t\t});\n\t\tthis.app.stage.filters = [];\n\t\tthis.app.stage.filters.push(new BlurFilter(5, 1));\n\t\tthis.app.stage.filters.push(new BlurFilter(10, 1));\n\t\tthis.app.stage.filters.push(new BlurFilter(20, 2));\n\t\tthis.app.stage.filters.push(new BlurFilter(40, 2));\n\t\tthis.app.stage.filters.push(new BlurFilter(80, 2));\n\t\tif (minBorder > 768) this.app.stage.filters.push(new BlurFilter(160, 4));\n\t\tif (minBorder > 768 * 2)\n\t\t\tthis.app.stage.filters.push(new BlurFilter(320, 4));\n\n\t\tthis.app.stage.filters.push(c0, c1, c2);\n\t\tthis.app.stage.filters.push(new BlurFilter(5, 1));\n\t\tif (Math.random() > 0.5) {\n\t\t\tthis.app.stage.filters.push(\n\t\t\t\tnew BulgePinchFilter({\n\t\t\t\t\tradius: (maxBorder + minBorder) / 2,\n\t\t\t\t\tstrength: 1,\n\t\t\t\t\tcenter: [0.25, 1],\n\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.app.stage.filters.push(\n\t\t\t\tnew BulgePinchFilter({\n\t\t\t\t\tradius: (maxBorder + minBorder) / 2,\n\t\t\t\t\tstrength: 1,\n\t\t\t\t\tcenter: [0.75, 0],\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tthis.app.stage.filters.push(\n\t\t\t\tnew BulgePinchFilter({\n\t\t\t\t\tradius: (maxBorder + minBorder) / 2,\n\t\t\t\t\tstrength: 1,\n\t\t\t\t\tcenter: [0.75, 1],\n\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.app.stage.filters.push(\n\t\t\t\tnew BulgePinchFilter({\n\t\t\t\t\tradius: (maxBorder + minBorder) / 2,\n\t\t\t\t\tstrength: 1,\n\t\t\t\t\tcenter: [0.25, 0],\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\toverride setStaticMode(enable = false) {\n\t\tthis.staticMode = enable;\n\t\tthis.app.ticker.start();\n\t}\n\n\toverride setFPS(fps: number) {\n\t\tthis.app.ticker.maxFPS = fps;\n\t}\n\n\toverride pause() {\n\t\tthis.app.ticker.stop();\n\t\tthis.app.render();\n\t}\n\n\toverride resume() {\n\t\tthis.app.ticker.start();\n\t}\n\n\toverride setLowFreqVolume(_volume: number): void {\n\t\t// NOOP\n\t}\n\n\toverride setHasLyric(_hasLyric: boolean): void {\n\t\t// NOOP\n\t}\n\n\toverride async setAlbum(\n\t\talbumSource: string | HTMLImageElement | HTMLVideoElement,\n\t\tisVideo?: boolean,\n\t): Promise<void> {\n\t\tif (typeof albumSource === \"string\" && albumSource.trim().length === 0)\n\t\t\treturn;\n\t\tlet res: HTMLImageElement | HTMLVideoElement | null = null;\n\t\tlet remainRetryTimes = 5;\n\t\tlet tex: Texture | null = null;\n\t\twhile (!tex?.baseTexture?.resource?.valid && remainRetryTimes > 0) {\n\t\t\ttry {\n\t\t\t\tif (typeof albumSource === \"string\") {\n\t\t\t\t\tres = await loadResourceFromUrl(albumSource, isVideo);\n\t\t\t\t} else {\n\t\t\t\t\tres = await loadResourceFromElement(albumSource);\n\t\t\t\t}\n\t\t\t\ttex = Texture.from(res, {\n\t\t\t\t\tresourceOptions: {\n\t\t\t\t\t\tautoLoad: false,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tawait tex.baseTexture.resource.load();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`failed on loading album image, retrying (${remainRetryTimes})`,\n\t\t\t\t\talbumSource,\n\t\t\t\t\terror,\n\t\t\t\t);\n\t\t\t\ttex = null;\n\t\t\t\tremainRetryTimes--;\n\t\t\t}\n\t\t}\n\t\tif (!tex) return;\n\t\tconst container = new TimedContainer();\n\t\tconst s1 = new Sprite(tex);\n\t\tconst s2 = new Sprite(tex);\n\t\tconst s3 = new Sprite(tex);\n\t\tconst s4 = new Sprite(tex);\n\t\ts1.anchor.set(0.5, 0.5);\n\t\ts2.anchor.set(0.5, 0.5);\n\t\ts3.anchor.set(0.5, 0.5);\n\t\ts4.anchor.set(0.5, 0.5);\n\t\ts1.rotation = Math.random() * Math.PI * 2;\n\t\ts2.rotation = Math.random() * Math.PI * 2;\n\t\ts3.rotation = Math.random() * Math.PI * 2;\n\t\ts4.rotation = Math.random() * Math.PI * 2;\n\t\tcontainer.addChild(s1, s2, s3, s4);\n\t\tif (this.curContainer) this.lastContainer.add(this.curContainer);\n\t\tthis.curContainer = container;\n\t\tthis.app.stage.addChild(container);\n\t\tthis.curContainer.alpha = 0;\n\t\tthis.app.ticker.start();\n\t}\n\n\toverride dispose() {\n\t\tsuper.dispose();\n\t\tthis.app.ticker.remove(this.onTick);\n\t\tthis.app.destroy(true);\n\t}\n\n\toverride getElement(): HTMLElement {\n\t\treturn this.canvas;\n\t}\n}\n","export const EPSILON = 0.000001;\nexport const ANGLE_ORDER = \"zyx\";\nconst DEG_TO_RAD = Math.PI / 180;\nconst RAD_TO_DEG = 180 / Math.PI;\n/**\n * Convert Degrees To Radians\n *\n * @param value - Angle in Degrees\n * @returns Angle in Radians\n */\nexport function toRadian(value) {\n return value * DEG_TO_RAD;\n}\n/**\n * Convert Radians To Degrees\n *\n * @param value - Angle in Radians\n * @returns Angle in Degrees\n */\nexport function toDegree(value) {\n return value * RAD_TO_DEG;\n}\n//# sourceMappingURL=common.js.map","import { EPSILON } from './common.js';\nconst IDENTITY_4X4 = new Float32Array([\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n]);\n/**\n * A 4x4 Matrix\n */\nclass Mat4 extends Float32Array {\n /**\n * The number of bytes in a {@link Mat4}.\n */\n static BYTE_LENGTH = 16 * Float32Array.BYTES_PER_ELEMENT;\n /**\n * Create a {@link Mat4}.\n */\n constructor(...values) {\n switch (values.length) {\n case 16:\n super(values);\n break;\n case 2:\n super(values[0], values[1], 16);\n break;\n case 1:\n const v = values[0];\n if (typeof v === 'number') {\n super([\n v, v, v, v,\n v, v, v, v,\n v, v, v, v,\n v, v, v, v\n ]);\n }\n else {\n super(v, 0, 16);\n }\n break;\n default:\n super(IDENTITY_4X4);\n break;\n }\n }\n //============\n // Attributes\n //============\n /**\n * A string representation of `this`\n * Equivalent to `Mat4.str(this);`\n */\n get str() {\n return Mat4.str(this);\n }\n //===================\n // Instance methods\n //===================\n /**\n * Copy the values from another {@link Mat4} into `this`.\n *\n * @param a the source vector\n * @returns `this`\n */\n copy(a) {\n this.set(a);\n return this;\n }\n /**\n * Set `this` to the identity matrix\n * Equivalent to Mat4.identity(this)\n *\n * @returns `this`\n */\n identity() {\n this.set(IDENTITY_4X4);\n return this;\n }\n /**\n * Multiplies this {@link Mat4} against another one\n * Equivalent to `Mat4.multiply(this, this, b);`\n *\n * @param out - The receiving Matrix\n * @param a - The first operand\n * @param b - The second operand\n * @returns `this`\n */\n multiply(b) {\n return Mat4.multiply(this, this, b);\n }\n /**\n * Alias for {@link Mat4.multiply}\n */\n mul(b) { return this; }\n /**\n * Transpose this {@link Mat4}\n * Equivalent to `Mat4.transpose(this, this);`\n *\n * @returns `this`\n */\n transpose() {\n return Mat4.transpose(this, this);\n }\n /**\n * Inverts this {@link Mat4}\n * Equivalent to `Mat4.invert(this, this);`\n *\n * @returns `this`\n */\n invert() {\n return Mat4.invert(this, this);\n }\n /**\n * Translate this {@link Mat4} by the given vector\n * Equivalent to `Mat4.translate(this, this, v);`\n *\n * @param v - The {@link Vec3} to translate by\n * @returns `this`\n */\n translate(v) {\n return Mat4.translate(this, this, v);\n }\n /**\n * Rotates this {@link Mat4} by the given angle around the given axis\n * Equivalent to `Mat4.rotate(this, this, rad, axis);`\n *\n * @param rad - the angle to rotate the matrix by\n * @param axis - the axis to rotate around\n * @returns `out`\n */\n rotate(rad, axis) {\n return Mat4.rotate(this, this, rad, axis);\n }\n /**\n * Scales this {@link Mat4} by the dimensions in the given vec3 not using vectorization\n * Equivalent to `Mat4.scale(this, this, v);`\n *\n * @param v - The {@link Vec3} to scale the matrix by\n * @returns `this`\n */\n scale(v) {\n return Mat4.scale(this, this, v);\n }\n /**\n * Rotates this {@link Mat4} by the given angle around the X axis\n * Equivalent to `Mat4.rotateX(this, this, rad);`\n *\n * @param rad - the angle to rotate the matrix by\n * @returns `this`\n */\n rotateX(rad) {\n return Mat4.rotateX(this, this, rad);\n }\n /**\n * Rotates this {@link Mat4} by the given angle around the Y axis\n * Equivalent to `Mat4.rotateY(this, this, rad);`\n *\n * @param rad - the angle to rotate the matrix by\n * @returns `this`\n */\n rotateY(rad) {\n return Mat4.rotateY(this, this, rad);\n }\n /**\n * Rotates this {@link Mat4} by the given angle around the Z axis\n * Equivalent to `Mat4.rotateZ(this, this, rad);`\n *\n * @param rad - the angle to rotate the matrix by\n * @returns `this`\n */\n rotateZ(rad) {\n return Mat4.rotateZ(this, this, rad);\n }\n /**\n * Generates a perspective projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n * Equivalent to `Mat4.perspectiveNO(this, fovy, aspect, near, far);`\n *\n * @param fovy - Vertical field of view in radians\n * @param aspect - Aspect ratio. typically viewport width/height\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum, can be null or Infinity\n * @returns `this`\n */\n perspectiveNO(fovy, aspect, near, far) {\n return Mat4.perspectiveNO(this, fovy, aspect, near, far);\n }\n /**\n * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n * Equivalent to `Mat4.perspectiveZO(this, fovy, aspect, near, far);`\n *\n * @param fovy - Vertical field of view in radians\n * @param aspect - Aspect ratio. typically viewport width/height\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum, can be null or Infinity\n * @returns `this`\n */\n perspectiveZO(fovy, aspect, near, far) {\n return Mat4.perspectiveZO(this, fovy, aspect, near, far);\n }\n /**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Equivalent to `Mat4.orthoNO(this, left, right, bottom, top, near, far);`\n *\n * @param left - Left bound of the frustum\n * @param right - Right bound of the frustum\n * @param bottom - Bottom bound of the frustum\n * @param top - Top bound of the frustum\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum\n * @returns `this`\n */\n orthoNO(left, right, bottom, top, near, far) {\n return Mat4.orthoNO(this, left, right, bottom, top, near, far);\n }\n /**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Equivalent to `Mat4.orthoZO(this, left, right, bottom, top, near, far);`\n *\n * @param left - Left bound of the frustum\n * @param right - Right bound of the frustum\n * @param bottom - Bottom bound of the frustum\n * @param top - Top bound of the frustum\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum\n * @returns `this`\n */\n orthoZO(left, right, bottom, top, near, far) {\n return Mat4.orthoZO(this, left, right, bottom, top, near, far);\n }\n //================\n // Static methods\n //================\n /**\n * Creates a new, identity {@link Mat4}\n * @category Static\n *\n * @returns A new {@link Mat4}\n */\n static create() {\n return new Mat4();\n }\n /**\n * Creates a new {@link Mat4} initialized with values from an existing matrix\n * @category Static\n *\n * @param a - Matrix to clone\n * @returns A new {@link Mat4}\n */\n static clone(a) {\n return new Mat4(a);\n }\n /**\n * Copy the values from one {@link Mat4} to another\n * @category Static\n *\n * @param out - The receiving Matrix\n * @param a - Matrix to copy\n * @returns `out`\n */\n static copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n }\n /**\n * Create a new mat4 with the given values\n * @category Static\n *\n * @param values - Matrix components\n * @returns A new {@link Mat4}\n */\n static fromValues(...values) {\n return new Mat4(...values);\n }\n /**\n * Set the components of a mat4 to the given values\n * @category Static\n *\n * @param out - The receiving matrix\n * @param values - Matrix components\n * @returns `out`\n */\n static set(out, ...values) {\n out[0] = values[0];\n out[1] = values[1];\n out[2] = values[2];\n out[3] = values[3];\n out[4] = values[4];\n out[5] = values[5];\n out[6] = values[6];\n out[7] = values[7];\n out[8] = values[8];\n out[9] = values[9];\n out[10] = values[10];\n out[11] = values[11];\n out[12] = values[12];\n out[13] = values[13];\n out[14] = values[14];\n out[15] = values[15];\n return out;\n }\n /**\n * Set a {@link Mat4} to the identity matrix\n * @category Static\n *\n * @param out - The receiving Matrix\n * @returns `out`\n */\n static identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Transpose the values of a {@link Mat4}\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the source matrix\n * @returns `out`\n */\n static transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n const a01 = a[1], a02 = a[2], a03 = a[3];\n const a12 = a[6], a13 = a[7];\n const a23 = a[11];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n }\n else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n return out;\n }\n /**\n * Inverts a {@link Mat4}\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the source matrix\n * @returns `out` or `null` if the matrix is not invertable\n */\n static invert(out, a) {\n const a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];\n const a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];\n const a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];\n const a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n const b00 = a00 * a11 - a01 * a10;\n const b01 = a00 * a12 - a02 * a10;\n const b02 = a00 * a13 - a03 * a10;\n const b03 = a01 * a12 - a02 * a11;\n const b04 = a01 * a13 - a03 * a11;\n const b05 = a02 * a13 - a03 * a12;\n const b06 = a20 * a31 - a21 * a30;\n const b07 = a20 * a32 - a22 * a30;\n const b08 = a20 * a33 - a23 * a30;\n const b09 = a21 * a32 - a22 * a31;\n const b10 = a21 * a33 - a23 * a31;\n const b11 = a22 * a33 - a23 * a32;\n // Calculate the determinant\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n }\n /**\n * Calculates the adjugate of a {@link Mat4}\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the source matrix\n * @returns `out`\n */\n static adjoint(out, a) {\n const a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];\n const a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];\n const a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];\n const a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n const b00 = a00 * a11 - a01 * a10;\n const b01 = a00 * a12 - a02 * a10;\n const b02 = a00 * a13 - a03 * a10;\n const b03 = a01 * a12 - a02 * a11;\n const b04 = a01 * a13 - a03 * a11;\n const b05 = a02 * a13 - a03 * a12;\n const b06 = a20 * a31 - a21 * a30;\n const b07 = a20 * a32 - a22 * a30;\n const b08 = a20 * a33 - a23 * a30;\n const b09 = a21 * a32 - a22 * a31;\n const b10 = a21 * a33 - a23 * a31;\n const b11 = a22 * a33 - a23 * a32;\n out[0] = a11 * b11 - a12 * b10 + a13 * b09;\n out[1] = a02 * b10 - a01 * b11 - a03 * b09;\n out[2] = a31 * b05 - a32 * b04 + a33 * b03;\n out[3] = a22 * b04 - a21 * b05 - a23 * b03;\n out[4] = a12 * b08 - a10 * b11 - a13 * b07;\n out[5] = a00 * b11 - a02 * b08 + a03 * b07;\n out[6] = a32 * b02 - a30 * b05 - a33 * b01;\n out[7] = a20 * b05 - a22 * b02 + a23 * b01;\n out[8] = a10 * b10 - a11 * b08 + a13 * b06;\n out[9] = a01 * b08 - a00 * b10 - a03 * b06;\n out[10] = a30 * b04 - a31 * b02 + a33 * b00;\n out[11] = a21 * b02 - a20 * b04 - a23 * b00;\n out[12] = a11 * b07 - a10 * b09 - a12 * b06;\n out[13] = a00 * b09 - a01 * b07 + a02 * b06;\n out[14] = a31 * b01 - a30 * b03 - a32 * b00;\n out[15] = a20 * b03 - a21 * b01 + a22 * b00;\n return out;\n }\n /**\n * Calculates the determinant of a {@link Mat4}\n * @category Static\n *\n * @param a - the source matrix\n * @returns determinant of a\n */\n static determinant(a) {\n const a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];\n const a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];\n const a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];\n const a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n const b0 = a00 * a11 - a01 * a10;\n const b1 = a00 * a12 - a02 * a10;\n const b2 = a01 * a12 - a02 * a11;\n const b3 = a20 * a31 - a21 * a30;\n const b4 = a20 * a32 - a22 * a30;\n const b5 = a21 * a32 - a22 * a31;\n const b6 = a00 * b5 - a01 * b4 + a02 * b3;\n const b7 = a10 * b5 - a11 * b4 + a12 * b3;\n const b8 = a20 * b2 - a21 * b1 + a22 * b0;\n const b9 = a30 * b2 - a31 * b1 + a32 * b0;\n // Calculate the determinant\n return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;\n }\n /**\n * Multiplies two {@link Mat4}s\n * @category Static\n *\n * @param out - The receiving Matrix\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static multiply(out, a, b) {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15];\n // Cache only the current line of the second matrix\n let b0 = b[0];\n let b1 = b[1];\n let b2 = b[2];\n let b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n }\n /**\n * Alias for {@link Mat4.multiply}\n * @category Static\n */\n static mul(out, a, b) { return out; }\n /**\n * Translate a {@link Mat4} by the given vector\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the matrix to translate\n * @param v - vector to translate by\n * @returns `out`\n */\n static translate(out, a, v) {\n const x = v[0];\n const y = v[1];\n const z = v[2];\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n }\n else {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n return out;\n }\n /**\n * Scales the {@link Mat4} by the dimensions in the given {@link Vec3} not using vectorization\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the matrix to scale\n * @param v - the {@link Vec3} to scale the matrix by\n * @returns `out`\n **/\n static scale(out, a, v) {\n const x = v[0];\n const y = v[1];\n const z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n }\n /**\n * Rotates a {@link Mat4} by the given angle around the given axis\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the matrix to rotate\n * @param rad - the angle to rotate the matrix by\n * @param axis - the axis to rotate around\n * @returns `out` or `null` if axis has a length of 0\n */\n static rotate(out, a, rad, axis) {\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n let len = Math.sqrt(x * x + y * y + z * z);\n if (len < EPSILON) {\n return null;\n }\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const t = 1 - c;\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n // Construct the elements of the rotation matrix\n const b00 = x * x * t + c;\n const b01 = y * x * t + z * s;\n const b02 = z * x * t - y * s;\n const b10 = x * y * t - z * s;\n const b11 = y * y * t + c;\n const b12 = z * y * t + x * s;\n const b20 = x * z * t + y * s;\n const b21 = y * z * t - x * s;\n const b22 = z * z * t + c;\n // Perform rotation-specific matrix multiplication\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n return out;\n }\n /**\n * Rotates a matrix by the given angle around the X axis\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the matrix to rotate\n * @param rad - the angle to rotate the matrix by\n * @returns `out`\n */\n static rotateX(out, a, rad) {\n let s = Math.sin(rad);\n let c = Math.cos(rad);\n let a10 = a[4];\n let a11 = a[5];\n let a12 = a[6];\n let a13 = a[7];\n let a20 = a[8];\n let a21 = a[9];\n let a22 = a[10];\n let a23 = a[11];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n // Perform axis-specific matrix multiplication\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n }\n /**\n * Rotates a matrix by the given angle around the Y axis\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the matrix to rotate\n * @param rad - the angle to rotate the matrix by\n * @returns `out`\n */\n static rotateY(out, a, rad) {\n let s = Math.sin(rad);\n let c = Math.cos(rad);\n let a00 = a[0];\n let a01 = a[1];\n let a02 = a[2];\n let a03 = a[3];\n let a20 = a[8];\n let a21 = a[9];\n let a22 = a[10];\n let a23 = a[11];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n }\n /**\n * Rotates a matrix by the given angle around the Z axis\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the matrix to rotate\n * @param rad - the angle to rotate the matrix by\n * @returns `out`\n */\n static rotateZ(out, a, rad) {\n let s = Math.sin(rad);\n let c = Math.cos(rad);\n let a00 = a[0];\n let a01 = a[1];\n let a02 = a[2];\n let a03 = a[3];\n let a10 = a[4];\n let a11 = a[5];\n let a12 = a[6];\n let a13 = a[7];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n }\n /**\n * Creates a {@link Mat4} from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n * @category Static\n *\n * @param out - {@link Mat4} receiving operation result\n * @param v - Translation vector\n * @returns `out`\n */\n static fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n }\n /**\n * Creates a {@link Mat4} from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.scale(dest, dest, vec);\n * @category Static\n *\n * @param out - {@link Mat4} receiving operation result\n * @param v - Scaling vector\n * @returns `out`\n */\n static fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1];\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2];\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Creates a {@link Mat4} from a given angle around a given axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotate(dest, dest, rad, axis);\n * @category Static\n *\n * @param out - {@link Mat4} receiving operation result\n * @param rad - the angle to rotate the matrix by\n * @param axis - the axis to rotate around\n * @returns `out` or `null` if `axis` has a length of 0\n */\n static fromRotation(out, rad, axis) {\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n let len = Math.sqrt(x * x + y * y + z * z);\n if (len < EPSILON) {\n return null;\n }\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const t = 1 - c;\n // Perform rotation-specific matrix multiplication\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Creates a matrix from the given angle around the X axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateX(dest, dest, rad);\n * @category Static\n *\n * @param out - mat4 receiving operation result\n * @param rad - the angle to rotate the matrix by\n * @returns `out`\n */\n static fromXRotation(out, rad) {\n let s = Math.sin(rad);\n let c = Math.cos(rad);\n // Perform axis-specific matrix multiplication\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = c;\n out[6] = s;\n out[7] = 0;\n out[8] = 0;\n out[9] = -s;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Creates a matrix from the given angle around the Y axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateY(dest, dest, rad);\n * @category Static\n *\n * @param out - mat4 receiving operation result\n * @param rad - the angle to rotate the matrix by\n * @returns `out`\n */\n static fromYRotation(out, rad) {\n let s = Math.sin(rad);\n let c = Math.cos(rad);\n // Perform axis-specific matrix multiplication\n out[0] = c;\n out[1] = 0;\n out[2] = -s;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = s;\n out[9] = 0;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Creates a matrix from the given angle around the Z axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateZ(dest, dest, rad);\n * @category Static\n *\n * @param out - mat4 receiving operation result\n * @param rad - the angle to rotate the matrix by\n * @returns `out`\n */\n static fromZRotation(out, rad) {\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n // Perform axis-specific matrix multiplication\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = 0;\n out[4] = -s;\n out[5] = c;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Creates a matrix from a quaternion rotation and vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * @category Static\n *\n * @param out - mat4 receiving operation result\n * @param q - Rotation quaternion\n * @param v - Translation vector\n * @returns `out`\n */\n static fromRotationTranslation(out, q, v) {\n // Quaternion math\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n }\n /**\n * Sets a {@link Mat4} from a {@link Quat2}.\n * @category Static\n *\n * @param out - Matrix\n * @param a - Dual Quaternion\n * @returns `out`\n */\n static fromQuat2(out, a) {\n const bx = -a[0];\n const by = -a[1];\n const bz = -a[2];\n const bw = a[3];\n const ax = a[4];\n const ay = a[5];\n const az = a[6];\n const aw = a[7];\n let magnitude = bx * bx + by * by + bz * bz + bw * bw;\n //Only scale if it makes sense\n if (magnitude > 0) {\n tmpVec3[0] = ((ax * bw + aw * bx + ay * bz - az * by) * 2) / magnitude;\n tmpVec3[1] = ((ay * bw + aw * by + az * bx - ax * bz) * 2) / magnitude;\n tmpVec3[2] = ((az * bw + aw * bz + ax * by - ay * bx) * 2) / magnitude;\n }\n else {\n tmpVec3[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n tmpVec3[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n tmpVec3[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n }\n Mat4.fromRotationTranslation(out, a, tmpVec3);\n return out;\n }\n /**\n * Calculates a {@link Mat4} normal matrix (transpose inverse) from a {@link Mat4}\n * @category Static\n *\n * @param out - Matrix receiving operation result\n * @param a - Mat4 to derive the normal matrix from\n * @returns `out` or `null` if the matrix is not invertable\n */\n static normalFromMat4(out, a) {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15];\n const b00 = a00 * a11 - a01 * a10;\n const b01 = a00 * a12 - a02 * a10;\n const b02 = a00 * a13 - a03 * a10;\n const b03 = a01 * a12 - a02 * a11;\n const b04 = a01 * a13 - a03 * a11;\n const b05 = a02 * a13 - a03 * a12;\n const b06 = a20 * a31 - a21 * a30;\n const b07 = a20 * a32 - a22 * a30;\n const b08 = a20 * a33 - a23 * a30;\n const b09 = a21 * a32 - a22 * a31;\n const b10 = a21 * a33 - a23 * a31;\n const b11 = a22 * a33 - a23 * a32;\n // Calculate the determinant\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[3] = 0;\n out[4] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[7] = 0;\n out[8] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[9] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = 0;\n // No translation\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Calculates a {@link Mat4} normal matrix (transpose inverse) from a {@link Mat4}\n * This version omits the calculation of the constant factor (1/determinant), so\n * any normals transformed with it will need to be renormalized.\n * From https://stackoverflow.com/a/27616419/25968\n * @category Static\n *\n * @param out - Matrix receiving operation result\n * @param a - Mat4 to derive the normal matrix from\n * @returns `out`\n */\n static normalFromMat4Fast(out, a) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = a[4];\n const by = a[5];\n const bz = a[6];\n const cx = a[8];\n const cy = a[9];\n const cz = a[10];\n out[0] = by * cz - cz * cy;\n out[1] = bz * cx - cx * cz;\n out[2] = bx * cy - cy * cx;\n out[3] = 0;\n out[4] = cy * az - cz * ay;\n out[5] = cz * ax - cx * az;\n out[6] = cx * ay - cy * ax;\n out[7] = 0;\n out[8] = ay * bz - az * by;\n out[9] = az * bx - ax * bz;\n out[10] = ax * by - ay * bx;\n out[11] = 0;\n // No translation\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Returns the translation vector component of a transformation\n * matrix. If a matrix is built with fromRotationTranslation,\n * the returned vector will be the same as the translation vector\n * originally supplied.\n * @category Static\n *\n * @param {vec3} out Vector to receive translation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n static getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n return out;\n }\n /**\n * Returns the scaling factor component of a transformation\n * matrix. If a matrix is built with fromRotationTranslationScale\n * with a normalized Quaternion parameter, the returned vector will be\n * the same as the scaling vector\n * originally supplied.\n * @category Static\n *\n * @param {vec3} out Vector to receive scaling factor component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n static getScaling(out, mat) {\n const m11 = mat[0];\n const m12 = mat[1];\n const m13 = mat[2];\n const m21 = mat[4];\n const m22 = mat[5];\n const m23 = mat[6];\n const m31 = mat[8];\n const m32 = mat[9];\n const m33 = mat[10];\n out[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);\n out[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);\n out[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);\n return out;\n }\n /**\n * Returns a quaternion representing the rotational component\n * of a transformation matrix. If a matrix is built with\n * fromRotationTranslation, the returned quaternion will be the\n * same as the quaternion originally supplied.\n * @category Static\n *\n * @param out - Quaternion to receive the rotation component\n * @param mat - Matrix to be decomposed (input)\n * @return `out`\n */\n static getRotation(out, mat) {\n Mat4.getScaling(tmpVec3, mat);\n const is1 = 1 / tmpVec3[0];\n const is2 = 1 / tmpVec3[1];\n const is3 = 1 / tmpVec3[2];\n const sm11 = mat[0] * is1;\n const sm12 = mat[1] * is2;\n const sm13 = mat[2] * is3;\n const sm21 = mat[4] * is1;\n const sm22 = mat[5] * is2;\n const sm23 = mat[6] * is3;\n const sm31 = mat[8] * is1;\n const sm32 = mat[9] * is2;\n const sm33 = mat[10] * is3;\n const trace = sm11 + sm22 + sm33;\n let S = 0;\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n }\n else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n }\n else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n }\n else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n return out;\n }\n /**\n * Decomposes a transformation matrix into its rotation, translation\n * and scale components. Returns only the rotation component\n * @category Static\n *\n * @param out_r - Quaternion to receive the rotation component\n * @param out_t - Vector to receive the translation vector\n * @param out_s - Vector to receive the scaling factor\n * @param mat - Matrix to be decomposed (input)\n * @returns `out_r`\n */\n static decompose(out_r, out_t, out_s, mat) {\n out_t[0] = mat[12];\n out_t[1] = mat[13];\n out_t[2] = mat[14];\n const m11 = mat[0];\n const m12 = mat[1];\n const m13 = mat[2];\n const m21 = mat[4];\n const m22 = mat[5];\n const m23 = mat[6];\n const m31 = mat[8];\n const m32 = mat[9];\n const m33 = mat[10];\n out_s[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);\n out_s[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);\n out_s[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);\n const is1 = 1 / out_s[0];\n const is2 = 1 / out_s[1];\n const is3 = 1 / out_s[2];\n const sm11 = m11 * is1;\n const sm12 = m12 * is2;\n const sm13 = m13 * is3;\n const sm21 = m21 * is1;\n const sm22 = m22 * is2;\n const sm23 = m23 * is3;\n const sm31 = m31 * is1;\n const sm32 = m32 * is2;\n const sm33 = m33 * is3;\n const trace = sm11 + sm22 + sm33;\n let S = 0;\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out_r[3] = 0.25 * S;\n out_r[0] = (sm23 - sm32) / S;\n out_r[1] = (sm31 - sm13) / S;\n out_r[2] = (sm12 - sm21) / S;\n }\n else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out_r[3] = (sm23 - sm32) / S;\n out_r[0] = 0.25 * S;\n out_r[1] = (sm12 + sm21) / S;\n out_r[2] = (sm31 + sm13) / S;\n }\n else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out_r[3] = (sm31 - sm13) / S;\n out_r[0] = (sm12 + sm21) / S;\n out_r[1] = 0.25 * S;\n out_r[2] = (sm23 + sm32) / S;\n }\n else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out_r[3] = (sm12 - sm21) / S;\n out_r[0] = (sm31 + sm13) / S;\n out_r[1] = (sm23 + sm32) / S;\n out_r[2] = 0.25 * S;\n }\n return out_r;\n }\n /**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale);\n * @category Static\n *\n * @param out - mat4 receiving operation result\n * @param q - Rotation quaternion\n * @param v - Translation vector\n * @param s - Scaling vector\n * @returns `out`\n */\n static fromRotationTranslationScale(out, q, v, s) {\n // Quaternion math\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n const sx = s[0];\n const sy = s[1];\n const sz = s[2];\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n }\n /**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * mat4.translate(dest, origin);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale)\n * mat4.translate(dest, negativeOrigin);\n * @category Static\n *\n * @param out - mat4 receiving operation result\n * @param q - Rotation quaternion\n * @param v - Translation vector\n * @param s - Scaling vector\n * @param o - The origin vector around which to scale and rotate\n * @returns `out`\n */\n static fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n // Quaternion math\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n const sx = s[0];\n const sy = s[1];\n const sz = s[2];\n const ox = o[0];\n const oy = o[1];\n const oz = o[2];\n const out0 = (1 - (yy + zz)) * sx;\n const out1 = (xy + wz) * sx;\n const out2 = (xz - wy) * sx;\n const out4 = (xy - wz) * sy;\n const out5 = (1 - (xx + zz)) * sy;\n const out6 = (yz + wx) * sy;\n const out8 = (xz + wy) * sz;\n const out9 = (yz - wx) * sz;\n const out10 = (1 - (xx + yy)) * sz;\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = 0;\n out[4] = out4;\n out[5] = out5;\n out[6] = out6;\n out[7] = 0;\n out[8] = out8;\n out[9] = out9;\n out[10] = out10;\n out[11] = 0;\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n out[15] = 1;\n return out;\n }\n /**\n * Calculates a 4x4 matrix from the given quaternion\n * @category Static\n *\n * @param out - mat4 receiving operation result\n * @param q - Quaternion to create matrix from\n * @returns `out`\n */\n static fromQuat(out, q) {\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Generates a frustum matrix with the given bounds\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param left - Left bound of the frustum\n * @param right - Right bound of the frustum\n * @param bottom - Bottom bound of the frustum\n * @param top - Top bound of the frustum\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum, can be null or Infinity\n * @returns `out`\n */\n static frustumNO(out, left, right, bottom, top, near, far = Infinity) {\n const rl = 1 / (right - left);\n const tb = 1 / (top - bottom);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n if (far != null && far !== Infinity) {\n const nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n }\n else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n return out;\n }\n /**\n * Alias for {@link Mat4.frustumNO}\n * @category Static\n * @deprecated Use {@link Mat4.frustumNO} or {@link Mat4.frustumZO} explicitly\n */\n static frustum(out, left, right, bottom, top, near, far = Infinity) { return out; }\n /**\n * Generates a frustum matrix with the given bounds\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param left - Left bound of the frustum\n * @param right - Right bound of the frustum\n * @param bottom - Bottom bound of the frustum\n * @param top - Top bound of the frustum\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum, can be null or Infinity\n * @returns `out`\n */\n static frustumZO(out, left, right, bottom, top, near, far = Infinity) {\n const rl = 1 / (right - left);\n const tb = 1 / (top - bottom);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n if (far != null && far !== Infinity) {\n const nf = 1 / (near - far);\n out[10] = far * nf;\n out[14] = far * near * nf;\n }\n else {\n out[10] = -1;\n out[14] = -near;\n }\n return out;\n }\n /**\n * Generates a perspective projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param fovy - Vertical field of view in radians\n * @param aspect - Aspect ratio. typically viewport width/height\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum, can be null or Infinity\n * @returns `out`\n */\n static perspectiveNO(out, fovy, aspect, near, far = Infinity) {\n const f = 1.0 / Math.tan(fovy / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n if (far != null && far !== Infinity) {\n const nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n }\n else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n return out;\n }\n /**\n * Alias for {@link Mat4.perspectiveNO}\n * @category Static\n * @deprecated Use {@link Mat4.perspectiveNO} or {@link Mat4.perspectiveZO} explicitly\n */\n static perspective(out, fovy, aspect, near, far = Infinity) { return out; }\n /**\n * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param fovy - Vertical field of view in radians\n * @param aspect - Aspect ratio. typically viewport width/height\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum, can be null or Infinity\n * @returns `out`\n */\n static perspectiveZO(out, fovy, aspect, near, far = Infinity) {\n const f = 1.0 / Math.tan(fovy / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n if (far != null && far !== Infinity) {\n const nf = 1 / (near - far);\n out[10] = far * nf;\n out[14] = far * near * nf;\n }\n else {\n out[10] = -1;\n out[14] = -near;\n }\n return out;\n }\n /**\n * Generates a perspective projection matrix with the given field of view.\n * This is primarily useful for generating projection matrices to be used\n * with the still experiemental WebVR API.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param fov - Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum\n * @returns `out`\n * @deprecated\n */\n static perspectiveFromFieldOfView(out, fov, near, far) {\n const upTan = Math.tan((fov.upDegrees * Math.PI) / 180.0);\n const downTan = Math.tan((fov.downDegrees * Math.PI) / 180.0);\n const leftTan = Math.tan((fov.leftDegrees * Math.PI) / 180.0);\n const rightTan = Math.tan((fov.rightDegrees * Math.PI) / 180.0);\n const xScale = 2.0 / (leftTan + rightTan);\n const yScale = 2.0 / (upTan + downTan);\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = (upTan - downTan) * yScale * 0.5;\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = (far * near) / (near - far);\n out[15] = 0.0;\n return out;\n }\n /**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param left - Left bound of the frustum\n * @param right - Right bound of the frustum\n * @param bottom - Bottom bound of the frustum\n * @param top - Top bound of the frustum\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum\n * @returns `out`\n */\n static orthoNO(out, left, right, bottom, top, near, far) {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n }\n /**\n * Alias for {@link Mat4.orthoNO}\n * @category Static\n * @deprecated Use {@link Mat4.orthoNO} or {@link Mat4.orthoZO} explicitly\n */\n static ortho(out, left, right, bottom, top, near, far) { return out; }\n /**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param left - Left bound of the frustum\n * @param right - Right bound of the frustum\n * @param bottom - Bottom bound of the frustum\n * @param top - Top bound of the frustum\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum\n * @returns `out`\n */\n static orthoZO(out, left, right, bottom, top, near, far) {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = near * nf;\n out[15] = 1;\n return out;\n }\n /**\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param eye - Position of the viewer\n * @param center - Point the viewer is looking at\n * @param up - vec3 pointing up\n * @returns `out`\n */\n static lookAt(out, eye, center, up) {\n const eyex = eye[0];\n const eyey = eye[1];\n const eyez = eye[2];\n const upx = up[0];\n const upy = up[1];\n const upz = up[2];\n const centerx = center[0];\n const centery = center[1];\n const centerz = center[2];\n if (Math.abs(eyex - centerx) < EPSILON &&\n Math.abs(eyey - centery) < EPSILON &&\n Math.abs(eyez - centerz) < EPSILON) {\n return Mat4.identity(out);\n }\n let z0 = eyex - centerx;\n let z1 = eyey - centery;\n let z2 = eyez - centerz;\n let len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n let x0 = upy * z2 - upz * z1;\n let x1 = upz * z0 - upx * z2;\n let x2 = upx * z1 - upy * z0;\n len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n }\n else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n let y0 = z1 * x2 - z2 * x1;\n let y1 = z2 * x0 - z0 * x2;\n let y2 = z0 * x1 - z1 * x0;\n len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n }\n else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n return out;\n }\n /**\n * Generates a matrix that makes something look at something else.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param eye - Position of the viewer\n * @param target - Point the viewer is looking at\n * @param up - vec3 pointing up\n * @returns `out`\n */\n static targetTo(out, eye, target, up) {\n const eyex = eye[0];\n const eyey = eye[1];\n const eyez = eye[2];\n const upx = up[0];\n const upy = up[1];\n const upz = up[2];\n let z0 = eyex - target[0];\n let z1 = eyey - target[1];\n let z2 = eyez - target[2];\n let len = z0 * z0 + z1 * z1 + z2 * z2;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n }\n let x0 = upy * z2 - upz * z1;\n let x1 = upz * z0 - upx * z2;\n let x2 = upx * z1 - upy * z0;\n len = x0 * x0 + x1 * x1 + x2 * x2;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n out[0] = x0;\n out[1] = x1;\n out[2] = x2;\n out[3] = 0;\n out[4] = z1 * x2 - z2 * x1;\n out[5] = z2 * x0 - z0 * x2;\n out[6] = z0 * x1 - z1 * x0;\n out[7] = 0;\n out[8] = z0;\n out[9] = z1;\n out[10] = z2;\n out[11] = 0;\n out[12] = eyex;\n out[13] = eyey;\n out[14] = eyez;\n out[15] = 1;\n return out;\n }\n /**\n * Returns Frobenius norm of a {@link Mat4}\n * @category Static\n *\n * @param a - the matrix to calculate Frobenius norm of\n * @returns Frobenius norm\n */\n static frob(a) {\n return Math.sqrt(a[0] * a[0] +\n a[1] * a[1] +\n a[2] * a[2] +\n a[3] * a[3] +\n a[4] * a[4] +\n a[5] * a[5] +\n a[6] * a[6] +\n a[7] * a[7] +\n a[8] * a[8] +\n a[9] * a[9] +\n a[10] * a[10] +\n a[11] * a[11] +\n a[12] * a[12] +\n a[13] * a[13] +\n a[14] * a[14] +\n a[15] * a[15]);\n }\n /**\n * Adds two {@link Mat4}'s\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n out[9] = a[9] + b[9];\n out[10] = a[10] + b[10];\n out[11] = a[11] + b[11];\n out[12] = a[12] + b[12];\n out[13] = a[13] + b[13];\n out[14] = a[14] + b[14];\n out[15] = a[15] + b[15];\n return out;\n }\n /**\n * Subtracts matrix b from matrix a\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n out[9] = a[9] - b[9];\n out[10] = a[10] - b[10];\n out[11] = a[11] - b[11];\n out[12] = a[12] - b[12];\n out[13] = a[13] - b[13];\n out[14] = a[14] - b[14];\n out[15] = a[15] - b[15];\n return out;\n }\n /**\n * Alias for {@link Mat4.subtract}\n * @category Static\n */\n static sub(out, a, b) { return out; }\n /**\n * Multiply each element of the matrix by a scalar.\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the matrix to scale\n * @param b - amount to scale the matrix's elements by\n * @returns `out`\n */\n static multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n out[9] = a[9] * b;\n out[10] = a[10] * b;\n out[11] = a[11] * b;\n out[12] = a[12] * b;\n out[13] = a[13] * b;\n out[14] = a[14] * b;\n out[15] = a[15] * b;\n return out;\n }\n /**\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param scale - the amount to scale b's elements by before adding\n * @returns `out`\n */\n static multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n out[9] = a[9] + b[9] * scale;\n out[10] = a[10] + b[10] * scale;\n out[11] = a[11] + b[11] * scale;\n out[12] = a[12] + b[12] * scale;\n out[13] = a[13] + b[13] * scale;\n out[14] = a[14] + b[14] * scale;\n out[15] = a[15] + b[15] * scale;\n return out;\n }\n /**\n * Returns whether or not two {@link Mat4}s have exactly the same elements in the same position (when compared with ===)\n * @category Static\n *\n * @param a - The first matrix.\n * @param b - The second matrix.\n * @returns True if the matrices are equal, false otherwise.\n */\n static exactEquals(a, b) {\n return (a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[3] === b[3] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[7] === b[7] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10] &&\n a[11] === b[11] &&\n a[12] === b[12] &&\n a[13] === b[13] &&\n a[14] === b[14] &&\n a[15] === b[15]);\n }\n /**\n * Returns whether or not two {@link Mat4}s have approximately the same elements in the same position.\n * @category Static\n *\n * @param a - The first matrix.\n * @param b - The second matrix.\n * @returns True if the matrices are equal, false otherwise.\n */\n static equals(a, b) {\n const a0 = a[0];\n const a1 = a[1];\n const a2 = a[2];\n const a3 = a[3];\n const a4 = a[4];\n const a5 = a[5];\n const a6 = a[6];\n const a7 = a[7];\n const a8 = a[8];\n const a9 = a[9];\n const a10 = a[10];\n const a11 = a[11];\n const a12 = a[12];\n const a13 = a[13];\n const a14 = a[14];\n const a15 = a[15];\n const b0 = b[0];\n const b1 = b[1];\n const b2 = b[2];\n const b3 = b[3];\n const b4 = b[4];\n const b5 = b[5];\n const b6 = b[6];\n const b7 = b[7];\n const b8 = b[8];\n const b9 = b[9];\n const b10 = b[10];\n const b11 = b[11];\n const b12 = b[12];\n const b13 = b[13];\n const b14 = b[14];\n const b15 = b[15];\n return (Math.abs(a0 - b0) <= EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&\n Math.abs(a2 - b2) <= EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&\n Math.abs(a3 - b3) <= EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) &&\n Math.abs(a4 - b4) <= EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) &&\n Math.abs(a5 - b5) <= EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) &&\n Math.abs(a6 - b6) <= EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) &&\n Math.abs(a7 - b7) <= EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7)) &&\n Math.abs(a8 - b8) <= EPSILON * Math.max(1, Math.abs(a8), Math.abs(b8)) &&\n Math.abs(a9 - b9) <= EPSILON * Math.max(1, Math.abs(a9), Math.abs(b9)) &&\n Math.abs(a10 - b10) <= EPSILON * Math.max(1, Math.abs(a10), Math.abs(b10)) &&\n Math.abs(a11 - b11) <= EPSILON * Math.max(1, Math.abs(a11), Math.abs(b11)) &&\n Math.abs(a12 - b12) <= EPSILON * Math.max(1, Math.abs(a12), Math.abs(b12)) &&\n Math.abs(a13 - b13) <= EPSILON * Math.max(1, Math.abs(a13), Math.abs(b13)) &&\n Math.abs(a14 - b14) <= EPSILON * Math.max(1, Math.abs(a14), Math.abs(b14)) &&\n Math.abs(a15 - b15) <= EPSILON * Math.max(1, Math.abs(a15), Math.abs(b15)));\n }\n /**\n * Returns a string representation of a {@link Mat4}\n * @category Static\n *\n * @param a - matrix to represent as a string\n * @returns string representation of the matrix\n */\n static str(a) {\n return `Mat4(${a.join(', ')})`;\n }\n}\nexport { Mat4 };\n// Temporary variables to prevent repeated allocations in the algorithms above.\n// These are declared as TypedArrays to aid in tree-shaking.\nconst tmpVec3 = new Float32Array(3);\n// Instance method alias assignments\nMat4.prototype.mul = Mat4.prototype.multiply;\n// Static method alias assignments\nMat4.sub = Mat4.subtract;\nMat4.mul = Mat4.multiply;\nMat4.frustum = Mat4.frustumNO;\nMat4.perspective = Mat4.perspectiveNO;\nMat4.ortho = Mat4.orthoNO;\n/**\n * Mat4 alias for backwards compatibility\n */\nexport const mat4 = Mat4;\n//# sourceMappingURL=mat4.js.map","import { EPSILON } from './common.js';\n/**\n * 3 Dimensional Vector\n */\nclass Vec3 extends Float32Array {\n /**\n * The number of bytes in a {@link Vec3}.\n */\n static BYTE_LENGTH = 3 * Float32Array.BYTES_PER_ELEMENT;\n /**\n * Create a {@link Vec3}.\n */\n constructor(...values) {\n switch (values.length) {\n case 3:\n super(values);\n break;\n case 2:\n super(values[0], values[1], 3);\n break;\n case 1: {\n const v = values[0];\n if (typeof v === 'number') {\n super([v, v, v]);\n }\n else {\n super(v, 0, 3);\n }\n break;\n }\n default:\n super(3);\n break;\n }\n }\n //============\n // Attributes\n //============\n // Getters and setters to make component access read better.\n // These are likely to be a little bit slower than direct array access.\n /**\n * The x component of the vector. Equivalent to `this[0];`\n * @category Vector components\n */\n get x() { return this[0]; }\n set x(value) { this[0] = value; }\n /**\n * The y component of the vector. Equivalent to `this[1];`\n * @category Vector components\n */\n get y() { return this[1]; }\n set y(value) { this[1] = value; }\n /**\n * The z component of the vector. Equivalent to `this[2];`\n * @category Vector components\n */\n get z() { return this[2]; }\n set z(value) { this[2] = value; }\n // Alternate set of getters and setters in case this is being used to define\n // a color.\n /**\n * The r component of the vector. Equivalent to `this[0];`\n * @category Color components\n */\n get r() { return this[0]; }\n set r(value) { this[0] = value; }\n /**\n * The g component of the vector. Equivalent to `this[1];`\n * @category Color components\n */\n get g() { return this[1]; }\n set g(value) { this[1] = value; }\n /**\n * The b component of the vector. Equivalent to `this[2];`\n * @category Color components\n */\n get b() { return this[2]; }\n set b(value) { this[2] = value; }\n /**\n * The magnitude (length) of this.\n * Equivalent to `Vec3.magnitude(this);`\n *\n * Magnitude is used because the `length` attribute is already defined by\n * TypedArrays to mean the number of elements in the array.\n */\n get magnitude() {\n const x = this[0];\n const y = this[1];\n const z = this[2];\n return Math.sqrt(x * x + y * y + z * z);\n }\n /**\n * Alias for {@link Vec3.magnitude}\n */\n get mag() { return this.magnitude; }\n /**\n * The squared magnitude (length) of `this`.\n * Equivalent to `Vec3.squaredMagnitude(this);`\n */\n get squaredMagnitude() {\n const x = this[0];\n const y = this[1];\n const z = this[2];\n return x * x + y * y + z * z;\n }\n /**\n * Alias for {@link Vec3.squaredMagnitude}\n */\n get sqrMag() { return this.squaredMagnitude; }\n /**\n * A string representation of `this`\n * Equivalent to `Vec3.str(this);`\n */\n get str() {\n return Vec3.str(this);\n }\n //===================\n // Instances methods\n //===================\n /**\n * Copy the values from another {@link Vec3} into `this`.\n *\n * @param a the source vector\n * @returns `this`\n */\n copy(a) {\n this.set(a);\n return this;\n }\n /**\n * Adds a {@link Vec3} to `this`.\n * Equivalent to `Vec3.add(this, this, b);`\n *\n * @param b - The vector to add to `this`\n * @returns `this`\n */\n add(b) {\n this[0] += b[0];\n this[1] += b[1];\n this[2] += b[2];\n return this;\n }\n /**\n * Subtracts a {@link Vec3} from `this`.\n * Equivalent to `Vec3.subtract(this, this, b);`\n *\n * @param b - The vector to subtract from `this`\n * @returns `this`\n */\n subtract(b) {\n this[0] -= b[0];\n this[1] -= b[1];\n this[2] -= b[2];\n return this;\n }\n /**\n * Alias for {@link Vec3.subtract}\n */\n sub(b) { return this; }\n /**\n * Multiplies `this` by a {@link Vec3}.\n * Equivalent to `Vec3.multiply(this, this, b);`\n *\n * @param b - The vector to multiply `this` by\n * @returns `this`\n */\n multiply(b) {\n this[0] *= b[0];\n this[1] *= b[1];\n this[2] *= b[2];\n return this;\n }\n /**\n * Alias for {@link Vec3.multiply}\n */\n mul(b) { return this; }\n /**\n * Divides `this` by a {@link Vec3}.\n * Equivalent to `Vec3.divide(this, this, b);`\n *\n * @param b - The vector to divide `this` by\n * @returns `this`\n */\n divide(b) {\n this[0] /= b[0];\n this[1] /= b[1];\n this[2] /= b[2];\n return this;\n }\n /**\n * Alias for {@link Vec3.divide}\n */\n div(b) { return this; }\n /**\n * Scales `this` by a scalar number.\n * Equivalent to `Vec3.scale(this, this, b);`\n *\n * @param b - Amount to scale `this` by\n * @returns `this`\n */\n scale(b) {\n this[0] *= b;\n this[1] *= b;\n this[2] *= b;\n return this;\n }\n /**\n * Calculates `this` scaled by a scalar value then adds the result to `this`.\n * Equivalent to `Vec3.scaleAndAdd(this, this, b, scale);`\n *\n * @param b - The vector to add to `this`\n * @param scale - The amount to scale `b` by before adding\n * @returns `this`\n */\n scaleAndAdd(b, scale) {\n this[0] += b[0] * scale;\n this[1] += b[1] * scale;\n this[2] += b[2] * scale;\n return this;\n }\n /**\n * Calculates the euclidian distance between another {@link Vec3} and `this`.\n * Equivalent to `Vec3.distance(this, b);`\n *\n * @param b - The vector to calculate the distance to\n * @returns Distance between `this` and `b`\n */\n distance(b) {\n return Vec3.distance(this, b);\n }\n /**\n * Alias for {@link Vec3.distance}\n */\n dist(b) { return 0; }\n /**\n * Calculates the squared euclidian distance between another {@link Vec3} and `this`.\n * Equivalent to `Vec3.squaredDistance(this, b);`\n *\n * @param b The vector to calculate the squared distance to\n * @returns Squared distance between `this` and `b`\n */\n squaredDistance(b) {\n return Vec3.squaredDistance(this, b);\n }\n /**\n * Alias for {@link Vec3.squaredDistance}\n */\n sqrDist(b) { return 0; }\n /**\n * Negates the components of `this`.\n * Equivalent to `Vec3.negate(this, this);`\n *\n * @returns `this`\n */\n negate() {\n this[0] *= -1;\n this[1] *= -1;\n this[2] *= -1;\n return this;\n }\n /**\n * Inverts the components of `this`.\n * Equivalent to `Vec3.inverse(this, this);`\n *\n * @returns `this`\n */\n invert() {\n this[0] = 1.0 / this[0];\n this[1] = 1.0 / this[1];\n this[2] = 1.0 / this[2];\n return this;\n }\n /**\n * Sets each component of `this` to it's absolute value.\n * Equivalent to `Vec3.abs(this, this);`\n *\n * @returns `this`\n */\n abs() {\n this[0] = Math.abs(this[0]);\n this[1] = Math.abs(this[1]);\n this[2] = Math.abs(this[2]);\n return this;\n }\n /**\n * Calculates the dot product of this and another {@link Vec3}.\n * Equivalent to `Vec3.dot(this, b);`\n *\n * @param b - The second operand\n * @returns Dot product of `this` and `b`\n */\n dot(b) {\n return this[0] * b[0] + this[1] * b[1] + this[2] * b[2];\n }\n /**\n * Normalize `this`.\n * Equivalent to `Vec3.normalize(this, this);`\n *\n * @returns `this`\n */\n normalize() {\n return Vec3.normalize(this, this);\n }\n //================\n // Static methods\n //================\n /**\n * Creates a new, empty vec3\n * @category Static\n *\n * @returns a new 3D vector\n */\n static create() {\n return new Vec3();\n }\n /**\n * Creates a new vec3 initialized with values from an existing vector\n * @category Static\n *\n * @param a - vector to clone\n * @returns a new 3D vector\n */\n static clone(a) {\n return new Vec3(a);\n }\n /**\n * Calculates the magnitude (length) of a {@link Vec3}\n * @category Static\n *\n * @param a - Vector to calculate magnitude of\n * @returns Magnitude of a\n */\n static magnitude(a) {\n let x = a[0];\n let y = a[1];\n let z = a[2];\n return Math.sqrt(x * x + y * y + z * z);\n }\n /**\n * Alias for {@link Vec3.magnitude}\n * @category Static\n */\n static mag(a) { return 0; }\n /**\n * Alias for {@link Vec3.magnitude}\n * @category Static\n * @deprecated Use {@link Vec3.magnitude} to avoid conflicts with builtin `length` methods/attribs\n *\n * @param a - vector to calculate length of\n * @returns length of a\n */\n // @ts-ignore: Length conflicts with Function.length\n static length(a) { return 0; }\n /**\n * Alias for {@link Vec3.magnitude}\n * @category Static\n * @deprecated Use {@link Vec3.mag}\n */\n static len(a) { return 0; }\n /**\n * Creates a new vec3 initialized with the given values\n * @category Static\n *\n * @param x - X component\n * @param y - Y component\n * @param z - Z component\n * @returns a new 3D vector\n */\n static fromValues(x, y, z) {\n return new Vec3(x, y, z);\n }\n /**\n * Copy the values from one vec3 to another\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the source vector\n * @returns `out`\n */\n static copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n }\n /**\n * Set the components of a vec3 to the given values\n * @category Static\n *\n * @param out - the receiving vector\n * @param x - X component\n * @param y - Y component\n * @param z - Z component\n * @returns `out`\n */\n static set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n }\n /**\n * Adds two {@link Vec3}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n }\n /**\n * Subtracts vector b from vector a\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n }\n /**\n * Alias for {@link Vec3.subtract}\n * @category Static\n */\n static sub(out, a, b) { return [0, 0, 0]; }\n ;\n /**\n * Multiplies two vec3's\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n }\n /**\n * Alias for {@link Vec3.multiply}\n * @category Static\n */\n static mul(out, a, b) { return [0, 0, 0]; }\n /**\n * Divides two vec3's\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n }\n /**\n * Alias for {@link Vec3.divide}\n * @category Static\n */\n static div(out, a, b) { return [0, 0, 0]; }\n ;\n /**\n * Math.ceil the components of a vec3\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to ceil\n * @returns `out`\n */\n static ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n }\n /**\n * Math.floor the components of a vec3\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to floor\n * @returns `out`\n */\n static floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n }\n /**\n * Returns the minimum of two vec3's\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n }\n /**\n * Returns the maximum of two vec3's\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n }\n /**\n * symmetric round the components of a vec3\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to round\n * @returns `out`\n */\n /*static round(out: Vec3Like, a: Readonly<Vec3Like>): Vec3Like {\n out[0] = glMatrix.round(a[0]);\n out[1] = glMatrix.round(a[1]);\n out[2] = glMatrix.round(a[2]);\n return out;\n }*/\n /**\n * Scales a vec3 by a scalar number\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the vector to scale\n * @param scale - amount to scale the vector by\n * @returns `out`\n */\n static scale(out, a, scale) {\n out[0] = a[0] * scale;\n out[1] = a[1] * scale;\n out[2] = a[2] * scale;\n return out;\n }\n /**\n * Adds two vec3's after scaling the second operand by a scalar value\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param scale - the amount to scale b by before adding\n * @returns `out`\n */\n static scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n }\n /**\n * Calculates the euclidian distance between two vec3's\n * @category Static\n *\n * @param a - the first operand\n * @param b - the second operand\n * @returns distance between a and b\n */\n static distance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n const z = b[2] - a[2];\n return Math.sqrt(x * x + y * y + z * z);\n }\n /**\n * Alias for {@link Vec3.distance}\n */\n static dist(a, b) { return 0; }\n /**\n * Calculates the squared euclidian distance between two vec3's\n * @category Static\n *\n * @param a - the first operand\n * @param b - the second operand\n * @returns squared distance between a and b\n */\n static squaredDistance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n const z = b[2] - a[2];\n return x * x + y * y + z * z;\n }\n /**\n * Alias for {@link Vec3.squaredDistance}\n */\n static sqrDist(a, b) { return 0; }\n /**\n * Calculates the squared length of a vec3\n * @category Static\n *\n * @param a - vector to calculate squared length of\n * @returns squared length of a\n */\n static squaredLength(a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n return x * x + y * y + z * z;\n }\n /**\n * Alias for {@link Vec3.squaredLength}\n */\n static sqrLen(a, b) { return 0; }\n /**\n * Negates the components of a vec3\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to negate\n * @returns `out`\n */\n static negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n }\n /**\n * Returns the inverse of the components of a vec3\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to invert\n * @returns `out`\n */\n static inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n }\n /**\n * Returns the absolute value of the components of a {@link Vec3}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to compute the absolute values of\n * @returns `out`\n */\n static abs(out, a) {\n out[0] = Math.abs(a[0]);\n out[1] = Math.abs(a[1]);\n out[2] = Math.abs(a[2]);\n return out;\n }\n /**\n * Normalize a vec3\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to normalize\n * @returns `out`\n */\n static normalize(out, a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n let len = x * x + y * y + z * z;\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n }\n /**\n * Calculates the dot product of two vec3's\n * @category Static\n *\n * @param a - the first operand\n * @param b - the second operand\n * @returns dot product of a and b\n */\n static dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n }\n /**\n * Computes the cross product of two vec3's\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static cross(out, a, b) {\n const ax = a[0], ay = a[1], az = a[2];\n const bx = b[0], by = b[1], bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n }\n /**\n * Performs a linear interpolation between two vec3's\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param t - interpolation amount, in the range [0-1], between the two inputs\n * @returns `out`\n */\n static lerp(out, a, b, t) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n }\n /**\n * Performs a spherical linear interpolation between two vec3's\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param t - interpolation amount, in the range [0-1], between the two inputs\n * @returns `out`\n */\n static slerp(out, a, b, t) {\n const angle = Math.acos(Math.min(Math.max(Vec3.dot(a, b), -1), 1));\n const sinTotal = Math.sin(angle);\n const ratioA = Math.sin((1 - t) * angle) / sinTotal;\n const ratioB = Math.sin(t * angle) / sinTotal;\n out[0] = ratioA * a[0] + ratioB * b[0];\n out[1] = ratioA * a[1] + ratioB * b[1];\n out[2] = ratioA * a[2] + ratioB * b[2];\n return out;\n }\n /**\n * Performs a hermite interpolation with two control points\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param c - the third operand\n * @param d - the fourth operand\n * @param t - interpolation amount, in the range [0-1], between the two inputs\n * @returns `out`\n */\n static hermite(out, a, b, c, d, t) {\n const factorTimes2 = t * t;\n const factor1 = factorTimes2 * (2 * t - 3) + 1;\n const factor2 = factorTimes2 * (t - 2) + t;\n const factor3 = factorTimes2 * (t - 1);\n const factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n }\n /**\n * Performs a bezier interpolation with two control points\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param c - the third operand\n * @param d - the fourth operand\n * @param t - interpolation amount, in the range [0-1], between the two inputs\n * @returns `out`\n */\n static bezier(out, a, b, c, d, t) {\n const inverseFactor = 1 - t;\n const inverseFactorTimesTwo = inverseFactor * inverseFactor;\n const factorTimes2 = t * t;\n const factor1 = inverseFactorTimesTwo * inverseFactor;\n const factor2 = 3 * t * inverseFactorTimesTwo;\n const factor3 = 3 * factorTimes2 * inverseFactor;\n const factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n }\n /**\n * Generates a random vector with the given scale\n * @category Static\n *\n * @param out - the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned\n * @returns `out`\n */\n /*static random(out: Vec3Like, scale) {\n scale = scale === undefined ? 1.0 : scale;\n \n let r = glMatrix.RANDOM() * 2.0 * Math.PI;\n let z = glMatrix.RANDOM() * 2.0 - 1.0;\n let zScale = Math.sqrt(1.0 - z * z) * scale;\n \n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n }*/\n /**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the vector to transform\n * @param m - matrix to transform with\n * @returns `out`\n */\n static transformMat4(out, a, m) {\n const x = a[0], y = a[1], z = a[2];\n const w = (m[3] * x + m[7] * y + m[11] * z + m[15]) || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n }\n /**\n * Transforms the vec3 with a mat3.\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the vector to transform\n * @param m - the 3x3 matrix to transform with\n * @returns `out`\n */\n static transformMat3(out, a, m) {\n let x = a[0], y = a[1], z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n }\n /**\n * Transforms the vec3 with a quat\n * Can also be used for dual quaternions. (Multiply it with the real part)\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the vector to transform\n * @param q - quaternion to transform with\n * @returns `out`\n */\n static transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const w2 = q[3] * 2;\n const x = a[0];\n const y = a[1];\n const z = a[2];\n // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n const uvx = (qy * z - qz * y);\n const uvy = (qz * x - qx * z);\n const uvz = (qx * y - qy * x);\n // var uuv = vec3.cross([], qvec, uv);\n // vec3.scale(uuv, uuv, 2);\n const uuvx = (qy * uvz - qz * uvy) * 2;\n const uuvy = (qz * uvx - qx * uvz) * 2;\n const uuvz = (qx * uvy - qy * uvx) * 2;\n // vec3.scale(uv, uv, 2 * w);\n // return vec3.add(out, a, vec3.add(out, uv, uuv));\n out[0] = x + (uvx * w2) + uuvx;\n out[1] = y + (uvy * w2) + uuvy;\n out[2] = z + (uvz * w2) + uuvz;\n return out;\n }\n /**\n * Rotate a 3D vector around the x-axis\n * @param out - The receiving vec3\n * @param a - The vec3 point to rotate\n * @param b - The origin of the rotation\n * @param rad - The angle of rotation in radians\n * @returns `out`\n */\n static rotateX(out, a, b, rad) {\n const by = b[1];\n const bz = b[2];\n //Translate point to the origin\n const py = a[1] - by;\n const pz = a[2] - bz;\n //perform rotation\n //translate to correct position\n out[0] = a[0];\n out[1] = (py * Math.cos(rad) - pz * Math.sin(rad)) + by;\n out[2] = (py * Math.sin(rad) + pz * Math.cos(rad)) + bz;\n return out;\n }\n /**\n * Rotate a 3D vector around the y-axis\n * @param out - The receiving vec3\n * @param a - The vec3 point to rotate\n * @param b - The origin of the rotation\n * @param rad - The angle of rotation in radians\n * @returns `out`\n */\n static rotateY(out, a, b, rad) {\n const bx = b[0];\n const bz = b[2];\n //Translate point to the origin\n const px = a[0] - bx;\n const pz = a[2] - bz;\n //perform rotation\n //translate to correct position\n out[0] = (pz * Math.sin(rad) + px * Math.cos(rad)) + bx;\n out[1] = a[1];\n out[2] = (pz * Math.cos(rad) - px * Math.sin(rad)) + bz;\n return out;\n }\n /**\n * Rotate a 3D vector around the z-axis\n * @param out - The receiving vec3\n * @param a - The vec3 point to rotate\n * @param b - The origin of the rotation\n * @param rad - The angle of rotation in radians\n * @returns `out`\n */\n static rotateZ(out, a, b, rad) {\n const bx = b[0];\n const by = b[1];\n //Translate point to the origin\n const px = a[0] - bx;\n const py = a[1] - by;\n //perform rotation\n //translate to correct position\n out[0] = (px * Math.cos(rad) - py * Math.sin(rad)) + bx;\n out[1] = (px * Math.sin(rad) + py * Math.cos(rad)) + by;\n out[2] = b[2];\n return out;\n }\n /**\n * Get the angle between two 3D vectors\n * @param a - The first operand\n * @param b - The second operand\n * @returns The angle in radians\n */\n static angle(a, b) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const mag = Math.sqrt((ax * ax + ay * ay + az * az) * (bx * bx + by * by + bz * bz));\n const cosine = mag && Vec3.dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n }\n /**\n * Set the components of a vec3 to zero\n * @category Static\n *\n * @param out - the receiving vector\n * @returns `out`\n */\n static zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n }\n /**\n * Returns a string representation of a vector\n * @category Static\n *\n * @param a - vector to represent as a string\n * @returns string representation of the vector\n */\n static str(a) {\n return `Vec3(${a.join(', ')})`;\n }\n /**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n * @category Static\n *\n * @param a - The first vector.\n * @param b - The second vector.\n * @returns True if the vectors are equal, false otherwise.\n */\n static exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n }\n /**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n * @category Static\n *\n * @param a - The first vector.\n * @param b - The second vector.\n * @returns True if the vectors are equal, false otherwise.\n */\n static equals(a, b) {\n const a0 = a[0];\n const a1 = a[1];\n const a2 = a[2];\n const b0 = b[0];\n const b1 = b[1];\n const b2 = b[2];\n return (Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) &&\n Math.abs(a2 - b2) <= EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)));\n }\n}\nexport { Vec3 };\n// Instance method alias assignments\nVec3.prototype.sub = Vec3.prototype.subtract;\nVec3.prototype.mul = Vec3.prototype.multiply;\nVec3.prototype.div = Vec3.prototype.divide;\nVec3.prototype.dist = Vec3.prototype.distance;\nVec3.prototype.sqrDist = Vec3.prototype.squaredDistance;\n// Static method alias assignments\nVec3.sub = Vec3.subtract;\nVec3.mul = Vec3.multiply;\nVec3.div = Vec3.divide;\nVec3.dist = Vec3.distance;\nVec3.sqrDist = Vec3.squaredDistance;\nVec3.sqrLen = Vec3.squaredLength;\nVec3.mag = Vec3.magnitude;\nVec3.length = Vec3.magnitude;\nVec3.len = Vec3.magnitude;\n/**\n * Vec3 alias for backwards compatibility\n */\nexport const vec3 = Vec3;\n//# sourceMappingURL=vec3.js.map","import { EPSILON } from './common.js';\n/**\n * 4 Dimensional Vector\n */\nclass Vec4 extends Float32Array {\n /**\n * The number of bytes in a {@link Vec4}.\n */\n static BYTE_LENGTH = 4 * Float32Array.BYTES_PER_ELEMENT;\n /**\n * Create a {@link Vec4}.\n */\n constructor(...values) {\n switch (values.length) {\n case 4:\n super(values);\n break;\n case 2:\n super(values[0], values[1], 4);\n break;\n case 1: {\n const v = values[0];\n if (typeof v === 'number') {\n super([v, v, v, v]);\n }\n else {\n super(v, 0, 4);\n }\n break;\n }\n default:\n super(4);\n break;\n }\n }\n //============\n // Attributes\n //============\n // Getters and setters to make component access read better.\n // These are likely to be a little bit slower than direct array access.\n /**\n * The x component of the vector. Equivalent to `this[0];`\n * @category Vector components\n */\n get x() { return this[0]; }\n set x(value) { this[0] = value; }\n /**\n * The y component of the vector. Equivalent to `this[1];`\n * @category Vector components\n */\n get y() { return this[1]; }\n set y(value) { this[1] = value; }\n /**\n * The z component of the vector. Equivalent to `this[2];`\n * @category Vector components\n */\n get z() { return this[2]; }\n set z(value) { this[2] = value; }\n /**\n * The w component of the vector. Equivalent to `this[3];`\n * @category Vector components\n */\n get w() { return this[3]; }\n set w(value) { this[3] = value; }\n // Alternate set of getters and setters in case this is being used to define\n // a color.\n /**\n * The r component of the vector. Equivalent to `this[0];`\n * @category Color components\n */\n get r() { return this[0]; }\n set r(value) { this[0] = value; }\n /**\n * The g component of the vector. Equivalent to `this[1];`\n * @category Color components\n */\n get g() { return this[1]; }\n set g(value) { this[1] = value; }\n /**\n * The b component of the vector. Equivalent to `this[2];`\n * @category Color components\n */\n get b() { return this[2]; }\n set b(value) { this[2] = value; }\n /**\n * The a component of the vector. Equivalent to `this[3];`\n * @category Color components\n */\n get a() { return this[3]; }\n set a(value) { this[3] = value; }\n /**\n * The magnitude (length) of this.\n * Equivalent to `Vec4.magnitude(this);`\n *\n * Magnitude is used because the `length` attribute is already defined by\n * TypedArrays to mean the number of elements in the array.\n */\n get magnitude() {\n const x = this[0];\n const y = this[1];\n const z = this[2];\n const w = this[3];\n return Math.sqrt(x * x + y * y + z * z + w * w);\n }\n /**\n * Alias for {@link Vec4.magnitude}\n */\n get mag() { return this.magnitude; }\n /**\n * A string representation of `this`\n * Equivalent to `Vec4.str(this);`\n */\n get str() {\n return Vec4.str(this);\n }\n //===================\n // Instances methods\n //===================\n /**\n * Copy the values from another {@link Vec4} into `this`.\n *\n * @param a the source vector\n * @returns `this`\n */\n copy(a) {\n super.set(a);\n return this;\n }\n /**\n * Adds a {@link Vec4} to `this`.\n * Equivalent to `Vec4.add(this, this, b);`\n *\n * @param b - The vector to add to `this`\n * @returns `this`\n */\n add(b) {\n this[0] += b[0];\n this[1] += b[1];\n this[2] += b[2];\n this[3] += b[3];\n return this;\n }\n /**\n * Subtracts a {@link Vec4} from `this`.\n * Equivalent to `Vec4.subtract(this, this, b);`\n *\n * @param b - The vector to subtract from `this`\n * @returns `this`\n */\n subtract(b) {\n this[0] -= b[0];\n this[1] -= b[1];\n this[2] -= b[2];\n this[3] -= b[3];\n return this;\n }\n /**\n * Alias for {@link Vec4.subtract}\n */\n sub(b) { return this; }\n /**\n * Multiplies `this` by a {@link Vec4}.\n * Equivalent to `Vec4.multiply(this, this, b);`\n *\n * @param b - The vector to multiply `this` by\n * @returns `this`\n */\n multiply(b) {\n this[0] *= b[0];\n this[1] *= b[1];\n this[2] *= b[2];\n this[3] *= b[3];\n return this;\n }\n /**\n * Alias for {@link Vec4.multiply}\n */\n mul(b) { return this; }\n /**\n * Divides `this` by a {@link Vec4}.\n * Equivalent to `Vec4.divide(this, this, b);`\n *\n * @param b - The vector to divide `this` by\n * @returns `this`\n */\n divide(b) {\n this[0] /= b[0];\n this[1] /= b[1];\n this[2] /= b[2];\n this[3] /= b[3];\n return this;\n }\n /**\n * Alias for {@link Vec4.divide}\n */\n div(b) { return this; }\n /**\n * Scales `this` by a scalar number.\n * Equivalent to `Vec4.scale(this, this, b);`\n *\n * @param b - Amount to scale `this` by\n * @returns `this`\n */\n scale(b) {\n this[0] *= b;\n this[1] *= b;\n this[2] *= b;\n this[3] *= b;\n return this;\n }\n /**\n * Calculates `this` scaled by a scalar value then adds the result to `this`.\n * Equivalent to `Vec4.scaleAndAdd(this, this, b, scale);`\n *\n * @param b - The vector to add to `this`\n * @param scale - The amount to scale `b` by before adding\n * @returns `this`\n */\n scaleAndAdd(b, scale) {\n this[0] += b[0] * scale;\n this[1] += b[1] * scale;\n this[2] += b[2] * scale;\n this[3] += b[3] * scale;\n return this;\n }\n /**\n * Calculates the euclidian distance between another {@link Vec4} and `this`.\n * Equivalent to `Vec4.distance(this, b);`\n *\n * @param b - The vector to calculate the distance to\n * @returns Distance between `this` and `b`\n */\n distance(b) {\n return Vec4.distance(this, b);\n }\n /**\n * Alias for {@link Vec4.distance}\n */\n dist(b) { return 0; }\n /**\n * Calculates the squared euclidian distance between another {@link Vec4} and `this`.\n * Equivalent to `Vec4.squaredDistance(this, b);`\n *\n * @param b The vector to calculate the squared distance to\n * @returns Squared distance between `this` and `b`\n */\n squaredDistance(b) {\n return Vec4.squaredDistance(this, b);\n }\n /**\n * Alias for {@link Vec4.squaredDistance}\n */\n sqrDist(b) { return 0; }\n /**\n * Negates the components of `this`.\n * Equivalent to `Vec4.negate(this, this);`\n *\n * @returns `this`\n */\n negate() {\n this[0] *= -1;\n this[1] *= -1;\n this[2] *= -1;\n this[3] *= -1;\n return this;\n }\n /**\n * Inverts the components of `this`.\n * Equivalent to `Vec4.inverse(this, this);`\n *\n * @returns `this`\n */\n invert() {\n this[0] = 1.0 / this[0];\n this[1] = 1.0 / this[1];\n this[2] = 1.0 / this[2];\n this[3] = 1.0 / this[3];\n return this;\n }\n /**\n * Sets each component of `this` to it's absolute value.\n * Equivalent to `Vec4.abs(this, this);`\n *\n * @returns `this`\n */\n abs() {\n this[0] = Math.abs(this[0]);\n this[1] = Math.abs(this[1]);\n this[2] = Math.abs(this[2]);\n this[3] = Math.abs(this[3]);\n return this;\n }\n /**\n * Calculates the dot product of this and another {@link Vec4}.\n * Equivalent to `Vec4.dot(this, b);`\n *\n * @param b - The second operand\n * @returns Dot product of `this` and `b`\n */\n dot(b) {\n return this[0] * b[0] + this[1] * b[1] + this[2] * b[2] + this[3] * b[3];\n }\n /**\n * Normalize `this`.\n * Equivalent to `Vec4.normalize(this, this);`\n *\n * @returns `this`\n */\n normalize() {\n return Vec4.normalize(this, this);\n }\n //===================\n // Static methods\n //===================\n /**\n * Creates a new, empty {@link Vec4}\n * @category Static\n *\n * @returns a new 4D vector\n */\n static create() {\n return new Vec4();\n }\n /**\n * Creates a new {@link Vec4} initialized with values from an existing vector\n * @category Static\n *\n * @param a - vector to clone\n * @returns a new 4D vector\n */\n static clone(a) {\n return new Vec4(a);\n }\n /**\n * Creates a new {@link Vec4} initialized with the given values\n * @category Static\n *\n * @param x - X component\n * @param y - Y component\n * @param z - Z component\n * @param w - W component\n * @returns a new 4D vector\n */\n static fromValues(x, y, z, w) {\n return new Vec4(x, y, z, w);\n }\n /**\n * Copy the values from one {@link Vec4} to another\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the source vector\n * @returns `out`\n */\n static copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n }\n /**\n * Set the components of a {@link Vec4} to the given values\n * @category Static\n *\n * @param out - the receiving vector\n * @param x - X component\n * @param y - Y component\n * @param z - Z component\n * @param w - W component\n * @returns `out`\n */\n static set(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n }\n /**\n * Adds two {@link Vec4}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n }\n /**\n * Subtracts vector b from vector a\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n }\n /**\n * Alias for {@link Vec4.subtract}\n * @category Static\n */\n static sub(out, a, b) { return out; }\n /**\n * Multiplies two {@link Vec4}'s\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n }\n /**\n * Alias for {@link Vec4.multiply}\n * @category Static\n */\n static mul(out, a, b) { return out; }\n /**\n * Divides two {@link Vec4}'s\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n }\n /**\n * Alias for {@link Vec4.divide}\n * @category Static\n */\n static div(out, a, b) { return out; }\n /**\n * Math.ceil the components of a {@link Vec4}\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to ceil\n * @returns `out`\n */\n static ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n out[3] = Math.ceil(a[3]);\n return out;\n }\n /**\n * Math.floor the components of a {@link Vec4}\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to floor\n * @returns `out`\n */\n static floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n out[3] = Math.floor(a[3]);\n return out;\n }\n /**\n * Returns the minimum of two {@link Vec4}'s\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n }\n /**\n * Returns the maximum of two {@link Vec4}'s\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n }\n /**\n * Math.round the components of a {@link Vec4}\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to round\n * @returns `out`\n */\n static round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n out[3] = Math.round(a[3]);\n return out;\n }\n /**\n * Scales a {@link Vec4} by a scalar number\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the vector to scale\n * @param scale - amount to scale the vector by\n * @returns `out`\n */\n static scale(out, a, scale) {\n out[0] = a[0] * scale;\n out[1] = a[1] * scale;\n out[2] = a[2] * scale;\n out[3] = a[3] * scale;\n return out;\n }\n /**\n * Adds two {@link Vec4}'s after scaling the second operand by a scalar value\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param scale - the amount to scale b by before adding\n * @returns `out`\n */\n static scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n return out;\n }\n /**\n * Calculates the euclidian distance between two {@link Vec4}'s\n * @category Static\n *\n * @param a - the first operand\n * @param b - the second operand\n * @returns distance between a and b\n */\n static distance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n const z = b[2] - a[2];\n const w = b[3] - a[3];\n return Math.hypot(x, y, z, w);\n }\n /**\n * Alias for {@link Vec4.distance}\n * @category Static\n */\n static dist(a, b) { return 0; }\n /**\n * Calculates the squared euclidian distance between two {@link Vec4}'s\n * @category Static\n *\n * @param a - the first operand\n * @param b - the second operand\n * @returns squared distance between a and b\n */\n static squaredDistance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n const z = b[2] - a[2];\n const w = b[3] - a[3];\n return x * x + y * y + z * z + w * w;\n }\n /**\n * Alias for {@link Vec4.squaredDistance}\n * @category Static\n */\n static sqrDist(a, b) { return 0; }\n /**\n * Calculates the magnitude (length) of a {@link Vec4}\n * @category Static\n *\n * @param a - vector to calculate length of\n * @returns length of `a`\n */\n static magnitude(a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const w = a[3];\n return Math.sqrt(x * x + y * y + z * z + w * w);\n }\n /**\n * Alias for {@link Vec4.magnitude}\n * @category Static\n */\n static mag(a) { return 0; }\n /**\n * Alias for {@link Vec4.magnitude}\n * @category Static\n * @deprecated Use {@link Vec4.magnitude} to avoid conflicts with builtin `length` methods/attribs\n */\n // @ts-ignore: Length conflicts with Function.length\n static length(a) { return 0; }\n /**\n * Alias for {@link Vec4.magnitude}\n * @category Static\n * @deprecated Use {@link Vec4.mag}\n */\n static len(a) { return 0; }\n /**\n * Calculates the squared length of a {@link Vec4}\n * @category Static\n *\n * @param a - vector to calculate squared length of\n * @returns squared length of a\n */\n static squaredLength(a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const w = a[3];\n return x * x + y * y + z * z + w * w;\n }\n /**\n * Alias for {@link Vec4.squaredLength}\n * @category Static\n */\n static sqrLen(a) { return 0; }\n /**\n * Negates the components of a {@link Vec4}\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to negate\n * @returns `out`\n */\n static negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n }\n /**\n * Returns the inverse of the components of a {@link Vec4}\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to invert\n * @returns `out`\n */\n static inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n }\n /**\n * Returns the absolute value of the components of a {@link Vec4}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to compute the absolute values of\n * @returns `out`\n */\n static abs(out, a) {\n out[0] = Math.abs(a[0]);\n out[1] = Math.abs(a[1]);\n out[2] = Math.abs(a[2]);\n out[3] = Math.abs(a[3]);\n return out;\n }\n /**\n * Normalize a {@link Vec4}\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to normalize\n * @returns `out`\n */\n static normalize(out, a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const w = a[3];\n let len = x * x + y * y + z * z + w * w;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n }\n /**\n * Calculates the dot product of two {@link Vec4}'s\n * @category Static\n *\n * @param a - the first operand\n * @param b - the second operand\n * @returns dot product of a and b\n */\n static dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n }\n /**\n * Returns the cross-product of three vectors in a 4-dimensional space\n * @category Static\n *\n * @param out the receiving vector\n * @param u - the first vector\n * @param v - the second vector\n * @param w - the third vector\n * @returns result\n */\n static cross(out, u, v, w) {\n const a = v[0] * w[1] - v[1] * w[0];\n const b = v[0] * w[2] - v[2] * w[0];\n const c = v[0] * w[3] - v[3] * w[0];\n const d = v[1] * w[2] - v[2] * w[1];\n const e = v[1] * w[3] - v[3] * w[1];\n const f = v[2] * w[3] - v[3] * w[2];\n const g = u[0];\n const h = u[1];\n const i = u[2];\n const j = u[3];\n out[0] = h * f - i * e + j * d;\n out[1] = -(g * f) + i * c - j * b;\n out[2] = g * e - h * c + j * a;\n out[3] = -(g * d) + h * b - i * a;\n return out;\n }\n /**\n * Performs a linear interpolation between two {@link Vec4}'s\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param t - interpolation amount, in the range [0-1], between the two inputs\n * @returns `out`\n */\n static lerp(out, a, b, t) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n }\n /**\n * Generates a random vector with the given scale\n * @category Static\n *\n * @param out - the receiving vector\n * @param [scale] - Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns `out`\n */\n /*static random(out: Vec4Like, scale): Vec4Like {\n scale = scale || 1.0;\n \n // Marsaglia, George. Choosing a Point from the Surface of a\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n // http://projecteuclid.org/euclid.aoms/1177692644;\n var v1, v2, v3, v4;\n var s1, s2;\n do {\n v1 = glMatrix.RANDOM() * 2 - 1;\n v2 = glMatrix.RANDOM() * 2 - 1;\n s1 = v1 * v1 + v2 * v2;\n } while (s1 >= 1);\n do {\n v3 = glMatrix.RANDOM() * 2 - 1;\n v4 = glMatrix.RANDOM() * 2 - 1;\n s2 = v3 * v3 + v4 * v4;\n } while (s2 >= 1);\n \n var d = Math.sqrt((1 - s1) / s2);\n out[0] = scale * v1;\n out[1] = scale * v2;\n out[2] = scale * v3 * d;\n out[3] = scale * v4 * d;\n return out;\n }*/\n /**\n * Transforms the {@link Vec4} with a {@link Mat4}.\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the vector to transform\n * @param m - matrix to transform with\n * @returns `out`\n */\n static transformMat4(out, a, m) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n }\n /**\n * Transforms the {@link Vec4} with a {@link Quat}\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the vector to transform\n * @param q - quaternion to transform with\n * @returns `out`\n */\n static transformQuat(out, a, q) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n // calculate quat * vec\n const ix = qw * x + qy * z - qz * y;\n const iy = qw * y + qz * x - qx * z;\n const iz = qw * z + qx * y - qy * x;\n const iw = -qx * x - qy * y - qz * z;\n // calculate result * inverse quat\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n out[3] = a[3];\n return out;\n }\n /**\n * Set the components of a {@link Vec4} to zero\n * @category Static\n *\n * @param out - the receiving vector\n * @returns `out`\n */\n static zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n return out;\n }\n /**\n * Returns a string representation of a {@link Vec4}\n * @category Static\n *\n * @param a - vector to represent as a string\n * @returns string representation of the vector\n */\n static str(a) {\n return `Vec4(${a.join(', ')})`;\n }\n /**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n * @category Static\n *\n * @param a - The first vector.\n * @param b - The second vector.\n * @returns True if the vectors are equal, false otherwise.\n */\n static exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n }\n /**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n * @category Static\n *\n * @param a - The first vector.\n * @param b - The second vector.\n * @returns True if the vectors are equal, false otherwise.\n */\n static equals(a, b) {\n const a0 = a[0];\n const a1 = a[1];\n const a2 = a[2];\n const a3 = a[3];\n const b0 = b[0];\n const b1 = b[1];\n const b2 = b[2];\n const b3 = b[3];\n return (Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) &&\n Math.abs(a2 - b2) <= EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) &&\n Math.abs(a3 - b3) <= EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)));\n }\n}\nexport { Vec4 };\n// Instance method alias assignments\nVec4.prototype.sub = Vec4.prototype.subtract;\nVec4.prototype.mul = Vec4.prototype.multiply;\nVec4.prototype.div = Vec4.prototype.divide;\nVec4.prototype.dist = Vec4.prototype.distance;\nVec4.prototype.sqrDist = Vec4.prototype.squaredDistance;\n// Static method alias assignments\nVec4.sub = Vec4.subtract;\nVec4.mul = Vec4.multiply;\nVec4.div = Vec4.divide;\nVec4.dist = Vec4.distance;\nVec4.sqrDist = Vec4.squaredDistance;\nVec4.sqrLen = Vec4.squaredLength;\nVec4.mag = Vec4.magnitude;\nVec4.length = Vec4.magnitude;\nVec4.len = Vec4.magnitude;\n/**\n * Vec4 alias for backwards compatibility\n */\nexport const vec4 = Vec4;\n//# sourceMappingURL=vec4.js.map","import { EPSILON } from './common.js';\n/**\n * 2 Dimensional Vector\n */\nclass Vec2 extends Float32Array {\n /**\n * The number of bytes in a {@link Vec2}.\n */\n static BYTE_LENGTH = 2 * Float32Array.BYTES_PER_ELEMENT;\n /**\n * Create a {@link Vec2}.\n */\n constructor(...values) {\n switch (values.length) {\n case 2: {\n const v = values[0];\n if (typeof v === 'number') {\n super([v, values[1]]);\n }\n else {\n super(v, values[1], 2);\n }\n break;\n }\n case 1: {\n const v = values[0];\n if (typeof v === 'number') {\n super([v, v]);\n }\n else {\n super(v, 0, 2);\n }\n break;\n }\n default:\n super(2);\n break;\n }\n }\n //============\n // Attributes\n //============\n // Getters and setters to make component access read better.\n // These are likely to be a little bit slower than direct array access.\n /**\n * The x component of the vector. Equivalent to `this[0];`\n * @category Vector components\n */\n get x() { return this[0]; }\n set x(value) { this[0] = value; }\n /**\n * The y component of the vector. Equivalent to `this[1];`\n * @category Vector components\n */\n get y() { return this[1]; }\n set y(value) { this[1] = value; }\n // Alternate set of getters and setters in case this is being used to define\n // a color.\n /**\n * The r component of the vector. Equivalent to `this[0];`\n * @category Color components\n */\n get r() { return this[0]; }\n set r(value) { this[0] = value; }\n /**\n * The g component of the vector. Equivalent to `this[1];`\n * @category Color components\n */\n get g() { return this[1]; }\n set g(value) { this[1] = value; }\n /**\n * The magnitude (length) of this.\n * Equivalent to `Vec2.magnitude(this);`\n *\n * Magnitude is used because the `length` attribute is already defined by\n * TypedArrays to mean the number of elements in the array.\n */\n get magnitude() {\n return Math.hypot(this[0], this[1]);\n }\n /**\n * Alias for {@link Vec2.magnitude}\n */\n get mag() { return this.magnitude; }\n /**\n * The squared magnitude (length) of `this`.\n * Equivalent to `Vec2.squaredMagnitude(this);`\n */\n get squaredMagnitude() {\n const x = this[0];\n const y = this[1];\n return x * x + y * y;\n }\n /**\n * Alias for {@link Vec2.squaredMagnitude}\n */\n get sqrMag() { return this.squaredMagnitude; }\n /**\n * A string representation of `this`\n * Equivalent to `Vec2.str(this);`\n */\n get str() {\n return Vec2.str(this);\n }\n //===================\n // Instances methods\n //===================\n /**\n * Copy the values from another {@link Vec2} into `this`.\n *\n * @param a the source vector\n * @returns `this`\n */\n copy(a) {\n this.set(a);\n return this;\n }\n // Instead of zero(), use a.fill(0) for instances;\n /**\n * Adds a {@link Vec2} to `this`.\n * Equivalent to `Vec2.add(this, this, b);`\n *\n * @param b - The vector to add to `this`\n * @returns `this`\n */\n add(b) {\n this[0] += b[0];\n this[1] += b[1];\n return this;\n }\n /**\n * Subtracts a {@link Vec2} from `this`.\n * Equivalent to `Vec2.subtract(this, this, b);`\n *\n * @param b - The vector to subtract from `this`\n * @returns `this`\n */\n subtract(b) {\n this[0] -= b[0];\n this[1] -= b[1];\n return this;\n }\n /**\n * Alias for {@link Vec2.subtract}\n */\n sub(b) { return this; }\n /**\n * Multiplies `this` by a {@link Vec2}.\n * Equivalent to `Vec2.multiply(this, this, b);`\n *\n * @param b - The vector to multiply `this` by\n * @returns `this`\n */\n multiply(b) {\n this[0] *= b[0];\n this[1] *= b[1];\n return this;\n }\n /**\n * Alias for {@link Vec2.multiply}\n */\n mul(b) { return this; }\n /**\n * Divides `this` by a {@link Vec2}.\n * Equivalent to `Vec2.divide(this, this, b);`\n *\n * @param b - The vector to divide `this` by\n * @returns {Vec2} `this`\n */\n divide(b) {\n this[0] /= b[0];\n this[1] /= b[1];\n return this;\n }\n /**\n * Alias for {@link Vec2.divide}\n */\n div(b) { return this; }\n /**\n * Scales `this` by a scalar number.\n * Equivalent to `Vec2.scale(this, this, b);`\n *\n * @param b - Amount to scale `this` by\n * @returns `this`\n */\n scale(b) {\n this[0] *= b;\n this[1] *= b;\n return this;\n }\n /**\n * Calculates `this` scaled by a scalar value then adds the result to `this`.\n * Equivalent to `Vec2.scaleAndAdd(this, this, b, scale);`\n *\n * @param b - The vector to add to `this`\n * @param scale - The amount to scale `b` by before adding\n * @returns `this`\n */\n scaleAndAdd(b, scale) {\n this[0] += b[0] * scale;\n this[1] += b[1] * scale;\n return this;\n }\n /**\n * Calculates the euclidian distance between another {@link Vec2} and `this`.\n * Equivalent to `Vec2.distance(this, b);`\n *\n * @param b - The vector to calculate the distance to\n * @returns Distance between `this` and `b`\n */\n distance(b) {\n return Vec2.distance(this, b);\n }\n /**\n * Alias for {@link Vec2.distance}\n */\n dist(b) { return 0; }\n /**\n * Calculates the squared euclidian distance between another {@link Vec2} and `this`.\n * Equivalent to `Vec2.squaredDistance(this, b);`\n *\n * @param b The vector to calculate the squared distance to\n * @returns Squared distance between `this` and `b`\n */\n squaredDistance(b) {\n return Vec2.squaredDistance(this, b);\n }\n /**\n * Alias for {@link Vec2.squaredDistance}\n */\n sqrDist(b) { return 0; }\n /**\n * Negates the components of `this`.\n * Equivalent to `Vec2.negate(this, this);`\n *\n * @returns `this`\n */\n negate() {\n this[0] *= -1;\n this[1] *= -1;\n return this;\n }\n /**\n * Inverts the components of `this`.\n * Equivalent to `Vec2.inverse(this, this);`\n *\n * @returns `this`\n */\n invert() {\n this[0] = 1.0 / this[0];\n this[1] = 1.0 / this[1];\n return this;\n }\n /**\n * Sets each component of `this` to it's absolute value.\n * Equivalent to `Vec2.abs(this, this);`\n *\n * @returns `this`\n */\n abs() {\n this[0] = Math.abs(this[0]);\n this[1] = Math.abs(this[1]);\n return this;\n }\n /**\n * Calculates the dot product of this and another {@link Vec2}.\n * Equivalent to `Vec2.dot(this, b);`\n *\n * @param b - The second operand\n * @returns Dot product of `this` and `b`\n */\n dot(b) {\n return this[0] * b[0] + this[1] * b[1];\n }\n /**\n * Normalize `this`.\n * Equivalent to `Vec2.normalize(this, this);`\n *\n * @returns `this`\n */\n normalize() {\n return Vec2.normalize(this, this);\n }\n //================\n // Static methods\n //================\n /**\n * Creates a new, empty {@link Vec2}\n * @category Static\n *\n * @returns A new 2D vector\n */\n static create() {\n return new Vec2();\n }\n /**\n * Creates a new {@link Vec2} initialized with values from an existing vector\n * @category Static\n *\n * @param a - Vector to clone\n * @returns A new 2D vector\n */\n static clone(a) {\n return new Vec2(a);\n }\n /**\n * Creates a new {@link Vec2} initialized with the given values\n * @category Static\n *\n * @param x - X component\n * @param y - Y component\n * @returns A new 2D vector\n */\n static fromValues(x, y) {\n return new Vec2(x, y);\n }\n /**\n * Copy the values from one {@link Vec2} to another\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - The source vector\n * @returns `out`\n */\n static copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n }\n /**\n * Set the components of a {@link Vec2} to the given values\n * @category Static\n *\n * @param out - The receiving vector\n * @param x - X component\n * @param y - Y component\n * @returns `out`\n */\n static set(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n }\n /**\n * Adds two {@link Vec2}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n }\n /**\n * Subtracts vector b from vector a\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n }\n /**\n * Alias for {@link Vec2.subtract}\n * @category Static\n */\n static sub(out, a, b) { return [0, 0]; }\n /**\n * Multiplies two {@link Vec2}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n }\n /**\n * Alias for {@link Vec2.multiply}\n * @category Static\n */\n static mul(out, a, b) { return [0, 0]; }\n /**\n * Divides two {@link Vec2}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n }\n /**\n * Alias for {@link Vec2.divide}\n * @category Static\n */\n static div(out, a, b) { return [0, 0]; }\n /**\n * Math.ceil the components of a {@link Vec2}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to ceil\n * @returns `out`\n */\n static ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n return out;\n }\n /**\n * Math.floor the components of a {@link Vec2}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to floor\n * @returns `out`\n */\n static floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n return out;\n }\n /**\n * Returns the minimum of two {@link Vec2}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n }\n /**\n * Returns the maximum of two {@link Vec2}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n }\n /**\n * Math.round the components of a {@link Vec2}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to round\n * @returns `out`\n */\n static round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n return out;\n }\n /**\n * Scales a {@link Vec2} by a scalar number\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The vector to scale\n * @param b - Amount to scale the vector by\n * @returns `out`\n */\n static scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n }\n /**\n * Adds two Vec2's after scaling the second operand by a scalar value\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @param scale - The amount to scale b by before adding\n * @returns `out`\n */\n static scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n return out;\n }\n /**\n * Calculates the euclidian distance between two {@link Vec2}s\n * @category Static\n *\n * @param a - The first operand\n * @param b - The second operand\n * @returns distance between `a` and `b`\n */\n static distance(a, b) {\n return Math.hypot(b[0] - a[0], b[1] - a[1]);\n }\n /**\n * Alias for {@link Vec2.distance}\n * @category Static\n */\n static dist(a, b) { return 0; }\n /**\n * Calculates the squared euclidian distance between two {@link Vec2}s\n * @category Static\n *\n * @param a - The first operand\n * @param b - The second operand\n * @returns Squared distance between `a` and `b`\n */\n static squaredDistance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n return x * x + y * y;\n }\n /**\n * Alias for {@link Vec2.distance}\n * @category Static\n */\n static sqrDist(a, b) { return 0; }\n /**\n * Calculates the magnitude (length) of a {@link Vec2}\n * @category Static\n *\n * @param a - Vector to calculate magnitude of\n * @returns Magnitude of a\n */\n static magnitude(a) {\n let x = a[0];\n let y = a[1];\n return Math.sqrt(x * x + y * y);\n }\n /**\n * Alias for {@link Vec2.magnitude}\n * @category Static\n */\n static mag(a) { return 0; }\n /**\n * Alias for {@link Vec2.magnitude}\n * @category Static\n * @deprecated Use {@link Vec2.magnitude} to avoid conflicts with builtin `length` methods/attribs\n *\n * @param a - vector to calculate length of\n * @returns length of a\n */\n // @ts-ignore: Length conflicts with Function.length\n static length(a) { return 0; }\n /**\n * Alias for {@link Vec2.magnitude}\n * @category Static\n * @deprecated Use {@link Vec2.mag}\n */\n static len(a) { return 0; }\n /**\n * Calculates the squared length of a {@link Vec2}\n * @category Static\n *\n * @param a - Vector to calculate squared length of\n * @returns Squared length of a\n */\n static squaredLength(a) {\n const x = a[0];\n const y = a[1];\n return x * x + y * y;\n }\n /**\n * Alias for {@link Vec2.squaredLength}\n */\n static sqrLen(a, b) { return 0; }\n /**\n * Negates the components of a {@link Vec2}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to negate\n * @returns `out`\n */\n static negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n }\n /**\n * Returns the inverse of the components of a {@link Vec2}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to invert\n * @returns `out`\n */\n static inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n }\n /**\n * Returns the absolute value of the components of a {@link Vec2}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to compute the absolute values of\n * @returns `out`\n */\n static abs(out, a) {\n out[0] = Math.abs(a[0]);\n out[1] = Math.abs(a[1]);\n return out;\n }\n /**\n * Normalize a {@link Vec2}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to normalize\n * @returns `out`\n */\n static normalize(out, a) {\n const x = a[0];\n const y = a[1];\n let len = x * x + y * y;\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n return out;\n }\n /**\n * Calculates the dot product of two {@link Vec2}s\n * @category Static\n *\n * @param a - The first operand\n * @param b - The second operand\n * @returns Dot product of `a` and `b`\n */\n static dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n }\n /**\n * Computes the cross product of two {@link Vec2}s\n * Note that the cross product must by definition produce a 3D vector.\n * For this reason there is also not instance equivalent for this function.\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static cross(out, a, b) {\n const z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n }\n /**\n * Performs a linear interpolation between two {@link Vec2}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @param t - Interpolation amount, in the range [0-1], between the two inputs\n * @returns `out`\n */\n static lerp(out, a, b, t) {\n const ax = a[0];\n const ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n }\n /**\n * Transforms the {@link Vec2} with a {@link Mat2}\n *\n * @param out - The receiving vector\n * @param a - The vector to transform\n * @param m - Matrix to transform with\n * @returns `out`\n */\n static transformMat2(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n }\n /**\n * Transforms the {@link Vec2} with a {@link Mat2d}\n *\n * @param out - The receiving vector\n * @param a - The vector to transform\n * @param m - Matrix to transform with\n * @returns `out`\n */\n static transformMat2d(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n }\n /**\n * Transforms the {@link Vec2} with a {@link Mat3}\n * 3rd vector component is implicitly '1'\n *\n * @param out - The receiving vector\n * @param a - The vector to transform\n * @param m - Matrix to transform with\n * @returns `out`\n */\n static transformMat3(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n }\n /**\n * Transforms the {@link Vec2} with a {@link Mat4}\n * 3rd vector component is implicitly '0'\n * 4th vector component is implicitly '1'\n *\n * @param out - The receiving vector\n * @param a - The vector to transform\n * @param m - Matrix to transform with\n * @returns `out`\n */\n static transformMat4(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n }\n /**\n * Rotate a 2D vector\n * @category Static\n *\n * @param out - The receiving {@link Vec2}\n * @param a - The {@link Vec2} point to rotate\n * @param b - The origin of the rotation\n * @param rad - The angle of rotation in radians\n * @returns `out`\n */\n static rotate(out, a, b, rad) {\n //Translate point to the origin\n const p0 = a[0] - b[0];\n const p1 = a[1] - b[1];\n const sinC = Math.sin(rad);\n const cosC = Math.cos(rad);\n //perform rotation and translate to correct position\n out[0] = p0 * cosC - p1 * sinC + b[0];\n out[1] = p0 * sinC + p1 * cosC + b[1];\n return out;\n }\n /**\n * Get the angle between two 2D vectors\n * @category Static\n *\n * @param a - The first operand\n * @param b - The second operand\n * @returns The angle in radians\n */\n static angle(a, b) {\n const x1 = a[0];\n const y1 = a[1];\n const x2 = b[0];\n const y2 = b[1];\n // mag is the product of the magnitudes of a and b\n const mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x2 * x2 + y2 * y2);\n // mag &&.. short circuits if mag == 0\n const cosine = mag && (x1 * x2 + y1 * y2) / mag;\n // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n }\n /**\n * Set the components of a {@link Vec2} to zero\n * @category Static\n *\n * @param out - The receiving vector\n * @returns `out`\n */\n static zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n return out;\n }\n /**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n * @category Static\n *\n * @param a - The first vector.\n * @param b - The second vector.\n * @returns `true` if the vectors components are ===, `false` otherwise.\n */\n static exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n }\n /**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n * @category Static\n *\n * @param a - The first vector.\n * @param b - The second vector.\n * @returns `true` if the vectors are approximately equal, `false` otherwise.\n */\n static equals(a, b) {\n const a0 = a[0];\n const a1 = a[1];\n const b0 = b[0];\n const b1 = b[1];\n return (Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)));\n }\n /**\n * Returns a string representation of a vector\n * @category Static\n *\n * @param a - Vector to represent as a string\n * @returns String representation of the vector\n */\n static str(a) {\n return `Vec2(${a.join(', ')})`;\n }\n}\nexport { Vec2 };\n// Instance method alias assignments\nVec2.prototype.sub = Vec2.prototype.subtract;\nVec2.prototype.mul = Vec2.prototype.multiply;\nVec2.prototype.div = Vec2.prototype.divide;\nVec2.prototype.dist = Vec2.prototype.distance;\nVec2.prototype.sqrDist = Vec2.prototype.squaredDistance;\n// Static method alias assignments\nVec2.sub = Vec2.subtract;\nVec2.mul = Vec2.multiply;\nVec2.div = Vec2.divide;\nVec2.dist = Vec2.distance;\nVec2.sqrDist = Vec2.squaredDistance;\nVec2.sqrLen = Vec2.squaredLength;\nVec2.mag = Vec2.magnitude;\nVec2.length = Vec2.magnitude;\nVec2.len = Vec2.magnitude;\n/**\n * Vec2 alias for backwards compatibility\n */\nexport const vec2 = Vec2;\n//# sourceMappingURL=vec2.js.map","export function blurImage(\n\timageData: ImageData,\n\tradius: number,\n\tquality: number,\n) {\n\tconst pixels = imageData.data;\n\tconst width = imageData.width;\n\tconst height = imageData.height;\n\n\tlet rsum: number;\n\tlet gsum: number;\n\tlet bsum: number;\n\tlet asum: number;\n\tlet x: number;\n\tlet y: number;\n\tlet i: number;\n\tlet p: number;\n\tlet p1: number;\n\tlet p2: number;\n\tlet yp: number;\n\tlet yi: number;\n\tlet yw: number;\n\tconst wm = width - 1;\n\tconst hm = height - 1;\n\tconst rad1x = radius + 1;\n\tconst divx = radius + rad1x;\n\tconst rad1y = radius + 1;\n\tconst divy = radius + rad1y;\n\tconst div2 = 1 / (divx * divy);\n\n\tconst r: number[] = [];\n\tconst g: number[] = [];\n\tconst b: number[] = [];\n\tconst a: number[] = [];\n\n\tconst vmin: number[] = [];\n\tconst vmax: number[] = [];\n\n\twhile (quality-- > 0) {\n\t\tyw = yi = 0;\n\n\t\tfor (y = 0; y < height; y++) {\n\t\t\trsum = pixels[yw] * rad1x;\n\t\t\tgsum = pixels[yw + 1] * rad1x;\n\t\t\tbsum = pixels[yw + 2] * rad1x;\n\t\t\tasum = pixels[yw + 3] * rad1x;\n\n\t\t\tfor (i = 1; i <= radius; i++) {\n\t\t\t\tp = yw + ((i > wm ? wm : i) << 2);\n\t\t\t\trsum += pixels[p++];\n\t\t\t\tgsum += pixels[p++];\n\t\t\t\tbsum += pixels[p++];\n\t\t\t\tasum += pixels[p];\n\t\t\t}\n\n\t\t\tfor (x = 0; x < width; x++) {\n\t\t\t\tr[yi] = rsum;\n\t\t\t\tg[yi] = gsum;\n\t\t\t\tb[yi] = bsum;\n\t\t\t\ta[yi] = asum;\n\n\t\t\t\tif (y === 0) {\n\t\t\t\t\tvmin[x] = Math.min(x + rad1x, wm) << 2;\n\t\t\t\t\tvmax[x] = Math.max(x - radius, 0) << 2;\n\t\t\t\t}\n\n\t\t\t\tp1 = yw + vmin[x];\n\t\t\t\tp2 = yw + vmax[x];\n\n\t\t\t\trsum += pixels[p1++] - pixels[p2++];\n\t\t\t\tgsum += pixels[p1++] - pixels[p2++];\n\t\t\t\tbsum += pixels[p1++] - pixels[p2++];\n\t\t\t\tasum += pixels[p1] - pixels[p2];\n\n\t\t\t\tyi++;\n\t\t\t}\n\t\t\tyw += width << 2;\n\t\t}\n\n\t\tfor (x = 0; x < width; x++) {\n\t\t\typ = x;\n\t\t\trsum = r[yp] * rad1y;\n\t\t\tgsum = g[yp] * rad1y;\n\t\t\tbsum = b[yp] * rad1y;\n\t\t\tasum = a[yp] * rad1y;\n\n\t\t\tfor (i = 1; i <= radius; i++) {\n\t\t\t\typ += i > hm ? 0 : width;\n\t\t\t\trsum += r[yp];\n\t\t\t\tgsum += g[yp];\n\t\t\t\tbsum += b[yp];\n\t\t\t\tasum += a[yp];\n\t\t\t}\n\n\t\t\tyi = x << 2;\n\t\t\tfor (y = 0; y < height; y++) {\n\t\t\t\tpixels[yi] = (rsum * div2 + 0.5) | 0;\n\t\t\t\tpixels[yi + 1] = (gsum * div2 + 0.5) | 0;\n\t\t\t\tpixels[yi + 2] = (bsum * div2 + 0.5) | 0;\n\t\t\t\tpixels[yi + 3] = (asum * div2 + 0.5) | 0;\n\n\t\t\t\tif (x === 0) {\n\t\t\t\t\tvmin[y] = Math.min(y + rad1y, hm) * width;\n\t\t\t\t\tvmax[y] = Math.max(y - radius, 0) * width;\n\t\t\t\t}\n\n\t\t\t\tp1 = x + vmin[y];\n\t\t\t\tp2 = x + vmax[y];\n\n\t\t\t\trsum += r[p1] - r[p2];\n\t\t\t\tgsum += g[p1] - g[p2];\n\t\t\t\tbsum += b[p1] - b[p2];\n\t\t\t\tasum += a[p1] - a[p2];\n\n\t\t\t\tyi += width << 2;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function saturateImage(imageData: ImageData, saturation: number) {\n\tconst pixels = imageData.data;\n\n\tfor (let i = 0; i < pixels.length; i += 4) {\n\t\tconst r = pixels[i];\n\t\tconst g = pixels[i + 1];\n\t\tconst b = pixels[i + 2];\n\t\tconst a = pixels[i + 3];\n\t\tconst gray = r * 0.3 + g * 0.59 + b * 0.11;\n\t\tpixels[i] = gray * (1 - saturation) + r * saturation;\n\t\tpixels[i + 1] = gray * (1 - saturation) + g * saturation;\n\t\tpixels[i + 2] = gray * (1 - saturation) + b * saturation;\n\t\tpixels[i + 3] = a;\n\t}\n}\n\nexport function brightnessImage(imageData: ImageData, brightness: number) {\n\tconst pixels = imageData.data;\n\n\tfor (let i = 0; i < pixels.length; i += 4) {\n\t\tconst r = pixels[i];\n\t\tconst g = pixels[i + 1];\n\t\tconst b = pixels[i + 2];\n\t\tconst a = pixels[i + 3];\n\t\tpixels[i] = r * brightness;\n\t\tpixels[i + 1] = g * brightness;\n\t\tpixels[i + 2] = b * brightness;\n\t\tpixels[i + 3] = a;\n\t}\n}\n\nexport function contrastImage(imageData: ImageData, contrast: number) {\n\tconst pixels = imageData.data;\n\n\tfor (let i = 0; i < pixels.length; i += 4) {\n\t\tconst r = pixels[i];\n\t\tconst g = pixels[i + 1];\n\t\tconst b = pixels[i + 2];\n\t\tconst a = pixels[i + 3];\n\t\tpixels[i] = (r - 128) * contrast + 128;\n\t\tpixels[i + 1] = (g - 128) * contrast + 128;\n\t\tpixels[i + 2] = (b - 128) * contrast + 128;\n\t\tpixels[i + 3] = a;\n\t}\n}\n","export default \"precision highp float;\\n\\nvarying vec2 v_uv;\\nuniform sampler2D u_texture;\\nuniform float u_alpha;\\n\\n/* Gradient noise from Jorge Jimenez's presentation: */\\n/* http://www.iryoku.com/next-generation-post-processing-in-call-of-duty-advanced-warfare */\\nfloat gradientNoise(in vec2 uv) {\\n return fract(52.9829189 * fract(dot(uv, vec2(0.06711056, 0.00583715))));\\n}\\n\\nvec2 rot(vec2 v, float a) {\\n float s = sin(a);\\n float c = cos(a);\\n mat2 m = mat2(c, s, -s, c);\\n return m * v;\\n}\\n\\nvoid main() {\\n float dither = (1.0 / 255.0) * gradientNoise(gl_FragCoord.xy) - (0.5 / 255.0);\\n\\n vec4 result = texture2D(u_texture, v_uv);\\n gl_FragColor = result * vec4(1.0, 1.0, 1.0, u_alpha) + vec4(dither);\\n}\\n\"","export default \"precision highp float;\\n\\nattribute vec2 a_pos;\\nattribute vec2 a_uv;\\nvarying vec2 v_uv;\\n\\nvoid main() {\\n v_uv = a_uv;\\n gl_Position = vec4(a_pos, 0.0, 1.0);\\n}\\n\"","interface ControlPointConf {\n\tcx: number;\n\tcy: number;\n\tx: number;\n\ty: number;\n\tur: number;\n\tvr: number;\n\tup: number;\n\tvp: number;\n}\n\ninterface ControlPointPreset {\n\twidth: number;\n\theight: number;\n\tconf: ControlPointConf[];\n}\n\nconst p = (\n\tcx: number,\n\tcy: number,\n\tx: number,\n\ty: number,\n\tur = 0,\n\tvr = 0,\n\tup = 1,\n\tvp = 1,\n) => Object.freeze({ cx, cy, x, y, ur, vr, up, vp }) as ControlPointConf;\nconst preset = (width: number, height: number, conf: ControlPointConf[]) =>\n\tObject.freeze({ width, height, conf }) as ControlPointPreset;\n\nexport const CONTROL_POINT_PRESETS = [\n\t// TODO: 竖屏推荐\n\tpreset(5, 5, [\n\t\tp(0, 0, -1, -1, 0, 0, 1, 1),\n\t\tp(1, 0, -0.5, -1, 0, 0, 1, 1),\n\t\tp(2, 0, 0, -1, 0, 0, 1, 1),\n\t\tp(3, 0, 0.5, -1, 0, 0, 1, 1),\n\t\tp(4, 0, 1, -1, 0, 0, 1, 1),\n\t\tp(0, 1, -1, -0.5, 0, 0, 1, 1),\n\t\tp(1, 1, -0.5, -0.5, 0, 0, 1, 1),\n\t\tp(2, 1, -0.0052029684413368305, -0.6131420587090777, 0, 0, 1, 1),\n\t\tp(3, 1, 0.5884227308309977, -0.3990805107556692, 0, 0, 1, 1),\n\t\tp(4, 1, 1, -0.5, 0, 0, 1, 1),\n\t\tp(0, 2, -1, 0, 0, 0, 1, 1),\n\t\tp(1, 2, -0.4210024670505933, -0.11895058380429502, 0, 0, 1, 1),\n\t\tp(2, 2, -0.1019613423315412, -0.023812118047224606, 0, -47, 0.629, 0.849),\n\t\tp(3, 2, 0.40275125660925437, -0.06345314544600389, 0, 0, 1, 1),\n\t\tp(4, 2, 1, 0, 0, 0, 1, 1),\n\t\tp(0, 3, -1, 0.5, 0, 0, 1, 1),\n\t\tp(1, 3, 0.06801958477287173, 0.5205913248960121, -31, -45, 1, 1),\n\t\tp(2, 3, 0.21446469120128908, 0.29331610114301043, 6, -56, 0.566, 1.321),\n\t\tp(3, 3, 0.5, 0.5, 0, 0, 1, 1),\n\t\tp(4, 3, 1, 0.5, 0, 0, 1, 1),\n\t\tp(0, 4, -1, 1, 0, 0, 1, 1),\n\t\tp(1, 4, -0.31378372841550195, 1, 0, 0, 1, 1),\n\t\tp(2, 4, 0.26153633255328046, 1, 0, 0, 1, 1),\n\t\tp(3, 4, 0.5, 1, 0, 0, 1, 1),\n\t\tp(4, 4, 1, 1, 0, 0, 1, 1),\n\t]),\n\tpreset(6, 6, [\n\t\tp(0, 0, -1, -1, 0, 0, 1, 1),\n\t\tp(1, 0, -0.6, -1, 0, 0, 1, 1),\n\t\tp(2, 0, -0.19999999999999996, -1, 0, 0, 1, 1),\n\t\tp(3, 0, 0.19999999999999996, -1, 0, 0, 1, 1),\n\t\tp(4, 0, 0.6000000000000001, -1, 0, 0, 1, 1),\n\t\tp(5, 0, 1, -1, 0, 0, 1, 1),\n\t\tp(0, 1, -1, -0.6, 0, 0, 1, 1),\n\t\tp(1, 1, -0.6, -0.6, 0, 0, 1, 1),\n\t\tp(2, 1, -0.10980661589020635, -0.4108069757237176, 0, 0, 1, 1),\n\t\tp(3, 1, 0.37398525356081525, -0.437252891735175, 0, 0, 1, 1),\n\t\tp(4, 1, 0.6000000000000001, -0.6, 0, 0, 1, 1),\n\t\tp(5, 1, 1, -0.6, 0, 0, 1, 1),\n\t\tp(0, 2, -1, -0.19999999999999996, 0, 0, 1, 1),\n\t\tp(1, 2, -0.5125306585683541, -0.1780829148228924, 0, 0, 1, 1),\n\t\tp(2, 2, -0.19999999999999996, -0.19999999999999996, 0, 0, 1, 1),\n\t\tp(3, 2, 0.19999999999999996, -0.19999999999999996, 0, 0, 1, 1),\n\t\tp(4, 2, 0.6485698281140977, -0.1939504644297667, 0, 0, 1, 1),\n\t\tp(5, 2, 1, -0.19999999999999996, 0, 0, 1, 1),\n\t\tp(0, 3, -1, 0.19999999999999996, 0, 0, 1, 1),\n\t\tp(1, 3, -0.7321983182109801, 0.23447337495584342, 0, 0, 1, 1),\n\t\tp(2, 3, -0.46545901721636285, 0.4619082526543773, 0, 0, 1, 1),\n\t\tp(3, 3, -0.12549716300753677, 0.4275285618394826, -65, -36, 1.195, 2.296),\n\t\tp(4, 3, 0.3582947064434847, -0.04320874316445944, 0, 0, 1, 1),\n\t\tp(5, 3, 1, 0.19999999999999996, 0, 0, 1, 1),\n\t\tp(0, 4, -1, 0.6000000000000001, 0, 0, 1, 1),\n\t\tp(1, 4, -0.742658682955867, 0.6549634395380164, 0, 0, 1, 1),\n\t\tp(2, 4, -0.3843911904434889, 0.7475241455781174, 0, 0, 0.535, 0.66),\n\t\tp(3, 4, 0.07847994951775883, 0.7263674127689514, 0, 0, 1, 1),\n\t\tp(4, 4, 0.6000000000000001, 0.6000000000000001, 0, 0, 1, 1),\n\t\tp(5, 4, 1, 0.6000000000000001, 0, 0, 1, 1),\n\t\tp(0, 5, -1, 1, 0, 0, 1, 1),\n\t\tp(1, 5, -0.6, 1, 0, 0, 1, 1),\n\t\tp(2, 5, -0.19999999999999996, 1, 0, 0, 1, 1),\n\t\tp(3, 5, 0.19999999999999996, 1, 0, 0, 1, 1),\n\t\tp(4, 5, 0.6000000000000001, 1, 0, 0, 1, 1),\n\t\tp(5, 5, 1, 1, 0, 0, 1, 1),\n\t]),\n\t// TODO: 横屏推荐\n\tpreset(4, 4, [\n\t\tp(0, 0, -1, -1, 0, 0, 1, 1),\n\t\tp(1, 0, -0.33333333333333337, -1, 0, 0, 1, 1),\n\t\tp(2, 0, 0.33333333333333326, -1, 0, 0, 1, 1),\n\t\tp(3, 0, 1, -1, 0, 0, 1, 1),\n\t\tp(0, 1, -1, -0.04495399932657351, 0, 0, 1, 1),\n\t\tp(1, 1, -0.24056117520129328, -0.22465999020104, 0, 0, 1, 1),\n\t\tp(2, 1, 0.334758885767489, -0.00531297192779423, 0, 0, 1, 1),\n\t\tp(3, 1, 0.9989920470678106, -0.3382976020775408, 8, 0, 0.566, 1.792),\n\t\tp(0, 2, -1, 0.33333333333333326, 0, 0, 1, 1),\n\t\tp(1, 2, -0.3425497314639411, -0.000027501607956947893, 0, 0, 1, 1),\n\t\tp(2, 2, 0.3321437945812673, 0.1981776353859399, 0, 0, 1, 1),\n\t\tp(3, 2, 1, 0.0766118180296832, 0, 0, 1, 1),\n\t\tp(0, 3, -1, 1, 0, 0, 1, 1),\n\t\tp(1, 3, -0.33333333333333337, 1, 0, 0, 1, 1),\n\t\tp(2, 3, 0.33333333333333326, 1, 0, 0, 1, 1),\n\t\tp(3, 3, 1, 1, 0, 0, 1, 1),\n\t]),\n\tpreset(4, 4, [\n\t\tp(0, 0, -1, -1, 0, 0, 1, 2.075),\n\t\tp(1, 0, -0.33333333333333337, -1, 0, 0, 1, 1),\n\t\tp(2, 0, 0.33333333333333326, -1, 0, 0, 1, 1),\n\t\tp(3, 0, 1, -1, 0, 0, 1, 1),\n\t\tp(0, 1, -1, -0.4545779491139603, 0, 0, 1, 1),\n\t\tp(1, 1, -0.33333333333333337, -0.33333333333333337, 0, 0, 1, 1),\n\t\tp(2, 1, 0.0889403142626457, -0.6025711180694033, -32, 45, 1, 1),\n\t\tp(3, 1, 1, -0.33333333333333337, 0, 0, 1, 1),\n\t\tp(0, 2, -1, -0.07402408608567845, 1, 0, 1, 0.094),\n\t\tp(1, 2, -0.2719422694359541, 0.09775369930903222, 25, -18, 1.321, 0),\n\t\tp(2, 2, 0.19877414408395877, 0.4307383294587789, 48, -40, 0.755, 0.975),\n\t\tp(3, 2, 1, 0.33333333333333326, -37, 0, 1, 1),\n\t\tp(0, 3, -1, 1, 0, 0, 1, 1),\n\t\tp(1, 3, -0.33333333333333337, 1, 0, 0, 1, 1),\n\t\tp(2, 3, 0.5125850864305672, 1, -20, -18, 0, 1.604),\n\t\tp(3, 3, 1, 1, 0, 0, 1, 1),\n\t]),\n\tpreset(4, 4, [\n\t\tp(0, 0, -1, -1, 0, 0, 1, 1),\n\t\tp(1, 0, -0.04704442742088466, -1, 0, 14, 2.013, 3.522),\n\t\tp(2, 0, 0.5910378220172194, -1, 0, 0, 1, 1),\n\t\tp(3, 0, 1, -1, 0, 0, 1, 1),\n\t\tp(0, 1, -1, -0.33333333333333337, 0, 0, 1, 1),\n\t\tp(1, 1, -0.13072734537998032, -0.20616084408160962, 0, 0, 1, 1),\n\t\tp(2, 1, 0.5178152688030109, -0.45722068427387885, 0, 0, 1, 1),\n\t\tp(3, 1, 1, -0.5021471819924956, 0, 0, 1, 1),\n\t\tp(0, 2, -1, 0.33333333333333326, 0, 0, 1, 1),\n\t\tp(1, 2, -0.4210024670505933, 0.2563178089041497, 0, 0, 1, 1),\n\t\tp(2, 2, 0.11247613493864139, -0.050239469646410795, 4, -2, 0.849, 1.132),\n\t\tp(3, 2, 1, -0.08195229156543427, 0, 0, 1, 1),\n\t\tp(0, 3, -1, 1, 0, 0, 1, 1),\n\t\tp(1, 3, -0.33333333333333337, 1, 0, 0, 1, 1),\n\t\tp(2, 3, 0.33333333333333326, 1, 0, 0, 1, 1),\n\t\tp(3, 3, 1, 1, 0, 0, 1, 1),\n\t]),\n\tpreset(5, 5, [\n\t\tp(0, 0, -1, -1, 0, 0, 1, 1),\n\t\tp(1, 0, -0.632824853134554, -1, 0, -31, 1.101, 1.038),\n\t\tp(2, 0, -0.1019613423315412, -1, 0, 0, 1, 1),\n\t\tp(3, 0, 0.7348678372594151, -1, 0, 39, 0.66, 2.421),\n\t\tp(4, 0, 1, -1, 0, 0, 1, 1),\n\t\tp(0, 1, -1, -0.5, 0, 0, 1, 1),\n\t\tp(1, 1, -0.7165077710936496, -0.5100753874722515, 0, 0, 0.629, 1),\n\t\tp(2, 1, -0.5491419351754585, -0.4149369217151808, 16, 25, 1, 1.478),\n\t\tp(3, 1, 0.5021247216856803, -0.5523591500309495, 0, 44, 0.629, 1.509),\n\t\tp(4, 1, 1, -0.5, 0, 0, 1, 1),\n\t\tp(0, 2, -1, 0, 0, 0, 1, 1),\n\t\tp(1, 2, -0.6851266768589888, -0.013241177407550042, 0, 0, 1, 1),\n\t\tp(2, 2, -0.36347046095371505, -0.09252323220510883, -23, -31, 1, 1),\n\t\tp(3, 2, 0.08371013189020227, -0.11630784864437649, 0, 0, 0.409, 1),\n\t\tp(4, 2, 1, -0.002670236767875478, 0, 0, 1, 1),\n\t\tp(0, 3, -1, 0.5, 0, 0, 1, 1),\n\t\tp(1, 3, -0.3294742755328324, 0.6844409048109668, -3, 19, 1.415, 1),\n\t\tp(2, 3, 0.028793216979545733, 0.36202721530089466, 6, 0, 1.541, 0.472),\n\t\tp(3, 3, 0.5230454511754543, 0.2801024253434172, 10, -42, 0, 1.352),\n\t\tp(4, 3, 1, 0.5, -3, 0, 1.981, 2.17),\n\t\tp(0, 4, -1, 1, 0, 0, 1, 1),\n\t\tp(1, 4, -0.48114956433369327, 1, 0, 53, 0, 1.509),\n\t\tp(2, 4, 0, 1, 0, 0, 1, 1),\n\t\tp(3, 4, 0.6093434603207717, 1, 0, 0, 0.629, 1),\n\t\tp(4, 4, 1, 1, 0, 0, 1, 1),\n\t]),\n] as const;\n","export default \"precision highp float;\\n\\nvarying vec3 v_color;\\nvarying vec2 v_uv;\\nuniform sampler2D u_texture;\\nuniform float u_time;\\nuniform float u_volume;\\n\\nvec2 rot(vec2 v, float a) {\\n float s = sin(a);\\n float c = cos(a);\\n mat2 m = mat2(c, s, -s, c);\\n return m * v;\\n}\\n\\nvoid main() {\\n vec4 result = texture2D(u_texture, rot(v_uv * max(1.0, 1.0 + u_volume), u_time + u_volume));\\n result *= vec4(v_color, 1.0);\\n result *= vec4(1.0 - u_volume * 0.1);\\n gl_FragColor = result;\\n}\\n\"","export default \"precision highp float;\\n\\nattribute vec2 a_pos;\\nattribute vec3 a_color;\\nattribute vec2 a_uv;\\nvarying vec3 v_color;\\nvarying vec2 v_uv;\\n\\nuniform float u_aspect;\\n\\nvoid main() {\\n v_color = a_color;\\n v_uv = a_uv;\\n vec2 pos = a_pos;\\n if (u_aspect > 1.0) {\\n pos.y *= u_aspect;\\n } else {\\n pos.x /= u_aspect;\\n }\\n gl_Position = vec4(pos, 0.0, 1.0);\\n}\\n\"","/**\n * @fileoverview\n * 基于 Mesh Gradient 渐变渲染的渲染器\n * 此渲染应该是 Apple Music 使用的背景渲染方式了\n * 参考内容 https://movingparts.io/gradient-meshes\n */\n\nimport { Mat4, Vec2, Vec3, Vec4 } from \"gl-matrix\";\nimport type { Disposable } from \"../../interfaces\";\nimport {\n\tloadResourceFromElement,\n\tloadResourceFromUrl,\n} from \"../../utils/resource\";\nimport { BaseRenderer } from \"../base\";\nimport {\n\tblurImage,\n\tbrightnessImage,\n\tcontrastImage,\n\tsaturateImage,\n} from \"../img\";\nimport blendFragShader from \"./blend.frag.glsl?raw\";\nimport blendVertShader from \"./blend.vert.glsl?raw\";\nimport { CONTROL_POINT_PRESETS } from \"./cp-presets\";\nimport meshFragShader from \"./mesh.frag.glsl?raw\";\nimport meshVertShader from \"./mesh.vert.glsl?raw\";\n\ntype RenderingContext = WebGLRenderingContext;\n\nclass GLProgram implements Disposable {\n\tprivate gl: RenderingContext;\n\tprogram: WebGLProgram;\n\tprivate vertexShader: WebGLShader;\n\tprivate fragmentShader: WebGLShader;\n\treadonly attrs: { [name: string]: number };\n\tconstructor(\n\t\tgl: RenderingContext,\n\t\tvertexShaderSource: string,\n\t\tfragmentShaderSource: string,\n\t\tprivate readonly label = \"unknown\",\n\t) {\n\t\tthis.gl = gl;\n\t\tthis.vertexShader = this.createShader(gl.VERTEX_SHADER, vertexShaderSource);\n\t\tthis.fragmentShader = this.createShader(\n\t\t\tgl.FRAGMENT_SHADER,\n\t\t\tfragmentShaderSource,\n\t\t);\n\t\tthis.program = this.createProgram();\n\n\t\tconst num = gl.getProgramParameter(this.program, gl.ACTIVE_ATTRIBUTES);\n\t\tconst attrs: { [name: string]: number } = {};\n\t\tfor (let i = 0; i < num; i++) {\n\t\t\tconst info = gl.getActiveAttrib(this.program, i);\n\t\t\tif (!info) continue;\n\t\t\tconst location = gl.getAttribLocation(this.program, info.name);\n\t\t\tif (location === -1) continue;\n\t\t\tattrs[info.name] = location;\n\t\t}\n\t\tthis.attrs = attrs;\n\t}\n\tprivate createShader(type: number, source: string) {\n\t\tconst gl = this.gl;\n\t\tconst shader = gl.createShader(type);\n\t\tif (!shader) throw new Error(\"Failed to create shader\");\n\t\tgl.shaderSource(shader, source);\n\t\tgl.compileShader(shader);\n\t\tif (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to compile shader for type ${type} \"${\n\t\t\t\t\tthis.label\n\t\t\t\t}\": ${gl.getShaderInfoLog(shader)}`,\n\t\t\t);\n\t\t}\n\t\treturn shader;\n\t}\n\tprivate createProgram() {\n\t\tconst gl = this.gl;\n\t\tconst program = gl.createProgram();\n\t\tif (!program) throw new Error(\"Failed to create program\");\n\t\tgl.attachShader(program, this.vertexShader);\n\t\tgl.attachShader(program, this.fragmentShader);\n\t\tgl.linkProgram(program);\n\t\tgl.validateProgram(program);\n\t\tif (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n\t\t\tconst errLog = gl.getProgramInfoLog(program);\n\t\t\tgl.deleteProgram(program);\n\t\t\tthrow new Error(`Failed to link program \"${this.label}\": ${errLog}`);\n\t\t}\n\t\treturn program;\n\t}\n\tuse() {\n\t\tconst gl = this.gl;\n\t\tgl.useProgram(this.program);\n\t}\n\tprivate notFoundUniforms: Set<string> = new Set();\n\tprivate warnUniformNotFound(name: string) {\n\t\tif (this.notFoundUniforms.has(name)) return;\n\t\tthis.notFoundUniforms.add(name);\n\t\tconsole.warn(\n\t\t\t`Failed to get uniform location for program \"${this.label}\": ${name}`,\n\t\t);\n\t}\n\tsetUniform1f(name: string, value: number) {\n\t\tconst gl = this.gl;\n\t\tconst location = gl.getUniformLocation(this.program, name);\n\t\tif (!location) this.warnUniformNotFound(name);\n\t\telse gl.uniform1f(location, value);\n\t}\n\tsetUniform2f(name: string, value1: number, value2: number) {\n\t\tconst gl = this.gl;\n\t\tconst location = gl.getUniformLocation(this.program, name);\n\t\tif (!location) this.warnUniformNotFound(name);\n\t\telse gl.uniform2f(location, value1, value2);\n\t}\n\tsetUniform1i(name: string, value: number) {\n\t\tconst gl = this.gl;\n\t\tconst location = gl.getUniformLocation(this.program, name);\n\t\tif (!location) this.warnUniformNotFound(name);\n\t\telse gl.uniform1i(location, value);\n\t}\n\tdispose() {\n\t\tconst gl = this.gl;\n\t\tgl.deleteShader(this.vertexShader);\n\t\tgl.deleteShader(this.fragmentShader);\n\t\tgl.deleteProgram(this.program);\n\t}\n}\n\nclass Mesh implements Disposable {\n\tprotected vertexWidth = 0;\n\tprotected vertexHeight = 0;\n\tprivate vertexBuffer: WebGLBuffer;\n\tprivate indexBuffer: WebGLBuffer;\n\tprivate vertexData: Float32Array;\n\tprivate indexData: Uint16Array;\n\tprivate vertexIndexLength = 0;\n\t// 调试用途,开启线框模式\n\tprivate wireFrame = false;\n\tconstructor(\n\t\tprivate readonly gl: RenderingContext,\n\t\tprivate readonly attrPos: number | undefined,\n\t\tprivate readonly attrColor: number | undefined,\n\t\tprivate readonly attrUV: number | undefined,\n\t) {\n\t\tconst vertexBuf = gl.createBuffer();\n\t\tif (!vertexBuf) throw new Error(\"Failed to create vertex buffer\");\n\t\tthis.vertexBuffer = vertexBuf;\n\t\tconst indexBuf = gl.createBuffer();\n\t\tif (!indexBuf) throw new Error(\"Failed to create index buffer\");\n\t\tthis.indexBuffer = indexBuf;\n\n\t\tthis.bind();\n\n\t\tthis.vertexData = new Float32Array(0);\n\t\tthis.indexData = new Uint16Array(0);\n\n\t\tthis.resize(2, 2);\n\t\tthis.update();\n\t}\n\n\tsetWireFrame(enable: boolean) {\n\t\tthis.wireFrame = enable;\n\t\tthis.resize(this.vertexWidth, this.vertexHeight);\n\t}\n\n\tsetVertexPos(vx: number, vy: number, x: number, y: number): void {\n\t\tconst idx = (vx + vy * this.vertexWidth) * 7;\n\t\tif (idx >= this.vertexData.length - 1) {\n\t\t\tconsole.warn(\"Vertex position out of range\", idx, this.vertexData.length);\n\t\t\treturn;\n\t\t}\n\t\tthis.vertexData[idx] = x;\n\t\tthis.vertexData[idx + 1] = y;\n\t}\n\n\tsetVertexColor(\n\t\tvx: number,\n\t\tvy: number,\n\t\tr: number,\n\t\tg: number,\n\t\tb: number,\n\t): void {\n\t\tconst idx = (vx + vy * this.vertexWidth) * 7 + 2;\n\t\tif (idx >= this.vertexData.length - 1) {\n\t\t\tconsole.warn(\"Vertex position out of range\", idx, this.vertexData.length);\n\t\t\treturn;\n\t\t}\n\t\tthis.vertexData[idx] = r;\n\t\tthis.vertexData[idx + 1] = g;\n\t\tthis.vertexData[idx + 2] = b;\n\t}\n\n\tsetVertexUV(vx: number, vy: number, x: number, y: number): void {\n\t\tconst idx = (vx + vy * this.vertexWidth) * 7 + 2 + 3;\n\t\tif (idx >= this.vertexData.length - 1) {\n\t\t\tconsole.warn(\"Vertex position out of range\", idx, this.vertexData.length);\n\t\t\treturn;\n\t\t}\n\t\tthis.vertexData[idx] = x;\n\t\tthis.vertexData[idx + 1] = y;\n\t}\n\n\tgetVertexIndexLength(): number {\n\t\treturn this.vertexIndexLength;\n\t}\n\n\tdraw() {\n\t\tconst gl = this.gl;\n\n\t\tif (this.wireFrame) {\n\t\t\tgl.drawElements(gl.LINES, this.vertexIndexLength, gl.UNSIGNED_SHORT, 0);\n\t\t} else {\n\t\t\tgl.drawElements(\n\t\t\t\tgl.TRIANGLES,\n\t\t\t\tthis.vertexIndexLength,\n\t\t\t\tgl.UNSIGNED_SHORT,\n\t\t\t\t0,\n\t\t\t);\n\t\t}\n\t}\n\n\tresize(vertexWidth: number, vertexHeight: number): void {\n\t\tthis.vertexWidth = vertexWidth;\n\t\tthis.vertexHeight = vertexHeight;\n\t\t// 2 个顶点坐标 + 3 个颜色值 + 2 个 UV 坐标\n\t\tthis.vertexIndexLength = vertexWidth * vertexHeight * 6;\n\t\tif (this.wireFrame) {\n\t\t\tthis.vertexIndexLength = vertexWidth * vertexHeight * 10;\n\t\t}\n\t\tconst vertexData = new Float32Array(\n\t\t\tvertexWidth * vertexHeight * (2 + 3 + 2),\n\t\t);\n\t\tconst indexData = new Uint16Array(this.vertexIndexLength);\n\t\tthis.vertexData = vertexData;\n\t\tthis.indexData = indexData;\n\t\tfor (let y = 0; y < vertexHeight; y++) {\n\t\t\tfor (let x = 0; x < vertexWidth; x++) {\n\t\t\t\tconst px = (x / (vertexWidth - 1)) * 2 - 1;\n\t\t\t\tconst py = (y / (vertexHeight - 1)) * 2 - 1;\n\t\t\t\tthis.setVertexPos(x, y, px || 0, py || 0);\n\t\t\t\tthis.setVertexColor(x, y, 1, 1, 1);\n\t\t\t\tthis.setVertexUV(x, y, x / (vertexWidth - 1), y / (vertexHeight - 1));\n\t\t\t}\n\t\t}\n\t\tfor (let y = 0; y < vertexHeight - 1; y++) {\n\t\t\tfor (let x = 0; x < vertexWidth - 1; x++) {\n\t\t\t\tif (this.wireFrame) {\n\t\t\t\t\tconst idx = (y * vertexWidth + x) * 10;\n\n\t\t\t\t\tindexData[idx] = y * vertexWidth + x;\n\t\t\t\t\tindexData[idx + 1] = y * vertexWidth + x + 1;\n\n\t\t\t\t\tindexData[idx + 2] = y * vertexWidth + x + 1;\n\t\t\t\t\tindexData[idx + 3] = (y + 1) * vertexWidth + x;\n\n\t\t\t\t\tindexData[idx + 4] = (y + 1) * vertexWidth + x;\n\t\t\t\t\tindexData[idx + 5] = (y + 1) * vertexWidth + x + 1;\n\n\t\t\t\t\tindexData[idx + 6] = (y + 1) * vertexWidth + x + 1;\n\t\t\t\t\tindexData[idx + 7] = y * vertexWidth + x + 1;\n\n\t\t\t\t\tindexData[idx + 8] = y * vertexWidth + x;\n\t\t\t\t\tindexData[idx + 9] = (y + 1) * vertexWidth + x;\n\t\t\t\t} else {\n\t\t\t\t\tconst idx = (y * vertexWidth + x) * 6;\n\t\t\t\t\tindexData[idx] = y * vertexWidth + x;\n\t\t\t\t\tindexData[idx + 1] = y * vertexWidth + x + 1;\n\t\t\t\t\tindexData[idx + 2] = (y + 1) * vertexWidth + x;\n\t\t\t\t\tindexData[idx + 3] = y * vertexWidth + x + 1;\n\t\t\t\t\tindexData[idx + 4] = (y + 1) * vertexWidth + x + 1;\n\t\t\t\t\tindexData[idx + 5] = (y + 1) * vertexWidth + x;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst gl = this.gl;\n\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);\n\t\tgl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indexData, gl.STATIC_DRAW);\n\t}\n\n\tbind() {\n\t\tconst gl = this.gl;\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);\n\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);\n\n\t\tif (this.attrPos !== undefined) {\n\t\t\tgl.vertexAttribPointer(this.attrPos, 2, gl.FLOAT, false, 4 * 7, 0);\n\t\t\tgl.enableVertexAttribArray(this.attrPos);\n\t\t}\n\t\tif (this.attrColor !== undefined) {\n\t\t\tgl.vertexAttribPointer(this.attrColor, 3, gl.FLOAT, false, 4 * 7, 4 * 2);\n\t\t\tgl.enableVertexAttribArray(this.attrColor);\n\t\t}\n\t\tif (this.attrUV !== undefined) {\n\t\t\tgl.vertexAttribPointer(this.attrUV, 2, gl.FLOAT, false, 4 * 7, 4 * 5);\n\t\t\tgl.enableVertexAttribArray(this.attrUV);\n\t\t}\n\t}\n\n\tupdate() {\n\t\tconst gl = this.gl;\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);\n\t\tgl.bufferData(gl.ARRAY_BUFFER, this.vertexData, gl.DYNAMIC_DRAW);\n\t}\n\n\tdispose(): void {\n\t\tthis.gl.deleteBuffer(this.vertexBuffer);\n\t\tthis.gl.deleteBuffer(this.indexBuffer);\n\t}\n}\n\nclass ControlPoint {\n\tcolor = Vec3.fromValues(1, 1, 1);\n\tlocation = Vec2.fromValues(0, 0);\n\tuTangent = Vec2.fromValues(0, 0);\n\tvTangent = Vec2.fromValues(0, 0);\n\tprivate _uRot = 0;\n\tprivate _vRot = 0;\n\tprivate _uScale = 1;\n\tprivate _vScale = 1;\n\n\tconstructor() {\n\t\tObject.seal(this);\n\t}\n\n\tget uRot() {\n\t\treturn this._uRot;\n\t}\n\n\tget vRot() {\n\t\treturn this._vRot;\n\t}\n\n\tset uRot(value: number) {\n\t\tthis._uRot = value;\n\t\tthis.updateUTangent();\n\t}\n\n\tset vRot(value: number) {\n\t\tthis._vRot = value;\n\t\tthis.updateVTangent();\n\t}\n\n\tget uScale() {\n\t\treturn this._uScale;\n\t}\n\n\tget vScale() {\n\t\treturn this._vScale;\n\t}\n\n\tset uScale(value: number) {\n\t\tthis._uScale = value;\n\t\tthis.updateUTangent();\n\t}\n\n\tset vScale(value: number) {\n\t\tthis._vScale = value;\n\t\tthis.updateVTangent();\n\t}\n\n\tprivate updateUTangent() {\n\t\tthis.uTangent[0] = Math.cos(this._uRot) * this._uScale;\n\t\tthis.uTangent[1] = Math.sin(this._uRot) * this._uScale;\n\t}\n\n\tprivate updateVTangent() {\n\t\tthis.vTangent[0] = -Math.sin(this._vRot) * this._vScale;\n\t\tthis.vTangent[1] = Math.cos(this._vRot) * this._vScale;\n\t}\n}\n\nconst H = Mat4.fromValues(2, -2, 1, 1, -3, 3, -2, -1, 0, 0, 1, 0, 1, 0, 0, 0);\nconst H_T = Mat4.clone(H).transpose();\n\nconst spUx = Vec4.create();\nconst spUy = Vec4.create();\nconst spV = Vec4.create();\n\nconst spxAcc = Mat4.create();\nconst spyAcc = Mat4.create();\nfunction surfacePoint(\n\tu: number,\n\tv: number,\n\tX: Mat4,\n\tY: Mat4,\n\toutput = Vec2.create(),\n): Vec2 {\n\tspUx[0] = u ** 3;\n\tspUx[1] = u ** 2;\n\tspUx[2] = u;\n\tspUx[3] = 1;\n\n\tspUy.copy(spUx);\n\n\tspV[0] = v ** 3;\n\tspV[1] = v ** 2;\n\tspV[2] = v;\n\tspV[3] = 1;\n\n\tspxAcc.copy(X).transpose();\n\tMat4.mul(spxAcc, spxAcc, H);\n\tMat4.mul(spxAcc, H_T, spxAcc);\n\tVec4.transformMat4(spUx, spUx, spxAcc);\n\tconst x = spV.dot(spUx);\n\n\tspyAcc.copy(Y).transpose();\n\tMat4.mul(spyAcc, spyAcc, H);\n\tMat4.mul(spyAcc, H_T, spyAcc);\n\tVec4.transformMat4(spUy, spUy, spyAcc);\n\tconst y = spV.dot(spUy);\n\n\toutput.x = x;\n\toutput.y = y;\n\treturn output;\n}\n\nfunction meshCoefficients(\n\tp00: ControlPoint,\n\tp01: ControlPoint,\n\tp10: ControlPoint,\n\tp11: ControlPoint,\n\taxis: \"x\" | \"y\",\n\toutput = Mat4.create(),\n): Mat4 {\n\tconst l = (p: ControlPoint) => p.location[axis];\n\tconst u = (p: ControlPoint) => p.uTangent[axis];\n\tconst v = (p: ControlPoint) => p.vTangent[axis];\n\n\toutput[0] = l(p00);\n\toutput[1] = l(p01);\n\toutput[2] = v(p00);\n\toutput[3] = v(p01);\n\toutput[4] = l(p10);\n\toutput[5] = l(p11);\n\toutput[6] = v(p10);\n\toutput[7] = v(p11);\n\toutput[8] = u(p00);\n\toutput[9] = u(p01);\n\toutput[10] = 0;\n\toutput[11] = 0;\n\toutput[12] = u(p10);\n\toutput[13] = u(p11);\n\toutput[14] = 0;\n\toutput[15] = 0;\n\n\treturn output;\n}\n\nfunction colorCoefficients(\n\tp00: ControlPoint,\n\tp01: ControlPoint,\n\tp10: ControlPoint,\n\tp11: ControlPoint,\n\taxis: \"r\" | \"g\" | \"b\",\n\toutput = Mat4.create(),\n): Mat4 {\n\tconst c = (p: ControlPoint) => p.color[axis];\n\toutput.fill(0);\n\toutput[0] = c(p00);\n\toutput[1] = c(p01);\n\toutput[4] = c(p10);\n\toutput[5] = c(p11);\n\t// return Mat4.fromValues(\n\t// c(p00), c(p01), 0, 0,\n\t// c(p10), c(p11), 0, 0,\n\t// 0, 0, 0, 0,\n\t// 0, 0, 0, 0,\n\t// );\n\treturn output;\n}\n\n// 将这个函数要用到的临时变量提取到外部,尽量避免资源分配提高性能\nconst cpUx = Vec4.create();\nconst cpUy = Vec4.create();\nconst cpUz = Vec4.create();\n\nconst cpV = Vec4.create();\n\nconst cprAcc = Mat4.create();\nconst cpgAcc = Mat4.create();\nconst cpbAcc = Mat4.create();\nconst cpResult = Vec3.create();\nfunction colorPoint(u: number, v: number, R: Mat4, G: Mat4, B: Mat4): Vec3 {\n\tcpUx[0] = u ** 3;\n\tcpUx[1] = u ** 2;\n\tcpUx[2] = u;\n\tcpUx[3] = 1;\n\tcpUy.copy(cpUx);\n\tcpUz.copy(cpUx);\n\n\tcpV[0] = v ** 3;\n\tcpV[1] = v ** 2;\n\tcpV[2] = v;\n\tcpV[3] = 1;\n\n\tcprAcc.copy(R).transpose();\n\tMat4.mul(cprAcc, cprAcc, H);\n\tMat4.mul(cprAcc, H_T, cprAcc);\n\tVec4.transformMat4(cpUx, cpUx, cprAcc);\n\tcpResult.r = cpV.dot(cpUx);\n\n\tcpgAcc.copy(G).transpose();\n\tMat4.mul(cpgAcc, cpgAcc, H);\n\tMat4.mul(cpgAcc, H_T, cpgAcc);\n\tVec4.transformMat4(cpUy, cpUy, cpgAcc);\n\tcpResult.g = cpV.dot(cpUy);\n\n\tcpbAcc.copy(B).transpose();\n\tMat4.mul(cpbAcc, cpbAcc, H);\n\tMat4.mul(cpbAcc, H_T, cpbAcc);\n\tVec4.transformMat4(cpUz, cpUz, cpbAcc);\n\tcpResult.b = cpV.dot(cpUz);\n\n\treturn cpResult;\n}\n\nclass Map2D<T> {\n\tprivate _width = 0;\n\tprivate _height = 0;\n\tprivate _data: T[] = [];\n\tconstructor(width: number, height: number) {\n\t\tthis.resize(width, height);\n\t\tObject.seal(this);\n\t}\n\tresize(width: number, height: number) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tthis._data = new Array(width * height).fill(0);\n\t}\n\tset(x: number, y: number, value: T) {\n\t\tthis._data[x + y * this._width] = value;\n\t}\n\tget(x: number, y: number) {\n\t\treturn this._data[x + y * this._width];\n\t}\n\tget width() {\n\t\treturn this._width;\n\t}\n\tget height() {\n\t\treturn this._height;\n\t}\n}\n\n// Bicubic Hermite Patch Mesh\nclass BHPMesh extends Mesh {\n\t/**\n\t * 细分级别,越大曲线越平滑,但是性能消耗也越大\n\t */\n\tprivate _subDivisions = 10;\n\tprivate _controlPoints: Map2D<ControlPoint> = new Map2D(3, 3);\n\n\tconstructor(\n\t\tgl: RenderingContext,\n\t\tattrPos: number,\n\t\tattrColor: number,\n\t\tattrUV: number,\n\t) {\n\t\tsuper(gl, attrPos, attrColor, attrUV);\n\t\tthis.resizeControlPoints(3, 3);\n\t\tObject.seal(this);\n\t}\n\toverride setWireFrame(enable: boolean) {\n\t\tsuper.setWireFrame(enable);\n\t\tthis.updateMesh();\n\t}\n\t/**\n\t * 以当前的控制点矩阵大小和细分级别为参考重新设置细分级别,此操作不会重设控制点数据\n\t * @param subDivisions 细分级别\n\t */\n\tresetSubdivition(subDivisions: number) {\n\t\tthis._subDivisions = subDivisions;\n\t\tsuper.resize(\n\t\t\t(this._controlPoints.width - 1) * subDivisions,\n\t\t\t(this._controlPoints.height - 1) * subDivisions,\n\t\t);\n\t}\n\t/**\n\t * 重设控制点矩阵尺寸,将会重置所有控制点的颜色和坐标数据\n\t * 请在调用此方法后重新设置颜色和坐标,并调用 updateMesh 方法更新网格\n\t * @param width 控制点宽度数量,必须大于等于 2\n\t * @param height 控制点高度数量,必须大于等于 2\n\t */\n\tresizeControlPoints(width: number, height: number) {\n\t\tif (!(width >= 2 && height >= 2)) {\n\t\t\tthrow new Error(\"Control points must be larger than 3x3 or equal\");\n\t\t}\n\t\tthis._controlPoints.resize(width, height);\n\t\tfor (let y = 0; y < height; y++) {\n\t\t\tfor (let x = 0; x < width; x++) {\n\t\t\t\tconst point = new ControlPoint();\n\t\t\t\tpoint.location.x = (x / (width - 1)) * 2 - 1;\n\t\t\t\tpoint.location.y = (y / (height - 1)) * 2 - 1;\n\t\t\t\tpoint.uTangent.x = 2 / (width - 1);\n\t\t\t\tpoint.vTangent.y = 2 / (height - 1);\n\t\t\t\tthis._controlPoints.set(x, y, point);\n\t\t\t}\n\t\t}\n\t\tthis.resetSubdivition(this._subDivisions);\n\t}\n\t/**\n\t * 获取指定位置的控制点,然后可以设置颜色和坐标属性\n\t * 留意颜色属性和坐标属性的值范围均参考 WebGL 的定义\n\t * 即颜色各个组件取值 [0-1],坐标取值 [-1, 1]\n\t * 点的位置以画面左下角为原点 (0,0)\n\t * @param x 需要获取的控制点的 x 坐标\n\t * @param y 需要获取的控制点的 y 坐标\n\t * @returns 控制点对象\n\t */\n\tgetControlPoint(x: number, y: number) {\n\t\treturn this._controlPoints.get(x, y);\n\t}\n\tprivate uMX = Mat4.create();\n\tprivate uMY = Mat4.create();\n\tprivate uMR = Mat4.create();\n\tprivate uMG = Mat4.create();\n\tprivate uMB = Mat4.create();\n\tprivate tmpV2 = Vec2.create();\n\t/**\n\t * 更新最终呈现的网格数据,此方法应在所有控制点或细分参数的操作完成后调用\n\t */\n\tupdateMesh() {\n\t\tconst subDivM1 = this._subDivisions - 1;\n\t\tconst tW = subDivM1 * (this._controlPoints.height - 1);\n\t\tconst tH = subDivM1 * (this._controlPoints.width - 1);\n\t\tfor (let x = 0; x < this._controlPoints.width - 1; x++) {\n\t\t\tfor (let y = 0; y < this._controlPoints.height - 1; y++) {\n\t\t\t\tconst p00 = this._controlPoints.get(x, y);\n\t\t\t\tconst p01 = this._controlPoints.get(x, y + 1);\n\t\t\t\tconst p10 = this._controlPoints.get(x + 1, y);\n\t\t\t\tconst p11 = this._controlPoints.get(x + 1, y + 1);\n\n\t\t\t\tconst X = meshCoefficients(p00, p01, p10, p11, \"x\", this.uMX);\n\t\t\t\tconst Y = meshCoefficients(p00, p01, p10, p11, \"y\", this.uMY);\n\n\t\t\t\tconst R = colorCoefficients(p00, p01, p10, p11, \"r\", this.uMR);\n\t\t\t\tconst G = colorCoefficients(p00, p01, p10, p11, \"g\", this.uMG);\n\t\t\t\tconst B = colorCoefficients(p00, p01, p10, p11, \"b\", this.uMB);\n\n\t\t\t\tconst sX = x / (this._controlPoints.width - 1);\n\t\t\t\tconst sY = y / (this._controlPoints.height - 1);\n\t\t\t\tfor (let u = 0; u < this._subDivisions; u++) {\n\t\t\t\t\tfor (let v = 0; v < this._subDivisions; v++) {\n\t\t\t\t\t\t// 不知道为啥 x 和 y 要反过来\n\t\t\t\t\t\t// 总之能跑就行(雾)\n\t\t\t\t\t\tconst vx = y * this._subDivisions + u;\n\t\t\t\t\t\tconst vy = x * this._subDivisions + v;\n\t\t\t\t\t\tconst [px, py] = surfacePoint(\n\t\t\t\t\t\t\tu / subDivM1,\n\t\t\t\t\t\t\tv / subDivM1,\n\t\t\t\t\t\t\tX,\n\t\t\t\t\t\t\tY,\n\t\t\t\t\t\t\tthis.tmpV2,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.setVertexPos(vx, vy, px, py);\n\t\t\t\t\t\tthis.setVertexUV(vx, vy, sX + v / tH, 1 - sY - u / tW);\n\t\t\t\t\t\tconst [pr, pg, pb] = colorPoint(\n\t\t\t\t\t\t\tu / subDivM1,\n\t\t\t\t\t\t\tv / subDivM1,\n\t\t\t\t\t\t\tR,\n\t\t\t\t\t\t\tG,\n\t\t\t\t\t\t\tB,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.setVertexColor(vx, vy, pr, pg, pb);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.update();\n\t}\n}\n\nclass GLTexture implements Disposable {\n\treadonly tex: WebGLTexture;\n\n\tconstructor(\n\t\tprivate gl: WebGLRenderingContext,\n\t\talbumImageData: ImageData,\n\t) {\n\t\tconst albumTexture = gl.createTexture();\n\t\tif (!albumTexture) throw new Error(\"Failed to create texture\");\n\t\tthis.tex = albumTexture;\n\t\tgl.activeTexture(gl.TEXTURE0);\n\t\tgl.bindTexture(gl.TEXTURE_2D, albumTexture);\n\t\tgl.texImage2D(\n\t\t\tgl.TEXTURE_2D,\n\t\t\t0,\n\t\t\tgl.RGBA,\n\t\t\tgl.RGBA,\n\t\t\tgl.UNSIGNED_BYTE,\n\t\t\talbumImageData,\n\t\t);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.MIRRORED_REPEAT);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.MIRRORED_REPEAT);\n\t}\n\n\tbind() {\n\t\tthis.gl.bindTexture(this.gl.TEXTURE_2D, this.tex);\n\t}\n\n\tdispose(): void {\n\t\tthis.gl.deleteTexture(this.tex);\n\t}\n}\n\nfunction createOffscreenCanvas(width: number, height: number) {\n\tif (\"OffscreenCanvas\" in window) return new OffscreenCanvas(width, height);\n\tconst canvas = document.createElement(\"canvas\");\n\tcanvas.width = width;\n\tcanvas.height = height;\n\treturn canvas;\n}\n\ninterface MeshState {\n\tmesh: BHPMesh;\n\ttexture: GLTexture;\n\talpha: number;\n}\n\nexport class MeshGradientRenderer extends BaseRenderer {\n\tprivate gl: RenderingContext;\n\tprivate lastFrameTime = 0;\n\tprivate frameTime = 0;\n\tprivate lastTickTime = 0;\n\tprivate volume = 0;\n\tprivate tickHandle = 0;\n\tprivate maxFPS = 60;\n\tprivate paused = false;\n\tprivate staticMode = false;\n\tprivate mainProgram: GLProgram;\n\tprivate blendProgram: GLProgram;\n\tprivate manualControl = false;\n\tprivate reduceImageSizeCanvas = createOffscreenCanvas(\n\t\t32,\n\t\t32,\n\t) as HTMLCanvasElement;\n\tprivate targetSize = Vec2.fromValues(0, 0);\n\tprivate currentSize = Vec2.fromValues(0, 0);\n\tprivate fullScreenMesh: Mesh;\n\tprivate drawFrameBuffer: WebGLFramebuffer;\n\tprivate drawFrameBufferTexture: WebGLTexture;\n\tprivate meshStates: MeshState[] = [];\n\tprivate _disposed = false;\n\n\tsetManualControl(enable: boolean) {\n\t\tthis.manualControl = enable;\n\t}\n\n\tsetWireFrame(enable: boolean) {\n\t\tfor (const state of this.meshStates) {\n\t\t\tstate.mesh.setWireFrame(enable);\n\t\t}\n\t}\n\n\tgetControlPoint(x: number, y: number): ControlPoint | undefined {\n\t\treturn this.meshStates[this.meshStates.length - 1]?.mesh?.getControlPoint(\n\t\t\tx,\n\t\t\ty,\n\t\t);\n\t}\n\n\tresizeControlPoints(width: number, height: number) {\n\t\treturn this.meshStates[\n\t\t\tthis.meshStates.length - 1\n\t\t]?.mesh?.resizeControlPoints(width, height);\n\t}\n\n\tresetSubdivition(subDivisions: number) {\n\t\treturn this.meshStates[this.meshStates.length - 1]?.mesh?.resetSubdivition(\n\t\t\tsubDivisions,\n\t\t);\n\t}\n\n\tprivate onTick(tickTime: number) {\n\t\tthis.tickHandle = 0;\n\t\tif (this.paused) return;\n\t\tif (this._disposed) return;\n\n\t\tif (Number.isNaN(this.lastFrameTime)) {\n\t\t\tthis.lastFrameTime = tickTime;\n\t\t}\n\t\tconst delta = tickTime - this.lastTickTime;\n\t\tconst frameDelta = tickTime - this.lastFrameTime;\n\t\tthis.lastFrameTime = tickTime;\n\t\tif (delta < 1000 / this.maxFPS) {\n\t\t\tthis.requestTick();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.frameTime += frameDelta;\n\n\t\tif (!(this.onRedraw(this.frameTime, frameDelta) && this.staticMode)) {\n\t\t\tthis.requestTick();\n\t\t} else if (this.staticMode) {\n\t\t\tthis.lastFrameTime = Number.NaN;\n\t\t}\n\n\t\tthis.lastTickTime = tickTime;\n\t}\n\n\tprivate checkIfResize() {\n\t\tconst [tW, tH] = [this.targetSize.x, this.targetSize.y];\n\t\tconst [cW, cH] = [this.currentSize.x, this.currentSize.y];\n\t\tif (tW !== cW || tH !== cH) {\n\t\t\tsuper.onResize(tW, tH);\n\t\t\tconst gl = this.gl;\n\t\t\tgl.bindTexture(gl.TEXTURE_2D, this.drawFrameBufferTexture);\n\t\t\tgl.texImage2D(\n\t\t\t\tgl.TEXTURE_2D,\n\t\t\t\t0,\n\t\t\t\tgl.RGBA,\n\t\t\t\ttW,\n\t\t\t\ttH,\n\t\t\t\t0,\n\t\t\t\tgl.RGBA,\n\t\t\t\tthis.supportTextureFloat ? gl.FLOAT : gl.UNSIGNED_BYTE,\n\t\t\t\tnull,\n\t\t\t);\n\t\t\tgl.bindFramebuffer(gl.FRAMEBUFFER, this.drawFrameBuffer);\n\t\t\tgl.viewport(0, 0, tW, tH);\n\t\t\tgl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\t\t\tgl.viewport(0, 0, tW, tH);\n\t\t\tthis.currentSize.x = tW;\n\t\t\tthis.currentSize.y = tH;\n\t\t}\n\t}\n\n\tprivate onRedraw(tickTime: number, delta: number) {\n\t\tconst latestMeshState = this.meshStates[this.meshStates.length - 1];\n\t\tlet canBeStatic = false;\n\t\tif (latestMeshState) {\n\t\t\tlatestMeshState.mesh.bind();\n\t\t\t// 考虑到我们并不逐帧更新网格控制点,因此也不需要重复调用 updateMesh\n\t\t\tif (this.manualControl) latestMeshState.mesh.updateMesh();\n\t\t\tlatestMeshState.alpha = Math.min(1, latestMeshState.alpha + delta / 500);\n\t\t\tif (latestMeshState.alpha >= 1) {\n\t\t\t\tconst deleted = this.meshStates.splice(0, this.meshStates.length - 1);\n\t\t\t\tfor (const state of deleted) {\n\t\t\t\t\tstate.mesh.dispose();\n\t\t\t\t\tstate.texture.dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.meshStates.length === 1 && latestMeshState.alpha >= 1) {\n\t\t\t\tcanBeStatic = true;\n\t\t\t}\n\t\t}\n\n\t\tconst gl = this.gl;\n\t\tgl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\t\tgl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\t\tgl.clear(gl.COLOR_BUFFER_BIT);\n\t\tthis.checkIfResize();\n\n\t\tthis.mainProgram.use();\n\t\tgl.activeTexture(gl.TEXTURE0);\n\t\tthis.mainProgram.setUniform1f(\"u_time\", tickTime / 10000);\n\t\tthis.mainProgram.setUniform1f(\n\t\t\t\"u_aspect\",\n\t\t\tthis.manualControl ? 1 : this.canvas.width / this.canvas.height,\n\t\t);\n\t\tthis.mainProgram.setUniform1i(\"u_texture\", 0);\n\n\t\tthis.mainProgram.setUniform1f(\"u_volume\", this.volume);\n\t\tfor (const state of this.meshStates) {\n\t\t\tgl.bindFramebuffer(gl.FRAMEBUFFER, this.drawFrameBuffer);\n\t\t\tgl.clear(gl.COLOR_BUFFER_BIT);\n\t\t\tthis.mainProgram.use();\n\t\t\tstate.texture.bind();\n\t\t\tstate.mesh.bind();\n\t\t\tstate.mesh.draw();\n\n\t\t\tgl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\t\t\tgl.activeTexture(gl.TEXTURE0);\n\t\t\tgl.bindTexture(gl.TEXTURE_2D, this.drawFrameBufferTexture);\n\t\t\tthis.blendProgram.use();\n\t\t\tthis.blendProgram.setUniform1f(\"u_alpha\", state.alpha);\n\t\t\tthis.blendProgram.setUniform1i(\"u_texture\", 0);\n\t\t\tthis.fullScreenMesh.bind();\n\t\t\tthis.fullScreenMesh.draw();\n\t\t}\n\n\t\tgl.flush();\n\n\t\treturn canBeStatic;\n\t}\n\n\tprivate onTickBinded = this.onTick.bind(this);\n\n\tprivate requestTick() {\n\t\tif (this._disposed) return;\n\t\tif (this.tickHandle === 0)\n\t\t\tthis.tickHandle = requestAnimationFrame(this.onTickBinded);\n\t}\n\n\tprivate supportTextureFloat = true;\n\n\tconstructor(canvas: HTMLCanvasElement) {\n\t\tsuper(canvas);\n\n\t\tconst gl = canvas.getContext(\"webgl\");\n\t\tif (!gl) throw new Error(\"WebGL not supported\");\n\t\tif (!gl.getExtension(\"EXT_color_buffer_float\"))\n\t\t\tconsole.warn(\"EXT_color_buffer_float not supported\");\n\t\tif (!gl.getExtension(\"EXT_float_blend\")) {\n\t\t\tconsole.warn(\"EXT_float_blend not supported\");\n\t\t\tthis.supportTextureFloat = false;\n\t\t}\n\t\tif (!gl.getExtension(\"OES_texture_float_linear\"))\n\t\t\tconsole.warn(\"OES_texture_float_linear not supported\");\n\t\tif (!gl.getExtension(\"OES_texture_float\")) {\n\t\t\tthis.supportTextureFloat = false;\n\t\t\tconsole.warn(\"OES_texture_float not supported\");\n\t\t}\n\n\t\tthis.gl = gl;\n\t\tgl.enable(gl.BLEND);\n\t\tgl.enable(gl.DEPTH_TEST);\n\t\tgl.depthFunc(gl.ALWAYS);\n\n\t\tthis.mainProgram = new GLProgram(\n\t\t\tgl,\n\t\t\tmeshVertShader,\n\t\t\tmeshFragShader,\n\t\t\t\"main-program-mg\",\n\t\t);\n\n\t\tthis.blendProgram = new GLProgram(\n\t\t\tgl,\n\t\t\tblendVertShader,\n\t\t\tblendFragShader,\n\t\t\t\"blend-program-mg\",\n\t\t);\n\n\t\tthis.fullScreenMesh = new Mesh(\n\t\t\tgl,\n\t\t\tthis.blendProgram.attrs.a_pos,\n\t\t\tthis.blendProgram.attrs.a_color,\n\t\t\tthis.blendProgram.attrs.a_uv,\n\t\t);\n\t\tthis.fullScreenMesh.update();\n\n\t\tconst drawFrameBufferTexture = gl.createTexture();\n\t\tif (!drawFrameBufferTexture)\n\t\t\tthrow new Error(\"Failed to create framebuffer texture\");\n\t\tthis.drawFrameBufferTexture = drawFrameBufferTexture;\n\t\tgl.bindTexture(gl.TEXTURE_2D, drawFrameBufferTexture);\n\t\tgl.texImage2D(\n\t\t\tgl.TEXTURE_2D,\n\t\t\t0,\n\t\t\tgl.RGBA,\n\t\t\tcanvas.width,\n\t\t\tcanvas.height,\n\t\t\t0,\n\t\t\tgl.RGBA,\n\t\t\tthis.supportTextureFloat ? gl.FLOAT : gl.UNSIGNED_BYTE,\n\t\t\tnull,\n\t\t);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\t\tconst drawFrameBuffer = gl.createFramebuffer();\n\t\tif (!drawFrameBuffer) throw new Error(\"Failed to create framebuffer\");\n\t\tthis.drawFrameBuffer = drawFrameBuffer;\n\t\tgl.bindFramebuffer(gl.FRAMEBUFFER, drawFrameBuffer);\n\t\tgl.framebufferTexture2D(\n\t\t\tgl.FRAMEBUFFER,\n\t\t\tgl.COLOR_ATTACHMENT0,\n\t\t\tgl.TEXTURE_2D,\n\t\t\tdrawFrameBufferTexture,\n\t\t\t0,\n\t\t);\n\n\t\tthis.requestTick();\n\t}\n\n\tprotected override onResize(width: number, height: number): void {\n\t\tthis.targetSize.x = Math.ceil(width);\n\t\tthis.targetSize.y = Math.ceil(height);\n\t}\n\n\toverride setStaticMode(enable: boolean): void {\n\t\tthis.staticMode = enable;\n\t\tthis.lastFrameTime = performance.now();\n\t\tthis.requestTick();\n\t}\n\toverride setFPS(fps: number): void {\n\t\tthis.maxFPS = fps;\n\t}\n\toverride pause(): void {\n\t\tif (this.tickHandle) {\n\t\t\tcancelAnimationFrame(this.tickHandle);\n\t\t\tthis.tickHandle = 0;\n\t\t}\n\t\tthis.paused = true;\n\t}\n\toverride resume(): void {\n\t\tthis.paused = false;\n\t\tthis.requestTick();\n\t}\n\toverride async setAlbum(\n\t\talbumSource: string | HTMLImageElement | HTMLVideoElement,\n\t\tisVideo?: boolean,\n\t): Promise<void> {\n\t\tif (typeof albumSource === \"string\" && albumSource.trim().length === 0)\n\t\t\tthrow new Error(\"Empty album url\");\n\t\tlet res: HTMLImageElement | HTMLVideoElement | null = null;\n\t\tlet remainRetryTimes = 5;\n\t\twhile (!res && remainRetryTimes > 0) {\n\t\t\ttry {\n\t\t\t\tif (typeof albumSource === \"string\") {\n\t\t\t\t\tres = await loadResourceFromUrl(albumSource, isVideo);\n\t\t\t\t} else {\n\t\t\t\t\tres = await loadResourceFromElement(albumSource);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`failed on loading album resource, retrying (${remainRetryTimes})`,\n\t\t\t\t\t{\n\t\t\t\t\t\talbumSource,\n\t\t\t\t\t\terror,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tremainRetryTimes--;\n\t\t\t}\n\t\t}\n\t\tif (!res) return;\n\t\t// resize image\n\t\tconst c = this.reduceImageSizeCanvas;\n\t\tconst ctx = c.getContext(\"2d\", {\n\t\t\twillReadFrequently: true,\n\t\t});\n\t\tif (!ctx) throw new Error(\"Failed to create canvas context\");\n\t\tctx.clearRect(0, 0, c.width, c.height);\n\t\t// Safari 不支持 filter\n\t\t// ctx.filter = baseFilter;\n\t\tconst imgw =\n\t\t\tres instanceof HTMLVideoElement ? res.videoWidth : res.naturalWidth;\n\t\tconst imgh =\n\t\t\tres instanceof HTMLVideoElement ? res.videoHeight : res.naturalHeight;\n\t\tif (imgw * imgh === 0) throw new Error(\"Invalid image size\");\n\t\tctx.drawImage(res, 0, 0, imgw, imgh, 0, 0, c.width, c.height);\n\n\t\tconst imageData = ctx.getImageData(0, 0, c.width, c.height);\n\t\tcontrastImage(imageData, 0.4);\n\t\tsaturateImage(imageData, 3.0);\n\t\tcontrastImage(imageData, 1.7);\n\t\tbrightnessImage(imageData, 0.75);\n\t\tblurImage(imageData, 2, 4);\n\n\t\tif (this.manualControl && this.meshStates.length > 0) {\n\t\t\tthis.meshStates[0].texture.dispose();\n\t\t\tthis.meshStates[0].texture = new GLTexture(this.gl, imageData);\n\t\t} else {\n\t\t\tconst newMesh = new BHPMesh(\n\t\t\t\tthis.gl,\n\t\t\t\tthis.mainProgram.attrs.a_pos,\n\t\t\t\tthis.mainProgram.attrs.a_color,\n\t\t\t\tthis.mainProgram.attrs.a_uv,\n\t\t\t);\n\t\t\tnewMesh.resetSubdivition(15);\n\n\t\t\tconst chosenPreset =\n\t\t\t\tCONTROL_POINT_PRESETS[\n\t\t\t\t\tMath.floor(Math.random() * CONTROL_POINT_PRESETS.length)\n\t\t\t\t];\n\t\t\tnewMesh.resizeControlPoints(chosenPreset.width, chosenPreset.height);\n\t\t\tconst uPower = 2 / (chosenPreset.width - 1);\n\t\t\tconst vPower = 2 / (chosenPreset.height - 1);\n\t\t\tfor (const cp of chosenPreset.conf) {\n\t\t\t\tconst p = newMesh.getControlPoint(cp.cx, cp.cy);\n\t\t\t\tp.location.x = cp.x;\n\t\t\t\tp.location.y = cp.y;\n\t\t\t\tp.uRot = (cp.ur * Math.PI) / 180;\n\t\t\t\tp.vRot = (cp.vr * Math.PI) / 180;\n\t\t\t\tp.uScale = uPower * cp.up;\n\t\t\t\tp.vScale = vPower * cp.vp;\n\t\t\t}\n\n\t\t\tnewMesh.updateMesh();\n\n\t\t\tconst albumTexture = new GLTexture(this.gl, imageData);\n\t\t\tconst newState: MeshState = {\n\t\t\t\tmesh: newMesh,\n\t\t\t\ttexture: albumTexture,\n\t\t\t\talpha: 0,\n\t\t\t};\n\t\t\tthis.meshStates.push(newState);\n\t\t}\n\n\t\tthis.requestTick();\n\t}\n\toverride setLowFreqVolume(volume: number): void {\n\t\tthis.volume = volume / 10;\n\t}\n\toverride setHasLyric(_hasLyric: boolean): void {\n\t\t// 不再考虑实现\n\t}\n\n\toverride dispose(): void {\n\t\tsuper.dispose();\n\t\tif (this.tickHandle) {\n\t\t\tcancelAnimationFrame(this.tickHandle);\n\t\t\tthis.tickHandle = 0;\n\t\t}\n\t\tthis._disposed = true;\n\t\tthis.mainProgram.dispose();\n\t\tthis.blendProgram.dispose();\n\t\tthis.fullScreenMesh.dispose();\n\t\tthis.gl.deleteFramebuffer(this.drawFrameBuffer);\n\t\tthis.gl.deleteTexture(this.drawFrameBufferTexture);\n\t\tfor (const state of this.meshStates) {\n\t\t\tstate.mesh.dispose();\n\t\t\tstate.texture.dispose();\n\t\t}\n\t}\n}\n","/**\n * @fileoverview\n * 一个播放歌词的组件\n * @author SteveXMH\n */\n\nexport { AbstractBaseRenderer, BaseRenderer } from \"./base\";\nimport { AbstractBaseRenderer, BaseRenderer } from \"./base\";\nexport { PixiRenderer } from \"./pixi-renderer\";\nexport { MeshGradientRenderer } from \"./mesh-renderer\";\n\nexport class BackgroundRender<Renderer extends BaseRenderer>\n\timplements AbstractBaseRenderer\n{\n\tprivate element: HTMLCanvasElement;\n\tprivate renderer: Renderer;\n\tconstructor(renderer: Renderer, canvas: HTMLCanvasElement) {\n\t\tthis.renderer = renderer;\n\n\t\tthis.element = canvas;\n\t\tcanvas.style.pointerEvents = \"none\";\n\t\tcanvas.style.zIndex = \"-1\";\n\t\tcanvas.style.contain = \"strict\";\n\t}\n\n\tstatic new<Renderer extends BaseRenderer>(type: {\n\t\tnew (canvas: HTMLCanvasElement): Renderer;\n\t}): BackgroundRender<Renderer> {\n\t\tconst canvas = document.createElement(\"canvas\");\n\t\treturn new BackgroundRender(new type(canvas), canvas);\n\t}\n\n\tsetRenderScale(scale: number): void {\n\t\tthis.renderer.setRenderScale(scale);\n\t}\n\n\tsetFlowSpeed(speed: number): void {\n\t\tthis.renderer.setFlowSpeed(speed);\n\t}\n\tsetStaticMode(enable: boolean): void {\n\t\tthis.renderer.setStaticMode(enable);\n\t}\n\tsetFPS(fps: number): void {\n\t\tthis.renderer.setFPS(fps);\n\t}\n\tpause(): void {\n\t\tthis.renderer.pause();\n\t}\n\tresume(): void {\n\t\tthis.renderer.resume();\n\t}\n\tsetLowFreqVolume(volume: number): void {\n\t\tthis.renderer.setLowFreqVolume(volume);\n\t}\n\tsetHasLyric(hasLyric: boolean): void {\n\t\tthis.renderer.setHasLyric(hasLyric);\n\t}\n\tsetAlbum(\n\t\talbumSource: string | HTMLImageElement | HTMLVideoElement,\n\t\tisVideo?: boolean,\n\t): Promise<void> {\n\t\treturn this.renderer.setAlbum(albumSource, isVideo);\n\t}\n\tgetElement() {\n\t\treturn this.element;\n\t}\n\tdispose() {\n\t\tthis.renderer.dispose();\n\t\tthis.element.remove();\n\t}\n}\n","// biome-ignore lint/complexity/noBannedTypes: for debounce function\nexport function debounce<T extends Function>(cb: T, wait = 20) {\n\tlet h = 0;\n\t// biome-ignore lint/suspicious/noExplicitAny: function can be any\n\tconst callable = (...args: any) => {\n\t\tclearTimeout(h);\n\t\th = setTimeout(() => cb(...args), wait);\n\t};\n\treturn callable;\n}\n\n// biome-ignore lint/complexity/noBannedTypes: for debounce function\nexport function debounceFrame<T extends Function>(cb: T, frameTime = 1) {\n\tlet h = 0;\n\tlet ft = frameTime;\n\t// biome-ignore lint/suspicious/noExplicitAny: function can be any\n\tconst callable = (...args: any) => {\n\t\tft = frameTime;\n\t\tcancelAnimationFrame(h);\n\t\tconst onCB = () => {\n\t\t\tif (--ft <= 0) {\n\t\t\t\tcb(...args);\n\t\t\t} else {\n\t\t\t\th = requestAnimationFrame(onCB);\n\t\t\t}\n\t\t};\n\t\th = requestAnimationFrame(onCB);\n\t};\n\treturn callable;\n}\n","export const eqSet: <T>(xs: Set<T>, ys: Set<T>) => boolean = (\n\txs,\n\tys,\n): boolean => xs.size === ys.size && [...xs].every((x) => ys.has(x));\n","export function derivative(f: (x: number) => number) {\n\tconst h = 0.001;\n\treturn (x: number) => (f(x + h) - f(x - h)) / (2 * h);\n}\n\nexport function getVelocity(f: (t: number) => number): (t: number) => number {\n\treturn derivative(f);\n}\n","import { getVelocity } from \"./derivative\";\n\n/** MIT License github.com/pushkine/ */\nexport interface SpringParams {\n\tmass: number; // = 1.0\n\tdamping: number; // = 10.0\n\tstiffness: number; // = 100.0\n\tsoft: boolean; // = false\n}\n\ntype seconds = number;\n\nexport class Spring {\n\tprivate currentPosition = 0;\n\tprivate targetPosition = 0;\n\tprivate currentTime = 0;\n\tprivate params: Partial<SpringParams> = {};\n\tprivate currentSolver: (t: seconds) => number;\n\tprivate getV: (t: seconds) => number;\n\tprivate getV2: (t: seconds) => number;\n\tprivate queueParams:\n\t\t| (Partial<SpringParams> & {\n\t\t\t\ttime: number;\n\t\t })\n\t\t| undefined;\n\tprivate queuePosition:\n\t\t| {\n\t\t\t\ttime: number;\n\t\t\t\tposition: number;\n\t\t }\n\t\t| undefined;\n\tconstructor(currentPosition = 0) {\n\t\tthis.targetPosition = currentPosition;\n\t\tthis.currentPosition = this.targetPosition;\n\t\tthis.currentSolver = () => this.targetPosition;\n\t\tthis.getV = () => 0;\n\t\tthis.getV2 = () => 0;\n\t}\n\tprivate resetSolver() {\n\t\tconst curV = this.getV(this.currentTime);\n\t\tthis.currentTime = 0;\n\t\tthis.currentSolver = solveSpring(\n\t\t\tthis.currentPosition,\n\t\t\tcurV,\n\t\t\tthis.targetPosition,\n\t\t\t0,\n\t\t\tthis.params,\n\t\t);\n\t\tthis.getV = getVelocity(this.currentSolver);\n\t\tthis.getV2 = getVelocity(this.getV);\n\t}\n\tarrived() {\n\t\treturn (\n\t\t\tMath.abs(this.targetPosition - this.currentPosition) < 0.01 &&\n\t\t\tthis.getV(this.currentTime) < 0.01 &&\n\t\t\tthis.getV2(this.currentTime) < 0.01 &&\n\t\t\tthis.queueParams === undefined &&\n\t\t\tthis.queuePosition === undefined\n\t\t);\n\t}\n\tsetPosition(targetPosition: number) {\n\t\tthis.targetPosition = targetPosition;\n\t\tthis.currentPosition = targetPosition;\n\t\tthis.currentSolver = () => this.targetPosition;\n\t\tthis.getV = () => 0;\n\t\tthis.getV2 = () => 0;\n\t}\n\tupdate(delta = 0) {\n\t\tthis.currentTime += delta;\n\t\tthis.currentPosition = this.currentSolver(this.currentTime);\n\t\tif (this.queueParams) {\n\t\t\tthis.queueParams.time -= delta;\n\t\t\tif (this.queueParams.time <= 0) {\n\t\t\t\tthis.updateParams({\n\t\t\t\t\t...this.queueParams,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (this.queuePosition) {\n\t\t\tthis.queuePosition.time -= delta;\n\t\t\tif (this.queuePosition.time <= 0) {\n\t\t\t\tthis.setTargetPosition(this.queuePosition.position);\n\t\t\t}\n\t\t}\n\t\tif (this.arrived()) {\n\t\t\tthis.setPosition(this.targetPosition);\n\t\t}\n\t}\n\tupdateParams(params: Partial<SpringParams>, delay = 0) {\n\t\tif (delay > 0) {\n\t\t\tthis.queueParams = {\n\t\t\t\t...(this.queuePosition ?? {}),\n\t\t\t\t...params,\n\t\t\t\ttime: delay,\n\t\t\t};\n\t\t} else {\n\t\t\tthis.queuePosition = undefined;\n\t\t\tthis.params = {\n\t\t\t\t...this.params,\n\t\t\t\t...params,\n\t\t\t};\n\t\t\tthis.resetSolver();\n\t\t}\n\t}\n\tsetTargetPosition(targetPosition: number, delay = 0) {\n\t\tif (delay > 0) {\n\t\t\tthis.queuePosition = {\n\t\t\t\t...(this.queuePosition ?? {}),\n\t\t\t\tposition: targetPosition,\n\t\t\t\ttime: delay,\n\t\t\t};\n\t\t} else {\n\t\t\tthis.queuePosition = undefined;\n\t\t\tthis.targetPosition = targetPosition;\n\t\t\tthis.resetSolver();\n\t\t}\n\t}\n\tgetCurrentPosition() {\n\t\treturn this.currentPosition;\n\t}\n}\n\nfunction solveSpring(\n\tfrom: number,\n\tvelocity: number,\n\tto: number,\n\tdelay: seconds = 0,\n\tparams?: Partial<SpringParams>,\n): (t: seconds) => number {\n\tconst soft = params?.soft ?? false;\n\tconst stiffness = params?.stiffness ?? 100;\n\tconst damping = params?.damping ?? 10;\n\tconst mass = params?.mass ?? 1;\n\tconst delta = to - from;\n\tif (soft || 1.0 <= damping / (2.0 * Math.sqrt(stiffness * mass))) {\n\t\tconst angular_frequency = -Math.sqrt(stiffness / mass);\n\t\tconst leftover = -angular_frequency * delta - velocity;\n\t\treturn (t: seconds) => {\n\t\t\tt -= delay;\n\t\t\tif (t < 0) return from;\n\t\t\treturn to - (delta + t * leftover) * Math.E ** (t * angular_frequency);\n\t\t};\n\t}\n\tconst damping_frequency = Math.sqrt(4.0 * mass * stiffness - damping ** 2.0);\n\tconst leftover =\n\t\t(damping * delta - 2.0 * mass * velocity) / damping_frequency;\n\tconst dfm = (0.5 * damping_frequency) / mass;\n\tconst dm = -(0.5 * damping) / mass;\n\treturn (t: seconds) => {\n\t\tt -= delay;\n\t\tif (t < 0) return from;\n\t\treturn (\n\t\t\tto -\n\t\t\t(Math.cos(t * dfm) * delta + Math.sin(t * dfm) * leftover) *\n\t\t\t\tMath.E ** (t * dm)\n\t\t);\n\t};\n}\n","import { LyricPlayer } from \".\";\nimport { Disposable, HasElement } from \"../interfaces\";\nimport { Spring } from \"../utils/spring\";\nimport styles from \"../styles/lyric-player.module.css\";\n\nexport class BottomLineEl implements HasElement, Disposable {\n\tprivate element: HTMLElement = document.createElement(\"div\");\n\tprivate left = 0;\n\tprivate top = 0;\n\tprivate delay = 0;\n\t// 由 LyricPlayer 来设置\n\tlineSize: number[] = [0, 0];\n\treadonly lineTransforms = {\n\t\tposX: new Spring(0),\n\t\tposY: new Spring(0),\n\t};\n\tconstructor(private lyricPlayer: LyricPlayer) {\n\t\tthis.element.setAttribute(\"class\", styles.lyricLine);\n\t\tthis.rebuildStyle();\n\t}\n\tmeasureSize(): [number, number] {\n\t\tconst size: [number, number] = [\n\t\t\tthis.element.clientWidth,\n\t\t\tthis.element.clientHeight,\n\t\t];\n\t\treturn size;\n\t}\n\tprivate lastStyle = \"\";\n\tshow() {\n\t\tthis.rebuildStyle();\n\t}\n\thide() {\n\t\tthis.rebuildStyle();\n\t}\n\trebuildStyle() {\n\t\tlet style = `transform:translate(${this.lineTransforms.posX\n\t\t\t.getCurrentPosition()\n\t\t\t.toFixed(2)}px,${this.lineTransforms.posY\n\t\t\t.getCurrentPosition()\n\t\t\t.toFixed(2)}px);`;\n\t\tif (!this.lyricPlayer.getEnableSpring() && this.isInSight) {\n\t\t\tstyle += `transition-delay:${this.delay}ms;`;\n\t\t}\n\t\tif (style !== this.lastStyle) {\n\t\t\tthis.lastStyle = style;\n\t\t\tthis.element.setAttribute(\"style\", style);\n\t\t}\n\t}\n\tgetElement() {\n\t\treturn this.element;\n\t}\n\tsetTransform(\n\t\tleft: number = this.left,\n\t\ttop: number = this.top,\n\t\tforce = false,\n\t\tdelay = 0,\n\t) {\n\t\tthis.left = left;\n\t\tthis.top = top;\n\t\tthis.delay = (delay * 1000) | 0;\n\t\tif (force || !this.lyricPlayer.getEnableSpring()) {\n\t\t\tif (force) this.element.classList.add(styles.tmpDisableTransition);\n\t\t\tthis.lineTransforms.posX.setPosition(left);\n\t\t\tthis.lineTransforms.posY.setPosition(top);\n\t\t\tif (!this.lyricPlayer.getEnableSpring()) this.show();\n\t\t\telse this.rebuildStyle();\n\t\t\tif (force)\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tthis.element.classList.remove(styles.tmpDisableTransition);\n\t\t\t\t});\n\t\t} else {\n\t\t\tthis.lineTransforms.posX.setTargetPosition(left, delay);\n\t\t\tthis.lineTransforms.posY.setTargetPosition(top, delay);\n\t\t}\n\t}\n\tupdate(delta = 0) {\n\t\tif (!this.lyricPlayer.getEnableSpring()) return;\n\t\tthis.lineTransforms.posX.update(delta);\n\t\tthis.lineTransforms.posY.update(delta);\n\t\tif (this.isInSight) {\n\t\t\tthis.show();\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\tget isInSight() {\n\t\tconst l = this.lineTransforms.posX.getCurrentPosition();\n\t\tconst t = this.lineTransforms.posY.getCurrentPosition();\n\t\tconst r = l + this.lineSize[0];\n\t\tconst b = t + this.lineSize[1];\n\t\tconst pr = this.lyricPlayer.size[0];\n\t\tconst pb = this.lyricPlayer.size[1];\n\t\treturn !(l > pr || t > pb || r < 0 || b < 0);\n\t}\n\tdispose(): void {\n\t\tthis.element.remove();\n\t}\n}\n","import type { LyricPlayer } from \".\";\nimport type { Disposable, HasElement } from \"../interfaces\";\nimport styles from \"../styles/lyric-player.module.css\";\n\nfunction easeInOutBack(x: number): number {\n\tconst c1 = 1.70158;\n\tconst c2 = c1 * 1.525;\n\n\treturn x < 0.5\n\t\t? (Math.pow(2 * x, 2) * ((c2 + 1) * 2 * x - c2)) / 2\n\t\t: (Math.pow(2 * x - 2, 2) * ((c2 + 1) * (x * 2 - 2) + c2) + 2) / 2;\n}\n\nfunction easeOutExpo(x: number): number {\n\treturn x === 1 ? 1 : 1 - 2 ** (-10 * x);\n}\n\nconst clamp = (min: number, cur: number, max: number) =>\n\tMath.max(min, Math.min(cur, max));\n\nexport class InterludeDots implements HasElement, Disposable {\n\tprivate element: HTMLElement = document.createElement(\"div\");\n\tprivate dot0: HTMLElement = document.createElement(\"span\");\n\tprivate dot1: HTMLElement = document.createElement(\"span\");\n\tprivate dot2: HTMLElement = document.createElement(\"span\");\n\tprivate left = 0;\n\tprivate top = 0;\n\tprivate scale = 1;\n\tprivate playing = true;\n\tprivate lastStyle = \"\";\n\tprivate currentInterlude?: [number, number];\n\tprivate currentTime = 0;\n\tprivate interludeTime = 0;\n\tprivate targetBreatheDuration = 1500;\n\tconstructor(private readonly lyricPlayer: LyricPlayer) {\n\t\tthis.element.className = styles.interludeDots;\n\t\tthis.element.appendChild(this.dot0);\n\t\tthis.element.appendChild(this.dot1);\n\t\tthis.element.appendChild(this.dot2);\n\t}\n\tgetElement() {\n\t\treturn this.element;\n\t}\n\tsetTransform(left: number = this.left, top: number = this.top) {\n\t\tthis.left = left;\n\t\tthis.top = top;\n\t\tthis.update();\n\t}\n\tsetInterlude(interlude?: [number, number]) {\n\t\tthis.currentInterlude = interlude;\n\t\tthis.currentTime = interlude?.[0] ?? 0;\n\t}\n\tpause() {\n\t\tthis.playing = false;\n\t}\n\tresume() {\n\t\tthis.playing = true;\n\t}\n\tupdate(delta = 0) {\n\t\tif (!this.playing) return;\n\t\tthis.currentTime += delta;\n\t\tlet curStyle = \"\";\n\n\t\tcurStyle += `transform:translate(${this.left.toFixed(\n\t\t\t2,\n\t\t)}px, ${this.top.toFixed(2)}px)`;\n\n\t\t// 计算缩放大小\n\n\t\tif (this.currentInterlude) {\n\t\t\tconst interludeDuration =\n\t\t\t\tthis.currentInterlude[1] - this.currentInterlude[0];\n\t\t\tconst currentDuration = this.currentTime - this.currentInterlude[0];\n\t\t\tif (currentDuration <= interludeDuration) {\n\t\t\t\tconst breatheDuration =\n\t\t\t\t\tinterludeDuration /\n\t\t\t\t\tMath.ceil(interludeDuration / this.targetBreatheDuration);\n\t\t\t\tlet scale = 1;\n\t\t\t\tlet globalOpacity = 1;\n\n\t\t\t\tscale *=\n\t\t\t\t\tMath.sin(1.5 * Math.PI - (currentDuration / breatheDuration) * 2) /\n\t\t\t\t\t\t20 +\n\t\t\t\t\t1;\n\n\t\t\t\tif (currentDuration < 2000) {\n\t\t\t\t\tscale *= easeOutExpo(currentDuration / 2000);\n\t\t\t\t}\n\n\t\t\t\tif (currentDuration < 500) {\n\t\t\t\t\tglobalOpacity = 0;\n\t\t\t\t} else if (currentDuration < 1000) {\n\t\t\t\t\tglobalOpacity *= (currentDuration - 500) / 500;\n\t\t\t\t}\n\n\t\t\t\tif (interludeDuration - currentDuration < 750) {\n\t\t\t\t\tscale *=\n\t\t\t\t\t\t1 -\n\t\t\t\t\t\teaseInOutBack(\n\t\t\t\t\t\t\t(750 - (interludeDuration - currentDuration)) / 750 / 2,\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (interludeDuration - currentDuration < 375) {\n\t\t\t\t\tglobalOpacity *= clamp(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t(interludeDuration - currentDuration) / 375,\n\t\t\t\t\t\t1,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst dotsDuration = Math.max(0, interludeDuration - 750);\n\n\t\t\t\tscale = Math.max(0, scale) * 0.7;\n\n\t\t\t\tcurStyle += ` scale(${scale})`;\n\n\t\t\t\tconst dot0Opacity = clamp(\n\t\t\t\t\t0.25,\n\t\t\t\t\t((currentDuration * 3) / dotsDuration) * 0.75,\n\t\t\t\t\t1,\n\t\t\t\t);\n\t\t\t\tconst dot1Opacity = clamp(\n\t\t\t\t\t0.25,\n\t\t\t\t\t(((currentDuration - dotsDuration / 3) * 3) / dotsDuration) * 0.75,\n\t\t\t\t\t1,\n\t\t\t\t);\n\t\t\t\tconst dot2Opacity = clamp(\n\t\t\t\t\t0.25,\n\t\t\t\t\t(((currentDuration - (dotsDuration / 3) * 2) * 3) / dotsDuration) *\n\t\t\t\t\t\t0.75,\n\t\t\t\t\t1,\n\t\t\t\t);\n\n\t\t\t\tthis.dot0.style.opacity = `${clamp(\n\t\t\t\t\t0,\n\t\t\t\t\tMath.max(0, globalOpacity * dot0Opacity),\n\t\t\t\t\t1,\n\t\t\t\t)}`;\n\t\t\t\tthis.dot1.style.opacity = `${clamp(\n\t\t\t\t\t0,\n\t\t\t\t\tMath.max(0, globalOpacity * dot1Opacity),\n\t\t\t\t\t1,\n\t\t\t\t)}`;\n\t\t\t\tthis.dot2.style.opacity = `${clamp(\n\t\t\t\t\t0,\n\t\t\t\t\tMath.max(0, globalOpacity * dot2Opacity),\n\t\t\t\t\t1,\n\t\t\t\t)}`;\n\t\t\t} else {\n\t\t\t\tcurStyle += \" scale(0)\";\n\t\t\t\tthis.dot0.style.opacity = \"0\";\n\t\t\t\tthis.dot1.style.opacity = \"0\";\n\t\t\t\tthis.dot2.style.opacity = \"0\";\n\t\t\t}\n\t\t} else {\n\t\t\tcurStyle += \" scale(0)\";\n\t\t\tthis.dot0.style.opacity = \"0\";\n\t\t\tthis.dot1.style.opacity = \"0\";\n\t\t\tthis.dot2.style.opacity = \"0\";\n\t\t}\n\n\t\tcurStyle += \";\";\n\n\t\tif (this.lastStyle !== curStyle) {\n\t\t\tthis.element.setAttribute(\"style\", curStyle);\n\t\t\tthis.lastStyle = curStyle;\n\t\t}\n\t}\n\tdispose() {\n\t\tthis.element.remove();\n\t}\n}\n","/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\n\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nvar float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\nfunction B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\nfunction C (aA1) { return 3.0 * aA1; }\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }\n\nfunction binarySubdivide (aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\n\nfunction newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\n\nfunction LinearEasing (x) {\n return x;\n}\n\nmodule.exports = function bezier (mX1, mY1, mX2, mY2) {\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if (mX1 === mY1 && mX2 === mY2) {\n return LinearEasing;\n }\n\n // Precompute samples table\n var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n\n function getTForX (aX) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n\n return function BezierEasing (x) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n};\n","// biome-ignore format: matrix\nexport type Matrix4 = [\n\tnumber, number, number, number,\n\tnumber, number, number, number,\n\tnumber, number, number, number,\n\tnumber, number, number, number,\n];\n\nexport function createMatrix4(): Matrix4 {\n\t// biome-ignore format: matrix\n\treturn [\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n ];\n}\n\nexport function scaleMatrix4(\n\tm: Matrix4,\n\tscale = 1,\n\torigin = { x: 0, y: 0 },\n): Matrix4 {\n\tconst [ox, oy] = [origin.x, origin.y];\n\t// biome-ignore format: matrix\n\treturn [\n m[0] * scale , m[1] * scale , m[2] * scale , m[3],\n m[4] * scale , m[5] * scale , m[6] * scale , m[7],\n m[8] * scale , m[9] * scale , m[10] * scale, m[11],\n m[12] - ox * scale + ox, m[13] - oy * scale + oy, m[14] , m[15]\n ];\n}\n\nexport function translateMatrix4(m: Matrix4, x = 0, y = 0, z = 0): Matrix4 {\n\t// biome-ignore format: matrix\n\treturn [\n m[0] , m[1] , m[2] , m[3] ,\n m[4] , m[5] , m[6] , m[7] ,\n m[8] , m[9] , m[10] , m[11],\n m[12] + x, m[13] + y, m[14] + z, m[15]\n ];\n}\n\nexport function matrix4ToCSS(m: Matrix4, fractionDigits = 4): string {\n\tconst format = (n: number, i: number) => n.toFixed(fractionDigits);\n\treturn `matrix3d(${m.map(format).join(\", \")})`;\n}\n","/**\n * @fileoverview\n * @see https://github.com/wilsonpage/fastdom/blob/master/fastdom.js\n */\n\ninterface Task<T> {\n\ttask: () => T;\n\tresolve: (value: T) => void;\n\treject: (reason?: any) => void;\n}\n\nconst measureTasks: Task<any>[] = [];\nconst mutateTasks: Task<any>[] = [];\nlet scheduled = false;\n\nfunction onFlush() {\n\tlet tmp = mutateTasks.shift();\n\twhile (tmp) {\n\t\ttry {\n\t\t\ttmp.resolve(tmp.task());\n\t\t} catch (error) {\n\t\t\ttmp.reject(error);\n\t\t}\n\t\ttmp = mutateTasks.shift();\n\t}\n\ttmp = measureTasks.shift();\n\twhile (tmp) {\n\t\ttry {\n\t\t\ttmp.resolve(tmp.task());\n\t\t} catch (error) {\n\t\t\ttmp.reject(error);\n\t\t}\n\t\ttmp = measureTasks.shift();\n\t}\n\tscheduled = false;\n}\n\nfunction scheduleFlush() {\n\tif (!scheduled) {\n\t\tscheduled = true;\n\t\trequestAnimationFrame(onFlush);\n\t}\n}\n\nexport function measure<T>(callback: () => T): Promise<T> {\n\tconst task: Task<T> = {\n\t\ttask: callback,\n\t\tresolve: () => {},\n\t\treject: () => {},\n\t};\n\tconst promise = new Promise<T>((resolve, reject) => {\n\t\ttask.resolve = resolve;\n\t\ttask.reject = reject;\n\t});\n\tmeasureTasks.push(task);\n\tscheduleFlush();\n\treturn promise;\n}\n\nexport function mutate(callback: () => void) {\n\tconst task: Task<void> = {\n\t\ttask: callback,\n\t\tresolve: () => {},\n\t\treject: () => {},\n\t};\n\tconst promise = new Promise((resolve, reject) => {\n\t\ttask.resolve = resolve;\n\t\ttask.reject = reject;\n\t});\n\tmutateTasks.push(task);\n\tscheduleFlush();\n\treturn promise;\n}\n","import bezier from \"bezier-easing\";\nimport type { LyricPlayer } from \".\";\nimport type {\n\tDisposable,\n\tHasElement,\n\tLyricLine,\n\tLyricWord,\n} from \"../interfaces\";\nimport styles from \"../styles/lyric-player.module.css\";\nimport { createMatrix4, matrix4ToCSS, scaleMatrix4 } from \"../utils/matrix\";\nimport { measure, mutate } from \"../utils/schedule\";\nimport { Spring } from \"../utils/spring\";\n\nconst CJKEXP = /^[\\p{Unified_Ideograph}\\u0800-\\u9FFC]+$/u;\n\ninterface RealWord extends LyricWord {\n\tmainElement: HTMLSpanElement;\n\tsubElements: HTMLSpanElement[];\n\telementAnimations: Animation[];\n\tmaskAnimations: Animation[];\n\twidth: number;\n\theight: number;\n\tpadding: number;\n\tshouldEmphasize: boolean;\n}\n\nconst ANIMATION_FRAME_QUANTITY = 32;\n\nconst norNum = (min: number, max: number) => (x: number) =>\n\tMath.min(1, Math.max(0, (x - min) / (max - min)));\nconst EMP_EASING_MID = 0.5;\nconst beginNum = norNum(0, EMP_EASING_MID);\nconst endNum = norNum(EMP_EASING_MID, 1);\n\nconst bezIn = bezier(0.2, 0.4, 0.58, 1.0);\nconst bezOut = bezier(0.3, 0.0, 0.58, 1.0);\n\nconst makeEmpEasing = (mid: number) => {\n\treturn (x: number) => (x < mid ? bezIn(beginNum(x)) : 1 - bezOut(endNum(x)));\n};\n\nfunction generateFadeGradient(\n\twidth: number,\n\tpadding = 0,\n\tbright = \"rgba(0,0,0,var(--bright-mask-alpha, 1.0))\",\n\tdark = \"rgba(0,0,0,var(--dark-mask-alpha, 1.0))\",\n): [string, number] {\n\tconst totalAspect = 2 + width + padding;\n\tconst widthInTotal = width / totalAspect;\n\tconst leftPos = (1 - widthInTotal) / 2;\n\treturn [\n\t\t`linear-gradient(to right,${bright} ${leftPos * 100}%,${dark} ${\n\t\t\t(leftPos + widthInTotal) * 100\n\t\t}%)`,\n\t\ttotalAspect,\n\t];\n}\n\n// 将输入的单词重新分组,之间没有空格的单词将会组合成一个单词数组\n// 例如输入:[\"Life\", \" \", \"is\", \" a\", \" su\", \"gar so\", \"sweet\"]\n// 应该返回:[\"Life\", \" \", \"is\", \" a\", [\" su\", \"gar\"], \"so\", \"sweet\"]\nfunction chunkAndSplitLyricWords(\n\twords: LyricWord[],\n): (LyricWord | LyricWord[])[] {\n\tconst resplitedWords: LyricWord[] = [];\n\n\tfor (const w of words) {\n\t\tconst realLength = w.word.replace(/\\s/g, \"\").length;\n\t\tconst splited = w.word.split(\" \").filter((v) => v.trim().length > 0);\n\t\tif (splited.length > 1) {\n\t\t\tif (w.word.startsWith(\" \")) {\n\t\t\t\tresplitedWords.push({\n\t\t\t\t\tword: \" \",\n\t\t\t\t\tstartTime: 0,\n\t\t\t\t\tendTime: 0,\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet charPos = 0;\n\t\t\tfor (const s of splited) {\n\t\t\t\tconst word: LyricWord = {\n\t\t\t\t\tword: s,\n\t\t\t\t\tstartTime:\n\t\t\t\t\t\tw.startTime + (charPos / realLength) * (w.endTime - w.startTime),\n\t\t\t\t\tendTime:\n\t\t\t\t\t\tw.startTime +\n\t\t\t\t\t\t((charPos + s.length) / realLength) * (w.endTime - w.startTime),\n\t\t\t\t};\n\t\t\t\tresplitedWords.push(word);\n\t\t\t\tresplitedWords.push({\n\t\t\t\t\tword: \" \",\n\t\t\t\t\tstartTime: 0,\n\t\t\t\t\tendTime: 0,\n\t\t\t\t});\n\t\t\t\tcharPos += s.length;\n\t\t\t}\n\t\t\tif (!w.word.endsWith(\" \")) {\n\t\t\t\tresplitedWords.pop();\n\t\t\t}\n\t\t} else {\n\t\t\tresplitedWords.push({\n\t\t\t\t...w,\n\t\t\t});\n\t\t}\n\t}\n\n\tlet wordChunk: string[] = [];\n\tlet wChunk: LyricWord[] = [];\n\tconst result: (LyricWord | LyricWord[])[] = [];\n\n\tfor (const w of resplitedWords) {\n\t\tconst word = w.word;\n\t\twordChunk.push(word);\n\t\twChunk.push(w);\n\t\tif (word.length > 0 && word.trim().length === 0) {\n\t\t\twordChunk.pop();\n\t\t\twChunk.pop();\n\t\t\tif (wChunk.length === 1) {\n\t\t\t\tresult.push(wChunk[0]);\n\t\t\t} else if (wChunk.length > 1) {\n\t\t\t\tresult.push(wChunk);\n\t\t\t}\n\t\t\tresult.push(w);\n\t\t\twordChunk = [];\n\t\t\twChunk = [];\n\t\t} else if (\n\t\t\t!/^\\s*[^\\s]*\\s*$/.test(wordChunk.join(\"\")) ||\n\t\t\tCJKEXP.test(word)\n\t\t) {\n\t\t\twordChunk.pop();\n\t\t\twChunk.pop();\n\t\t\tif (wChunk.length === 1) {\n\t\t\t\tresult.push(wChunk[0]);\n\t\t\t} else if (wChunk.length > 1) {\n\t\t\t\tresult.push(wChunk);\n\t\t\t}\n\t\t\twordChunk = [word];\n\t\t\twChunk = [w];\n\t\t}\n\t}\n\n\tif (wChunk.length === 1) {\n\t\tresult.push(wChunk[0]);\n\t} else {\n\t\tresult.push(wChunk);\n\t}\n\n\treturn result;\n}\n\n// 果子在对辉光效果的解释是一种强调(emphasized)效果\n// 条件是一个单词时长大于等于 1s 且长度小于等于 7\nexport function shouldEmphasize(word: LyricWord): boolean {\n\treturn (\n\t\tword.endTime - word.startTime >= 1000 &&\n\t\tword.word.trim().length <= 7 &&\n\t\tword.word.trim().length > 1\n\t);\n}\n\nexport class RawLyricLineMouseEvent extends MouseEvent {\n\tconstructor(\n\t\tpublic readonly line: LyricLineEl,\n\t\tevent: MouseEvent,\n\t) {\n\t\tsuper(event.type, event);\n\t}\n}\n\nfunction getScaleFromTransform(transform: string): number {\n\tconst match = transform.match(/matrix\\(([^)]+)\\)/);\n\tif (match) {\n\t\tconst values = match[1].split(\", \");\n\t\tconst scaleX = Number.parseFloat(values[0]);\n\t\tconst scaleY = Number.parseFloat(values[3]);\n\t\treturn (scaleX + scaleY) / 2; // Average of scaleX and scaleY\n\t}\n\treturn 1; // Default scale value if not found\n}\n\ntype MouseEventMap = {\n\t[evt in keyof HTMLElementEventMap]: HTMLElementEventMap[evt] extends MouseEvent\n\t\t? evt\n\t\t: never;\n};\ntype MouseEventTypes = MouseEventMap[keyof MouseEventMap];\ntype MouseEventListener = (\n\tthis: LyricLineEl,\n\tev: RawLyricLineMouseEvent,\n) => void;\n\nexport class LyricLineEl extends EventTarget implements HasElement, Disposable {\n\tprivate element: HTMLElement = document.createElement(\"div\");\n\tprivate left = 0;\n\tprivate top = 0;\n\tprivate scale = 1;\n\tprivate blur = 0;\n\tprivate delay = 0;\n\tprivate splittedWords: RealWord[] = [];\n\t// 由 LyricPlayer 来设置\n\tlineSize: number[] = [0, 0];\n\treadonly lineTransforms = {\n\t\tposX: new Spring(0),\n\t\tposY: new Spring(0),\n\t\tscale: new Spring(100),\n\t};\n\n\tconstructor(\n\t\tprivate lyricPlayer: LyricPlayer,\n\t\tprivate lyricLine: LyricLine = {\n\t\t\twords: [],\n\t\t\ttranslatedLyric: \"\",\n\t\t\tromanLyric: \"\",\n\t\t\tstartTime: 0,\n\t\t\tendTime: 0,\n\t\t\tisBG: false,\n\t\t\tisDuet: false,\n\t\t},\n\t) {\n\t\tsuper();\n\t\tthis._prevParentEl = lyricPlayer.getElement();\n\t\tthis.element.setAttribute(\"class\", styles.lyricLine);\n\t\tif (this.lyricLine.isBG) {\n\t\t\tthis.element.classList.add(styles.lyricBgLine);\n\t\t}\n\t\tif (this.lyricLine.isDuet) {\n\t\t\tthis.element.classList.add(styles.lyricDuetLine);\n\t\t}\n\t\tthis.element.appendChild(document.createElement(\"div\")); // 歌词行\n\t\tthis.element.appendChild(document.createElement(\"div\")); // 翻译行\n\t\tthis.element.appendChild(document.createElement(\"div\")); // 音译行\n\t\tconst main = this.element.children[0] as HTMLDivElement;\n\t\tconst trans = this.element.children[1] as HTMLDivElement;\n\t\tconst roman = this.element.children[2] as HTMLDivElement;\n\t\tmain.setAttribute(\"class\", styles.lyricMainLine);\n\t\ttrans.setAttribute(\"class\", styles.lyricSubLine);\n\t\troman.setAttribute(\"class\", styles.lyricSubLine);\n\t\tthis.rebuildElement();\n\t\tthis.rebuildStyle();\n\t}\n\tprivate listenersMap = new Map<string, Set<MouseEventListener>>();\n\tprivate readonly onMouseEvent = (e: MouseEvent) => {\n\t\tconst wrapped = new RawLyricLineMouseEvent(this, e);\n\t\tfor (const listener of this.listenersMap.get(e.type) ?? []) {\n\t\t\tlistener.call(this, wrapped);\n\t\t}\n\t\tif (!this.dispatchEvent(wrapped) || wrapped.defaultPrevented) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\treturn false;\n\t\t}\n\t};\n\n\taddMouseEventListener(\n\t\ttype: MouseEventTypes,\n\t\tcallback: MouseEventListener | null,\n\t\toptions?: boolean | AddEventListenerOptions | undefined,\n\t): void {\n\t\tif (callback) {\n\t\t\tconst listeners = this.listenersMap.get(type) ?? new Set();\n\t\t\tif (listeners.size === 0)\n\t\t\t\tthis.element.addEventListener(type, this.onMouseEvent, options);\n\t\t\tlisteners.add(callback);\n\t\t\tthis.listenersMap.set(type, listeners);\n\t\t}\n\t}\n\n\tremoveMouseEventListener(\n\t\ttype: MouseEventTypes,\n\t\tcallback: MouseEventListener | null,\n\t\toptions?: boolean | EventListenerOptions | undefined,\n\t): void {\n\t\tif (callback) {\n\t\t\tconst listeners = this.listenersMap.get(type);\n\t\t\tif (listeners) {\n\t\t\t\tlisteners.delete(callback);\n\t\t\t\tif (listeners.size === 0)\n\t\t\t\t\tthis.element.removeEventListener(type, this.onMouseEvent, options);\n\t\t\t}\n\t\t}\n\t}\n\n\tareWordsOnSameLine(word1: RealWord, word2: RealWord) {\n\t\tif (word1?.mainElement && word2?.mainElement) {\n\t\t\tconst word1el = word1.mainElement;\n\t\t\tconst word2el = word2.mainElement;\n\n\t\t\tconst rect1 = word1el.getBoundingClientRect();\n\t\t\tconst rect2 = word2el.getBoundingClientRect();\n\n\t\t\t// 检查两个单词的顶部距离是否相等(或者差值很小)\n\t\t\tconst topDifference = Math.abs(rect1.top - rect2.top);\n\n\t\t\t// 如果顶部距离相差很小,可以认为它们在同一行上\n\t\t\treturn topDifference < 10;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate isEnabled = false;\n\tprivate hasFaded = false;\n\tasync enable(maskAnimationTime = this.lyricLine.startTime) {\n\t\tthis.isEnabled = true;\n\t\tthis.hasFaded = false;\n\t\tthis.element.classList.add(styles.active);\n\t\tawait this.waitMaskImageUpdated();\n\t\tconst main = this.element.children[0] as HTMLDivElement;\n\t\tfor (const word of this.splittedWords) {\n\t\t\tfor (const a of word.elementAnimations) {\n\t\t\t\ta.currentTime = 0;\n\t\t\t\ta.playbackRate = 1;\n\t\t\t\ta.play();\n\t\t\t}\n\t\t\tfor (const a of word.maskAnimations) {\n\t\t\t\ta.currentTime = Math.min(\n\t\t\t\t\tthis.totalDuration,\n\t\t\t\t\tMath.max(0, maskAnimationTime - this.lyricLine.startTime),\n\t\t\t\t);\n\t\t\t\ta.playbackRate = 1;\n\t\t\t\ta.play();\n\t\t\t}\n\t\t}\n\t\tmain.classList.add(styles.active);\n\t}\n\tdisable(maskAnimationTime = 0) {\n\t\tthis.isEnabled = false;\n\t\tthis.hasFaded = true;\n\t\tthis.element.classList.remove(styles.active);\n\t\tconst main = this.element.children[0] as HTMLDivElement;\n\t\tlet i = 0;\n\t\tfor (const word of this.splittedWords) {\n\t\t\tfor (const a of word.elementAnimations) {\n\t\t\t\tif (\n\t\t\t\t\ta.id === \"float-word\" ||\n\t\t\t\t\ta.id.includes(\"emphasize-word-float-only\")\n\t\t\t\t) {\n\t\t\t\t\ta.playbackRate = -1;\n\t\t\t\t\ta.play();\n\t\t\t\t}\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\tmain.classList.remove(styles.active);\n\t}\n\tprivate lastWord?: RealWord;\n\tresume(currentTime = 0) {\n\t\tif (!this.isEnabled) return;\n\t\tfor (const word of this.splittedWords) {\n\t\t\tfor (const a of word.elementAnimations) {\n\t\t\t\tif (\n\t\t\t\t\t!this.lastWord ||\n\t\t\t\t\tthis.splittedWords.indexOf(this.lastWord) <\n\t\t\t\t\t\tthis.splittedWords.indexOf(word)\n\t\t\t\t) {\n\t\t\t\t\ta.play();\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const a of word.maskAnimations) {\n\t\t\t\tif (\n\t\t\t\t\t!this.lastWord ||\n\t\t\t\t\tthis.splittedWords.indexOf(this.lastWord) <\n\t\t\t\t\t\tthis.splittedWords.indexOf(word)\n\t\t\t\t) {\n\t\t\t\t\ta.play();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tpause(currentTime = 0) {\n\t\tif (!this.isEnabled) return;\n\t\tfor (const word of this.splittedWords) {\n\t\t\tfor (const a of word.elementAnimations) {\n\t\t\t\tif (word.startTime >= currentTime) {\n\t\t\t\t\ta.pause();\n\t\t\t\t} else {\n\t\t\t\t\tthis.lastWord = word;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const a of word.maskAnimations) {\n\t\t\t\tif (word.startTime >= currentTime) {\n\t\t\t\t\ta.pause();\n\t\t\t\t} else {\n\t\t\t\t\tthis.lastWord = word;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tsetMaskAnimationState(maskAnimationTime = 0) {\n\t\tconst t = maskAnimationTime - this.lyricLine.startTime;\n\t\tfor (const word of this.splittedWords) {\n\t\t\tfor (const a of word.maskAnimations) {\n\t\t\t\ta.currentTime = Math.min(this.totalDuration, Math.max(0, t));\n\t\t\t\ta.playbackRate = 1;\n\t\t\t\tif (t >= 0 && t < this.totalDuration) a.play();\n\t\t\t\telse a.pause();\n\t\t\t}\n\t\t}\n\t}\n\tmeasureSize(): [number, number] {\n\t\tthis.hasFaded = false;\n\t\tif (this._hide) {\n\t\t\tif (this._prevParentEl) {\n\t\t\t\tthis._prevParentEl.appendChild(this.element);\n\t\t\t}\n\t\t\tthis.element.style.display = \"\";\n\t\t\tthis.element.style.visibility = \"hidden\";\n\t\t}\n\t\tconst size: [number, number] = [\n\t\t\tthis.element.clientWidth,\n\t\t\tthis.element.clientHeight,\n\t\t];\n\t\tif (this._hide) {\n\t\t\tif (this._prevParentEl) {\n\t\t\t\tthis.element.remove();\n\t\t\t}\n\t\t\tthis.element.style.display = \"none\";\n\t\t\tthis.element.style.visibility = \"\";\n\t\t}\n\t\treturn size;\n\t}\n\tsetLine(line: LyricLine) {\n\t\tthis.lyricLine = line;\n\t\tif (this.lyricLine.isBG) {\n\t\t\tthis.element.classList.add(styles.lyricBgLine);\n\t\t} else {\n\t\t\tthis.element.classList.remove(styles.lyricBgLine);\n\t\t}\n\t\tif (this.lyricLine.isDuet) {\n\t\t\tthis.element.classList.add(styles.lyricDuetLine);\n\t\t} else {\n\t\t\tthis.element.classList.remove(styles.lyricDuetLine);\n\t\t}\n\t\tthis.rebuildElement();\n\t\tthis.rebuildStyle();\n\t}\n\tgetLine() {\n\t\treturn this.lyricLine;\n\t}\n\tprivate _hide = true;\n\tprivate _prevParentEl: HTMLElement | null = null;\n\tprivate lastStyle = \"\";\n\tshow() {\n\t\tthis._hide = false;\n\t\tif (this._prevParentEl) {\n\t\t\tthis._prevParentEl.appendChild(this.element);\n\t\t\tthis._prevParentEl = null;\n\t\t}\n\t\tthis.rebuildStyle();\n\t}\n\thide() {\n\t\tthis._hide = true;\n\t\tif (this.element.parentElement) {\n\t\t\tthis._prevParentEl = this.element.parentElement;\n\t\t\tthis.element.remove();\n\t\t}\n\t\tthis.rebuildStyle();\n\t}\n\trebuildStyle() {\n\t\tif (this._hide) {\n\t\t\tif (this.lastStyle !== \"display:none;transform:translate(0,-10000px);\") {\n\t\t\t\tthis.lastStyle = \"display:none;transform:translate(0,-10000px);\";\n\t\t\t\tthis.element.setAttribute(\n\t\t\t\t\t\"style\",\n\t\t\t\t\t\"display:none;transform:translate(0,-10000px);\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tlet style = \"\";\n\t\t// if (this.lyricPlayer.getEnableSpring()) {\n\t\tstyle += `transform:translate(${this.lineTransforms.posX\n\t\t\t.getCurrentPosition()\n\t\t\t.toFixed(1)}px,${this.lineTransforms.posY\n\t\t\t.getCurrentPosition()\n\t\t\t.toFixed(\n\t\t\t\t1,\n\t\t\t)}px) scale(${(this.lineTransforms.scale.getCurrentPosition() / 100).toFixed(4)});`;\n\t\tif (!this.lyricPlayer.getEnableSpring() && this.isInSight) {\n\t\t\tstyle += `transition-delay:${this.delay}ms;`;\n\t\t}\n\t\tstyle += `filter:blur(${Math.min(32, this.blur)}px);`;\n\t\tif (style !== this.lastStyle) {\n\t\t\tthis.lastStyle = style;\n\t\t\tthis.element.setAttribute(\"style\", style);\n\t\t}\n\t}\n\trebuildElement() {\n\t\tthis.disposeElements();\n\t\tconst main = this.element.children[0] as HTMLDivElement;\n\t\tconst trans = this.element.children[1] as HTMLDivElement;\n\t\tconst roman = this.element.children[2] as HTMLDivElement;\n\t\t// 如果是非动态歌词,那么就不需要分词了\n\t\tif (this.lyricPlayer._getIsNonDynamic()) {\n\t\t\tmain.innerText = this.lyricLine.words.map((w) => w.word).join(\"\");\n\t\t\ttrans.innerText = this.lyricLine.translatedLyric;\n\t\t\troman.innerText = this.lyricLine.romanLyric;\n\t\t\treturn;\n\t\t}\n\t\tconst chunkedWords = chunkAndSplitLyricWords(this.lyricLine.words);\n\t\tmain.innerHTML = \"\";\n\t\tfor (const chunk of chunkedWords) {\n\t\t\tif (Array.isArray(chunk)) {\n\t\t\t\t// 多个没有空格的单词组合成的一个单词数组\n\t\t\t\tif (chunk.length === 0) continue;\n\t\t\t\tconst merged = chunk.reduce(\n\t\t\t\t\t(a, b) => {\n\t\t\t\t\t\ta.endTime = Math.max(a.endTime, b.endTime);\n\t\t\t\t\t\ta.startTime = Math.min(a.startTime, b.startTime);\n\t\t\t\t\t\ta.word += b.word;\n\t\t\t\t\t\treturn a;\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tword: \"\",\n\t\t\t\t\t\tstartTime: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\tendTime: Number.NEGATIVE_INFINITY,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tconst emp = chunk\n\t\t\t\t\t.map((word) => shouldEmphasize(word))\n\t\t\t\t\t.reduce((a, b) => a || b, shouldEmphasize(merged));\n\t\t\t\tconst wrapperWordEl = document.createElement(\"span\");\n\t\t\t\twrapperWordEl.classList.add(styles.emphasizeWrapper);\n\t\t\t\tconst characterElements: HTMLElement[] = [];\n\t\t\t\tfor (const word of chunk) {\n\t\t\t\t\tconst mainWordEl = document.createElement(\"span\");\n\t\t\t\t\t// const mainWordFloatAnimation = this.initFloatAnimation(\n\t\t\t\t\t// \tmerged,\n\t\t\t\t\t// \tmainWordEl,\n\t\t\t\t\t// );\n\t\t\t\t\tif (emp) {\n\t\t\t\t\t\tmainWordEl.classList.add(styles.emphasize);\n\t\t\t\t\t\tconst charEls: HTMLSpanElement[] = [];\n\t\t\t\t\t\tfor (const char of word.word.trim().split(\"\")) {\n\t\t\t\t\t\t\tconst charEl = document.createElement(\"span\");\n\t\t\t\t\t\t\tcharEl.innerText = char;\n\t\t\t\t\t\t\tcharEls.push(charEl);\n\t\t\t\t\t\t\tcharacterElements.push(charEl);\n\t\t\t\t\t\t\tmainWordEl.appendChild(charEl);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst realWord: RealWord = {\n\t\t\t\t\t\t\t...word,\n\t\t\t\t\t\t\tmainElement: mainWordEl,\n\t\t\t\t\t\t\tsubElements: charEls,\n\t\t\t\t\t\t\telementAnimations: [this.initFloatAnimation(word, mainWordEl)],\n\t\t\t\t\t\t\tmaskAnimations: [],\n\t\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\t\theight: 0,\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\tshouldEmphasize: emp,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.splittedWords.push(realWord);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmainWordEl.innerText = word.word;\n\t\t\t\t\t\tthis.splittedWords.push({\n\t\t\t\t\t\t\t...word,\n\t\t\t\t\t\t\tmainElement: mainWordEl,\n\t\t\t\t\t\t\tsubElements: [],\n\t\t\t\t\t\t\telementAnimations: [this.initFloatAnimation(word, mainWordEl)],\n\t\t\t\t\t\t\tmaskAnimations: [],\n\t\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\t\theight: 0,\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\tshouldEmphasize: emp,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\twrapperWordEl.appendChild(mainWordEl);\n\t\t\t\t}\n\t\t\t\tif (emp) {\n\t\t\t\t\tthis.splittedWords[\n\t\t\t\t\t\tthis.splittedWords.length - 1\n\t\t\t\t\t].elementAnimations.push(\n\t\t\t\t\t\t...this.initEmphasizeAnimation(\n\t\t\t\t\t\t\tmerged,\n\t\t\t\t\t\t\tcharacterElements,\n\t\t\t\t\t\t\tmerged.endTime - merged.startTime,\n\t\t\t\t\t\t\tmerged.startTime - this.lyricLine.startTime,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (merged.word.trimStart() !== merged.word) {\n\t\t\t\t\tmain.appendChild(document.createTextNode(\" \"));\n\t\t\t\t}\n\t\t\t\tmain.appendChild(wrapperWordEl);\n\t\t\t\tif (merged.word.trimEnd() !== merged.word && shouldEmphasize(merged)) {\n\t\t\t\t\tmain.appendChild(document.createTextNode(\" \"));\n\t\t\t\t}\n\t\t\t} else if (chunk.word.trim().length === 0) {\n\t\t\t\t// 纯空格\n\t\t\t\tmain.appendChild(document.createTextNode(\" \"));\n\t\t\t} else {\n\t\t\t\t// 单个单词\n\t\t\t\tconst emp = shouldEmphasize(chunk);\n\t\t\t\tconst mainWordEl = document.createElement(\"span\");\n\t\t\t\tconst realWord: RealWord = {\n\t\t\t\t\t...chunk,\n\t\t\t\t\tmainElement: mainWordEl,\n\t\t\t\t\tsubElements: [],\n\t\t\t\t\telementAnimations: [this.initFloatAnimation(chunk, mainWordEl)],\n\t\t\t\t\tmaskAnimations: [],\n\t\t\t\t\twidth: 0,\n\t\t\t\t\theight: 0,\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tshouldEmphasize: emp,\n\t\t\t\t};\n\t\t\t\tif (shouldEmphasize(chunk)) {\n\t\t\t\t\tmainWordEl.classList.add(styles.emphasize);\n\t\t\t\t\tconst charEls: HTMLSpanElement[] = [];\n\t\t\t\t\tfor (const char of chunk.word.trim().split(\"\")) {\n\t\t\t\t\t\tconst charEl = document.createElement(\"span\");\n\t\t\t\t\t\tcharEl.innerText = char;\n\t\t\t\t\t\tcharEls.push(charEl);\n\t\t\t\t\t\tmainWordEl.appendChild(charEl);\n\t\t\t\t\t}\n\t\t\t\t\trealWord.subElements = charEls;\n\t\t\t\t\tconst duration = Math.abs(realWord.endTime - realWord.startTime);\n\t\t\t\t\trealWord.elementAnimations.push(\n\t\t\t\t\t\t...this.initEmphasizeAnimation(\n\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\tcharEls,\n\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t\trealWord.startTime - this.lyricLine.startTime,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\t// realWord.elementAnimations = this.initEmphasizeAnimation(realWord);\n\t\t\t\t} else {\n\t\t\t\t\tmainWordEl.innerText = chunk.word.trim();\n\t\t\t\t}\n\t\t\t\tif (chunk.word.trimStart() !== chunk.word) {\n\t\t\t\t\tmain.appendChild(document.createTextNode(\" \"));\n\t\t\t\t}\n\t\t\t\tmain.appendChild(mainWordEl);\n\t\t\t\tif (chunk.word.trimEnd() !== chunk.word) {\n\t\t\t\t\tmain.appendChild(document.createTextNode(\" \"));\n\t\t\t\t}\n\t\t\t\tthis.splittedWords.push(realWord);\n\t\t\t}\n\t\t}\n\t\ttrans.innerText = this.lyricLine.translatedLyric;\n\t\troman.innerText = this.lyricLine.romanLyric;\n\t}\n\tprivate initFloatAnimation(word: LyricWord, wordEl: HTMLSpanElement) {\n\t\tconst delay = word.startTime - this.lyricLine.startTime;\n\t\tconst duration = Math.max(1000, word.endTime - word.startTime);\n\t\tlet up = 0.05;\n\t\tif (this.lyricLine.isBG) {\n\t\t\tup *= 2;\n\t\t}\n\t\tconst a = wordEl.animate(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\ttransform: \"translateY(0px)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttransform: `translateY(${-up}em)`,\n\t\t\t\t},\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration: Number.isFinite(duration) ? duration : 0,\n\t\t\t\tdelay: Number.isFinite(delay) ? delay : 0,\n\t\t\t\tid: \"float-word\",\n\t\t\t\tcomposite: \"add\",\n\t\t\t\tfill: \"both\",\n\t\t\t\teasing: \"ease-out\",\n\t\t\t},\n\t\t);\n\t\ta.pause();\n\t\treturn a;\n\t}\n\t// 按照原 Apple Music 参考,强调效果只应用缩放、轻微左右位移和辉光效果,原主要的悬浮位移效果不变\n\t// 为了避免产生锯齿抖动感,使用 matrix3d 来实现缩放和位移\n\tprivate initEmphasizeAnimation(\n\t\tword: LyricWord,\n\t\tcharacterElements: HTMLElement[],\n\t\tduration: number,\n\t\tdelay: number,\n\t): Animation[] {\n\t\tconst de = Math.max(0, delay);\n\t\tlet du = Math.max(1000, duration);\n\n\t\tlet result: Animation[] = [];\n\n\t\tlet amount = du / 2000;\n\t\tamount = amount > 1 ? Math.sqrt(amount) : amount ** 3;\n\t\tlet blur = du / 3000;\n\t\tblur = blur > 1 ? Math.sqrt(blur) : blur ** 3;\n\t\tamount *= 0.6;\n\t\tblur *= 0.5;\n\t\tif (\n\t\t\tthis.lyricLine.words.length > 0 &&\n\t\t\tword.word.includes(\n\t\t\t\tthis.lyricLine.words[this.lyricLine.words.length - 1].word,\n\t\t\t)\n\t\t) {\n\t\t\tamount *= 1.6;\n\t\t\tblur *= 1.5;\n\t\t\tdu *= 1.2;\n\t\t}\n\t\tamount = Math.min(1.2, amount);\n\t\tblur = Math.min(0.8, blur);\n\n\t\tconst animateDu = Number.isFinite(du) ? du : 0;\n\t\tconst empEasing = makeEmpEasing(EMP_EASING_MID);\n\n\t\tresult = characterElements.flatMap((el, i, arr) => {\n\t\t\tconst wordDe = de + (du / 2.5 / arr.length) * i;\n\t\t\tconst result: Animation[] = [];\n\n\t\t\tconst frames: Keyframe[] = new Array(ANIMATION_FRAME_QUANTITY)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, j) => {\n\t\t\t\t\tconst x = (j + 1) / ANIMATION_FRAME_QUANTITY;\n\t\t\t\t\tconst transX = empEasing(x);\n\t\t\t\t\tconst glowLevel = empEasing(x) * blur;\n\n\t\t\t\t\tconst mat = scaleMatrix4(createMatrix4(), 1 + transX * 0.1 * amount);\n\t\t\t\t\tconst offsetX = -transX * 0.03 * amount * (arr.length / 2 - i);\n\t\t\t\t\tconst offsetY = -transX * 0.025 * amount;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\toffset: x,\n\t\t\t\t\t\ttransform: `${matrix4ToCSS(\n\t\t\t\t\t\t\tmat,\n\t\t\t\t\t\t\t4,\n\t\t\t\t\t\t)} translate(${offsetX}em, ${offsetY}em)`,\n\t\t\t\t\t\ttextShadow: `0 0 ${Math.min(\n\t\t\t\t\t\t\t0.3,\n\t\t\t\t\t\t\tblur * 0.3,\n\t\t\t\t\t\t)}em rgba(255, 255, 255, ${glowLevel})`,\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\tconst glow = el.animate(frames, {\n\t\t\t\tduration: animateDu,\n\t\t\t\tdelay: Number.isFinite(wordDe) ? wordDe : 0,\n\t\t\t\tid: `emphasize-word-${el.innerText}-${i}`,\n\t\t\t\titerations: 1,\n\t\t\t\tcomposite: \"replace\",\n\t\t\t\teasing: \"linear\",\n\t\t\t\tfill: \"both\",\n\t\t\t});\n\t\t\tglow.onfinish = () => {\n\t\t\t\tglow.pause();\n\t\t\t};\n\t\t\tglow.pause();\n\t\t\tresult.push(glow);\n\n\t\t\tconst floatFrame: Keyframe[] = new Array(ANIMATION_FRAME_QUANTITY)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, j) => {\n\t\t\t\t\tconst x = (j + 1) / ANIMATION_FRAME_QUANTITY;\n\t\t\t\t\tlet y = Math.sin(x * Math.PI);\n\t\t\t\t\t// y = x < 0.5 ? y : Math.max(y, 1.0);\n\t\t\t\t\tif (this.lyricLine.isBG) {\n\t\t\t\t\t\ty *= 2;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\toffset: x,\n\t\t\t\t\t\ttransform: `translateY(${-y * 0.05}em)`,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\tconst float = el.animate(floatFrame, {\n\t\t\t\tduration: animateDu * 1.4,\n\t\t\t\tdelay: Number.isFinite(wordDe) ? wordDe - 400 : 0,\n\t\t\t\tid: \"emphasize-word-float\",\n\t\t\t\titerations: 1,\n\t\t\t\tcomposite: \"add\",\n\t\t\t\teasing: \"linear\",\n\t\t\t\tfill: \"both\",\n\t\t\t});\n\t\t\tfloat.onfinish = () => {\n\t\t\t\tfloat.pause();\n\t\t\t};\n\t\t\tfloat.pause();\n\t\t\tresult.push(float);\n\n\t\t\treturn result;\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tprivate get totalDuration() {\n\t\treturn this.lyricLine.endTime - this.lyricLine.startTime;\n\t}\n\tprivate maskImageDirty = false;\n\tprivate markImageDirtyPromises: (() => void)[] = [];\n\tmarkMaskImageDirty(): Promise<void> {\n\t\tthis.maskImageDirty = true;\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.markImageDirtyPromises.push(resolve);\n\t\t});\n\t}\n\twaitMaskImageUpdated(): Promise<void> {\n\t\tif (this.maskImageDirty) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.markImageDirtyPromises.push(resolve);\n\t\t\t});\n\t\t}\n\t\treturn Promise.resolve();\n\t}\n\tasync updateMaskImage() {\n\t\tconst resolves = this.markImageDirtyPromises;\n\t\tthis.markImageDirtyPromises = [];\n\t\tthis.maskImageDirty = false;\n\t\tif (this._hide) {\n\t\t\tawait mutate(() => {\n\t\t\t\tif (this._prevParentEl) {\n\t\t\t\t\tthis._prevParentEl.appendChild(this.element);\n\t\t\t\t}\n\t\t\t\tthis.element.style.display = \"\";\n\t\t\t\tthis.element.style.visibility = \"hidden\";\n\t\t\t});\n\t\t}\n\t\tfor (const word of this.splittedWords) {\n\t\t\tconst el = word.mainElement;\n\t\t\tif (el) {\n\t\t\t\tawait measure(() => {\n\t\t\t\t\tword.padding = Number.parseFloat(getComputedStyle(el).paddingLeft);\n\t\t\t\t\tword.width = el.clientWidth - word.padding * 2;\n\t\t\t\t\tword.height = el.clientHeight - word.padding * 2;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tword.width = 0;\n\t\t\t\tword.height = 0;\n\t\t\t\tword.padding = 0;\n\t\t\t}\n\t\t}\n\t\tif (this.lyricPlayer.supportMaskImage) {\n\t\t\tthis.generateWebAnimationBasedMaskImage();\n\t\t} else {\n\t\t\tthis.generateCalcBasedMaskImage();\n\t\t}\n\t\tif (this._hide) {\n\t\t\tawait mutate(() => {\n\t\t\t\tif (this._prevParentEl) {\n\t\t\t\t\tthis.element.remove();\n\t\t\t\t}\n\t\t\t\tthis.element.style.display = \"none\";\n\t\t\t\tthis.element.style.visibility = \"\";\n\t\t\t});\n\t\t}\n\t\tfor (const resolve of resolves) {\n\t\t\tresolve();\n\t\t}\n\t}\n\tprivate generateCalcBasedMaskImage() {\n\t\tfor (const word of this.splittedWords) {\n\t\t\tconst wordEl = word.mainElement;\n\t\t\tif (wordEl) {\n\t\t\t\tword.width = wordEl.clientWidth;\n\t\t\t\tword.height = wordEl.clientHeight;\n\t\t\t\tconst fadeWidth = word.height * this.lyricPlayer.wordFadeWidth;\n\t\t\t\tconst [maskImage, totalAspect] = generateFadeGradient(\n\t\t\t\t\tfadeWidth / word.width,\n\t\t\t\t);\n\t\t\t\tconst totalAspectStr = `${totalAspect * 100}% 100%`;\n\t\t\t\tif (this.lyricPlayer.supportMaskImage) {\n\t\t\t\t\twordEl.style.maskImage = maskImage;\n\t\t\t\t\twordEl.style.maskRepeat = \"no-repeat\";\n\t\t\t\t\twordEl.style.maskOrigin = \"left\";\n\t\t\t\t\twordEl.style.maskSize = totalAspectStr;\n\t\t\t\t} else {\n\t\t\t\t\twordEl.style.webkitMaskImage = maskImage;\n\t\t\t\t\twordEl.style.webkitMaskRepeat = \"no-repeat\";\n\t\t\t\t\twordEl.style.webkitMaskOrigin = \"left\";\n\t\t\t\t\twordEl.style.webkitMaskSize = totalAspectStr;\n\t\t\t\t}\n\t\t\t\tconst w = word.width + fadeWidth;\n\t\t\t\tconst maskPos = `clamp(${-w}px,calc(${-w}px + (var(--amll-player-time) - ${\n\t\t\t\t\tword.startTime\n\t\t\t\t})*${\n\t\t\t\t\tw / Math.abs(word.endTime - word.startTime)\n\t\t\t\t}px),0px) 0px, left top`;\n\t\t\t\twordEl.style.maskPosition = maskPos;\n\t\t\t\twordEl.style.webkitMaskPosition = maskPos;\n\t\t\t}\n\t\t}\n\t}\n\tprivate generateWebAnimationBasedMaskImage() {\n\t\t// 因为歌词行有可能比行内单词的结束时间早,有可能导致过渡动画提早停止出现瑕疵\n\t\t// 所以要以单词的结束时间为准\n\t\tconst totalFadeDuration =\n\t\t\tMath.max(\n\t\t\t\tthis.splittedWords.reduce((pv, w) => Math.max(w.endTime, pv), 0),\n\t\t\t\tthis.lyricLine.endTime,\n\t\t\t) - this.lyricLine.startTime;\n\t\tthis.splittedWords.forEach((word, i) => {\n\t\t\tconst wordEl = word.mainElement;\n\t\t\tif (wordEl) {\n\t\t\t\tconst fadeWidth = word.height * this.lyricPlayer.wordFadeWidth;\n\t\t\t\tconst [maskImage, totalAspect] = generateFadeGradient(\n\t\t\t\t\tfadeWidth / (word.width + word.padding * 2),\n\t\t\t\t);\n\t\t\t\tconst totalAspectStr = `${totalAspect * 100}% 100%`;\n\t\t\t\tif (this.lyricPlayer.supportMaskImage) {\n\t\t\t\t\twordEl.style.maskImage = maskImage;\n\t\t\t\t\twordEl.style.maskRepeat = \"no-repeat\";\n\t\t\t\t\twordEl.style.maskOrigin = \"left\";\n\t\t\t\t\twordEl.style.maskSize = totalAspectStr;\n\t\t\t\t} else {\n\t\t\t\t\twordEl.style.webkitMaskImage = maskImage;\n\t\t\t\t\twordEl.style.webkitMaskRepeat = \"no-repeat\";\n\t\t\t\t\twordEl.style.webkitMaskOrigin = \"left\";\n\t\t\t\t\twordEl.style.webkitMaskSize = totalAspectStr;\n\t\t\t\t}\n\t\t\t\t// 为了尽可能将渐变动画在相连的每个单词间近似衔接起来\n\t\t\t\t// 要综合每个单词的效果时间和间隙生成动画帧数组\n\t\t\t\tconst widthBeforeSelf =\n\t\t\t\t\tthis.splittedWords.slice(0, i).reduce((a, b) => a + b.width, 0) +\n\t\t\t\t\t(this.splittedWords[0] ? fadeWidth : 0);\n\t\t\t\tconst minOffset = -(word.width + word.padding * 2 + fadeWidth);\n\t\t\t\tconst clampOffset = (x: number) => Math.max(minOffset, Math.min(0, x));\n\t\t\t\tlet curPos = -widthBeforeSelf - word.width - word.padding - fadeWidth;\n\t\t\t\tlet timeOffset = 0;\n\t\t\t\tconst frames: Keyframe[] = [];\n\t\t\t\tlet lastPos = curPos;\n\t\t\t\tlet lastTime = 0;\n\t\t\t\tconst pushFrame = () => {\n\t\t\t\t\tconst easing = \"cubic-bezier(.33,.12,.83,.9)\";\n\t\t\t\t\tconst moveOffset = curPos - lastPos;\n\t\t\t\t\tconst time = Math.max(0, Math.min(1, timeOffset));\n\t\t\t\t\tconst duration = time - lastTime;\n\t\t\t\t\tconst d = Math.abs(duration / moveOffset);\n\t\t\t\t\t// 因为有可能会和之前的动画有边界\n\t\t\t\t\tif (curPos > minOffset && lastPos < minOffset) {\n\t\t\t\t\t\tconst staticTime = Math.abs(lastPos - minOffset) * d;\n\t\t\t\t\t\tconst value = `${clampOffset(lastPos)}px 0`;\n\t\t\t\t\t\tconst frame: Keyframe = {\n\t\t\t\t\t\t\toffset: lastTime + staticTime,\n\t\t\t\t\t\t\tmaskPosition: value,\n\t\t\t\t\t\t\teasing: easing,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tframes.push(frame);\n\t\t\t\t\t}\n\t\t\t\t\tif (curPos > 0 && lastPos < 0) {\n\t\t\t\t\t\tconst staticTime = Math.abs(lastPos) * d;\n\t\t\t\t\t\tconst value = `${clampOffset(curPos)}px 0`;\n\t\t\t\t\t\tconst frame: Keyframe = {\n\t\t\t\t\t\t\toffset: lastTime + staticTime,\n\t\t\t\t\t\t\tmaskPosition: value,\n\t\t\t\t\t\t\teasing: easing,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tframes.push(frame);\n\t\t\t\t\t}\n\t\t\t\t\tconst value = `${clampOffset(curPos)}px 0`;\n\t\t\t\t\tconst frame: Keyframe = {\n\t\t\t\t\t\toffset: time,\n\t\t\t\t\t\tmaskPosition: value,\n\t\t\t\t\t\teasing: easing,\n\t\t\t\t\t};\n\t\t\t\t\tframes.push(frame);\n\t\t\t\t\tlastPos = curPos;\n\t\t\t\t\tlastTime = time;\n\t\t\t\t};\n\t\t\t\tpushFrame();\n\t\t\t\tlet lastTimeStamp = 0;\n\t\t\t\tthis.splittedWords.forEach((otherWord, j) => {\n\t\t\t\t\t// 停顿\n\t\t\t\t\t{\n\t\t\t\t\t\tconst curTimeStamp = otherWord.startTime - this.lyricLine.startTime;\n\t\t\t\t\t\tconst staticDuration = curTimeStamp - lastTimeStamp;\n\t\t\t\t\t\ttimeOffset += staticDuration / totalFadeDuration;\n\t\t\t\t\t\tif (staticDuration > 0) pushFrame();\n\t\t\t\t\t\tlastTimeStamp = curTimeStamp;\n\t\t\t\t\t}\n\t\t\t\t\t// 移动\n\t\t\t\t\t{\n\t\t\t\t\t\tconst fadeDuration = otherWord.endTime - otherWord.startTime;\n\t\t\t\t\t\ttimeOffset += fadeDuration / totalFadeDuration;\n\t\t\t\t\t\tcurPos += otherWord.width;\n\t\t\t\t\t\tif (j === 0) {\n\t\t\t\t\t\t\tcurPos += fadeWidth * 1.5;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (j === this.splittedWords.length - 1) {\n\t\t\t\t\t\t\tcurPos += fadeWidth * 0.5;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (fadeDuration > 0) pushFrame();\n\t\t\t\t\t\tlastTimeStamp += fadeDuration;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tfor (const a of word.maskAnimations) {\n\t\t\t\t\ta.cancel();\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\t// TODO: 如果此处动画帧计算出错,需要一个后备方案\n\t\t\t\t\tconst ani = wordEl.animate(frames, {\n\t\t\t\t\t\tduration: totalFadeDuration || 1,\n\t\t\t\t\t\tid: `fade-word-${word.word}-${i}`,\n\t\t\t\t\t\tfill: \"both\",\n\t\t\t\t\t\teasing: \"cubic-bezier(1,1,.66,.99)\",\n\t\t\t\t\t});\n\t\t\t\t\tani.pause();\n\t\t\t\t\tword.maskAnimations = [ani];\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconsole.warn(\"应用渐变动画发生错误\", frames, totalFadeDuration, err);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tgetElement() {\n\t\treturn this.element;\n\t}\n\tsetTransform(\n\t\tleft: number = this.left,\n\t\ttop: number = this.top,\n\t\tscale: number = this.scale,\n\t\topacity = 1,\n\t\tsubopacity = 0.4,\n\t\tblur = 0,\n\t\tforce = false,\n\t\tdelay = 0,\n\t) {\n\t\tconst beforeInSight = this.isInSight;\n\t\tconst enableSpring = this.lyricPlayer.getEnableSpring();\n\t\tthis.left = left;\n\t\tthis.top = top;\n\t\tthis.scale = scale;\n\t\tthis.delay = (delay * 1000) | 0;\n\t\tconst main = this.element.children[0] as HTMLDivElement;\n\t\tconst trans = this.element.children[1] as HTMLDivElement;\n\t\tconst roman = this.element.children[2] as HTMLDivElement;\n\t\t// main.style.opacity = `${opacity *\n\t\t// \t(!this.hasFaded ? 1 : this.lyricPlayer._getIsNonDynamic() ? 1 : 0.3)\n\t\t// \t}`;\n\t\tmain.style.opacity = `${opacity}`;\n\t\ttrans.style.opacity = `${subopacity}`;\n\t\troman.style.opacity = `${subopacity}`;\n\t\tif (force || !enableSpring) {\n\t\t\tthis.blur = Math.min(32, blur);\n\t\t\tif (force) this.element.classList.add(styles.tmpDisableTransition);\n\t\t\t// this.lineWebAnimationTransforms.posX.setTargetPosition(left);\n\t\t\t// this.lineWebAnimationTransforms.posY.setTargetPosition(top);\n\t\t\t// this.lineWebAnimationTransforms.scale.setTargetPosition(scale);\n\t\t\tthis.lineTransforms.posX.setPosition(left);\n\t\t\tthis.lineTransforms.posY.setPosition(top);\n\t\t\tthis.lineTransforms.scale.setPosition(scale);\n\t\t\tif (!enableSpring) {\n\t\t\t\tconst afterInSight = this.isInSight;\n\t\t\t\tif (beforeInSight || afterInSight) {\n\t\t\t\t\tthis.show();\n\t\t\t\t} else {\n\t\t\t\t\tthis.hide();\n\t\t\t\t}\n\t\t\t} else this.rebuildStyle();\n\t\t\tif (force)\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tthis.element.classList.remove(styles.tmpDisableTransition);\n\t\t\t\t});\n\t\t} else {\n\t\t\t// this.lineWebAnimationTransforms.posX.stop();\n\t\t\t// this.lineWebAnimationTransforms.posY.stop();\n\t\t\t// this.lineWebAnimationTransforms.scale.stop();\n\t\t\tthis.lineTransforms.posX.setTargetPosition(left, delay);\n\t\t\tthis.lineTransforms.posY.setTargetPosition(top, delay);\n\t\t\tthis.lineTransforms.scale.setTargetPosition(scale);\n\t\t\tif (this.blur !== Math.min(32, blur)) {\n\t\t\t\tthis.blur = Math.min(32, blur);\n\t\t\t\tconst roundedBlur = blur.toFixed(3);\n\t\t\t\tthis.element.style.filter = `blur(${roundedBlur}px)`;\n\t\t\t}\n\t\t}\n\t}\n\tupdate(delta = 0) {\n\t\tif (!this.lyricPlayer.getEnableSpring()) return;\n\t\tthis.lineTransforms.posX.update(delta);\n\t\tthis.lineTransforms.posY.update(delta);\n\t\tthis.lineTransforms.scale.update(delta);\n\t\tif (this.isInSight) {\n\t\t\tthis.show();\n\t\t\tif (this.maskImageDirty) {\n\t\t\t\tthis.updateMaskImage();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t\tif (this.lyricPlayer.getEnableSpring()) {\n\t\t\tthis.element.style.setProperty(\n\t\t\t\t\"--bright-mask-alpha\",\n\t\t\t\t`${\n\t\t\t\t\tMath.max(\n\t\t\t\t\t\t0.0,\n\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t1.0,\n\t\t\t\t\t\t\tthis.lineTransforms.scale.getCurrentPosition() / 100 - 0.97,\n\t\t\t\t\t\t) / 0.03,\n\t\t\t\t\t) *\n\t\t\t\t\t\t0.8 +\n\t\t\t\t\t0.2\n\t\t\t\t}`,\n\t\t\t);\n\t\t\tthis.element.style.setProperty(\n\t\t\t\t\"--dark-mask-alpha\",\n\t\t\t\t`${\n\t\t\t\t\tMath.max(\n\t\t\t\t\t\t0.0,\n\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t1.0,\n\t\t\t\t\t\t\tthis.lineTransforms.scale.getCurrentPosition() / 100 - 0.97,\n\t\t\t\t\t\t) / 0.03,\n\t\t\t\t\t) *\n\t\t\t\t\t\t0.2 +\n\t\t\t\t\t0.2\n\t\t\t\t}`,\n\t\t\t);\n\t\t} else {\n\t\t\tconst computedStyle = window.getComputedStyle(this.element);\n\t\t\tconst transform = computedStyle.transform;\n\n\t\t\t// Extract the scale value from the transform property\n\t\t\tconst scale = getScaleFromTransform(transform);\n\n\t\t\tthis.element.style.setProperty(\n\t\t\t\t\"--bright-mask-alpha\",\n\t\t\t\t`${Math.max(0.0, Math.min(1.0, (scale - 0.97) / 0.03)) * 0.8 + 0.2}`,\n\t\t\t);\n\t\t\tthis.element.style.setProperty(\n\t\t\t\t\"--dark-mask-alpha\",\n\t\t\t\t`${Math.max(0.0, Math.min(1.0, (scale - 0.97) / 0.03)) * 0.2 + 0.2}`,\n\t\t\t);\n\t\t}\n\t}\n\n\t_getDebugTargetPos(): string {\n\t\treturn `[位移: ${this.left}, ${this.top}; 缩放: ${this.scale}; 延时: ${this.delay}]`;\n\t}\n\n\tget isInSight() {\n\t\tconst l = this.lineTransforms.posX.getCurrentPosition();\n\t\tconst t = this.lineTransforms.posY.getCurrentPosition();\n\t\tconst w = this.lineSize[0];\n\t\tconst h = this.lineSize[1];\n\t\tconst r = l + w;\n\t\tconst b = t + h;\n\t\tconst pr = this.lyricPlayer.size[0];\n\t\tconst pb = this.lyricPlayer.size[1];\n\t\treturn !(l > pr + w || r < -w || t > pb + h || b < -h);\n\t}\n\tprivate disposeElements() {\n\t\tfor (const realWord of this.splittedWords) {\n\t\t\tfor (const a of realWord.elementAnimations) {\n\t\t\t\ta.cancel();\n\t\t\t}\n\t\t\tfor (const a of realWord.maskAnimations) {\n\t\t\t\ta.cancel();\n\t\t\t}\n\t\t\tfor (const sub of realWord.subElements) {\n\t\t\t\tsub.remove();\n\t\t\t\tsub.parentNode?.removeChild(sub);\n\t\t\t}\n\t\t\trealWord.elementAnimations = [];\n\t\t\trealWord.maskAnimations = [];\n\t\t\trealWord.subElements = [];\n\t\t\trealWord.mainElement.remove();\n\t\t\trealWord.mainElement.parentNode?.removeChild(realWord.mainElement);\n\t\t}\n\t\tthis.splittedWords = [];\n\t}\n\tdispose(): void {\n\t\tthis.disposeElements();\n\t\tthis.element.remove();\n\t}\n}\n","/**\n * @fileoverview\n * 一个播放歌词的组件\n * @author SteveXMH\n */\n\nimport type { Disposable, HasElement, LyricLine } from \"../interfaces\";\nimport \"../styles/index.css\";\nimport styles from \"../styles/lyric-player.module.css\";\nimport { debounceFrame } from \"../utils/debounce\";\nimport { eqSet } from \"../utils/eq-set\";\nimport type { SpringParams } from \"../utils/spring\";\nimport { BottomLineEl } from \"./bottom-line\";\nimport { InterludeDots } from \"./interlude-dots\";\nimport { LyricLineEl, type RawLyricLineMouseEvent } from \"./lyric-line\";\n\n/**\n * 歌词行鼠标相关事件,可以获取到歌词行的索引和歌词行元素\n */\nexport class LyricLineMouseEvent extends MouseEvent {\n\tconstructor(\n\t\t/**\n\t\t * 歌词行索引\n\t\t */\n\t\tpublic readonly lineIndex: number,\n\t\t/**\n\t\t * 歌词行元素\n\t\t */\n\t\tpublic readonly line: LyricLineEl,\n\t\tevent: MouseEvent,\n\t) {\n\t\tsuper(`line-${event.type}`, event);\n\t}\n}\n\nexport type LyricLineMouseEventListener = (evt: LyricLineMouseEvent) => void;\n\n/**\n * 歌词播放组件,本框架的核心组件\n *\n * 尽可能贴切 Apple Music for iPad 的歌词效果设计,且做了力所能及的优化措施\n */\nexport class LyricPlayer extends EventTarget implements HasElement, Disposable {\n\tprivate element: HTMLElement = document.createElement(\"div\");\n\tprivate currentTime = 0;\n\tprivate lastCurrentTime = 0;\n\tprivate lyricLines: LyricLine[] = [];\n\tprivate processedLines: LyricLine[] = [];\n\tprivate lyricLinesEl: LyricLineEl[] = [];\n\tprivate lyricLinesSize: WeakMap<LyricLineEl, [number, number]> =\n\t\tnew WeakMap();\n\tprivate lyricLinesIndexes: WeakMap<LyricLineEl, number> = new WeakMap();\n\tprivate hotLines: Set<number> = new Set();\n\tprivate bufferedLines: Set<number> = new Set();\n\tprivate scrollToIndex = 0;\n\tprivate _wordFadeWidth = 0.5;\n\tprivate allowScroll = true;\n\tprivate scrolledHandler = 0;\n\tprivate isScrolled = false;\n\tprivate isSeeking = false;\n\tprivate initializeSeeking = false;\n\tprivate invokedByScrollEvent = false;\n\tprivate scrollOffset = 0;\n\tprivate hidePassedLines = false;\n\tprivate debounceCalcLayout = debounceFrame(async () => {\n\t\tthis.calcLayout(true, true);\n\t\tthis.lyricLinesEl.forEach((el, i) => {\n\t\t\tel.markMaskImageDirty().then(() => {\n\t\t\t\tif (this.hotLines.has(i)) {\n\t\t\t\t\tel.enable(this.currentTime);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}, 5);\n\tprivate resizeObserver: ResizeObserver = new ResizeObserver(\n\t\tdebounceFrame(\n\t\t\t((e) => {\n\t\t\t\tconst rect = e[0].contentRect;\n\t\t\t\tthis.size[0] = rect.width;\n\t\t\t\tthis.size[1] = rect.height;\n\t\t\t\tconst styles = getComputedStyle(e[0].target);\n\t\t\t\tconst innerWidth =\n\t\t\t\t\tthis.element.clientWidth -\n\t\t\t\t\tNumber.parseFloat(styles.paddingLeft) -\n\t\t\t\t\tNumber.parseFloat(styles.paddingRight);\n\t\t\t\tconst innerHeight =\n\t\t\t\t\tthis.element.clientHeight -\n\t\t\t\t\tNumber.parseFloat(styles.paddingTop) -\n\t\t\t\t\tNumber.parseFloat(styles.paddingBottom);\n\t\t\t\tthis.innerSize[0] = innerWidth;\n\t\t\t\tthis.innerSize[1] = innerHeight;\n\t\t\t\tthis.rebuildStyle();\n\t\t\t\tthis.lyricLinesEl.forEach((el, i) => {\n\t\t\t\t\tel.markMaskImageDirty().then(() => {\n\t\t\t\t\t\tif (this.hotLines.has(i)) {\n\t\t\t\t\t\t\tel.enable(this.currentTime);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tfor (const el of this.lyricLinesEl) {\n\t\t\t\t\tel.markMaskImageDirty();\n\t\t\t\t}\n\t\t\t\tthis.debounceCalcLayout();\n\t\t\t}) as ResizeObserverCallback,\n\t\t\t5,\n\t\t),\n\t);\n\tprivate posXSpringParams: Partial<SpringParams> = {\n\t\tmass: 1,\n\t\tdamping: 10,\n\t\tstiffness: 100,\n\t};\n\tprivate posYSpringParams: Partial<SpringParams> = {\n\t\tmass: 0.9,\n\t\tdamping: 15,\n\t\tstiffness: 90,\n\t};\n\tprivate scaleSpringParams: Partial<SpringParams> = {\n\t\tmass: 2,\n\t\tdamping: 25,\n\t\tstiffness: 100,\n\t};\n\t// private scaleSpringParams: Partial<SpringParams> = {\n\t// \tmass: 1,\n\t// \tdamping: 25,\n\t// \tstiffness: 40,\n\t// };\n\tprivate scaleForBGSpringParams: Partial<SpringParams> = {\n\t\tmass: 1,\n\t\tdamping: 20,\n\t\tstiffness: 50,\n\t};\n\tprivate enableBlur = true;\n\tprivate enableScale = true;\n\tprivate interludeDots: InterludeDots;\n\tprivate interludeDotsSize: [number, number] = [0, 0];\n\tprivate bottomLine: BottomLineEl;\n\treadonly supportPlusLighter = CSS.supports(\"mix-blend-mode\", \"plus-lighter\");\n\treadonly supportMaskImage = CSS.supports(\"mask-image\", \"none\");\n\tprivate disableSpring = false;\n\tprivate alignAnchor: \"top\" | \"bottom\" | \"center\" = \"center\";\n\tprivate alignPosition = 0.35;\n\tprivate isNonDynamic = false;\n\tprivate isNonDuet = false;\n\tprivate scrollBoundary = [0, 0];\n\treadonly size: [number, number] = [0, 0];\n\treadonly innerSize: [number, number] = [0, 0];\n\tprivate readonly onLineClickedHandler = (e: RawLyricLineMouseEvent) => {\n\t\tconst evt = new LyricLineMouseEvent(\n\t\t\tthis.lyricLinesIndexes.get(e.line) ?? -1,\n\t\t\te.line,\n\t\t\te,\n\t\t);\n\t\tif (!this.dispatchEvent(evt)) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\t};\n\t/**\n\t * 是否为非逐词歌词\n\t * @internal\n\t */\n\t_getIsNonDynamic() {\n\t\treturn this.isNonDynamic;\n\t}\n\tsetIsSeeking(isSeeking: boolean) {\n\t\tthis.isSeeking = isSeeking;\n\t}\n\t/**\n\t * 设置是否使用物理弹簧算法实现歌词动画效果,默认启用\n\t *\n\t * 如果启用,则会通过弹簧算法实时处理歌词位置,但是需要性能足够强劲的电脑方可流畅运行\n\t *\n\t * 如果不启用,则会回退到基于 `transition` 的过渡效果,对低性能的机器比较友好,但是效果会比较单一\n\t */\n\tsetEnableSpring(enable = true) {\n\t\tthis.disableSpring = !enable;\n\t\tif (enable) {\n\t\t\tthis.element.classList.remove(styles.disableSpring);\n\t\t} else {\n\t\t\tthis.element.classList.add(styles.disableSpring);\n\t\t}\n\t\tthis.calcLayout(true);\n\t}\n\t/**\n\t * 获取当前是否启用了物理弹簧\n\t * @returns 是否启用物理弹簧\n\t */\n\tgetEnableSpring() {\n\t\treturn !this.disableSpring;\n\t}\n\t/**\n\t * 是否启用歌词行缩放效果,默认启用\n\t *\n\t * 如果启用,非选中的歌词行会轻微缩小以凸显当前播放歌词行效果\n\t *\n\t * 此效果对性能影响微乎其微,推荐启用\n\t * @param enable 是否启用歌词行缩放效果\n\t */\n\tsetEnableScale(enable = true) {\n\t\tthis.enableScale = enable;\n\t\tthis.calcLayout();\n\t}\n\t/**\n\t * 获取当前是否启用了歌词行缩放效果\n\t * @returns 是否启用歌词行缩放效果\n\t */\n\tgetEnableScale() {\n\t\treturn this.enableScale;\n\t}\n\tprivate _baseFontSize = Number.parseFloat(\n\t\tgetComputedStyle(this.element).fontSize,\n\t);\n\tpublic get baseFontSize() {\n\t\treturn this._baseFontSize;\n\t}\n\tprivate isPageVisible = true;\n\tprivate onPageShow = () => {\n\t\tthis.isPageVisible = true;\n\t\tthis.setCurrentTime(this.currentTime, true);\n\t};\n\tprivate onPageHide = () => {\n\t\tthis.isPageVisible = false;\n\t};\n\tconstructor() {\n\t\tsuper();\n\t\tthis.interludeDots = new InterludeDots(this);\n\t\tthis.bottomLine = new BottomLineEl(this);\n\t\tthis.element.setAttribute(\"class\", \"amll-lyric-player\");\n\t\tif (this.disableSpring) {\n\t\t\tthis.element.classList.add(styles.disableSpring);\n\t\t}\n\t\tthis.rebuildStyle();\n\t\tthis.resizeObserver.observe(this.element);\n\t\tthis.element.appendChild(this.interludeDots.getElement());\n\t\tthis.element.appendChild(this.bottomLine.getElement());\n\t\tthis.interludeDots.setTransform(0, 200);\n\t\twindow.addEventListener(\"pageshow\", this.onPageShow);\n\t\twindow.addEventListener(\"pagehide\", this.onPageHide);\n\t\tlet startScrollY = 0;\n\t\tlet direction: \"up\" | \"down\" | \"none\" = \"none\";\n\t\tlet startTouchPosY = 0;\n\t\tlet startScrollTime = 0;\n\t\tlet scrollSpeed = 0;\n\t\tlet scrollId = Symbol(\"amll-scroll\");\n\t\tlet lastMoveY = 0;\n\t\tlet lastDragTime = 0;\n\t\tthis.element.addEventListener(\"touchstart\", (evt) => {\n\t\t\tif (this.beginScrollHandler()) {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tstartScrollY = this.scrollOffset;\n\t\t\t\tstartTouchPosY = evt.touches[0].screenY;\n\t\t\t\tlastMoveY = startTouchPosY;\n\t\t\t\tstartScrollTime = Date.now();\n\t\t\t\tscrollSpeed = 0;\n\t\t\t}\n\t\t});\n\t\tthis.element.addEventListener(\"touchmove\", (evt) => {\n\t\t\tif (this.beginScrollHandler()) {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tconst touchScreenY = evt.touches[0].screenY;\n\t\t\t\tconst delta = touchScreenY - startTouchPosY;\n\t\t\t\tconst lastDelta = touchScreenY - lastMoveY;\n\t\t\t\tconst targetDirection =\n\t\t\t\t\tlastDelta > 0 ? \"down\" : lastDelta < 0 ? \"up\" : \"none\";\n\t\t\t\tif (direction !== targetDirection) {\n\t\t\t\t\tdirection = targetDirection;\n\t\t\t\t\tstartScrollY = this.scrollOffset;\n\t\t\t\t\tstartTouchPosY = touchScreenY;\n\t\t\t\t\tstartScrollTime = Date.now();\n\t\t\t\t} else {\n\t\t\t\t\tthis.scrollOffset = startScrollY - delta;\n\t\t\t\t}\n\t\t\t\tlastMoveY = touchScreenY;\n\t\t\t\tlastDragTime = Date.now();\n\t\t\t\tthis.limitScrollOffset();\n\t\t\t\tthis.calcLayout(true);\n\t\t\t}\n\t\t});\n\t\tthis.element.addEventListener(\"touchend\", (evt) => {\n\t\t\tif (this.beginScrollHandler()) {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tstartTouchPosY = 0;\n\t\t\t\tconst curTime = Date.now();\n\t\t\t\tif (curTime - lastDragTime > 100) return this.endScrollHandler();\n\t\t\t\tconst scrollDuration = curTime - startScrollTime;\n\t\t\t\tscrollSpeed =\n\t\t\t\t\t((this.scrollOffset - startScrollY) / scrollDuration) * 1000;\n\t\t\t\tlet lt = 0;\n\t\t\t\tconst curScrollId = Symbol(\"amll-scroll\");\n\t\t\t\tscrollId = curScrollId;\n\t\t\t\tconst onScrollFrame = (dt: number) => {\n\t\t\t\t\tlt ||= dt;\n\t\t\t\t\tif (scrollId === curScrollId && this.beginScrollHandler()) {\n\t\t\t\t\t\tthis.scrollOffset += (scrollSpeed * (dt - lt)) / 1000;\n\t\t\t\t\t\tscrollSpeed *= 0.99;\n\t\t\t\t\t\tthis.limitScrollOffset();\n\t\t\t\t\t\tthis.calcLayout(true);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tMath.abs(scrollSpeed) > 1 &&\n\t\t\t\t\t\t\t!this.scrollBoundary.includes(this.scrollOffset)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\trequestAnimationFrame(onScrollFrame);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.endScrollHandler();\n\t\t\t\t\t\tlt = dt;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\trequestAnimationFrame(onScrollFrame);\n\t\t\t\tthis.endScrollHandler();\n\t\t\t}\n\t\t});\n\t\tthis.element.addEventListener(\"wheel\", (evt) => {\n\t\t\tif (this.beginScrollHandler()) {\n\t\t\t\tif (evt.deltaMode === evt.DOM_DELTA_PIXEL) {\n\t\t\t\t\tthis.scrollOffset += evt.deltaY;\n\t\t\t\t\tthis.limitScrollOffset();\n\t\t\t\t\tthis.calcLayout(true);\n\t\t\t\t} else {\n\t\t\t\t\tthis.scrollOffset += evt.deltaY * 50;\n\t\t\t\t\tthis.limitScrollOffset();\n\t\t\t\t\tthis.calcLayout(false);\n\t\t\t\t}\n\t\t\t\tthis.endScrollHandler();\n\t\t\t}\n\t\t});\n\t}\n\tprivate beginScrollHandler() {\n\t\tconst allowed = this.allowScroll;\n\t\tif (allowed) {\n\t\t\tthis.isScrolled = true;\n\t\t\tthis.invokedByScrollEvent = true;\n\t\t\tclearTimeout(this.scrolledHandler);\n\t\t\tthis.scrolledHandler = setTimeout(() => {\n\t\t\t\tthis.isScrolled = false;\n\t\t\t\tthis.scrollOffset = 0;\n\t\t\t}, 5000);\n\t\t}\n\t\treturn allowed;\n\t}\n\tprivate endScrollHandler() {\n\t\tthis.invokedByScrollEvent = false;\n\t}\n\tprivate limitScrollOffset() {\n\t\tthis.scrollOffset = Math.max(\n\t\t\tMath.min(this.scrollBoundary[1], this.scrollOffset),\n\t\t\tthis.scrollBoundary[0],\n\t\t);\n\t}\n\t/**\n\t * 获取当前播放时间里是否处于间奏区间\n\t * 如果是则会返回单位为毫秒的始末时间\n\t * 否则返回 undefined\n\t *\n\t * 这个只允许内部调用\n\t * @returns [开始时间,结束时间,大概处于的歌词行ID,下一句是否为对唱歌词] 或 undefined 如果不处于间奏区间\n\t */\n\tgetCurrentInterlude(): [number, number, number, boolean] | undefined {\n\t\tif (this.bufferedLines.size > 0) return undefined;\n\t\tconst currentTime = this.currentTime + 20;\n\t\tconst i = this.scrollToIndex;\n\t\tif (i === 0) {\n\t\t\tif (this.processedLines[0]?.startTime) {\n\t\t\t\tif (this.processedLines[0].startTime > currentTime) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\tcurrentTime,\n\t\t\t\t\t\tMath.max(currentTime, this.processedLines[0].startTime - 250),\n\t\t\t\t\t\t-2,\n\t\t\t\t\t\tthis.processedLines[0].isDuet,\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tthis.processedLines[1].startTime > currentTime &&\n\t\t\t\t\tthis.processedLines[0].endTime < currentTime\n\t\t\t\t) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\tMath.max(this.processedLines[0].endTime, currentTime),\n\t\t\t\t\t\tthis.processedLines[1].startTime,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tthis.processedLines[1].isDuet,\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (\n\t\t\tthis.processedLines[i]?.endTime &&\n\t\t\tthis.processedLines[i + 1]?.startTime\n\t\t) {\n\t\t\tif (\n\t\t\t\tthis.processedLines[i + 1].startTime > currentTime &&\n\t\t\t\tthis.processedLines[i].endTime < currentTime\n\t\t\t) {\n\t\t\t\treturn [\n\t\t\t\t\tMath.max(this.processedLines[i].endTime, currentTime),\n\t\t\t\t\tthis.processedLines[i + 1].startTime,\n\t\t\t\t\ti,\n\t\t\t\t\tthis.processedLines[i + 1].isDuet,\n\t\t\t\t];\n\t\t\t}\n\t\t\tif (\n\t\t\t\tthis.processedLines[i + 2]?.startTime &&\n\t\t\t\tthis.processedLines[i + 2].startTime > currentTime &&\n\t\t\t\tthis.processedLines[i + 1].endTime < currentTime\n\t\t\t) {\n\t\t\t\treturn [\n\t\t\t\t\tMath.max(this.processedLines[i + 1].endTime, currentTime),\n\t\t\t\t\tthis.processedLines[i + 2].startTime,\n\t\t\t\t\ti + 1,\n\t\t\t\t\tthis.processedLines[i + 2].isDuet,\n\t\t\t\t];\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\t/**\n\t * 重建样式\n\t *\n\t * 这个只允许内部调用\n\t *\n\t * @private\n\t */\n\trebuildStyle() {\n\t\tthis._baseFontSize = Number.parseFloat(\n\t\t\tgetComputedStyle(this.element).fontSize,\n\t\t);\n\t\tlet style = \"\";\n\t\tstyle += \"--amll-lp-width:\";\n\t\tconst width = this.innerSize[0] - this._baseFontSize * 2;\n\t\tstyle += `${width.toFixed(4)}px;`;\n\t\tstyle += \"--amll-lp-height:\";\n\t\tstyle += `${(this.innerSize[1] - this._baseFontSize * 2).toFixed(4)}px;`;\n\t\t// 原本想用 calc 来计算的,但是发现算式复杂之后无法解析,所以只能用 JS 来计算直接结果了\n\t\tstyle += \"--amll-lp-line-width:\";\n\t\tif (this.innerSize[0] < 768) {\n\t\t\tstyle += `${width.toFixed(4)}px;`;\n\t\t} else {\n\t\t\tstyle += `${(width * 0.8).toFixed(4)}px;`;\n\t\t}\n\n\t\t// style += \"--amll-player-time:\";\n\t\t// style += this.currentTime;\n\t\t// style += \";\";\n\t\tthis.element.setAttribute(\"style\", style);\n\t}\n\t/**\n\t * 设置是否隐藏已经播放过的歌词行,默认不隐藏\n\t * @param hide 是否隐藏已经播放过的歌词行,默认不隐藏\n\t */\n\tsetHidePassedLines(hide: boolean) {\n\t\tthis.hidePassedLines = hide;\n\t\tthis.calcLayout();\n\t}\n\t/**\n\t * 设置是否启用歌词行的模糊效果\n\t * @param enable 是否启用\n\t */\n\tsetEnableBlur(enable: boolean) {\n\t\tif (this.enableBlur === enable) return;\n\t\tthis.enableBlur = enable;\n\t\tthis.calcLayout();\n\t}\n\n\tpublic get wordFadeWidth() {\n\t\treturn this._wordFadeWidth;\n\t}\n\n\t/**\n\t * 设置文字动画的渐变宽度,单位以歌词行的主文字字体大小的倍数为单位,默认为 0.5,即一个全角字符的一半宽度\n\t *\n\t * 如果要模拟 Apple Music for Android 的效果,可以设置为 1\n\t *\n\t * 如果要模拟 Apple Music for iPad 的效果,可以设置为 0.5\n\t *\n\t * 如果想要近乎禁用渐变效果,可以设置成非常接近 0 的小数(例如 `0.0001` ),但是**不可以为 0**\n\t *\n\t * @param value 需要设置的渐变宽度,单位以歌词行的主文字字体大小的倍数为单位,默认为 0.5\n\t */\n\tsetWordFadeWidth(value = 0.5) {\n\t\tthis._wordFadeWidth = Math.max(0.0001, value);\n\t\tfor (const el of this.lyricLinesEl) {\n\t\t\tel.markMaskImageDirty();\n\t\t}\n\t}\n\n\t/**\n\t * 设置当前播放歌词,要注意传入后这个数组内的信息不得修改,否则会发生错误\n\t * @param lines 歌词数组\n\t * @param initialTime 初始时间,默认为 0\n\t */\n\tsetLyricLines(lines: LyricLine[], initialTime = 0) {\n\t\tfor (const line of lines) {\n\t\t\tfor (const word of line.words) {\n\t\t\t\tword.word = word.word.replace(/\\s+/g, \" \");\n\t\t\t}\n\t\t}\n\t\tthis.lastCurrentTime = initialTime;\n\t\tthis.currentTime = initialTime;\n\t\tthis.lyricLines = lines;\n\t\tconst timeOffset = 750;\n\t\tthis.processedLines = lines\n\t\t\t.filter(\n\t\t\t\t(line) =>\n\t\t\t\t\tline.words.reduce((pv, cv) => pv + cv.word.trim().length, 0) > 0,\n\t\t\t)\n\t\t\t.map((line, i, lines) => {\n\t\t\t\tif (line.isBG)\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...line,\n\t\t\t\t\t};\n\n\t\t\t\tif (i === 0) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...line,\n\t\t\t\t\t\tstartTime: Math.max(line.startTime - timeOffset, 0),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst lastLine = lines[i - 1];\n\t\t\t\tconst pastLine = lines[i - 2];\n\t\t\t\tif (lastLine?.isBG && pastLine) {\n\t\t\t\t\tif (pastLine.endTime < line.startTime) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...line,\n\t\t\t\t\t\t\tstartTime:\n\t\t\t\t\t\t\t\tMath.max(pastLine.endTime, line.startTime - timeOffset) ||\n\t\t\t\t\t\t\t\tline.startTime,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} else if (lastLine?.endTime) {\n\t\t\t\t\tif (lastLine.endTime < line.startTime) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...line,\n\t\t\t\t\t\t\tstartTime:\n\t\t\t\t\t\t\t\tMath.max(lastLine?.endTime, line.startTime - timeOffset) ||\n\t\t\t\t\t\t\t\tline.startTime,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\t...line,\n\t\t\t\t};\n\t\t\t});\n\n\t\tthis.isNonDynamic = true;\n\t\tthis.isNonDuet = true;\n\t\tfor (const line of this.processedLines) {\n\t\t\tif (line.words.length > 1) {\n\t\t\t\tthis.isNonDynamic = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tfor (const line of this.processedLines) {\n\t\t\tif (line.isDuet) {\n\t\t\t\tthis.isNonDuet = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.rebuildStyle();\n\n\t\tthis.processedLines.forEach((line, i, lines) => {\n\t\t\tconst nextLine = lines[i + 1];\n\t\t\tconst lastWord = line.words[line.words.length - 1];\n\t\t\tif (lastWord) {\n\t\t\t\tif (nextLine) {\n\t\t\t\t\tif (nextLine.startTime > line.endTime) {\n\t\t\t\t\t\tline.endTime = Math.min(line.endTime + 1500, nextLine.startTime);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tline.endTime = line.endTime + 1500;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tthis.processedLines.forEach((line, i, lines) => {\n\t\t\tif (line.isBG) return;\n\t\t\tconst nextLine = lines[i + 1];\n\t\t\tif (nextLine?.isBG) {\n\t\t\t\tnextLine.startTime = Math.min(nextLine.startTime, line.startTime);\n\t\t\t}\n\t\t});\n\t\tfor (const line of this.lyricLinesEl) {\n\t\t\tline.removeMouseEventListener(\"click\", this.onLineClickedHandler);\n\t\t\tline.removeMouseEventListener(\"contextmenu\", this.onLineClickedHandler);\n\t\t\tline.dispose();\n\t\t}\n\t\t// const prevLinesEl = this.lyricLinesEl;\n\t\tthis.lyricLinesEl = this.processedLines.map((line) => {\n\t\t\t// if (this.lyricLinesEl[i]) {\n\t\t\t// \tthis.lyricLinesEl[i].setLine(line);\n\t\t\t// \treturn this.lyricLinesEl[i];\n\t\t\t// } else {\n\t\t\tconst lineEl = new LyricLineEl(this, line);\n\t\t\tlineEl.addMouseEventListener(\"click\", this.onLineClickedHandler);\n\t\t\tlineEl.addMouseEventListener(\"contextmenu\", this.onLineClickedHandler);\n\t\t\treturn lineEl;\n\t\t\t// }\n\t\t});\n\n\t\t// while (prevLinesEl.length > this.processedLines.length) {\n\t\t// \tconst rest = prevLinesEl.pop();\n\t\t// \trest?.removeEventListener(\"click\", this.onLineClickedHandler);\n\t\t// \trest?.removeEventListener(\"contextmenu\", this.onLineClickedHandler);\n\t\t// \trest?.dispose();\n\t\t// }\n\t\tthis.lyricLinesEl.forEach((el, i) => {\n\t\t\tthis.element.appendChild(el.getElement());\n\t\t\tthis.lyricLinesIndexes.set(el, i);\n\t\t\tel.markMaskImageDirty();\n\t\t});\n\t\tthis.interludeDots.setInterlude(undefined);\n\t\tthis.hotLines.clear();\n\t\tthis.bufferedLines.clear();\n\t\tthis.setLinePosXSpringParams({});\n\t\tthis.setLinePosYSpringParams({});\n\t\tthis.setLineScaleSpringParams({});\n\t\tthis.resetScroll();\n\t\tthis.setCurrentTime(0, true);\n\t\tthis.calcLayout(true, true);\n\t}\n\t/**\n\t * 重置用户滚动状态\n\t *\n\t * 请在用户完成滚动点击跳转歌词时调用本事件再调用 `calcLayout` 以正确滚动到目标位置\n\t */\n\tresetScroll() {\n\t\tthis.isScrolled = false;\n\t\tthis.scrollOffset = 0;\n\t\tthis.invokedByScrollEvent = false;\n\t\tclearTimeout(this.scrolledHandler);\n\t\tthis.scrolledHandler = 0;\n\t}\n\t/**\n\t * 重新布局定位歌词行的位置,调用完成后再逐帧调用 `update`\n\t * 函数即可让歌词通过动画移动到目标位置。\n\t *\n\t * 函数有一个 `force` 参数,用于指定是否强制修改布局,也就是不经过动画直接调整元素位置和大小。\n\t *\n\t * 此函数还有一个 `reflow` 参数,用于指定是否需要重新计算布局\n\t *\n\t * 因为计算布局必定会导致浏览器重排布局,所以会大幅度影响流畅度和性能,故请只在以下情况下将其设置为 true:\n\t *\n\t * 1. 歌词页面大小发生改变时(这个组件会自行处理)\n\t * 2. 加载了新的歌词时(不论前后歌词是否完全一样)\n\t * 3. 用户自行跳转了歌曲播放位置(不论距离远近)\n\t *\n\t * @param force 是否不经过动画直接修改布局定位\n\t * @param reflow 是否进行重新布局(重新计算每行歌词大小)\n\t */\n\tcalcLayout(force = false, reflow = false) {\n\t\tif (reflow) {\n\t\t\tthis.emUnit = Number.parseFloat(getComputedStyle(this.element).fontSize);\n\t\t\tfor (const el of this.lyricLinesEl) {\n\t\t\t\tconst size: [number, number] = el.measureSize();\n\t\t\t\tthis.lyricLinesSize.set(el, size);\n\t\t\t\tel.lineSize = size;\n\t\t\t}\n\t\t\tthis.interludeDotsSize[0] = this.interludeDots.getElement().clientWidth;\n\t\t\tthis.interludeDotsSize[1] = this.interludeDots.getElement().clientHeight;\n\n\t\t\tthis.bottomLine.lineSize = this.bottomLine.measureSize();\n\t\t}\n\t\tconst interlude = this.getCurrentInterlude();\n\t\tlet curPos = -this.scrollOffset;\n\t\tlet targetAlignIndex = this.scrollToIndex;\n\t\tlet interludeDuration = 0;\n\t\tif (interlude) {\n\t\t\tinterludeDuration = interlude[1] - interlude[0];\n\t\t\tif (interludeDuration >= 4000) {\n\t\t\t\tconst nextLine = this.lyricLinesEl[interlude[2] + 1];\n\t\t\t\tif (nextLine) {\n\t\t\t\t\ttargetAlignIndex = interlude[2] + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthis.interludeDots.setInterlude(undefined);\n\t\t}\n\t\tconst scrollOffset = this.lyricLinesEl\n\t\t\t.slice(0, targetAlignIndex)\n\t\t\t.reduce(\n\t\t\t\t(acc, el) =>\n\t\t\t\t\tacc +\n\t\t\t\t\t(el.getLine().isBG ? 0 : (this.lyricLinesSize.get(el)?.[1] ?? 0)),\n\t\t\t\t0,\n\t\t\t);\n\t\tthis.scrollBoundary[0] = -scrollOffset;\n\t\tcurPos -= scrollOffset;\n\t\tcurPos += this.size[1] * this.alignPosition;\n\t\tconst curLine = this.lyricLinesEl[targetAlignIndex];\n\t\tif (curLine) {\n\t\t\tconst lineHeight = this.lyricLinesSize.get(curLine)?.[1] ?? 0;\n\t\t\tswitch (this.alignAnchor) {\n\t\t\t\tcase \"bottom\":\n\t\t\t\t\tcurPos -= lineHeight;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"center\":\n\t\t\t\t\tcurPos -= lineHeight / 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"top\":\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tconst latestIndex = Math.max(...this.bufferedLines);\n\t\tlet delay = 0;\n\t\tlet baseDelay = 0.05;\n\t\tlet setDots = false;\n\t\tthis.lyricLinesEl.forEach((el, i) => {\n\t\t\tconst hasBuffered = this.bufferedLines.has(i);\n\t\t\tconst isActive =\n\t\t\t\thasBuffered || (i >= this.scrollToIndex && i < latestIndex);\n\t\t\tconst line = el.getLine();\n\t\t\tlet left = 24;\n\t\t\tif (line.isDuet) {\n\t\t\t\tleft = this.size[0] - (this.lyricLinesSize.get(el)?.[0] ?? 0);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!setDots &&\n\t\t\t\tinterludeDuration >= 4000 &&\n\t\t\t\t((i === this.scrollToIndex && interlude?.[2] === -2) ||\n\t\t\t\t\ti === this.scrollToIndex + 1)\n\t\t\t) {\n\t\t\t\tsetDots = true;\n\t\t\t\tthis.interludeDots.setTransform(24, curPos + 10);\n\t\t\t\tif (interlude) {\n\t\t\t\t\tthis.interludeDots.setInterlude([interlude[0], interlude[1]]);\n\t\t\t\t}\n\t\t\t\tcurPos += this.interludeDotsSize[1] + 40;\n\t\t\t}\n\t\t\tlet targetOpacity: number;\n\t\t\tlet targetSubOpacity: number;\n\n\t\t\tif (this.hidePassedLines) {\n\t\t\t\tif (i < (interlude ? interlude[2] + 1 : this.scrollToIndex)) {\n\t\t\t\t\ttargetOpacity = 0;\n\t\t\t\t\ttargetSubOpacity = 0;\n\t\t\t\t} else if (hasBuffered) {\n\t\t\t\t\ttargetOpacity = 0.85;\n\t\t\t\t\ttargetSubOpacity = 0.4;\n\t\t\t\t} else {\n\t\t\t\t\ttargetOpacity = this.isNonDynamic ? 0.2 : 1;\n\t\t\t\t\ttargetSubOpacity = 0.2;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (hasBuffered) {\n\t\t\t\t\ttargetOpacity = 0.85;\n\t\t\t\t\ttargetSubOpacity = 0.4;\n\t\t\t\t} else {\n\t\t\t\t\ttargetOpacity = this.isNonDynamic ? 0.2 : 1;\n\t\t\t\t\ttargetSubOpacity = 0.2;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet blurLevel = 0;\n\t\t\tif (this.enableBlur) {\n\t\t\t\tif (isActive) {\n\t\t\t\t\tblurLevel = 0;\n\t\t\t\t} else {\n\t\t\t\t\tblurLevel = 1;\n\t\t\t\t\tif (i < this.scrollToIndex) {\n\t\t\t\t\t\tblurLevel += Math.abs(this.scrollToIndex - i) + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tblurLevel += Math.abs(\n\t\t\t\t\t\t\ti - Math.max(this.scrollToIndex, latestIndex),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.invokedByScrollEvent) {\n\t\t\t\tblurLevel = 0;\n\t\t\t}\n\n\t\t\tconst currentAbove =\n\t\t\t\ti < (interlude ? interlude[2] + 1 : this.scrollToIndex);\n\t\t\tconst SCALE_ASPECT = this.enableScale ? 97 : 100;\n\n\t\t\tel.setTransform(\n\t\t\t\tleft,\n\t\t\t\tcurPos,\n\t\t\t\tisActive ? 100 : line.isBG ? 75 : SCALE_ASPECT,\n\t\t\t\ttargetOpacity,\n\t\t\t\ttargetSubOpacity,\n\t\t\t\twindow.innerWidth <= 1024 ? blurLevel * 0.8 : blurLevel,\n\t\t\t\tforce,\n\t\t\t\tdelay,\n\t\t\t\tcurrentAbove,\n\t\t\t);\n\t\t\tif (line.isBG && isActive) {\n\t\t\t\tcurPos += this.lyricLinesSize.get(el)?.[1] ?? 0;\n\t\t\t} else if (!line.isBG) {\n\t\t\t\tcurPos += this.lyricLinesSize.get(el)?.[1] ?? 0;\n\t\t\t}\n\t\t\tif (curPos >= 0 && !this.isSeeking) {\n\t\t\t\tif (!line.isBG) delay += baseDelay;\n\t\t\t\t// if (i >= this.scrollToIndex - 1) baseDelay *= 1.05;\n\t\t\t\t// baseDelay = Math.min(baseDelay, 0.055);\n\n\t\t\t\t// delay += 0.05;\n\n\t\t\t\t// baseDelay = baseDelay > 0.15 ? 0 : baseDelay;\n\t\t\t\t// delay = (i - this.scrollToIndex) * 0.06;\n\t\t\t\tif (i >= this.scrollToIndex) baseDelay /= 1.05;\n\t\t\t\t// baseDelay = Math.max(baseDelay, 0.04);\n\t\t\t}\n\t\t});\n\t\tthis.scrollBoundary[1] = curPos + this.scrollOffset - this.size[1] / 2;\n\t\t// console.groupEnd();\n\t\tthis.bottomLine.setTransform(24, curPos, force, delay);\n\t}\n\t/**\n\t * 获取当前歌词的播放位置\n\t *\n\t * 一般和最后调用 `setCurrentTime` 给予的参数一样\n\t * @returns 当前播放位置\n\t */\n\tgetCurrentTime() {\n\t\treturn this.currentTime;\n\t}\n\t/**\n\t * 获取当前歌词数组\n\t *\n\t * 一般和最后调用 `setLyricLines` 给予的参数一样\n\t * @returns 当前歌词数组\n\t */\n\tgetLyricLines() {\n\t\treturn this.lyricLines;\n\t}\n\tgetElement(): HTMLElement {\n\t\treturn this.element;\n\t}\n\t/**\n\t * 获取一个特殊的底栏元素,默认是空白的,可以往内部添加任意元素\n\t *\n\t * 这个元素始终在歌词的底部,可以用于显示歌曲创作者等信息\n\t *\n\t * 但是请勿删除该元素,只能在内部存放元素\n\t *\n\t * @returns 一个元素,可以往内部添加任意元素\n\t */\n\tgetBottomLineElement(): HTMLElement {\n\t\treturn this.bottomLine.getElement();\n\t}\n\t/**\n\t * 设置目标歌词行的对齐方式,默认为 `center`\n\t *\n\t * - 设置成 `top` 的话将会向目标歌词行的顶部对齐\n\t * - 设置成 `bottom` 的话将会向目标歌词行的底部对齐\n\t * - 设置成 `center` 的话将会向目标歌词行的垂直中心对齐\n\t * @param alignAnchor 歌词行对齐方式,详情见函数说明\n\t */\n\tsetAlignAnchor(alignAnchor: \"top\" | \"bottom\" | \"center\") {\n\t\tthis.alignAnchor = alignAnchor;\n\t}\n\t/**\n\t * 设置默认的歌词行对齐位置,相对于整个歌词播放组件的大小位置,默认为 `0.5`\n\t * @param alignPosition 一个 `[0.0-1.0]` 之间的任意数字,代表组件高度由上到下的比例位置\n\t */\n\tsetAlignPosition(alignPosition: number) {\n\t\tthis.alignPosition = alignPosition;\n\t}\n\t/**\n\t * 设置当前播放进度,单位为毫秒且**必须是整数**,此时将会更新内部的歌词进度信息\n\t * 内部会根据调用间隔和播放进度自动决定如何滚动和显示歌词,所以这个的调用频率越快越准确越好\n\t *\n\t * 调用完成后,可以每帧调用 `update` 函数来执行歌词动画效果\n\t * @param time 当前播放进度,单位为毫秒\n\t */\n\tsetCurrentTime(time: number, isSeek = false) {\n\t\t// 我在这里定义了歌词的选择状态:\n\t\t// 普通行:当前不处于时间范围内的歌词行\n\t\t// 热行:当前绝对处于播放时间内的歌词行,且一般会被立刻加入到缓冲行中\n\t\t// 缓冲行:一般处于播放时间后的歌词行,会因为当前播放状态的缘故推迟解除状态\n\n\t\t// 然后我们需要让歌词行为如下:\n\t\t// 如果当前仍有缓冲行的情况下加入新热行,则不会解除当前缓冲行,且也不会修改当前滚动位置\n\t\t// 如果当前所有缓冲行都将被删除且没有新热行加入,则删除所有缓冲行,且也不会修改当前滚动位置\n\t\t// 如果当前所有缓冲行都将被删除且有新热行加入,则删除所有缓冲行并加入新热行作为缓冲行,然后修改当前滚动位置\n\t\tthis.initializeSeeking = isSeek;\n\t\tthis.currentTime = time;\n\t\tif (Math.abs(this.currentTime - this.lastCurrentTime) >= 100) {\n\t\t\tthis.initializeSeeking = true;\n\t\t} else this.initializeSeeking = false;\n\t\tif (!this.isPageVisible) return;\n\t\tif (!this._getIsNonDynamic() && !this.supportMaskImage)\n\t\t\tthis.element.style.setProperty(\"--amll-player-time\", `${time}`);\n\t\tif (this.isScrolled) return;\n\t\tconst removedHotIds = new Set<number>();\n\t\tconst removedIds = new Set<number>();\n\t\tconst addedIds = new Set<number>();\n\n\t\tif (isSeek) {\n\t\t\tfor (const line of this.lyricLinesEl) {\n\t\t\t\tline.setMaskAnimationState(time);\n\t\t\t}\n\t\t}\n\n\t\t// 先检索当前已经超出时间范围的缓冲行,列入待删除集内\n\t\tfor (const lastHotId of this.hotLines) {\n\t\t\tconst line = this.processedLines[lastHotId];\n\t\t\tif (line) {\n\t\t\t\tif (line.isBG) return;\n\t\t\t\tconst nextLine = this.processedLines[lastHotId + 1];\n\t\t\t\tif (nextLine?.isBG) {\n\t\t\t\t\tconst nextMainLine = this.processedLines[lastHotId + 2];\n\t\t\t\t\tconst startTime = Math.min(line.startTime, nextLine?.startTime);\n\t\t\t\t\tconst endTime = Math.min(\n\t\t\t\t\t\tMath.max(line.endTime, nextMainLine?.startTime ?? Number.MAX_VALUE),\n\t\t\t\t\t\tMath.max(line.endTime, nextLine?.endTime),\n\t\t\t\t\t);\n\t\t\t\t\tif (startTime > time || endTime <= time) {\n\t\t\t\t\t\tthis.hotLines.delete(lastHotId);\n\t\t\t\t\t\tremovedHotIds.add(lastHotId);\n\t\t\t\t\t\tthis.hotLines.delete(lastHotId + 1);\n\t\t\t\t\t\tremovedHotIds.add(lastHotId + 1);\n\t\t\t\t\t\tif (isSeek) {\n\t\t\t\t\t\t\tthis.lyricLinesEl[lastHotId].disable(time);\n\t\t\t\t\t\t\tthis.lyricLinesEl[lastHotId + 1].disable(time);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (line.startTime > time || line.endTime <= time) {\n\t\t\t\t\tthis.hotLines.delete(lastHotId);\n\t\t\t\t\tremovedHotIds.add(lastHotId);\n\t\t\t\t\tif (isSeek) this.lyricLinesEl[lastHotId].disable(time);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.hotLines.delete(lastHotId);\n\t\t\t\tremovedHotIds.add(lastHotId);\n\t\t\t\tif (isSeek) this.lyricLinesEl[lastHotId].disable(time);\n\t\t\t}\n\t\t}\n\t\tthis.processedLines.forEach((line, id, arr) => {\n\t\t\tif (!line.isBG && line.startTime <= time && line.endTime > time) {\n\t\t\t\tif (!this.hotLines.has(id)) {\n\t\t\t\t\tthis.hotLines.add(id);\n\t\t\t\t\taddedIds.add(id);\n\t\t\t\t\tif (isSeek) this.lyricLinesEl[id].enable(time);\n\t\t\t\t\tif (arr[id + 1]?.isBG) {\n\t\t\t\t\t\tthis.hotLines.add(id + 1);\n\t\t\t\t\t\taddedIds.add(id + 1);\n\t\t\t\t\t\tif (isSeek) this.lyricLinesEl[id + 1].enable(time);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tfor (const v of this.bufferedLines) {\n\t\t\tif (!this.hotLines.has(v)) {\n\t\t\t\tremovedIds.add(v);\n\t\t\t\tif (isSeek) this.lyricLinesEl[v].disable(time);\n\t\t\t}\n\t\t}\n\t\tif (isSeek) {\n\t\t\tif (this.bufferedLines.size > 0) {\n\t\t\t\tthis.scrollToIndex = Math.min(...this.bufferedLines);\n\t\t\t} else {\n\t\t\t\tthis.scrollToIndex = this.processedLines.findIndex(\n\t\t\t\t\t(line) => line.startTime >= time,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.bufferedLines.clear();\n\t\t\tfor (const v of this.hotLines) {\n\t\t\t\tthis.bufferedLines.add(v);\n\t\t\t}\n\t\t\tthis.calcLayout(true);\n\t\t} else if (removedIds.size > 0 || addedIds.size > 0) {\n\t\t\tif (removedIds.size === 0 && addedIds.size > 0) {\n\t\t\t\tfor (const v of addedIds) {\n\t\t\t\t\tthis.bufferedLines.add(v);\n\t\t\t\t\tthis.lyricLinesEl[v].enable(time);\n\t\t\t\t}\n\t\t\t\tthis.scrollToIndex = Math.min(...this.bufferedLines);\n\t\t\t\tthis.calcLayout();\n\t\t\t} else if (addedIds.size === 0 && removedIds.size > 0) {\n\t\t\t\tif (eqSet(removedIds, this.bufferedLines)) {\n\t\t\t\t\tfor (const v of this.bufferedLines) {\n\t\t\t\t\t\tif (!this.hotLines.has(v)) {\n\t\t\t\t\t\t\tthis.bufferedLines.delete(v);\n\t\t\t\t\t\t\tthis.lyricLinesEl[v].disable(time);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calcLayout();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const v of addedIds) {\n\t\t\t\t\tthis.bufferedLines.add(v);\n\t\t\t\t\tthis.lyricLinesEl[v].enable(time);\n\t\t\t\t}\n\t\t\t\tfor (const v of removedIds) {\n\t\t\t\t\tthis.bufferedLines.delete(v);\n\t\t\t\t\tthis.lyricLinesEl[v].disable(time);\n\t\t\t\t}\n\t\t\t\tif (this.bufferedLines.size > 0)\n\t\t\t\t\tthis.scrollToIndex = Math.min(...this.bufferedLines);\n\t\t\t\tthis.calcLayout();\n\t\t\t}\n\t\t}\n\t\tthis.lastCurrentTime = time;\n\t}\n\t/**\n\t * 暂停部分效果演出,目前会暂停播放间奏点的动画\n\t */\n\tpause() {\n\t\tthis.interludeDots.pause();\n\t\tfor (const line of this.lyricLinesEl) {\n\t\t\tline.pause(this.currentTime);\n\t\t}\n\t}\n\t/**\n\t * 恢复部分效果演出,目前会恢复播放间奏点的动画\n\t */\n\tresume() {\n\t\tthis.interludeDots.resume();\n\t\tfor (const line of this.lyricLinesEl) {\n\t\t\tline.resume(this.currentTime);\n\t\t}\n\t}\n\t/**\n\t * 更新动画,这个函数应该被逐帧调用或者在以下情况下调用一次:\n\t *\n\t * 1. 刚刚调用完设置歌词函数的时候\n\t * @param delta 距离上一次被调用到现在的时长,单位为毫秒(可为浮点数)\n\t */\n\tupdate(delta = 0) {\n\t\tif (!this.isPageVisible) return;\n\t\tconst deltaS = delta / 1000;\n\t\tthis.interludeDots.update(delta);\n\t\tthis.bottomLine.update(deltaS);\n\t\tfor (const line of this.lyricLinesEl) {\n\t\t\tline.update(deltaS);\n\t\t}\n\t}\n\n\t/**\n\t * 设置所有歌词行在横坐标上的弹簧属性,包括重量、弹力和阻力。\n\t *\n\t * @param params 需要设置的弹簧属性,提供的属性将会覆盖原来的属性,未提供的属性将会保持原样\n\t */\n\tsetLinePosXSpringParams(params: Partial<SpringParams>) {\n\t\tthis.posXSpringParams = {\n\t\t\t...this.posXSpringParams,\n\t\t\t...params,\n\t\t};\n\t\tthis.bottomLine.lineTransforms.posX.updateParams(this.posXSpringParams);\n\t\tfor (const line of this.lyricLinesEl) {\n\t\t\tline.lineTransforms.posX.updateParams(this.posXSpringParams);\n\t\t}\n\t}\n\t/**\n\t * 设置所有歌词行在纵坐标上的弹簧属性,包括重量、弹力和阻力。\n\t *\n\t * @param params 需要设置的弹簧属性,提供的属性将会覆盖原来的属性,未提供的属性将会保持原样\n\t */\n\tsetLinePosYSpringParams(params: Partial<SpringParams>) {\n\t\tthis.posYSpringParams = {\n\t\t\t...this.posYSpringParams,\n\t\t\t...params,\n\t\t};\n\t\tthis.bottomLine.lineTransforms.posY.updateParams(this.posYSpringParams);\n\t\tfor (const line of this.lyricLinesEl) {\n\t\t\tline.lineTransforms.posY.updateParams(this.posYSpringParams);\n\t\t}\n\t}\n\t/**\n\t * 设置所有歌词行在缩放大小上的弹簧属性,包括重量、弹力和阻力。\n\t *\n\t * @param params 需要设置的弹簧属性,提供的属性将会覆盖原来的属性,未提供的属性将会保持原样\n\t */\n\tsetLineScaleSpringParams(params: Partial<SpringParams>) {\n\t\tthis.scaleSpringParams = {\n\t\t\t...this.scaleSpringParams,\n\t\t\t...params,\n\t\t};\n\t\tthis.scaleForBGSpringParams = {\n\t\t\t...this.scaleForBGSpringParams,\n\t\t\t...params,\n\t\t};\n\t\tfor (const line of this.lyricLinesEl) {\n\t\t\tif (line.getLine().isBG) {\n\t\t\t\tline.lineTransforms.scale.updateParams(this.scaleForBGSpringParams);\n\t\t\t} else {\n\t\t\t\tline.lineTransforms.scale.updateParams(this.scaleSpringParams);\n\t\t\t}\n\t\t}\n\t}\n\tdispose(): void {\n\t\tthis.element.remove();\n\t\tthis.resizeObserver.disconnect();\n\t\tfor (const el of this.lyricLinesEl) {\n\t\t\tel.dispose();\n\t\t}\n\t\twindow.removeEventListener(\"pageshow\", this.onPageShow);\n\t\tthis.bottomLine.dispose();\n\t\tthis.interludeDots.dispose();\n\t}\n}\n"],"names":["AbstractBaseRenderer","BaseRenderer","canvas","__publicField","width","height","scale","speed","loadImage","imageUrl","resolve","reject","img","loadVideo","videoUrl","video","playing","timeupdate","rejected","checkReady","err","loadResourceFromUrl","url","isVideo","loadResourceFromElement","element","TimedContainer","Container","PixiRenderer","delta","lastContainer","s1","s2","s3","s4","maxSize","Application","minBorder","maxBorder","c0","ColorMatrixFilter","c1","c2","_a","filter","BlurFilter","BulgePinchFilter","enable","fps","_volume","_hasLyric","albumSource","res","remainRetryTimes","tex","_b","Texture","error","container","Sprite","EPSILON","IDENTITY_4X4","_Mat4","values","v","a","b","rad","axis","fovy","aspect","near","far","left","right","bottom","top","out","a01","a02","a03","a12","a13","a23","a00","a10","a11","a20","a21","a22","a30","a31","a32","a33","b00","b01","b02","b03","b04","b05","b06","b07","b08","b09","b10","b11","det","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","x","y","z","len","s","c","t","b12","b20","b21","b22","q","w","x2","y2","z2","xx","xy","xz","yy","yz","zz","wx","wy","wz","bx","by","bz","bw","ax","ay","az","aw","magnitude","tmpVec3","cx","cy","cz","mat","m11","m12","m13","m21","m22","m23","m31","m32","m33","is1","is2","is3","sm11","sm12","sm13","sm21","sm22","sm23","sm31","sm32","sm33","trace","S","out_r","out_t","out_s","sx","sy","sz","o","ox","oy","oz","out0","out1","out2","out4","out5","out6","out8","out9","out10","yx","zx","zy","rl","tb","nf","f","fov","upTan","downTan","leftTan","rightTan","xScale","yScale","lr","bt","eye","center","up","eyex","eyey","eyez","upx","upy","upz","centerx","centery","centerz","z0","z1","x0","x1","y0","y1","target","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a14","a15","b13","b14","b15","Mat4","_Vec3","value","angle","sinTotal","ratioA","ratioB","d","factorTimes2","factor1","factor2","factor3","factor4","inverseFactor","inverseFactorTimesTwo","m","qx","qy","qz","w2","uvx","uvy","uvz","uuvx","uuvy","uuvz","py","pz","px","mag","cosine","Vec3","_Vec4","u","e","g","h","i","j","qw","ix","iy","iz","iw","Vec4","_Vec2","p0","p1","sinC","cosC","Vec2","blurImage","imageData","radius","quality","pixels","rsum","gsum","bsum","asum","p","p2","yp","yi","yw","wm","hm","rad1x","divx","rad1y","divy","div2","r","vmin","vmax","saturateImage","saturation","gray","brightnessImage","brightness","contrastImage","contrast","blendFragShader","blendVertShader","ur","vr","vp","preset","conf","CONTROL_POINT_PRESETS","meshFragShader","meshVertShader","GLProgram","gl","vertexShaderSource","fragmentShaderSource","label","num","attrs","info","location","type","source","shader","program","errLog","name","value1","value2","Mesh","attrPos","attrColor","attrUV","vertexBuf","indexBuf","vx","vy","idx","vertexWidth","vertexHeight","vertexData","indexData","ControlPoint","H","H_T","spUx","spUy","spV","spxAcc","spyAcc","surfacePoint","X","Y","output","meshCoefficients","p00","p01","p10","p11","l","colorCoefficients","cpUx","cpUy","cpUz","cpV","cprAcc","cpgAcc","cpbAcc","cpResult","colorPoint","R","G","B","Map2D","BHPMesh","subDivisions","point","subDivM1","tW","tH","sX","sY","pr","pg","pb","GLTexture","albumImageData","albumTexture","createOffscreenCanvas","MeshGradientRenderer","drawFrameBufferTexture","drawFrameBuffer","state","tickTime","frameDelta","cW","cH","latestMeshState","canBeStatic","deleted","ctx","imgw","imgh","newMesh","chosenPreset","uPower","vPower","cp","newState","volume","BackgroundRender","renderer","hasLyric","debounceFrame","cb","frameTime","ft","args","onCB","eqSet","xs","ys","derivative","getVelocity","Spring","currentPosition","curV","solveSpring","targetPosition","params","delay","from","velocity","to","soft","stiffness","damping","mass","angular_frequency","leftover","damping_frequency","dfm","dm","BottomLineEl","lyricPlayer","styles","style","force","easeInOutBack","easeOutExpo","clamp","min","cur","max","InterludeDots","interlude","curStyle","interludeDuration","currentDuration","breatheDuration","globalOpacity","dotsDuration","dot0Opacity","dot1Opacity","dot2Opacity","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","C","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","LinearEasing","src","mY1","mY2","sampleValues","getTForX","intervalStart","currentSample","lastSample","dist","guessForT","initialSlope","createMatrix4","scaleMatrix4","origin","matrix4ToCSS","fractionDigits","format","n","measureTasks","mutateTasks","scheduled","onFlush","tmp","scheduleFlush","measure","callback","task","promise","mutate","CJKEXP","ANIMATION_FRAME_QUANTITY","norNum","EMP_EASING_MID","beginNum","endNum","bezIn","bezier","bezOut","makeEmpEasing","mid","generateFadeGradient","padding","bright","dark","totalAspect","widthInTotal","leftPos","chunkAndSplitLyricWords","words","resplitedWords","realLength","splited","charPos","word","wordChunk","wChunk","result","shouldEmphasize","RawLyricLineMouseEvent","line","event","getScaleFromTransform","transform","match","scaleX","scaleY","LyricLineEl","lyricLine","wrapped","listener","main","trans","roman","options","listeners","word1","word2","word1el","word2el","rect1","rect2","maskAnimationTime","currentTime","size","chunkedWords","chunk","merged","emp","wrapperWordEl","characterElements","mainWordEl","charEls","char","charEl","realWord","duration","wordEl","de","du","amount","blur","animateDu","empEasing","el","arr","wordDe","frames","_","transX","glowLevel","offsetX","offsetY","glow","floatFrame","float","resolves","fadeWidth","maskImage","totalAspectStr","maskPos","totalFadeDuration","pv","widthBeforeSelf","minOffset","clampOffset","curPos","timeOffset","lastPos","lastTime","pushFrame","easing","moveOffset","time","staticTime","frame","lastTimeStamp","otherWord","curTimeStamp","staticDuration","fadeDuration","ani","opacity","subopacity","beforeInSight","enableSpring","afterInSight","roundedBlur","sub","LyricLineMouseEvent","lineIndex","LyricPlayer","rect","innerWidth","innerHeight","evt","startScrollY","direction","startTouchPosY","startScrollTime","scrollSpeed","scrollId","lastMoveY","lastDragTime","touchScreenY","lastDelta","targetDirection","curTime","scrollDuration","lt","curScrollId","onScrollFrame","dt","isSeeking","allowed","_c","_d","hide","lines","initialTime","cv","lastLine","pastLine","nextLine","lineEl","reflow","targetAlignIndex","scrollOffset","acc","curLine","lineHeight","latestIndex","baseDelay","setDots","hasBuffered","isActive","targetOpacity","targetSubOpacity","blurLevel","currentAbove","SCALE_ASPECT","alignAnchor","alignPosition","isSeek","removedHotIds","removedIds","addedIds","lastHotId","nextMainLine","startTime","endTime","id","deltaS"],"mappings":"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","x_google_ignoreList":[3,4,5,6,7,22]}
|
|
1
|
+
{"version":3,"file":"amll-core.js","sources":["../src/bg-render/base.ts","../src/utils/resource.ts","../src/bg-render/pixi-renderer.ts","../../../node_modules/.pnpm/gl-matrix@4.0.0-beta.2/node_modules/gl-matrix/dist/esm/common.js","../../../node_modules/.pnpm/gl-matrix@4.0.0-beta.2/node_modules/gl-matrix/dist/esm/mat4.js","../../../node_modules/.pnpm/gl-matrix@4.0.0-beta.2/node_modules/gl-matrix/dist/esm/vec3.js","../../../node_modules/.pnpm/gl-matrix@4.0.0-beta.2/node_modules/gl-matrix/dist/esm/vec4.js","../../../node_modules/.pnpm/gl-matrix@4.0.0-beta.2/node_modules/gl-matrix/dist/esm/vec2.js","../src/bg-render/img.ts","../src/bg-render/mesh-renderer/blend.frag.glsl?raw","../src/bg-render/mesh-renderer/blend.vert.glsl?raw","../src/bg-render/mesh-renderer/cp-presets.ts","../src/bg-render/mesh-renderer/mesh.frag.glsl?raw","../src/bg-render/mesh-renderer/mesh.vert.glsl?raw","../src/bg-render/mesh-renderer/index.ts","../src/bg-render/index.ts","../../../node_modules/.pnpm/@ungap+structured-clone@1.2.0/node_modules/@ungap/structured-clone/esm/types.js","../../../node_modules/.pnpm/@ungap+structured-clone@1.2.0/node_modules/@ungap/structured-clone/esm/deserialize.js","../../../node_modules/.pnpm/@ungap+structured-clone@1.2.0/node_modules/@ungap/structured-clone/esm/serialize.js","../../../node_modules/.pnpm/@ungap+structured-clone@1.2.0/node_modules/@ungap/structured-clone/esm/index.js","../src/utils/debounce.ts","../src/utils/eq-set.ts","../src/utils/derivative.ts","../src/utils/spring.ts","../src/lyric-player/bottom-line.ts","../src/lyric-player/interlude-dots.ts","../../../node_modules/.pnpm/bezier-easing@2.1.0/node_modules/bezier-easing/src/index.js","../src/utils/matrix.ts","../src/utils/schedule.ts","../src/lyric-player/lyric-line.ts","../src/lyric-player/index.ts"],"sourcesContent":["import { Disposable, HasElement } from \"../interfaces\";\n\nexport abstract class AbstractBaseRenderer implements Disposable, HasElement {\n\t/**\n\t * 修改背景的流动速度,数字越大越快,默认为 8\n\t * @param speed 背景的流动速度,默认为 8\n\t */\n\tabstract setFlowSpeed(speed: number): void;\n\t/**\n\t * 修改背景的渲染比例,默认是 0.5\n\t *\n\t * 一般情况下这个程度既没有明显瑕疵也不会特别吃性能\n\t * @param scale 背景的渲染比例\n\t */\n\tabstract setRenderScale(scale: number): void;\n\t/**\n\t * 是否启用静态模式,即图片在更换后就会保持静止状态并禁用更新,以节省性能\n\t * @param enable 是否启用静态模式\n\t */\n\tabstract setStaticMode(enable: boolean): void;\n\t/**\n\t * 修改背景动画帧率,默认是 30 FPS\n\t *\n\t * 如果设置成 0 则会停止动画\n\t * @param fps 目标帧率,默认 30 FPS\n\t */\n\tabstract setFPS(fps: number): void;\n\t/**\n\t * 暂停背景动画,画面即便是更新了图片也不会发生变化\n\t */\n\tabstract pause(): void;\n\t/**\n\t * 恢复播放背景动画\n\t */\n\tabstract resume(): void;\n\t/**\n\t * 设置背景专辑资源,纹理加载并设置完成后会返回\n\t * @param albumSource 专辑的资源链接,可以是图片或视频链接,抑或是任意 img/video 元素,如果提供字符串链接且为视频则需要指定第二个参数\n\t */\n\tabstract setAlbum(\n\t\talbumSource: string | HTMLImageElement | HTMLVideoElement,\n\t\tisVideo?: boolean,\n\t): Promise<void>;\n\t/**\n\t * 设置低频的音量大小,范围在 80hz-120hz 之间为宜,取值范围在 [0.0-1.0] 之间\n\t *\n\t * 部分渲染器会根据音量大小调整背景效果(例如根据鼓点跳动)\n\t *\n\t * 如果无法获取到类似的数据,请传入 1.0 作为默认值,或不做任何处理(默认值即 1.0)\n\t * @param volume 低频的音量大小,范围在 50hz-120hz 之间为宜,取值范围在 [0.0-1.0] 之间\n\t */\n\tabstract setLowFreqVolume(volume: number): void;\n\t/**\n\t * 设置背景是否根据“是否有歌词”这个特征调整自身效果,例如有歌词时会变得更加活跃\n\t *\n\t * 部分渲染器会根据这个特征调整自身效果\n\t *\n\t * 如果不确定是否需要赋值或无法知晓是否包含歌词,请传入 true 或不做任何处理(默认值为 true)\n\t *\n\t * @param hasLyric 是否有歌词,如不确定是否需要赋值,请传入 true 或不做任何处理(默认值为 true)\n\t */\n\tabstract setHasLyric(hasLyric: boolean): void;\n\tabstract dispose(): void;\n\tabstract getElement(): HTMLElement;\n}\n\nexport abstract class BaseRenderer extends AbstractBaseRenderer {\n\tprivate observer: ResizeObserver;\n\tprotected flowSpeed = 4;\n\tprotected currerntRenderScale = 0.75;\n\tconstructor(protected canvas: HTMLCanvasElement) {\n\t\tsuper();\n\t\tthis.observer = new ResizeObserver(() => {\n\t\t\tconst width = Math.max(\n\t\t\t\t1,\n\t\t\t\tcanvas.clientWidth * window.devicePixelRatio * this.currerntRenderScale,\n\t\t\t);\n\t\t\tconst height = Math.max(\n\t\t\t\t1,\n\t\t\t\tcanvas.clientHeight *\n\t\t\t\t\twindow.devicePixelRatio *\n\t\t\t\t\tthis.currerntRenderScale,\n\t\t\t);\n\t\t\tthis.onResize(width, height);\n\t\t});\n\t\tthis.observer.observe(canvas);\n\t}\n\tsetRenderScale(scale: number) {\n\t\tthis.currerntRenderScale = scale;\n\t\tthis.onResize(\n\t\t\tthis.canvas.clientWidth *\n\t\t\t\twindow.devicePixelRatio *\n\t\t\t\tthis.currerntRenderScale,\n\t\t\tthis.canvas.clientHeight *\n\t\t\t\twindow.devicePixelRatio *\n\t\t\t\tthis.currerntRenderScale,\n\t\t);\n\t}\n\t/**\n\t * 当画板元素大小发生变化时此函数会被调用\n\t * 可以在此处重设和渲染器相关的尺寸设置\n\t * 考虑到初始化的时候元素不一定在文档中或出于某些特殊样式状态,尺寸长宽有可能会为 0,请注意进行特判处理\n\t * @param width 画板元素实际的物理像素宽度,有可能为 0\n\t * @param height 画板元素实际的物理像素高度,有可能为 0\n\t */\n\tprotected onResize(width: number, height: number): void {\n\t\tthis.canvas.width = width;\n\t\tthis.canvas.height = height;\n\t}\n\t/**\n\t * 修改背景的流动速度,数字越大越快,默认为 4\n\t * @param speed 背景的流动速度,默认为 4\n\t */\n\tsetFlowSpeed(speed: number) {\n\t\tthis.flowSpeed = speed;\n\t}\n\t/**\n\t * 是否启用静态模式,即图片在更换后就会保持静止状态并禁用更新,以节省性能\n\t * @param enable 是否启用静态模式\n\t */\n\tabstract setStaticMode(enable: boolean): void;\n\t/**\n\t * 修改背景动画帧率,默认是 30 FPS\n\t *\n\t * 如果设置成 0 则会停止动画\n\t * @param fps 目标帧率,默认 30 FPS\n\t */\n\tabstract setFPS(fps: number): void;\n\t/**\n\t * 暂停背景动画,画面即便是更新了图片也不会发生变化\n\t */\n\tabstract pause(): void;\n\t/**\n\t * 恢复播放背景动画\n\t */\n\tabstract resume(): void;\n\t/**\n\t * 设置背景专辑资源,纹理加载并设置完成后会返回\n\t * @param albumSource 专辑的资源链接,可以是图片或视频链接,抑或是任意 img/video 元素,如果提供字符串链接且为视频则需要指定第二个参数\n\t */\n\tabstract setAlbum(\n\t\talbumSource: string | HTMLImageElement | HTMLVideoElement,\n\t\tisVideo?: boolean,\n\t): Promise<void>;\n\tdispose(): void {\n\t\tthis.observer.disconnect();\n\t\tthis.canvas.remove();\n\t}\n\toverride getElement(): HTMLElement {\n\t\treturn this.canvas;\n\t}\n}\n","export function loadImage(imageUrl: string): Promise<HTMLImageElement> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst img = document.createElement(\"img\");\n\t\timg.onload = () => resolve(img);\n\t\timg.onerror = reject;\n\t\timg.src = imageUrl;\n\t\timg.crossOrigin = \"anonymous\";\n\t\timg.loading = \"eager\";\n\t});\n}\n\nexport function loadVideo(videoUrl: string): Promise<HTMLVideoElement> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst video = document.createElement(\"video\");\n\t\tlet playing = false;\n\t\tlet timeupdate = false;\n\t\tlet rejected = false;\n\t\tvideo.addEventListener(\n\t\t\t\"playing\",\n\t\t\t() => {\n\t\t\t\tplaying = true;\n\t\t\t\tcheckReady();\n\t\t\t},\n\t\t\ttrue,\n\t\t);\n\t\tvideo.addEventListener(\n\t\t\t\"timeupdate\",\n\t\t\t() => {\n\t\t\t\ttimeupdate = true;\n\t\t\t\tcheckReady();\n\t\t\t},\n\t\t\ttrue,\n\t\t);\n\t\tvideo.addEventListener(\n\t\t\t\"error\",\n\t\t\t(err) => {\n\t\t\t\trejected = true;\n\t\t\t\treject(err);\n\t\t\t},\n\t\t\ttrue,\n\t\t);\n\t\tfunction checkReady() {\n\t\t\tif (playing && timeupdate && !rejected) {\n\t\t\t\tresolve(video);\n\t\t\t}\n\t\t}\n\t\tvideo.src = videoUrl;\n\t\tvideo.playsInline = true;\n\t\tvideo.crossOrigin = \"anonymous\";\n\t\tvideo.autoplay = true;\n\t\tvideo.loop = true;\n\t\tvideo.muted = true;\n\t\tvideo.play();\n\t});\n}\n\nexport function loadResourceFromUrl(\n\turl: string,\n\tisVideo = false,\n): Promise<HTMLImageElement | HTMLVideoElement> {\n\treturn isVideo ? loadVideo(url) : loadImage(url);\n}\n\nexport function loadResourceFromElement(\n\telement: HTMLImageElement | HTMLVideoElement,\n): Promise<HTMLImageElement | HTMLVideoElement> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (\n\t\t\telement instanceof HTMLImageElement\n\t\t\t\t? element.complete\n\t\t\t\t: element.readyState >= 3\n\t\t) {\n\t\t\tresolve(element);\n\t\t} else {\n\t\t\telement.onload = () => resolve(element);\n\t\t\telement.onerror = reject;\n\t\t}\n\t});\n}\n","import { Container } from \"@pixi/display\";\nimport { Application } from \"@pixi/app\";\nimport { BlurFilter } from \"@pixi/filter-blur\";\nimport { ColorMatrixFilter } from \"@pixi/filter-color-matrix\";\nimport { Texture } from \"@pixi/core\";\nimport { Sprite } from \"@pixi/sprite\";\nimport { BulgePinchFilter } from \"@pixi/filter-bulge-pinch\";\nimport { BaseRenderer } from \"./base\";\nimport {\n\tloadResourceFromElement,\n\tloadResourceFromUrl,\n} from \"../utils/resource\";\n\nclass TimedContainer extends Container {\n\tpublic time = 0;\n}\n\nexport class PixiRenderer extends BaseRenderer {\n\tprivate app: Application;\n\tprivate curContainer?: TimedContainer;\n\tprivate staticMode = false;\n\tprivate lastContainer: Set<TimedContainer> = new Set();\n\tprivate onTick = (delta: number): void => {\n\t\tfor (const lastContainer of this.lastContainer) {\n\t\t\tlastContainer.alpha = Math.max(0, lastContainer.alpha - delta / 60);\n\t\t\tif (lastContainer.alpha <= 0) {\n\t\t\t\tthis.app.stage.removeChild(lastContainer);\n\t\t\t\tthis.lastContainer.delete(lastContainer);\n\t\t\t\tlastContainer.destroy(true);\n\t\t\t}\n\t\t}\n\n\t\tif (this.curContainer) {\n\t\t\tthis.curContainer.alpha = Math.min(\n\t\t\t\t1,\n\t\t\t\tthis.curContainer.alpha + delta / 60,\n\t\t\t);\n\t\t\tconst [s1, s2, s3, s4] = this.curContainer.children as Sprite[];\n\t\t\tconst maxSize = Math.max(this.app.screen.width, this.app.screen.height);\n\t\t\ts1.position.set(this.app.screen.width / 2, this.app.screen.height / 2);\n\t\t\ts2.position.set(\n\t\t\t\tthis.app.screen.width / 2.5,\n\t\t\t\tthis.app.screen.height / 2.5,\n\t\t\t);\n\t\t\ts3.position.set(this.app.screen.width / 2, this.app.screen.height / 2);\n\t\t\ts4.position.set(this.app.screen.width / 2, this.app.screen.height / 2);\n\t\t\ts1.width = maxSize * Math.sqrt(2);\n\t\t\ts1.height = s1.width;\n\t\t\ts2.width = maxSize * 0.8;\n\t\t\ts2.height = s2.width;\n\t\t\ts3.width = maxSize * 0.5;\n\t\t\ts3.height = s3.width;\n\t\t\ts4.width = maxSize * 0.25;\n\t\t\ts4.height = s4.width;\n\n\t\t\tthis.curContainer.time += delta * this.flowSpeed;\n\n\t\t\ts1.rotation += (delta / 1000) * this.flowSpeed;\n\t\t\ts2.rotation -= (delta / 500) * this.flowSpeed;\n\t\t\ts3.rotation += (delta / 1000) * this.flowSpeed;\n\t\t\ts4.rotation -= (delta / 750) * this.flowSpeed;\n\n\t\t\ts3.x =\n\t\t\t\tthis.app.screen.width / 2 +\n\t\t\t\t(this.app.screen.width / 4) *\n\t\t\t\t\tMath.cos((this.curContainer.time / 1000) * 0.75);\n\t\t\ts3.y =\n\t\t\t\tthis.app.screen.height / 2 +\n\t\t\t\t(this.app.screen.width / 4) *\n\t\t\t\t\tMath.cos((this.curContainer.time / 1000) * 0.75);\n\n\t\t\ts4.x =\n\t\t\t\tthis.app.screen.width / 2 +\n\t\t\t\t(this.app.screen.width / 4) * 0.1 +\n\t\t\t\tMath.cos(this.curContainer.time * 0.006 * 0.75);\n\t\t\ts4.y =\n\t\t\t\tthis.app.screen.height / 2 +\n\t\t\t\t(this.app.screen.width / 4) * 0.1 +\n\t\t\t\tMath.cos(this.curContainer.time * 0.006 * 0.75);\n\n\t\t\tif (\n\t\t\t\tthis.curContainer.alpha >= 1 &&\n\t\t\t\tthis.lastContainer.size === 0 &&\n\t\t\t\tthis.staticMode\n\t\t\t) {\n\t\t\t\tthis.app.ticker.stop();\n\t\t\t}\n\t\t}\n\t};\n\tconstructor(protected canvas: HTMLCanvasElement) {\n\t\tsuper(canvas);\n\t\tthis.app = new Application({\n\t\t\tview: canvas,\n\t\t\tresizeTo: this.canvas,\n\t\t\tpowerPreference: \"low-power\",\n\t\t\tbackgroundAlpha: 1,\n\t\t});\n\t\tthis.rebuildFilters();\n\t\tthis.app.ticker.maxFPS = 30;\n\t\tthis.app.ticker.add(this.onTick);\n\t\tthis.app.ticker.start();\n\t}\n\n\tprotected override onResize(width: number, height: number): void {\n\t\tsuper.onResize(width, height);\n\t\tthis.app.resize();\n\t\tthis.rebuildFilters();\n\t}\n\n\toverride setRenderScale(scale: number) {\n\t\tsuper.setRenderScale(scale);\n\t\tthis.rebuildFilters();\n\t}\n\tprivate rebuildFilters() {\n\t\tconst minBorder = Math.min(this.canvas.width, this.canvas.height);\n\t\tconst maxBorder = Math.max(this.canvas.width, this.canvas.height);\n\t\tconst c0 = new ColorMatrixFilter();\n\t\tc0.saturate(1.2, false);\n\t\tconst c1 = new ColorMatrixFilter();\n\t\tc1.brightness(0.6, false);\n\t\tconst c2 = new ColorMatrixFilter();\n\t\tc2.contrast(0.3, true);\n\t\tthis.app.stage.filters?.forEach((filter) => {\n\t\t\tfilter.destroy();\n\t\t});\n\t\tthis.app.stage.filters = [];\n\t\tthis.app.stage.filters.push(new BlurFilter(5, 1));\n\t\tthis.app.stage.filters.push(new BlurFilter(10, 1));\n\t\tthis.app.stage.filters.push(new BlurFilter(20, 2));\n\t\tthis.app.stage.filters.push(new BlurFilter(40, 2));\n\t\tthis.app.stage.filters.push(new BlurFilter(80, 2));\n\t\tif (minBorder > 768) this.app.stage.filters.push(new BlurFilter(160, 4));\n\t\tif (minBorder > 768 * 2)\n\t\t\tthis.app.stage.filters.push(new BlurFilter(320, 4));\n\n\t\tthis.app.stage.filters.push(c0, c1, c2);\n\t\tthis.app.stage.filters.push(new BlurFilter(5, 1));\n\t\tif (Math.random() > 0.5) {\n\t\t\tthis.app.stage.filters.push(\n\t\t\t\tnew BulgePinchFilter({\n\t\t\t\t\tradius: (maxBorder + minBorder) / 2,\n\t\t\t\t\tstrength: 1,\n\t\t\t\t\tcenter: [0.25, 1],\n\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.app.stage.filters.push(\n\t\t\t\tnew BulgePinchFilter({\n\t\t\t\t\tradius: (maxBorder + minBorder) / 2,\n\t\t\t\t\tstrength: 1,\n\t\t\t\t\tcenter: [0.75, 0],\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\tthis.app.stage.filters.push(\n\t\t\t\tnew BulgePinchFilter({\n\t\t\t\t\tradius: (maxBorder + minBorder) / 2,\n\t\t\t\t\tstrength: 1,\n\t\t\t\t\tcenter: [0.75, 1],\n\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.app.stage.filters.push(\n\t\t\t\tnew BulgePinchFilter({\n\t\t\t\t\tradius: (maxBorder + minBorder) / 2,\n\t\t\t\t\tstrength: 1,\n\t\t\t\t\tcenter: [0.25, 0],\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\toverride setStaticMode(enable = false) {\n\t\tthis.staticMode = enable;\n\t\tthis.app.ticker.start();\n\t}\n\n\toverride setFPS(fps: number) {\n\t\tthis.app.ticker.maxFPS = fps;\n\t}\n\n\toverride pause() {\n\t\tthis.app.ticker.stop();\n\t\tthis.app.render();\n\t}\n\n\toverride resume() {\n\t\tthis.app.ticker.start();\n\t}\n\n\toverride setLowFreqVolume(_volume: number): void {\n\t\t// NOOP\n\t}\n\n\toverride setHasLyric(_hasLyric: boolean): void {\n\t\t// NOOP\n\t}\n\n\toverride async setAlbum(\n\t\talbumSource: string | HTMLImageElement | HTMLVideoElement,\n\t\tisVideo?: boolean,\n\t): Promise<void> {\n\t\tif (typeof albumSource === \"string\" && albumSource.trim().length === 0)\n\t\t\treturn;\n\t\tlet res: HTMLImageElement | HTMLVideoElement | null = null;\n\t\tlet remainRetryTimes = 5;\n\t\tlet tex: Texture | null = null;\n\t\twhile (!tex?.baseTexture?.resource?.valid && remainRetryTimes > 0) {\n\t\t\ttry {\n\t\t\t\tif (typeof albumSource === \"string\") {\n\t\t\t\t\tres = await loadResourceFromUrl(albumSource, isVideo);\n\t\t\t\t} else {\n\t\t\t\t\tres = await loadResourceFromElement(albumSource);\n\t\t\t\t}\n\t\t\t\ttex = Texture.from(res, {\n\t\t\t\t\tresourceOptions: {\n\t\t\t\t\t\tautoLoad: false,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tawait tex.baseTexture.resource.load();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`failed on loading album image, retrying (${remainRetryTimes})`,\n\t\t\t\t\talbumSource,\n\t\t\t\t\terror,\n\t\t\t\t);\n\t\t\t\ttex = null;\n\t\t\t\tremainRetryTimes--;\n\t\t\t}\n\t\t}\n\t\tif (!tex) return;\n\t\tconst container = new TimedContainer();\n\t\tconst s1 = new Sprite(tex);\n\t\tconst s2 = new Sprite(tex);\n\t\tconst s3 = new Sprite(tex);\n\t\tconst s4 = new Sprite(tex);\n\t\ts1.anchor.set(0.5, 0.5);\n\t\ts2.anchor.set(0.5, 0.5);\n\t\ts3.anchor.set(0.5, 0.5);\n\t\ts4.anchor.set(0.5, 0.5);\n\t\ts1.rotation = Math.random() * Math.PI * 2;\n\t\ts2.rotation = Math.random() * Math.PI * 2;\n\t\ts3.rotation = Math.random() * Math.PI * 2;\n\t\ts4.rotation = Math.random() * Math.PI * 2;\n\t\tcontainer.addChild(s1, s2, s3, s4);\n\t\tif (this.curContainer) this.lastContainer.add(this.curContainer);\n\t\tthis.curContainer = container;\n\t\tthis.app.stage.addChild(container);\n\t\tthis.curContainer.alpha = 0;\n\t\tthis.app.ticker.start();\n\t}\n\n\toverride dispose() {\n\t\tsuper.dispose();\n\t\tthis.app.ticker.remove(this.onTick);\n\t\tthis.app.destroy(true);\n\t}\n\n\toverride getElement(): HTMLElement {\n\t\treturn this.canvas;\n\t}\n}\n","export const EPSILON = 0.000001;\nexport const ANGLE_ORDER = \"zyx\";\nconst DEG_TO_RAD = Math.PI / 180;\nconst RAD_TO_DEG = 180 / Math.PI;\n/**\n * Convert Degrees To Radians\n *\n * @param value - Angle in Degrees\n * @returns Angle in Radians\n */\nexport function toRadian(value) {\n return value * DEG_TO_RAD;\n}\n/**\n * Convert Radians To Degrees\n *\n * @param value - Angle in Radians\n * @returns Angle in Degrees\n */\nexport function toDegree(value) {\n return value * RAD_TO_DEG;\n}\n//# sourceMappingURL=common.js.map","import { EPSILON } from './common.js';\nconst IDENTITY_4X4 = new Float32Array([\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n]);\n/**\n * A 4x4 Matrix\n */\nclass Mat4 extends Float32Array {\n /**\n * The number of bytes in a {@link Mat4}.\n */\n static BYTE_LENGTH = 16 * Float32Array.BYTES_PER_ELEMENT;\n /**\n * Create a {@link Mat4}.\n */\n constructor(...values) {\n switch (values.length) {\n case 16:\n super(values);\n break;\n case 2:\n super(values[0], values[1], 16);\n break;\n case 1:\n const v = values[0];\n if (typeof v === 'number') {\n super([\n v, v, v, v,\n v, v, v, v,\n v, v, v, v,\n v, v, v, v\n ]);\n }\n else {\n super(v, 0, 16);\n }\n break;\n default:\n super(IDENTITY_4X4);\n break;\n }\n }\n //============\n // Attributes\n //============\n /**\n * A string representation of `this`\n * Equivalent to `Mat4.str(this);`\n */\n get str() {\n return Mat4.str(this);\n }\n //===================\n // Instance methods\n //===================\n /**\n * Copy the values from another {@link Mat4} into `this`.\n *\n * @param a the source vector\n * @returns `this`\n */\n copy(a) {\n this.set(a);\n return this;\n }\n /**\n * Set `this` to the identity matrix\n * Equivalent to Mat4.identity(this)\n *\n * @returns `this`\n */\n identity() {\n this.set(IDENTITY_4X4);\n return this;\n }\n /**\n * Multiplies this {@link Mat4} against another one\n * Equivalent to `Mat4.multiply(this, this, b);`\n *\n * @param out - The receiving Matrix\n * @param a - The first operand\n * @param b - The second operand\n * @returns `this`\n */\n multiply(b) {\n return Mat4.multiply(this, this, b);\n }\n /**\n * Alias for {@link Mat4.multiply}\n */\n mul(b) { return this; }\n /**\n * Transpose this {@link Mat4}\n * Equivalent to `Mat4.transpose(this, this);`\n *\n * @returns `this`\n */\n transpose() {\n return Mat4.transpose(this, this);\n }\n /**\n * Inverts this {@link Mat4}\n * Equivalent to `Mat4.invert(this, this);`\n *\n * @returns `this`\n */\n invert() {\n return Mat4.invert(this, this);\n }\n /**\n * Translate this {@link Mat4} by the given vector\n * Equivalent to `Mat4.translate(this, this, v);`\n *\n * @param v - The {@link Vec3} to translate by\n * @returns `this`\n */\n translate(v) {\n return Mat4.translate(this, this, v);\n }\n /**\n * Rotates this {@link Mat4} by the given angle around the given axis\n * Equivalent to `Mat4.rotate(this, this, rad, axis);`\n *\n * @param rad - the angle to rotate the matrix by\n * @param axis - the axis to rotate around\n * @returns `out`\n */\n rotate(rad, axis) {\n return Mat4.rotate(this, this, rad, axis);\n }\n /**\n * Scales this {@link Mat4} by the dimensions in the given vec3 not using vectorization\n * Equivalent to `Mat4.scale(this, this, v);`\n *\n * @param v - The {@link Vec3} to scale the matrix by\n * @returns `this`\n */\n scale(v) {\n return Mat4.scale(this, this, v);\n }\n /**\n * Rotates this {@link Mat4} by the given angle around the X axis\n * Equivalent to `Mat4.rotateX(this, this, rad);`\n *\n * @param rad - the angle to rotate the matrix by\n * @returns `this`\n */\n rotateX(rad) {\n return Mat4.rotateX(this, this, rad);\n }\n /**\n * Rotates this {@link Mat4} by the given angle around the Y axis\n * Equivalent to `Mat4.rotateY(this, this, rad);`\n *\n * @param rad - the angle to rotate the matrix by\n * @returns `this`\n */\n rotateY(rad) {\n return Mat4.rotateY(this, this, rad);\n }\n /**\n * Rotates this {@link Mat4} by the given angle around the Z axis\n * Equivalent to `Mat4.rotateZ(this, this, rad);`\n *\n * @param rad - the angle to rotate the matrix by\n * @returns `this`\n */\n rotateZ(rad) {\n return Mat4.rotateZ(this, this, rad);\n }\n /**\n * Generates a perspective projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n * Equivalent to `Mat4.perspectiveNO(this, fovy, aspect, near, far);`\n *\n * @param fovy - Vertical field of view in radians\n * @param aspect - Aspect ratio. typically viewport width/height\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum, can be null or Infinity\n * @returns `this`\n */\n perspectiveNO(fovy, aspect, near, far) {\n return Mat4.perspectiveNO(this, fovy, aspect, near, far);\n }\n /**\n * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n * Equivalent to `Mat4.perspectiveZO(this, fovy, aspect, near, far);`\n *\n * @param fovy - Vertical field of view in radians\n * @param aspect - Aspect ratio. typically viewport width/height\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum, can be null or Infinity\n * @returns `this`\n */\n perspectiveZO(fovy, aspect, near, far) {\n return Mat4.perspectiveZO(this, fovy, aspect, near, far);\n }\n /**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Equivalent to `Mat4.orthoNO(this, left, right, bottom, top, near, far);`\n *\n * @param left - Left bound of the frustum\n * @param right - Right bound of the frustum\n * @param bottom - Bottom bound of the frustum\n * @param top - Top bound of the frustum\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum\n * @returns `this`\n */\n orthoNO(left, right, bottom, top, near, far) {\n return Mat4.orthoNO(this, left, right, bottom, top, near, far);\n }\n /**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Equivalent to `Mat4.orthoZO(this, left, right, bottom, top, near, far);`\n *\n * @param left - Left bound of the frustum\n * @param right - Right bound of the frustum\n * @param bottom - Bottom bound of the frustum\n * @param top - Top bound of the frustum\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum\n * @returns `this`\n */\n orthoZO(left, right, bottom, top, near, far) {\n return Mat4.orthoZO(this, left, right, bottom, top, near, far);\n }\n //================\n // Static methods\n //================\n /**\n * Creates a new, identity {@link Mat4}\n * @category Static\n *\n * @returns A new {@link Mat4}\n */\n static create() {\n return new Mat4();\n }\n /**\n * Creates a new {@link Mat4} initialized with values from an existing matrix\n * @category Static\n *\n * @param a - Matrix to clone\n * @returns A new {@link Mat4}\n */\n static clone(a) {\n return new Mat4(a);\n }\n /**\n * Copy the values from one {@link Mat4} to another\n * @category Static\n *\n * @param out - The receiving Matrix\n * @param a - Matrix to copy\n * @returns `out`\n */\n static copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n }\n /**\n * Create a new mat4 with the given values\n * @category Static\n *\n * @param values - Matrix components\n * @returns A new {@link Mat4}\n */\n static fromValues(...values) {\n return new Mat4(...values);\n }\n /**\n * Set the components of a mat4 to the given values\n * @category Static\n *\n * @param out - The receiving matrix\n * @param values - Matrix components\n * @returns `out`\n */\n static set(out, ...values) {\n out[0] = values[0];\n out[1] = values[1];\n out[2] = values[2];\n out[3] = values[3];\n out[4] = values[4];\n out[5] = values[5];\n out[6] = values[6];\n out[7] = values[7];\n out[8] = values[8];\n out[9] = values[9];\n out[10] = values[10];\n out[11] = values[11];\n out[12] = values[12];\n out[13] = values[13];\n out[14] = values[14];\n out[15] = values[15];\n return out;\n }\n /**\n * Set a {@link Mat4} to the identity matrix\n * @category Static\n *\n * @param out - The receiving Matrix\n * @returns `out`\n */\n static identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Transpose the values of a {@link Mat4}\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the source matrix\n * @returns `out`\n */\n static transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n const a01 = a[1], a02 = a[2], a03 = a[3];\n const a12 = a[6], a13 = a[7];\n const a23 = a[11];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n }\n else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n return out;\n }\n /**\n * Inverts a {@link Mat4}\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the source matrix\n * @returns `out` or `null` if the matrix is not invertable\n */\n static invert(out, a) {\n const a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];\n const a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];\n const a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];\n const a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n const b00 = a00 * a11 - a01 * a10;\n const b01 = a00 * a12 - a02 * a10;\n const b02 = a00 * a13 - a03 * a10;\n const b03 = a01 * a12 - a02 * a11;\n const b04 = a01 * a13 - a03 * a11;\n const b05 = a02 * a13 - a03 * a12;\n const b06 = a20 * a31 - a21 * a30;\n const b07 = a20 * a32 - a22 * a30;\n const b08 = a20 * a33 - a23 * a30;\n const b09 = a21 * a32 - a22 * a31;\n const b10 = a21 * a33 - a23 * a31;\n const b11 = a22 * a33 - a23 * a32;\n // Calculate the determinant\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n return out;\n }\n /**\n * Calculates the adjugate of a {@link Mat4}\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the source matrix\n * @returns `out`\n */\n static adjoint(out, a) {\n const a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];\n const a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];\n const a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];\n const a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n const b00 = a00 * a11 - a01 * a10;\n const b01 = a00 * a12 - a02 * a10;\n const b02 = a00 * a13 - a03 * a10;\n const b03 = a01 * a12 - a02 * a11;\n const b04 = a01 * a13 - a03 * a11;\n const b05 = a02 * a13 - a03 * a12;\n const b06 = a20 * a31 - a21 * a30;\n const b07 = a20 * a32 - a22 * a30;\n const b08 = a20 * a33 - a23 * a30;\n const b09 = a21 * a32 - a22 * a31;\n const b10 = a21 * a33 - a23 * a31;\n const b11 = a22 * a33 - a23 * a32;\n out[0] = a11 * b11 - a12 * b10 + a13 * b09;\n out[1] = a02 * b10 - a01 * b11 - a03 * b09;\n out[2] = a31 * b05 - a32 * b04 + a33 * b03;\n out[3] = a22 * b04 - a21 * b05 - a23 * b03;\n out[4] = a12 * b08 - a10 * b11 - a13 * b07;\n out[5] = a00 * b11 - a02 * b08 + a03 * b07;\n out[6] = a32 * b02 - a30 * b05 - a33 * b01;\n out[7] = a20 * b05 - a22 * b02 + a23 * b01;\n out[8] = a10 * b10 - a11 * b08 + a13 * b06;\n out[9] = a01 * b08 - a00 * b10 - a03 * b06;\n out[10] = a30 * b04 - a31 * b02 + a33 * b00;\n out[11] = a21 * b02 - a20 * b04 - a23 * b00;\n out[12] = a11 * b07 - a10 * b09 - a12 * b06;\n out[13] = a00 * b09 - a01 * b07 + a02 * b06;\n out[14] = a31 * b01 - a30 * b03 - a32 * b00;\n out[15] = a20 * b03 - a21 * b01 + a22 * b00;\n return out;\n }\n /**\n * Calculates the determinant of a {@link Mat4}\n * @category Static\n *\n * @param a - the source matrix\n * @returns determinant of a\n */\n static determinant(a) {\n const a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3];\n const a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7];\n const a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11];\n const a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n const b0 = a00 * a11 - a01 * a10;\n const b1 = a00 * a12 - a02 * a10;\n const b2 = a01 * a12 - a02 * a11;\n const b3 = a20 * a31 - a21 * a30;\n const b4 = a20 * a32 - a22 * a30;\n const b5 = a21 * a32 - a22 * a31;\n const b6 = a00 * b5 - a01 * b4 + a02 * b3;\n const b7 = a10 * b5 - a11 * b4 + a12 * b3;\n const b8 = a20 * b2 - a21 * b1 + a22 * b0;\n const b9 = a30 * b2 - a31 * b1 + a32 * b0;\n // Calculate the determinant\n return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;\n }\n /**\n * Multiplies two {@link Mat4}s\n * @category Static\n *\n * @param out - The receiving Matrix\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static multiply(out, a, b) {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15];\n // Cache only the current line of the second matrix\n let b0 = b[0];\n let b1 = b[1];\n let b2 = b[2];\n let b3 = b[3];\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[4];\n b1 = b[5];\n b2 = b[6];\n b3 = b[7];\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[8];\n b1 = b[9];\n b2 = b[10];\n b3 = b[11];\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n b0 = b[12];\n b1 = b[13];\n b2 = b[14];\n b3 = b[15];\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n return out;\n }\n /**\n * Alias for {@link Mat4.multiply}\n * @category Static\n */\n static mul(out, a, b) { return out; }\n /**\n * Translate a {@link Mat4} by the given vector\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the matrix to translate\n * @param v - vector to translate by\n * @returns `out`\n */\n static translate(out, a, v) {\n const x = v[0];\n const y = v[1];\n const z = v[2];\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n }\n else {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n return out;\n }\n /**\n * Scales the {@link Mat4} by the dimensions in the given {@link Vec3} not using vectorization\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the matrix to scale\n * @param v - the {@link Vec3} to scale the matrix by\n * @returns `out`\n **/\n static scale(out, a, v) {\n const x = v[0];\n const y = v[1];\n const z = v[2];\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n }\n /**\n * Rotates a {@link Mat4} by the given angle around the given axis\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the matrix to rotate\n * @param rad - the angle to rotate the matrix by\n * @param axis - the axis to rotate around\n * @returns `out` or `null` if axis has a length of 0\n */\n static rotate(out, a, rad, axis) {\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n let len = Math.sqrt(x * x + y * y + z * z);\n if (len < EPSILON) {\n return null;\n }\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const t = 1 - c;\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n // Construct the elements of the rotation matrix\n const b00 = x * x * t + c;\n const b01 = y * x * t + z * s;\n const b02 = z * x * t - y * s;\n const b10 = x * y * t - z * s;\n const b11 = y * y * t + c;\n const b12 = z * y * t + x * s;\n const b20 = x * z * t + y * s;\n const b21 = y * z * t - x * s;\n const b22 = z * z * t + c;\n // Perform rotation-specific matrix multiplication\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n return out;\n }\n /**\n * Rotates a matrix by the given angle around the X axis\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the matrix to rotate\n * @param rad - the angle to rotate the matrix by\n * @returns `out`\n */\n static rotateX(out, a, rad) {\n let s = Math.sin(rad);\n let c = Math.cos(rad);\n let a10 = a[4];\n let a11 = a[5];\n let a12 = a[6];\n let a13 = a[7];\n let a20 = a[8];\n let a21 = a[9];\n let a22 = a[10];\n let a23 = a[11];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n // Perform axis-specific matrix multiplication\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n }\n /**\n * Rotates a matrix by the given angle around the Y axis\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the matrix to rotate\n * @param rad - the angle to rotate the matrix by\n * @returns `out`\n */\n static rotateY(out, a, rad) {\n let s = Math.sin(rad);\n let c = Math.cos(rad);\n let a00 = a[0];\n let a01 = a[1];\n let a02 = a[2];\n let a03 = a[3];\n let a20 = a[8];\n let a21 = a[9];\n let a22 = a[10];\n let a23 = a[11];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n }\n /**\n * Rotates a matrix by the given angle around the Z axis\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the matrix to rotate\n * @param rad - the angle to rotate the matrix by\n * @returns `out`\n */\n static rotateZ(out, a, rad) {\n let s = Math.sin(rad);\n let c = Math.cos(rad);\n let a00 = a[0];\n let a01 = a[1];\n let a02 = a[2];\n let a03 = a[3];\n let a10 = a[4];\n let a11 = a[5];\n let a12 = a[6];\n let a13 = a[7];\n if (a !== out) {\n // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n }\n /**\n * Creates a {@link Mat4} from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, dest, vec);\n * @category Static\n *\n * @param out - {@link Mat4} receiving operation result\n * @param v - Translation vector\n * @returns `out`\n */\n static fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n }\n /**\n * Creates a {@link Mat4} from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.scale(dest, dest, vec);\n * @category Static\n *\n * @param out - {@link Mat4} receiving operation result\n * @param v - Scaling vector\n * @returns `out`\n */\n static fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = v[1];\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = v[2];\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Creates a {@link Mat4} from a given angle around a given axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotate(dest, dest, rad, axis);\n * @category Static\n *\n * @param out - {@link Mat4} receiving operation result\n * @param rad - the angle to rotate the matrix by\n * @param axis - the axis to rotate around\n * @returns `out` or `null` if `axis` has a length of 0\n */\n static fromRotation(out, rad, axis) {\n let x = axis[0];\n let y = axis[1];\n let z = axis[2];\n let len = Math.sqrt(x * x + y * y + z * z);\n if (len < EPSILON) {\n return null;\n }\n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n const t = 1 - c;\n // Perform rotation-specific matrix multiplication\n out[0] = x * x * t + c;\n out[1] = y * x * t + z * s;\n out[2] = z * x * t - y * s;\n out[3] = 0;\n out[4] = x * y * t - z * s;\n out[5] = y * y * t + c;\n out[6] = z * y * t + x * s;\n out[7] = 0;\n out[8] = x * z * t + y * s;\n out[9] = y * z * t - x * s;\n out[10] = z * z * t + c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Creates a matrix from the given angle around the X axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateX(dest, dest, rad);\n * @category Static\n *\n * @param out - mat4 receiving operation result\n * @param rad - the angle to rotate the matrix by\n * @returns `out`\n */\n static fromXRotation(out, rad) {\n let s = Math.sin(rad);\n let c = Math.cos(rad);\n // Perform axis-specific matrix multiplication\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = c;\n out[6] = s;\n out[7] = 0;\n out[8] = 0;\n out[9] = -s;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Creates a matrix from the given angle around the Y axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateY(dest, dest, rad);\n * @category Static\n *\n * @param out - mat4 receiving operation result\n * @param rad - the angle to rotate the matrix by\n * @returns `out`\n */\n static fromYRotation(out, rad) {\n let s = Math.sin(rad);\n let c = Math.cos(rad);\n // Perform axis-specific matrix multiplication\n out[0] = c;\n out[1] = 0;\n out[2] = -s;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = s;\n out[9] = 0;\n out[10] = c;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Creates a matrix from the given angle around the Z axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.rotateZ(dest, dest, rad);\n * @category Static\n *\n * @param out - mat4 receiving operation result\n * @param rad - the angle to rotate the matrix by\n * @returns `out`\n */\n static fromZRotation(out, rad) {\n const s = Math.sin(rad);\n const c = Math.cos(rad);\n // Perform axis-specific matrix multiplication\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = 0;\n out[4] = -s;\n out[5] = c;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Creates a matrix from a quaternion rotation and vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * @category Static\n *\n * @param out - mat4 receiving operation result\n * @param q - Rotation quaternion\n * @param v - Translation vector\n * @returns `out`\n */\n static fromRotationTranslation(out, q, v) {\n // Quaternion math\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n }\n /**\n * Sets a {@link Mat4} from a {@link Quat2}.\n * @category Static\n *\n * @param out - Matrix\n * @param a - Dual Quaternion\n * @returns `out`\n */\n static fromQuat2(out, a) {\n const bx = -a[0];\n const by = -a[1];\n const bz = -a[2];\n const bw = a[3];\n const ax = a[4];\n const ay = a[5];\n const az = a[6];\n const aw = a[7];\n let magnitude = bx * bx + by * by + bz * bz + bw * bw;\n //Only scale if it makes sense\n if (magnitude > 0) {\n tmpVec3[0] = ((ax * bw + aw * bx + ay * bz - az * by) * 2) / magnitude;\n tmpVec3[1] = ((ay * bw + aw * by + az * bx - ax * bz) * 2) / magnitude;\n tmpVec3[2] = ((az * bw + aw * bz + ax * by - ay * bx) * 2) / magnitude;\n }\n else {\n tmpVec3[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n tmpVec3[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n tmpVec3[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n }\n Mat4.fromRotationTranslation(out, a, tmpVec3);\n return out;\n }\n /**\n * Calculates a {@link Mat4} normal matrix (transpose inverse) from a {@link Mat4}\n * @category Static\n *\n * @param out - Matrix receiving operation result\n * @param a - Mat4 to derive the normal matrix from\n * @returns `out` or `null` if the matrix is not invertable\n */\n static normalFromMat4(out, a) {\n const a00 = a[0];\n const a01 = a[1];\n const a02 = a[2];\n const a03 = a[3];\n const a10 = a[4];\n const a11 = a[5];\n const a12 = a[6];\n const a13 = a[7];\n const a20 = a[8];\n const a21 = a[9];\n const a22 = a[10];\n const a23 = a[11];\n const a30 = a[12];\n const a31 = a[13];\n const a32 = a[14];\n const a33 = a[15];\n const b00 = a00 * a11 - a01 * a10;\n const b01 = a00 * a12 - a02 * a10;\n const b02 = a00 * a13 - a03 * a10;\n const b03 = a01 * a12 - a02 * a11;\n const b04 = a01 * a13 - a03 * a11;\n const b05 = a02 * a13 - a03 * a12;\n const b06 = a20 * a31 - a21 * a30;\n const b07 = a20 * a32 - a22 * a30;\n const b08 = a20 * a33 - a23 * a30;\n const b09 = a21 * a32 - a22 * a31;\n const b10 = a21 * a33 - a23 * a31;\n const b11 = a22 * a33 - a23 * a32;\n // Calculate the determinant\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[3] = 0;\n out[4] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[7] = 0;\n out[8] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[9] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = 0;\n // No translation\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Calculates a {@link Mat4} normal matrix (transpose inverse) from a {@link Mat4}\n * This version omits the calculation of the constant factor (1/determinant), so\n * any normals transformed with it will need to be renormalized.\n * From https://stackoverflow.com/a/27616419/25968\n * @category Static\n *\n * @param out - Matrix receiving operation result\n * @param a - Mat4 to derive the normal matrix from\n * @returns `out`\n */\n static normalFromMat4Fast(out, a) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = a[4];\n const by = a[5];\n const bz = a[6];\n const cx = a[8];\n const cy = a[9];\n const cz = a[10];\n out[0] = by * cz - cz * cy;\n out[1] = bz * cx - cx * cz;\n out[2] = bx * cy - cy * cx;\n out[3] = 0;\n out[4] = cy * az - cz * ay;\n out[5] = cz * ax - cx * az;\n out[6] = cx * ay - cy * ax;\n out[7] = 0;\n out[8] = ay * bz - az * by;\n out[9] = az * bx - ax * bz;\n out[10] = ax * by - ay * bx;\n out[11] = 0;\n // No translation\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Returns the translation vector component of a transformation\n * matrix. If a matrix is built with fromRotationTranslation,\n * the returned vector will be the same as the translation vector\n * originally supplied.\n * @category Static\n *\n * @param {vec3} out Vector to receive translation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n static getTranslation(out, mat) {\n out[0] = mat[12];\n out[1] = mat[13];\n out[2] = mat[14];\n return out;\n }\n /**\n * Returns the scaling factor component of a transformation\n * matrix. If a matrix is built with fromRotationTranslationScale\n * with a normalized Quaternion parameter, the returned vector will be\n * the same as the scaling vector\n * originally supplied.\n * @category Static\n *\n * @param {vec3} out Vector to receive scaling factor component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n static getScaling(out, mat) {\n const m11 = mat[0];\n const m12 = mat[1];\n const m13 = mat[2];\n const m21 = mat[4];\n const m22 = mat[5];\n const m23 = mat[6];\n const m31 = mat[8];\n const m32 = mat[9];\n const m33 = mat[10];\n out[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);\n out[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);\n out[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);\n return out;\n }\n /**\n * Returns a quaternion representing the rotational component\n * of a transformation matrix. If a matrix is built with\n * fromRotationTranslation, the returned quaternion will be the\n * same as the quaternion originally supplied.\n * @category Static\n *\n * @param out - Quaternion to receive the rotation component\n * @param mat - Matrix to be decomposed (input)\n * @return `out`\n */\n static getRotation(out, mat) {\n Mat4.getScaling(tmpVec3, mat);\n const is1 = 1 / tmpVec3[0];\n const is2 = 1 / tmpVec3[1];\n const is3 = 1 / tmpVec3[2];\n const sm11 = mat[0] * is1;\n const sm12 = mat[1] * is2;\n const sm13 = mat[2] * is3;\n const sm21 = mat[4] * is1;\n const sm22 = mat[5] * is2;\n const sm23 = mat[6] * is3;\n const sm31 = mat[8] * is1;\n const sm32 = mat[9] * is2;\n const sm33 = mat[10] * is3;\n const trace = sm11 + sm22 + sm33;\n let S = 0;\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out[3] = 0.25 * S;\n out[0] = (sm23 - sm32) / S;\n out[1] = (sm31 - sm13) / S;\n out[2] = (sm12 - sm21) / S;\n }\n else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out[3] = (sm23 - sm32) / S;\n out[0] = 0.25 * S;\n out[1] = (sm12 + sm21) / S;\n out[2] = (sm31 + sm13) / S;\n }\n else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out[3] = (sm31 - sm13) / S;\n out[0] = (sm12 + sm21) / S;\n out[1] = 0.25 * S;\n out[2] = (sm23 + sm32) / S;\n }\n else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out[3] = (sm12 - sm21) / S;\n out[0] = (sm31 + sm13) / S;\n out[1] = (sm23 + sm32) / S;\n out[2] = 0.25 * S;\n }\n return out;\n }\n /**\n * Decomposes a transformation matrix into its rotation, translation\n * and scale components. Returns only the rotation component\n * @category Static\n *\n * @param out_r - Quaternion to receive the rotation component\n * @param out_t - Vector to receive the translation vector\n * @param out_s - Vector to receive the scaling factor\n * @param mat - Matrix to be decomposed (input)\n * @returns `out_r`\n */\n static decompose(out_r, out_t, out_s, mat) {\n out_t[0] = mat[12];\n out_t[1] = mat[13];\n out_t[2] = mat[14];\n const m11 = mat[0];\n const m12 = mat[1];\n const m13 = mat[2];\n const m21 = mat[4];\n const m22 = mat[5];\n const m23 = mat[6];\n const m31 = mat[8];\n const m32 = mat[9];\n const m33 = mat[10];\n out_s[0] = Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13);\n out_s[1] = Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23);\n out_s[2] = Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33);\n const is1 = 1 / out_s[0];\n const is2 = 1 / out_s[1];\n const is3 = 1 / out_s[2];\n const sm11 = m11 * is1;\n const sm12 = m12 * is2;\n const sm13 = m13 * is3;\n const sm21 = m21 * is1;\n const sm22 = m22 * is2;\n const sm23 = m23 * is3;\n const sm31 = m31 * is1;\n const sm32 = m32 * is2;\n const sm33 = m33 * is3;\n const trace = sm11 + sm22 + sm33;\n let S = 0;\n if (trace > 0) {\n S = Math.sqrt(trace + 1.0) * 2;\n out_r[3] = 0.25 * S;\n out_r[0] = (sm23 - sm32) / S;\n out_r[1] = (sm31 - sm13) / S;\n out_r[2] = (sm12 - sm21) / S;\n }\n else if (sm11 > sm22 && sm11 > sm33) {\n S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n out_r[3] = (sm23 - sm32) / S;\n out_r[0] = 0.25 * S;\n out_r[1] = (sm12 + sm21) / S;\n out_r[2] = (sm31 + sm13) / S;\n }\n else if (sm22 > sm33) {\n S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n out_r[3] = (sm31 - sm13) / S;\n out_r[0] = (sm12 + sm21) / S;\n out_r[1] = 0.25 * S;\n out_r[2] = (sm23 + sm32) / S;\n }\n else {\n S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n out_r[3] = (sm12 - sm21) / S;\n out_r[0] = (sm31 + sm13) / S;\n out_r[1] = (sm23 + sm32) / S;\n out_r[2] = 0.25 * S;\n }\n return out_r;\n }\n /**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale);\n * @category Static\n *\n * @param out - mat4 receiving operation result\n * @param q - Rotation quaternion\n * @param v - Translation vector\n * @param s - Scaling vector\n * @returns `out`\n */\n static fromRotationTranslationScale(out, q, v, s) {\n // Quaternion math\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n const sx = s[0];\n const sy = s[1];\n const sz = s[2];\n out[0] = (1 - (yy + zz)) * sx;\n out[1] = (xy + wz) * sx;\n out[2] = (xz - wy) * sx;\n out[3] = 0;\n out[4] = (xy - wz) * sy;\n out[5] = (1 - (xx + zz)) * sy;\n out[6] = (yz + wx) * sy;\n out[7] = 0;\n out[8] = (xz + wy) * sz;\n out[9] = (yz - wx) * sz;\n out[10] = (1 - (xx + yy)) * sz;\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n return out;\n }\n /**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * mat4.translate(dest, origin);\n * let quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n * mat4.scale(dest, scale)\n * mat4.translate(dest, negativeOrigin);\n * @category Static\n *\n * @param out - mat4 receiving operation result\n * @param q - Rotation quaternion\n * @param v - Translation vector\n * @param s - Scaling vector\n * @param o - The origin vector around which to scale and rotate\n * @returns `out`\n */\n static fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n // Quaternion math\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const xy = x * y2;\n const xz = x * z2;\n const yy = y * y2;\n const yz = y * z2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n const sx = s[0];\n const sy = s[1];\n const sz = s[2];\n const ox = o[0];\n const oy = o[1];\n const oz = o[2];\n const out0 = (1 - (yy + zz)) * sx;\n const out1 = (xy + wz) * sx;\n const out2 = (xz - wy) * sx;\n const out4 = (xy - wz) * sy;\n const out5 = (1 - (xx + zz)) * sy;\n const out6 = (yz + wx) * sy;\n const out8 = (xz + wy) * sz;\n const out9 = (yz - wx) * sz;\n const out10 = (1 - (xx + yy)) * sz;\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = 0;\n out[4] = out4;\n out[5] = out5;\n out[6] = out6;\n out[7] = 0;\n out[8] = out8;\n out[9] = out9;\n out[10] = out10;\n out[11] = 0;\n out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n out[15] = 1;\n return out;\n }\n /**\n * Calculates a 4x4 matrix from the given quaternion\n * @category Static\n *\n * @param out - mat4 receiving operation result\n * @param q - Quaternion to create matrix from\n * @returns `out`\n */\n static fromQuat(out, q) {\n const x = q[0];\n const y = q[1];\n const z = q[2];\n const w = q[3];\n const x2 = x + x;\n const y2 = y + y;\n const z2 = z + z;\n const xx = x * x2;\n const yx = y * x2;\n const yy = y * y2;\n const zx = z * x2;\n const zy = z * y2;\n const zz = z * z2;\n const wx = w * x2;\n const wy = w * y2;\n const wz = w * z2;\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n }\n /**\n * Generates a frustum matrix with the given bounds\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param left - Left bound of the frustum\n * @param right - Right bound of the frustum\n * @param bottom - Bottom bound of the frustum\n * @param top - Top bound of the frustum\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum, can be null or Infinity\n * @returns `out`\n */\n static frustumNO(out, left, right, bottom, top, near, far = Infinity) {\n const rl = 1 / (right - left);\n const tb = 1 / (top - bottom);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n if (far != null && far !== Infinity) {\n const nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n }\n else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n return out;\n }\n /**\n * Alias for {@link Mat4.frustumNO}\n * @category Static\n * @deprecated Use {@link Mat4.frustumNO} or {@link Mat4.frustumZO} explicitly\n */\n static frustum(out, left, right, bottom, top, near, far = Infinity) { return out; }\n /**\n * Generates a frustum matrix with the given bounds\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param left - Left bound of the frustum\n * @param right - Right bound of the frustum\n * @param bottom - Bottom bound of the frustum\n * @param top - Top bound of the frustum\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum, can be null or Infinity\n * @returns `out`\n */\n static frustumZO(out, left, right, bottom, top, near, far = Infinity) {\n const rl = 1 / (right - left);\n const tb = 1 / (top - bottom);\n out[0] = near * 2 * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = near * 2 * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n if (far != null && far !== Infinity) {\n const nf = 1 / (near - far);\n out[10] = far * nf;\n out[14] = far * near * nf;\n }\n else {\n out[10] = -1;\n out[14] = -near;\n }\n return out;\n }\n /**\n * Generates a perspective projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param fovy - Vertical field of view in radians\n * @param aspect - Aspect ratio. typically viewport width/height\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum, can be null or Infinity\n * @returns `out`\n */\n static perspectiveNO(out, fovy, aspect, near, far = Infinity) {\n const f = 1.0 / Math.tan(fovy / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n if (far != null && far !== Infinity) {\n const nf = 1 / (near - far);\n out[10] = (far + near) * nf;\n out[14] = 2 * far * near * nf;\n }\n else {\n out[10] = -1;\n out[14] = -2 * near;\n }\n return out;\n }\n /**\n * Alias for {@link Mat4.perspectiveNO}\n * @category Static\n * @deprecated Use {@link Mat4.perspectiveNO} or {@link Mat4.perspectiveZO} explicitly\n */\n static perspective(out, fovy, aspect, near, far = Infinity) { return out; }\n /**\n * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param fovy - Vertical field of view in radians\n * @param aspect - Aspect ratio. typically viewport width/height\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum, can be null or Infinity\n * @returns `out`\n */\n static perspectiveZO(out, fovy, aspect, near, far = Infinity) {\n const f = 1.0 / Math.tan(fovy / 2);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[15] = 0;\n if (far != null && far !== Infinity) {\n const nf = 1 / (near - far);\n out[10] = far * nf;\n out[14] = far * near * nf;\n }\n else {\n out[10] = -1;\n out[14] = -near;\n }\n return out;\n }\n /**\n * Generates a perspective projection matrix with the given field of view.\n * This is primarily useful for generating projection matrices to be used\n * with the still experiemental WebVR API.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param fov - Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum\n * @returns `out`\n * @deprecated\n */\n static perspectiveFromFieldOfView(out, fov, near, far) {\n const upTan = Math.tan((fov.upDegrees * Math.PI) / 180.0);\n const downTan = Math.tan((fov.downDegrees * Math.PI) / 180.0);\n const leftTan = Math.tan((fov.leftDegrees * Math.PI) / 180.0);\n const rightTan = Math.tan((fov.rightDegrees * Math.PI) / 180.0);\n const xScale = 2.0 / (leftTan + rightTan);\n const yScale = 2.0 / (upTan + downTan);\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = (upTan - downTan) * yScale * 0.5;\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = (far * near) / (near - far);\n out[15] = 0.0;\n return out;\n }\n /**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param left - Left bound of the frustum\n * @param right - Right bound of the frustum\n * @param bottom - Bottom bound of the frustum\n * @param top - Top bound of the frustum\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum\n * @returns `out`\n */\n static orthoNO(out, left, right, bottom, top, near, far) {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n }\n /**\n * Alias for {@link Mat4.orthoNO}\n * @category Static\n * @deprecated Use {@link Mat4.orthoNO} or {@link Mat4.orthoZO} explicitly\n */\n static ortho(out, left, right, bottom, top, near, far) { return out; }\n /**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param left - Left bound of the frustum\n * @param right - Right bound of the frustum\n * @param bottom - Bottom bound of the frustum\n * @param top - Top bound of the frustum\n * @param near - Near bound of the frustum\n * @param far - Far bound of the frustum\n * @returns `out`\n */\n static orthoZO(out, left, right, bottom, top, near, far) {\n const lr = 1 / (left - right);\n const bt = 1 / (bottom - top);\n const nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = near * nf;\n out[15] = 1;\n return out;\n }\n /**\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param eye - Position of the viewer\n * @param center - Point the viewer is looking at\n * @param up - vec3 pointing up\n * @returns `out`\n */\n static lookAt(out, eye, center, up) {\n const eyex = eye[0];\n const eyey = eye[1];\n const eyez = eye[2];\n const upx = up[0];\n const upy = up[1];\n const upz = up[2];\n const centerx = center[0];\n const centery = center[1];\n const centerz = center[2];\n if (Math.abs(eyex - centerx) < EPSILON &&\n Math.abs(eyey - centery) < EPSILON &&\n Math.abs(eyez - centerz) < EPSILON) {\n return Mat4.identity(out);\n }\n let z0 = eyex - centerx;\n let z1 = eyey - centery;\n let z2 = eyez - centerz;\n let len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n let x0 = upy * z2 - upz * z1;\n let x1 = upz * z0 - upx * z2;\n let x2 = upx * z1 - upy * z0;\n len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n }\n else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n let y0 = z1 * x2 - z2 * x1;\n let y1 = z2 * x0 - z0 * x2;\n let y2 = z0 * x1 - z1 * x0;\n len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n }\n else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n return out;\n }\n /**\n * Generates a matrix that makes something look at something else.\n * @category Static\n *\n * @param out - mat4 frustum matrix will be written into\n * @param eye - Position of the viewer\n * @param target - Point the viewer is looking at\n * @param up - vec3 pointing up\n * @returns `out`\n */\n static targetTo(out, eye, target, up) {\n const eyex = eye[0];\n const eyey = eye[1];\n const eyez = eye[2];\n const upx = up[0];\n const upy = up[1];\n const upz = up[2];\n let z0 = eyex - target[0];\n let z1 = eyey - target[1];\n let z2 = eyez - target[2];\n let len = z0 * z0 + z1 * z1 + z2 * z2;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n }\n let x0 = upy * z2 - upz * z1;\n let x1 = upz * z0 - upx * z2;\n let x2 = upx * z1 - upy * z0;\n len = x0 * x0 + x1 * x1 + x2 * x2;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n out[0] = x0;\n out[1] = x1;\n out[2] = x2;\n out[3] = 0;\n out[4] = z1 * x2 - z2 * x1;\n out[5] = z2 * x0 - z0 * x2;\n out[6] = z0 * x1 - z1 * x0;\n out[7] = 0;\n out[8] = z0;\n out[9] = z1;\n out[10] = z2;\n out[11] = 0;\n out[12] = eyex;\n out[13] = eyey;\n out[14] = eyez;\n out[15] = 1;\n return out;\n }\n /**\n * Returns Frobenius norm of a {@link Mat4}\n * @category Static\n *\n * @param a - the matrix to calculate Frobenius norm of\n * @returns Frobenius norm\n */\n static frob(a) {\n return Math.sqrt(a[0] * a[0] +\n a[1] * a[1] +\n a[2] * a[2] +\n a[3] * a[3] +\n a[4] * a[4] +\n a[5] * a[5] +\n a[6] * a[6] +\n a[7] * a[7] +\n a[8] * a[8] +\n a[9] * a[9] +\n a[10] * a[10] +\n a[11] * a[11] +\n a[12] * a[12] +\n a[13] * a[13] +\n a[14] * a[14] +\n a[15] * a[15]);\n }\n /**\n * Adds two {@link Mat4}'s\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n out[9] = a[9] + b[9];\n out[10] = a[10] + b[10];\n out[11] = a[11] + b[11];\n out[12] = a[12] + b[12];\n out[13] = a[13] + b[13];\n out[14] = a[14] + b[14];\n out[15] = a[15] + b[15];\n return out;\n }\n /**\n * Subtracts matrix b from matrix a\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n out[9] = a[9] - b[9];\n out[10] = a[10] - b[10];\n out[11] = a[11] - b[11];\n out[12] = a[12] - b[12];\n out[13] = a[13] - b[13];\n out[14] = a[14] - b[14];\n out[15] = a[15] - b[15];\n return out;\n }\n /**\n * Alias for {@link Mat4.subtract}\n * @category Static\n */\n static sub(out, a, b) { return out; }\n /**\n * Multiply each element of the matrix by a scalar.\n * @category Static\n *\n * @param out - the receiving matrix\n * @param a - the matrix to scale\n * @param b - amount to scale the matrix's elements by\n * @returns `out`\n */\n static multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n out[9] = a[9] * b;\n out[10] = a[10] * b;\n out[11] = a[11] * b;\n out[12] = a[12] * b;\n out[13] = a[13] * b;\n out[14] = a[14] * b;\n out[15] = a[15] * b;\n return out;\n }\n /**\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param scale - the amount to scale b's elements by before adding\n * @returns `out`\n */\n static multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n out[9] = a[9] + b[9] * scale;\n out[10] = a[10] + b[10] * scale;\n out[11] = a[11] + b[11] * scale;\n out[12] = a[12] + b[12] * scale;\n out[13] = a[13] + b[13] * scale;\n out[14] = a[14] + b[14] * scale;\n out[15] = a[15] + b[15] * scale;\n return out;\n }\n /**\n * Returns whether or not two {@link Mat4}s have exactly the same elements in the same position (when compared with ===)\n * @category Static\n *\n * @param a - The first matrix.\n * @param b - The second matrix.\n * @returns True if the matrices are equal, false otherwise.\n */\n static exactEquals(a, b) {\n return (a[0] === b[0] &&\n a[1] === b[1] &&\n a[2] === b[2] &&\n a[3] === b[3] &&\n a[4] === b[4] &&\n a[5] === b[5] &&\n a[6] === b[6] &&\n a[7] === b[7] &&\n a[8] === b[8] &&\n a[9] === b[9] &&\n a[10] === b[10] &&\n a[11] === b[11] &&\n a[12] === b[12] &&\n a[13] === b[13] &&\n a[14] === b[14] &&\n a[15] === b[15]);\n }\n /**\n * Returns whether or not two {@link Mat4}s have approximately the same elements in the same position.\n * @category Static\n *\n * @param a - The first matrix.\n * @param b - The second matrix.\n * @returns True if the matrices are equal, false otherwise.\n */\n static equals(a, b) {\n const a0 = a[0];\n const a1 = a[1];\n const a2 = a[2];\n const a3 = a[3];\n const a4 = a[4];\n const a5 = a[5];\n const a6 = a[6];\n const a7 = a[7];\n const a8 = a[8];\n const a9 = a[9];\n const a10 = a[10];\n const a11 = a[11];\n const a12 = a[12];\n const a13 = a[13];\n const a14 = a[14];\n const a15 = a[15];\n const b0 = b[0];\n const b1 = b[1];\n const b2 = b[2];\n const b3 = b[3];\n const b4 = b[4];\n const b5 = b[5];\n const b6 = b[6];\n const b7 = b[7];\n const b8 = b[8];\n const b9 = b[9];\n const b10 = b[10];\n const b11 = b[11];\n const b12 = b[12];\n const b13 = b[13];\n const b14 = b[14];\n const b15 = b[15];\n return (Math.abs(a0 - b0) <= EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&\n Math.abs(a2 - b2) <= EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&\n Math.abs(a3 - b3) <= EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) &&\n Math.abs(a4 - b4) <= EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) &&\n Math.abs(a5 - b5) <= EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) &&\n Math.abs(a6 - b6) <= EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) &&\n Math.abs(a7 - b7) <= EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7)) &&\n Math.abs(a8 - b8) <= EPSILON * Math.max(1, Math.abs(a8), Math.abs(b8)) &&\n Math.abs(a9 - b9) <= EPSILON * Math.max(1, Math.abs(a9), Math.abs(b9)) &&\n Math.abs(a10 - b10) <= EPSILON * Math.max(1, Math.abs(a10), Math.abs(b10)) &&\n Math.abs(a11 - b11) <= EPSILON * Math.max(1, Math.abs(a11), Math.abs(b11)) &&\n Math.abs(a12 - b12) <= EPSILON * Math.max(1, Math.abs(a12), Math.abs(b12)) &&\n Math.abs(a13 - b13) <= EPSILON * Math.max(1, Math.abs(a13), Math.abs(b13)) &&\n Math.abs(a14 - b14) <= EPSILON * Math.max(1, Math.abs(a14), Math.abs(b14)) &&\n Math.abs(a15 - b15) <= EPSILON * Math.max(1, Math.abs(a15), Math.abs(b15)));\n }\n /**\n * Returns a string representation of a {@link Mat4}\n * @category Static\n *\n * @param a - matrix to represent as a string\n * @returns string representation of the matrix\n */\n static str(a) {\n return `Mat4(${a.join(', ')})`;\n }\n}\nexport { Mat4 };\n// Temporary variables to prevent repeated allocations in the algorithms above.\n// These are declared as TypedArrays to aid in tree-shaking.\nconst tmpVec3 = new Float32Array(3);\n// Instance method alias assignments\nMat4.prototype.mul = Mat4.prototype.multiply;\n// Static method alias assignments\nMat4.sub = Mat4.subtract;\nMat4.mul = Mat4.multiply;\nMat4.frustum = Mat4.frustumNO;\nMat4.perspective = Mat4.perspectiveNO;\nMat4.ortho = Mat4.orthoNO;\n/**\n * Mat4 alias for backwards compatibility\n */\nexport const mat4 = Mat4;\n//# sourceMappingURL=mat4.js.map","import { EPSILON } from './common.js';\n/**\n * 3 Dimensional Vector\n */\nclass Vec3 extends Float32Array {\n /**\n * The number of bytes in a {@link Vec3}.\n */\n static BYTE_LENGTH = 3 * Float32Array.BYTES_PER_ELEMENT;\n /**\n * Create a {@link Vec3}.\n */\n constructor(...values) {\n switch (values.length) {\n case 3:\n super(values);\n break;\n case 2:\n super(values[0], values[1], 3);\n break;\n case 1: {\n const v = values[0];\n if (typeof v === 'number') {\n super([v, v, v]);\n }\n else {\n super(v, 0, 3);\n }\n break;\n }\n default:\n super(3);\n break;\n }\n }\n //============\n // Attributes\n //============\n // Getters and setters to make component access read better.\n // These are likely to be a little bit slower than direct array access.\n /**\n * The x component of the vector. Equivalent to `this[0];`\n * @category Vector components\n */\n get x() { return this[0]; }\n set x(value) { this[0] = value; }\n /**\n * The y component of the vector. Equivalent to `this[1];`\n * @category Vector components\n */\n get y() { return this[1]; }\n set y(value) { this[1] = value; }\n /**\n * The z component of the vector. Equivalent to `this[2];`\n * @category Vector components\n */\n get z() { return this[2]; }\n set z(value) { this[2] = value; }\n // Alternate set of getters and setters in case this is being used to define\n // a color.\n /**\n * The r component of the vector. Equivalent to `this[0];`\n * @category Color components\n */\n get r() { return this[0]; }\n set r(value) { this[0] = value; }\n /**\n * The g component of the vector. Equivalent to `this[1];`\n * @category Color components\n */\n get g() { return this[1]; }\n set g(value) { this[1] = value; }\n /**\n * The b component of the vector. Equivalent to `this[2];`\n * @category Color components\n */\n get b() { return this[2]; }\n set b(value) { this[2] = value; }\n /**\n * The magnitude (length) of this.\n * Equivalent to `Vec3.magnitude(this);`\n *\n * Magnitude is used because the `length` attribute is already defined by\n * TypedArrays to mean the number of elements in the array.\n */\n get magnitude() {\n const x = this[0];\n const y = this[1];\n const z = this[2];\n return Math.sqrt(x * x + y * y + z * z);\n }\n /**\n * Alias for {@link Vec3.magnitude}\n */\n get mag() { return this.magnitude; }\n /**\n * The squared magnitude (length) of `this`.\n * Equivalent to `Vec3.squaredMagnitude(this);`\n */\n get squaredMagnitude() {\n const x = this[0];\n const y = this[1];\n const z = this[2];\n return x * x + y * y + z * z;\n }\n /**\n * Alias for {@link Vec3.squaredMagnitude}\n */\n get sqrMag() { return this.squaredMagnitude; }\n /**\n * A string representation of `this`\n * Equivalent to `Vec3.str(this);`\n */\n get str() {\n return Vec3.str(this);\n }\n //===================\n // Instances methods\n //===================\n /**\n * Copy the values from another {@link Vec3} into `this`.\n *\n * @param a the source vector\n * @returns `this`\n */\n copy(a) {\n this.set(a);\n return this;\n }\n /**\n * Adds a {@link Vec3} to `this`.\n * Equivalent to `Vec3.add(this, this, b);`\n *\n * @param b - The vector to add to `this`\n * @returns `this`\n */\n add(b) {\n this[0] += b[0];\n this[1] += b[1];\n this[2] += b[2];\n return this;\n }\n /**\n * Subtracts a {@link Vec3} from `this`.\n * Equivalent to `Vec3.subtract(this, this, b);`\n *\n * @param b - The vector to subtract from `this`\n * @returns `this`\n */\n subtract(b) {\n this[0] -= b[0];\n this[1] -= b[1];\n this[2] -= b[2];\n return this;\n }\n /**\n * Alias for {@link Vec3.subtract}\n */\n sub(b) { return this; }\n /**\n * Multiplies `this` by a {@link Vec3}.\n * Equivalent to `Vec3.multiply(this, this, b);`\n *\n * @param b - The vector to multiply `this` by\n * @returns `this`\n */\n multiply(b) {\n this[0] *= b[0];\n this[1] *= b[1];\n this[2] *= b[2];\n return this;\n }\n /**\n * Alias for {@link Vec3.multiply}\n */\n mul(b) { return this; }\n /**\n * Divides `this` by a {@link Vec3}.\n * Equivalent to `Vec3.divide(this, this, b);`\n *\n * @param b - The vector to divide `this` by\n * @returns `this`\n */\n divide(b) {\n this[0] /= b[0];\n this[1] /= b[1];\n this[2] /= b[2];\n return this;\n }\n /**\n * Alias for {@link Vec3.divide}\n */\n div(b) { return this; }\n /**\n * Scales `this` by a scalar number.\n * Equivalent to `Vec3.scale(this, this, b);`\n *\n * @param b - Amount to scale `this` by\n * @returns `this`\n */\n scale(b) {\n this[0] *= b;\n this[1] *= b;\n this[2] *= b;\n return this;\n }\n /**\n * Calculates `this` scaled by a scalar value then adds the result to `this`.\n * Equivalent to `Vec3.scaleAndAdd(this, this, b, scale);`\n *\n * @param b - The vector to add to `this`\n * @param scale - The amount to scale `b` by before adding\n * @returns `this`\n */\n scaleAndAdd(b, scale) {\n this[0] += b[0] * scale;\n this[1] += b[1] * scale;\n this[2] += b[2] * scale;\n return this;\n }\n /**\n * Calculates the euclidian distance between another {@link Vec3} and `this`.\n * Equivalent to `Vec3.distance(this, b);`\n *\n * @param b - The vector to calculate the distance to\n * @returns Distance between `this` and `b`\n */\n distance(b) {\n return Vec3.distance(this, b);\n }\n /**\n * Alias for {@link Vec3.distance}\n */\n dist(b) { return 0; }\n /**\n * Calculates the squared euclidian distance between another {@link Vec3} and `this`.\n * Equivalent to `Vec3.squaredDistance(this, b);`\n *\n * @param b The vector to calculate the squared distance to\n * @returns Squared distance between `this` and `b`\n */\n squaredDistance(b) {\n return Vec3.squaredDistance(this, b);\n }\n /**\n * Alias for {@link Vec3.squaredDistance}\n */\n sqrDist(b) { return 0; }\n /**\n * Negates the components of `this`.\n * Equivalent to `Vec3.negate(this, this);`\n *\n * @returns `this`\n */\n negate() {\n this[0] *= -1;\n this[1] *= -1;\n this[2] *= -1;\n return this;\n }\n /**\n * Inverts the components of `this`.\n * Equivalent to `Vec3.inverse(this, this);`\n *\n * @returns `this`\n */\n invert() {\n this[0] = 1.0 / this[0];\n this[1] = 1.0 / this[1];\n this[2] = 1.0 / this[2];\n return this;\n }\n /**\n * Sets each component of `this` to it's absolute value.\n * Equivalent to `Vec3.abs(this, this);`\n *\n * @returns `this`\n */\n abs() {\n this[0] = Math.abs(this[0]);\n this[1] = Math.abs(this[1]);\n this[2] = Math.abs(this[2]);\n return this;\n }\n /**\n * Calculates the dot product of this and another {@link Vec3}.\n * Equivalent to `Vec3.dot(this, b);`\n *\n * @param b - The second operand\n * @returns Dot product of `this` and `b`\n */\n dot(b) {\n return this[0] * b[0] + this[1] * b[1] + this[2] * b[2];\n }\n /**\n * Normalize `this`.\n * Equivalent to `Vec3.normalize(this, this);`\n *\n * @returns `this`\n */\n normalize() {\n return Vec3.normalize(this, this);\n }\n //================\n // Static methods\n //================\n /**\n * Creates a new, empty vec3\n * @category Static\n *\n * @returns a new 3D vector\n */\n static create() {\n return new Vec3();\n }\n /**\n * Creates a new vec3 initialized with values from an existing vector\n * @category Static\n *\n * @param a - vector to clone\n * @returns a new 3D vector\n */\n static clone(a) {\n return new Vec3(a);\n }\n /**\n * Calculates the magnitude (length) of a {@link Vec3}\n * @category Static\n *\n * @param a - Vector to calculate magnitude of\n * @returns Magnitude of a\n */\n static magnitude(a) {\n let x = a[0];\n let y = a[1];\n let z = a[2];\n return Math.sqrt(x * x + y * y + z * z);\n }\n /**\n * Alias for {@link Vec3.magnitude}\n * @category Static\n */\n static mag(a) { return 0; }\n /**\n * Alias for {@link Vec3.magnitude}\n * @category Static\n * @deprecated Use {@link Vec3.magnitude} to avoid conflicts with builtin `length` methods/attribs\n *\n * @param a - vector to calculate length of\n * @returns length of a\n */\n // @ts-ignore: Length conflicts with Function.length\n static length(a) { return 0; }\n /**\n * Alias for {@link Vec3.magnitude}\n * @category Static\n * @deprecated Use {@link Vec3.mag}\n */\n static len(a) { return 0; }\n /**\n * Creates a new vec3 initialized with the given values\n * @category Static\n *\n * @param x - X component\n * @param y - Y component\n * @param z - Z component\n * @returns a new 3D vector\n */\n static fromValues(x, y, z) {\n return new Vec3(x, y, z);\n }\n /**\n * Copy the values from one vec3 to another\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the source vector\n * @returns `out`\n */\n static copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n return out;\n }\n /**\n * Set the components of a vec3 to the given values\n * @category Static\n *\n * @param out - the receiving vector\n * @param x - X component\n * @param y - Y component\n * @param z - Z component\n * @returns `out`\n */\n static set(out, x, y, z) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n return out;\n }\n /**\n * Adds two {@link Vec3}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n return out;\n }\n /**\n * Subtracts vector b from vector a\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n return out;\n }\n /**\n * Alias for {@link Vec3.subtract}\n * @category Static\n */\n static sub(out, a, b) { return [0, 0, 0]; }\n ;\n /**\n * Multiplies two vec3's\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n return out;\n }\n /**\n * Alias for {@link Vec3.multiply}\n * @category Static\n */\n static mul(out, a, b) { return [0, 0, 0]; }\n /**\n * Divides two vec3's\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n return out;\n }\n /**\n * Alias for {@link Vec3.divide}\n * @category Static\n */\n static div(out, a, b) { return [0, 0, 0]; }\n ;\n /**\n * Math.ceil the components of a vec3\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to ceil\n * @returns `out`\n */\n static ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n return out;\n }\n /**\n * Math.floor the components of a vec3\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to floor\n * @returns `out`\n */\n static floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n return out;\n }\n /**\n * Returns the minimum of two vec3's\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n return out;\n }\n /**\n * Returns the maximum of two vec3's\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n return out;\n }\n /**\n * symmetric round the components of a vec3\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to round\n * @returns `out`\n */\n /*static round(out: Vec3Like, a: Readonly<Vec3Like>): Vec3Like {\n out[0] = glMatrix.round(a[0]);\n out[1] = glMatrix.round(a[1]);\n out[2] = glMatrix.round(a[2]);\n return out;\n }*/\n /**\n * Scales a vec3 by a scalar number\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the vector to scale\n * @param scale - amount to scale the vector by\n * @returns `out`\n */\n static scale(out, a, scale) {\n out[0] = a[0] * scale;\n out[1] = a[1] * scale;\n out[2] = a[2] * scale;\n return out;\n }\n /**\n * Adds two vec3's after scaling the second operand by a scalar value\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param scale - the amount to scale b by before adding\n * @returns `out`\n */\n static scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n return out;\n }\n /**\n * Calculates the euclidian distance between two vec3's\n * @category Static\n *\n * @param a - the first operand\n * @param b - the second operand\n * @returns distance between a and b\n */\n static distance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n const z = b[2] - a[2];\n return Math.sqrt(x * x + y * y + z * z);\n }\n /**\n * Alias for {@link Vec3.distance}\n */\n static dist(a, b) { return 0; }\n /**\n * Calculates the squared euclidian distance between two vec3's\n * @category Static\n *\n * @param a - the first operand\n * @param b - the second operand\n * @returns squared distance between a and b\n */\n static squaredDistance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n const z = b[2] - a[2];\n return x * x + y * y + z * z;\n }\n /**\n * Alias for {@link Vec3.squaredDistance}\n */\n static sqrDist(a, b) { return 0; }\n /**\n * Calculates the squared length of a vec3\n * @category Static\n *\n * @param a - vector to calculate squared length of\n * @returns squared length of a\n */\n static squaredLength(a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n return x * x + y * y + z * z;\n }\n /**\n * Alias for {@link Vec3.squaredLength}\n */\n static sqrLen(a, b) { return 0; }\n /**\n * Negates the components of a vec3\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to negate\n * @returns `out`\n */\n static negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n return out;\n }\n /**\n * Returns the inverse of the components of a vec3\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to invert\n * @returns `out`\n */\n static inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n return out;\n }\n /**\n * Returns the absolute value of the components of a {@link Vec3}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to compute the absolute values of\n * @returns `out`\n */\n static abs(out, a) {\n out[0] = Math.abs(a[0]);\n out[1] = Math.abs(a[1]);\n out[2] = Math.abs(a[2]);\n return out;\n }\n /**\n * Normalize a vec3\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to normalize\n * @returns `out`\n */\n static normalize(out, a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n let len = x * x + y * y + z * z;\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n out[2] = a[2] * len;\n return out;\n }\n /**\n * Calculates the dot product of two vec3's\n * @category Static\n *\n * @param a - the first operand\n * @param b - the second operand\n * @returns dot product of a and b\n */\n static dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n }\n /**\n * Computes the cross product of two vec3's\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static cross(out, a, b) {\n const ax = a[0], ay = a[1], az = a[2];\n const bx = b[0], by = b[1], bz = b[2];\n out[0] = ay * bz - az * by;\n out[1] = az * bx - ax * bz;\n out[2] = ax * by - ay * bx;\n return out;\n }\n /**\n * Performs a linear interpolation between two vec3's\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param t - interpolation amount, in the range [0-1], between the two inputs\n * @returns `out`\n */\n static lerp(out, a, b, t) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n return out;\n }\n /**\n * Performs a spherical linear interpolation between two vec3's\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param t - interpolation amount, in the range [0-1], between the two inputs\n * @returns `out`\n */\n static slerp(out, a, b, t) {\n const angle = Math.acos(Math.min(Math.max(Vec3.dot(a, b), -1), 1));\n const sinTotal = Math.sin(angle);\n const ratioA = Math.sin((1 - t) * angle) / sinTotal;\n const ratioB = Math.sin(t * angle) / sinTotal;\n out[0] = ratioA * a[0] + ratioB * b[0];\n out[1] = ratioA * a[1] + ratioB * b[1];\n out[2] = ratioA * a[2] + ratioB * b[2];\n return out;\n }\n /**\n * Performs a hermite interpolation with two control points\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param c - the third operand\n * @param d - the fourth operand\n * @param t - interpolation amount, in the range [0-1], between the two inputs\n * @returns `out`\n */\n static hermite(out, a, b, c, d, t) {\n const factorTimes2 = t * t;\n const factor1 = factorTimes2 * (2 * t - 3) + 1;\n const factor2 = factorTimes2 * (t - 2) + t;\n const factor3 = factorTimes2 * (t - 1);\n const factor4 = factorTimes2 * (3 - 2 * t);\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n }\n /**\n * Performs a bezier interpolation with two control points\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param c - the third operand\n * @param d - the fourth operand\n * @param t - interpolation amount, in the range [0-1], between the two inputs\n * @returns `out`\n */\n static bezier(out, a, b, c, d, t) {\n const inverseFactor = 1 - t;\n const inverseFactorTimesTwo = inverseFactor * inverseFactor;\n const factorTimes2 = t * t;\n const factor1 = inverseFactorTimesTwo * inverseFactor;\n const factor2 = 3 * t * inverseFactorTimesTwo;\n const factor3 = 3 * factorTimes2 * inverseFactor;\n const factor4 = factorTimes2 * t;\n out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n return out;\n }\n /**\n * Generates a random vector with the given scale\n * @category Static\n *\n * @param out - the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If omitted, a unit vector will be returned\n * @returns `out`\n */\n /*static random(out: Vec3Like, scale) {\n scale = scale === undefined ? 1.0 : scale;\n \n let r = glMatrix.RANDOM() * 2.0 * Math.PI;\n let z = glMatrix.RANDOM() * 2.0 - 1.0;\n let zScale = Math.sqrt(1.0 - z * z) * scale;\n \n out[0] = Math.cos(r) * zScale;\n out[1] = Math.sin(r) * zScale;\n out[2] = z * scale;\n return out;\n }*/\n /**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the vector to transform\n * @param m - matrix to transform with\n * @returns `out`\n */\n static transformMat4(out, a, m) {\n const x = a[0], y = a[1], z = a[2];\n const w = (m[3] * x + m[7] * y + m[11] * z + m[15]) || 1.0;\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n return out;\n }\n /**\n * Transforms the vec3 with a mat3.\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the vector to transform\n * @param m - the 3x3 matrix to transform with\n * @returns `out`\n */\n static transformMat3(out, a, m) {\n let x = a[0], y = a[1], z = a[2];\n out[0] = x * m[0] + y * m[3] + z * m[6];\n out[1] = x * m[1] + y * m[4] + z * m[7];\n out[2] = x * m[2] + y * m[5] + z * m[8];\n return out;\n }\n /**\n * Transforms the vec3 with a quat\n * Can also be used for dual quaternions. (Multiply it with the real part)\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the vector to transform\n * @param q - quaternion to transform with\n * @returns `out`\n */\n static transformQuat(out, a, q) {\n // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const w2 = q[3] * 2;\n const x = a[0];\n const y = a[1];\n const z = a[2];\n // var qvec = [qx, qy, qz];\n // var uv = vec3.cross([], qvec, a);\n const uvx = (qy * z - qz * y);\n const uvy = (qz * x - qx * z);\n const uvz = (qx * y - qy * x);\n // var uuv = vec3.cross([], qvec, uv);\n // vec3.scale(uuv, uuv, 2);\n const uuvx = (qy * uvz - qz * uvy) * 2;\n const uuvy = (qz * uvx - qx * uvz) * 2;\n const uuvz = (qx * uvy - qy * uvx) * 2;\n // vec3.scale(uv, uv, 2 * w);\n // return vec3.add(out, a, vec3.add(out, uv, uuv));\n out[0] = x + (uvx * w2) + uuvx;\n out[1] = y + (uvy * w2) + uuvy;\n out[2] = z + (uvz * w2) + uuvz;\n return out;\n }\n /**\n * Rotate a 3D vector around the x-axis\n * @param out - The receiving vec3\n * @param a - The vec3 point to rotate\n * @param b - The origin of the rotation\n * @param rad - The angle of rotation in radians\n * @returns `out`\n */\n static rotateX(out, a, b, rad) {\n const by = b[1];\n const bz = b[2];\n //Translate point to the origin\n const py = a[1] - by;\n const pz = a[2] - bz;\n //perform rotation\n //translate to correct position\n out[0] = a[0];\n out[1] = (py * Math.cos(rad) - pz * Math.sin(rad)) + by;\n out[2] = (py * Math.sin(rad) + pz * Math.cos(rad)) + bz;\n return out;\n }\n /**\n * Rotate a 3D vector around the y-axis\n * @param out - The receiving vec3\n * @param a - The vec3 point to rotate\n * @param b - The origin of the rotation\n * @param rad - The angle of rotation in radians\n * @returns `out`\n */\n static rotateY(out, a, b, rad) {\n const bx = b[0];\n const bz = b[2];\n //Translate point to the origin\n const px = a[0] - bx;\n const pz = a[2] - bz;\n //perform rotation\n //translate to correct position\n out[0] = (pz * Math.sin(rad) + px * Math.cos(rad)) + bx;\n out[1] = a[1];\n out[2] = (pz * Math.cos(rad) - px * Math.sin(rad)) + bz;\n return out;\n }\n /**\n * Rotate a 3D vector around the z-axis\n * @param out - The receiving vec3\n * @param a - The vec3 point to rotate\n * @param b - The origin of the rotation\n * @param rad - The angle of rotation in radians\n * @returns `out`\n */\n static rotateZ(out, a, b, rad) {\n const bx = b[0];\n const by = b[1];\n //Translate point to the origin\n const px = a[0] - bx;\n const py = a[1] - by;\n //perform rotation\n //translate to correct position\n out[0] = (px * Math.cos(rad) - py * Math.sin(rad)) + bx;\n out[1] = (px * Math.sin(rad) + py * Math.cos(rad)) + by;\n out[2] = b[2];\n return out;\n }\n /**\n * Get the angle between two 3D vectors\n * @param a - The first operand\n * @param b - The second operand\n * @returns The angle in radians\n */\n static angle(a, b) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const bx = b[0];\n const by = b[1];\n const bz = b[2];\n const mag = Math.sqrt((ax * ax + ay * ay + az * az) * (bx * bx + by * by + bz * bz));\n const cosine = mag && Vec3.dot(a, b) / mag;\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n }\n /**\n * Set the components of a vec3 to zero\n * @category Static\n *\n * @param out - the receiving vector\n * @returns `out`\n */\n static zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n return out;\n }\n /**\n * Returns a string representation of a vector\n * @category Static\n *\n * @param a - vector to represent as a string\n * @returns string representation of the vector\n */\n static str(a) {\n return `Vec3(${a.join(', ')})`;\n }\n /**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n * @category Static\n *\n * @param a - The first vector.\n * @param b - The second vector.\n * @returns True if the vectors are equal, false otherwise.\n */\n static exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n }\n /**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n * @category Static\n *\n * @param a - The first vector.\n * @param b - The second vector.\n * @returns True if the vectors are equal, false otherwise.\n */\n static equals(a, b) {\n const a0 = a[0];\n const a1 = a[1];\n const a2 = a[2];\n const b0 = b[0];\n const b1 = b[1];\n const b2 = b[2];\n return (Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) &&\n Math.abs(a2 - b2) <= EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)));\n }\n}\nexport { Vec3 };\n// Instance method alias assignments\nVec3.prototype.sub = Vec3.prototype.subtract;\nVec3.prototype.mul = Vec3.prototype.multiply;\nVec3.prototype.div = Vec3.prototype.divide;\nVec3.prototype.dist = Vec3.prototype.distance;\nVec3.prototype.sqrDist = Vec3.prototype.squaredDistance;\n// Static method alias assignments\nVec3.sub = Vec3.subtract;\nVec3.mul = Vec3.multiply;\nVec3.div = Vec3.divide;\nVec3.dist = Vec3.distance;\nVec3.sqrDist = Vec3.squaredDistance;\nVec3.sqrLen = Vec3.squaredLength;\nVec3.mag = Vec3.magnitude;\nVec3.length = Vec3.magnitude;\nVec3.len = Vec3.magnitude;\n/**\n * Vec3 alias for backwards compatibility\n */\nexport const vec3 = Vec3;\n//# sourceMappingURL=vec3.js.map","import { EPSILON } from './common.js';\n/**\n * 4 Dimensional Vector\n */\nclass Vec4 extends Float32Array {\n /**\n * The number of bytes in a {@link Vec4}.\n */\n static BYTE_LENGTH = 4 * Float32Array.BYTES_PER_ELEMENT;\n /**\n * Create a {@link Vec4}.\n */\n constructor(...values) {\n switch (values.length) {\n case 4:\n super(values);\n break;\n case 2:\n super(values[0], values[1], 4);\n break;\n case 1: {\n const v = values[0];\n if (typeof v === 'number') {\n super([v, v, v, v]);\n }\n else {\n super(v, 0, 4);\n }\n break;\n }\n default:\n super(4);\n break;\n }\n }\n //============\n // Attributes\n //============\n // Getters and setters to make component access read better.\n // These are likely to be a little bit slower than direct array access.\n /**\n * The x component of the vector. Equivalent to `this[0];`\n * @category Vector components\n */\n get x() { return this[0]; }\n set x(value) { this[0] = value; }\n /**\n * The y component of the vector. Equivalent to `this[1];`\n * @category Vector components\n */\n get y() { return this[1]; }\n set y(value) { this[1] = value; }\n /**\n * The z component of the vector. Equivalent to `this[2];`\n * @category Vector components\n */\n get z() { return this[2]; }\n set z(value) { this[2] = value; }\n /**\n * The w component of the vector. Equivalent to `this[3];`\n * @category Vector components\n */\n get w() { return this[3]; }\n set w(value) { this[3] = value; }\n // Alternate set of getters and setters in case this is being used to define\n // a color.\n /**\n * The r component of the vector. Equivalent to `this[0];`\n * @category Color components\n */\n get r() { return this[0]; }\n set r(value) { this[0] = value; }\n /**\n * The g component of the vector. Equivalent to `this[1];`\n * @category Color components\n */\n get g() { return this[1]; }\n set g(value) { this[1] = value; }\n /**\n * The b component of the vector. Equivalent to `this[2];`\n * @category Color components\n */\n get b() { return this[2]; }\n set b(value) { this[2] = value; }\n /**\n * The a component of the vector. Equivalent to `this[3];`\n * @category Color components\n */\n get a() { return this[3]; }\n set a(value) { this[3] = value; }\n /**\n * The magnitude (length) of this.\n * Equivalent to `Vec4.magnitude(this);`\n *\n * Magnitude is used because the `length` attribute is already defined by\n * TypedArrays to mean the number of elements in the array.\n */\n get magnitude() {\n const x = this[0];\n const y = this[1];\n const z = this[2];\n const w = this[3];\n return Math.sqrt(x * x + y * y + z * z + w * w);\n }\n /**\n * Alias for {@link Vec4.magnitude}\n */\n get mag() { return this.magnitude; }\n /**\n * A string representation of `this`\n * Equivalent to `Vec4.str(this);`\n */\n get str() {\n return Vec4.str(this);\n }\n //===================\n // Instances methods\n //===================\n /**\n * Copy the values from another {@link Vec4} into `this`.\n *\n * @param a the source vector\n * @returns `this`\n */\n copy(a) {\n super.set(a);\n return this;\n }\n /**\n * Adds a {@link Vec4} to `this`.\n * Equivalent to `Vec4.add(this, this, b);`\n *\n * @param b - The vector to add to `this`\n * @returns `this`\n */\n add(b) {\n this[0] += b[0];\n this[1] += b[1];\n this[2] += b[2];\n this[3] += b[3];\n return this;\n }\n /**\n * Subtracts a {@link Vec4} from `this`.\n * Equivalent to `Vec4.subtract(this, this, b);`\n *\n * @param b - The vector to subtract from `this`\n * @returns `this`\n */\n subtract(b) {\n this[0] -= b[0];\n this[1] -= b[1];\n this[2] -= b[2];\n this[3] -= b[3];\n return this;\n }\n /**\n * Alias for {@link Vec4.subtract}\n */\n sub(b) { return this; }\n /**\n * Multiplies `this` by a {@link Vec4}.\n * Equivalent to `Vec4.multiply(this, this, b);`\n *\n * @param b - The vector to multiply `this` by\n * @returns `this`\n */\n multiply(b) {\n this[0] *= b[0];\n this[1] *= b[1];\n this[2] *= b[2];\n this[3] *= b[3];\n return this;\n }\n /**\n * Alias for {@link Vec4.multiply}\n */\n mul(b) { return this; }\n /**\n * Divides `this` by a {@link Vec4}.\n * Equivalent to `Vec4.divide(this, this, b);`\n *\n * @param b - The vector to divide `this` by\n * @returns `this`\n */\n divide(b) {\n this[0] /= b[0];\n this[1] /= b[1];\n this[2] /= b[2];\n this[3] /= b[3];\n return this;\n }\n /**\n * Alias for {@link Vec4.divide}\n */\n div(b) { return this; }\n /**\n * Scales `this` by a scalar number.\n * Equivalent to `Vec4.scale(this, this, b);`\n *\n * @param b - Amount to scale `this` by\n * @returns `this`\n */\n scale(b) {\n this[0] *= b;\n this[1] *= b;\n this[2] *= b;\n this[3] *= b;\n return this;\n }\n /**\n * Calculates `this` scaled by a scalar value then adds the result to `this`.\n * Equivalent to `Vec4.scaleAndAdd(this, this, b, scale);`\n *\n * @param b - The vector to add to `this`\n * @param scale - The amount to scale `b` by before adding\n * @returns `this`\n */\n scaleAndAdd(b, scale) {\n this[0] += b[0] * scale;\n this[1] += b[1] * scale;\n this[2] += b[2] * scale;\n this[3] += b[3] * scale;\n return this;\n }\n /**\n * Calculates the euclidian distance between another {@link Vec4} and `this`.\n * Equivalent to `Vec4.distance(this, b);`\n *\n * @param b - The vector to calculate the distance to\n * @returns Distance between `this` and `b`\n */\n distance(b) {\n return Vec4.distance(this, b);\n }\n /**\n * Alias for {@link Vec4.distance}\n */\n dist(b) { return 0; }\n /**\n * Calculates the squared euclidian distance between another {@link Vec4} and `this`.\n * Equivalent to `Vec4.squaredDistance(this, b);`\n *\n * @param b The vector to calculate the squared distance to\n * @returns Squared distance between `this` and `b`\n */\n squaredDistance(b) {\n return Vec4.squaredDistance(this, b);\n }\n /**\n * Alias for {@link Vec4.squaredDistance}\n */\n sqrDist(b) { return 0; }\n /**\n * Negates the components of `this`.\n * Equivalent to `Vec4.negate(this, this);`\n *\n * @returns `this`\n */\n negate() {\n this[0] *= -1;\n this[1] *= -1;\n this[2] *= -1;\n this[3] *= -1;\n return this;\n }\n /**\n * Inverts the components of `this`.\n * Equivalent to `Vec4.inverse(this, this);`\n *\n * @returns `this`\n */\n invert() {\n this[0] = 1.0 / this[0];\n this[1] = 1.0 / this[1];\n this[2] = 1.0 / this[2];\n this[3] = 1.0 / this[3];\n return this;\n }\n /**\n * Sets each component of `this` to it's absolute value.\n * Equivalent to `Vec4.abs(this, this);`\n *\n * @returns `this`\n */\n abs() {\n this[0] = Math.abs(this[0]);\n this[1] = Math.abs(this[1]);\n this[2] = Math.abs(this[2]);\n this[3] = Math.abs(this[3]);\n return this;\n }\n /**\n * Calculates the dot product of this and another {@link Vec4}.\n * Equivalent to `Vec4.dot(this, b);`\n *\n * @param b - The second operand\n * @returns Dot product of `this` and `b`\n */\n dot(b) {\n return this[0] * b[0] + this[1] * b[1] + this[2] * b[2] + this[3] * b[3];\n }\n /**\n * Normalize `this`.\n * Equivalent to `Vec4.normalize(this, this);`\n *\n * @returns `this`\n */\n normalize() {\n return Vec4.normalize(this, this);\n }\n //===================\n // Static methods\n //===================\n /**\n * Creates a new, empty {@link Vec4}\n * @category Static\n *\n * @returns a new 4D vector\n */\n static create() {\n return new Vec4();\n }\n /**\n * Creates a new {@link Vec4} initialized with values from an existing vector\n * @category Static\n *\n * @param a - vector to clone\n * @returns a new 4D vector\n */\n static clone(a) {\n return new Vec4(a);\n }\n /**\n * Creates a new {@link Vec4} initialized with the given values\n * @category Static\n *\n * @param x - X component\n * @param y - Y component\n * @param z - Z component\n * @param w - W component\n * @returns a new 4D vector\n */\n static fromValues(x, y, z, w) {\n return new Vec4(x, y, z, w);\n }\n /**\n * Copy the values from one {@link Vec4} to another\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the source vector\n * @returns `out`\n */\n static copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n }\n /**\n * Set the components of a {@link Vec4} to the given values\n * @category Static\n *\n * @param out - the receiving vector\n * @param x - X component\n * @param y - Y component\n * @param z - Z component\n * @param w - W component\n * @returns `out`\n */\n static set(out, x, y, z, w) {\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = w;\n return out;\n }\n /**\n * Adds two {@link Vec4}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n return out;\n }\n /**\n * Subtracts vector b from vector a\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n return out;\n }\n /**\n * Alias for {@link Vec4.subtract}\n * @category Static\n */\n static sub(out, a, b) { return out; }\n /**\n * Multiplies two {@link Vec4}'s\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n out[2] = a[2] * b[2];\n out[3] = a[3] * b[3];\n return out;\n }\n /**\n * Alias for {@link Vec4.multiply}\n * @category Static\n */\n static mul(out, a, b) { return out; }\n /**\n * Divides two {@link Vec4}'s\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n out[2] = a[2] / b[2];\n out[3] = a[3] / b[3];\n return out;\n }\n /**\n * Alias for {@link Vec4.divide}\n * @category Static\n */\n static div(out, a, b) { return out; }\n /**\n * Math.ceil the components of a {@link Vec4}\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to ceil\n * @returns `out`\n */\n static ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n out[2] = Math.ceil(a[2]);\n out[3] = Math.ceil(a[3]);\n return out;\n }\n /**\n * Math.floor the components of a {@link Vec4}\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to floor\n * @returns `out`\n */\n static floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n out[2] = Math.floor(a[2]);\n out[3] = Math.floor(a[3]);\n return out;\n }\n /**\n * Returns the minimum of two {@link Vec4}'s\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n out[2] = Math.min(a[2], b[2]);\n out[3] = Math.min(a[3], b[3]);\n return out;\n }\n /**\n * Returns the maximum of two {@link Vec4}'s\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @returns `out`\n */\n static max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n out[2] = Math.max(a[2], b[2]);\n out[3] = Math.max(a[3], b[3]);\n return out;\n }\n /**\n * Math.round the components of a {@link Vec4}\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to round\n * @returns `out`\n */\n static round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n out[2] = Math.round(a[2]);\n out[3] = Math.round(a[3]);\n return out;\n }\n /**\n * Scales a {@link Vec4} by a scalar number\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the vector to scale\n * @param scale - amount to scale the vector by\n * @returns `out`\n */\n static scale(out, a, scale) {\n out[0] = a[0] * scale;\n out[1] = a[1] * scale;\n out[2] = a[2] * scale;\n out[3] = a[3] * scale;\n return out;\n }\n /**\n * Adds two {@link Vec4}'s after scaling the second operand by a scalar value\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param scale - the amount to scale b by before adding\n * @returns `out`\n */\n static scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n return out;\n }\n /**\n * Calculates the euclidian distance between two {@link Vec4}'s\n * @category Static\n *\n * @param a - the first operand\n * @param b - the second operand\n * @returns distance between a and b\n */\n static distance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n const z = b[2] - a[2];\n const w = b[3] - a[3];\n return Math.hypot(x, y, z, w);\n }\n /**\n * Alias for {@link Vec4.distance}\n * @category Static\n */\n static dist(a, b) { return 0; }\n /**\n * Calculates the squared euclidian distance between two {@link Vec4}'s\n * @category Static\n *\n * @param a - the first operand\n * @param b - the second operand\n * @returns squared distance between a and b\n */\n static squaredDistance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n const z = b[2] - a[2];\n const w = b[3] - a[3];\n return x * x + y * y + z * z + w * w;\n }\n /**\n * Alias for {@link Vec4.squaredDistance}\n * @category Static\n */\n static sqrDist(a, b) { return 0; }\n /**\n * Calculates the magnitude (length) of a {@link Vec4}\n * @category Static\n *\n * @param a - vector to calculate length of\n * @returns length of `a`\n */\n static magnitude(a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const w = a[3];\n return Math.sqrt(x * x + y * y + z * z + w * w);\n }\n /**\n * Alias for {@link Vec4.magnitude}\n * @category Static\n */\n static mag(a) { return 0; }\n /**\n * Alias for {@link Vec4.magnitude}\n * @category Static\n * @deprecated Use {@link Vec4.magnitude} to avoid conflicts with builtin `length` methods/attribs\n */\n // @ts-ignore: Length conflicts with Function.length\n static length(a) { return 0; }\n /**\n * Alias for {@link Vec4.magnitude}\n * @category Static\n * @deprecated Use {@link Vec4.mag}\n */\n static len(a) { return 0; }\n /**\n * Calculates the squared length of a {@link Vec4}\n * @category Static\n *\n * @param a - vector to calculate squared length of\n * @returns squared length of a\n */\n static squaredLength(a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const w = a[3];\n return x * x + y * y + z * z + w * w;\n }\n /**\n * Alias for {@link Vec4.squaredLength}\n * @category Static\n */\n static sqrLen(a) { return 0; }\n /**\n * Negates the components of a {@link Vec4}\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to negate\n * @returns `out`\n */\n static negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = -a[3];\n return out;\n }\n /**\n * Returns the inverse of the components of a {@link Vec4}\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to invert\n * @returns `out`\n */\n static inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n out[2] = 1.0 / a[2];\n out[3] = 1.0 / a[3];\n return out;\n }\n /**\n * Returns the absolute value of the components of a {@link Vec4}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to compute the absolute values of\n * @returns `out`\n */\n static abs(out, a) {\n out[0] = Math.abs(a[0]);\n out[1] = Math.abs(a[1]);\n out[2] = Math.abs(a[2]);\n out[3] = Math.abs(a[3]);\n return out;\n }\n /**\n * Normalize a {@link Vec4}\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - vector to normalize\n * @returns `out`\n */\n static normalize(out, a) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const w = a[3];\n let len = x * x + y * y + z * z + w * w;\n if (len > 0) {\n len = 1 / Math.sqrt(len);\n }\n out[0] = x * len;\n out[1] = y * len;\n out[2] = z * len;\n out[3] = w * len;\n return out;\n }\n /**\n * Calculates the dot product of two {@link Vec4}'s\n * @category Static\n *\n * @param a - the first operand\n * @param b - the second operand\n * @returns dot product of a and b\n */\n static dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n }\n /**\n * Returns the cross-product of three vectors in a 4-dimensional space\n * @category Static\n *\n * @param out the receiving vector\n * @param u - the first vector\n * @param v - the second vector\n * @param w - the third vector\n * @returns result\n */\n static cross(out, u, v, w) {\n const a = v[0] * w[1] - v[1] * w[0];\n const b = v[0] * w[2] - v[2] * w[0];\n const c = v[0] * w[3] - v[3] * w[0];\n const d = v[1] * w[2] - v[2] * w[1];\n const e = v[1] * w[3] - v[3] * w[1];\n const f = v[2] * w[3] - v[3] * w[2];\n const g = u[0];\n const h = u[1];\n const i = u[2];\n const j = u[3];\n out[0] = h * f - i * e + j * d;\n out[1] = -(g * f) + i * c - j * b;\n out[2] = g * e - h * c + j * a;\n out[3] = -(g * d) + h * b - i * a;\n return out;\n }\n /**\n * Performs a linear interpolation between two {@link Vec4}'s\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the first operand\n * @param b - the second operand\n * @param t - interpolation amount, in the range [0-1], between the two inputs\n * @returns `out`\n */\n static lerp(out, a, b, t) {\n const ax = a[0];\n const ay = a[1];\n const az = a[2];\n const aw = a[3];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n out[2] = az + t * (b[2] - az);\n out[3] = aw + t * (b[3] - aw);\n return out;\n }\n /**\n * Generates a random vector with the given scale\n * @category Static\n *\n * @param out - the receiving vector\n * @param [scale] - Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns `out`\n */\n /*static random(out: Vec4Like, scale): Vec4Like {\n scale = scale || 1.0;\n \n // Marsaglia, George. Choosing a Point from the Surface of a\n // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n // http://projecteuclid.org/euclid.aoms/1177692644;\n var v1, v2, v3, v4;\n var s1, s2;\n do {\n v1 = glMatrix.RANDOM() * 2 - 1;\n v2 = glMatrix.RANDOM() * 2 - 1;\n s1 = v1 * v1 + v2 * v2;\n } while (s1 >= 1);\n do {\n v3 = glMatrix.RANDOM() * 2 - 1;\n v4 = glMatrix.RANDOM() * 2 - 1;\n s2 = v3 * v3 + v4 * v4;\n } while (s2 >= 1);\n \n var d = Math.sqrt((1 - s1) / s2);\n out[0] = scale * v1;\n out[1] = scale * v2;\n out[2] = scale * v3 * d;\n out[3] = scale * v4 * d;\n return out;\n }*/\n /**\n * Transforms the {@link Vec4} with a {@link Mat4}.\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the vector to transform\n * @param m - matrix to transform with\n * @returns `out`\n */\n static transformMat4(out, a, m) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const w = a[3];\n out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n return out;\n }\n /**\n * Transforms the {@link Vec4} with a {@link Quat}\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - the vector to transform\n * @param q - quaternion to transform with\n * @returns `out`\n */\n static transformQuat(out, a, q) {\n const x = a[0];\n const y = a[1];\n const z = a[2];\n const qx = q[0];\n const qy = q[1];\n const qz = q[2];\n const qw = q[3];\n // calculate quat * vec\n const ix = qw * x + qy * z - qz * y;\n const iy = qw * y + qz * x - qx * z;\n const iz = qw * z + qx * y - qy * x;\n const iw = -qx * x - qy * y - qz * z;\n // calculate result * inverse quat\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n out[3] = a[3];\n return out;\n }\n /**\n * Set the components of a {@link Vec4} to zero\n * @category Static\n *\n * @param out - the receiving vector\n * @returns `out`\n */\n static zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n return out;\n }\n /**\n * Returns a string representation of a {@link Vec4}\n * @category Static\n *\n * @param a - vector to represent as a string\n * @returns string representation of the vector\n */\n static str(a) {\n return `Vec4(${a.join(', ')})`;\n }\n /**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n * @category Static\n *\n * @param a - The first vector.\n * @param b - The second vector.\n * @returns True if the vectors are equal, false otherwise.\n */\n static exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n }\n /**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n * @category Static\n *\n * @param a - The first vector.\n * @param b - The second vector.\n * @returns True if the vectors are equal, false otherwise.\n */\n static equals(a, b) {\n const a0 = a[0];\n const a1 = a[1];\n const a2 = a[2];\n const a3 = a[3];\n const b0 = b[0];\n const b1 = b[1];\n const b2 = b[2];\n const b3 = b[3];\n return (Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) &&\n Math.abs(a2 - b2) <= EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) &&\n Math.abs(a3 - b3) <= EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)));\n }\n}\nexport { Vec4 };\n// Instance method alias assignments\nVec4.prototype.sub = Vec4.prototype.subtract;\nVec4.prototype.mul = Vec4.prototype.multiply;\nVec4.prototype.div = Vec4.prototype.divide;\nVec4.prototype.dist = Vec4.prototype.distance;\nVec4.prototype.sqrDist = Vec4.prototype.squaredDistance;\n// Static method alias assignments\nVec4.sub = Vec4.subtract;\nVec4.mul = Vec4.multiply;\nVec4.div = Vec4.divide;\nVec4.dist = Vec4.distance;\nVec4.sqrDist = Vec4.squaredDistance;\nVec4.sqrLen = Vec4.squaredLength;\nVec4.mag = Vec4.magnitude;\nVec4.length = Vec4.magnitude;\nVec4.len = Vec4.magnitude;\n/**\n * Vec4 alias for backwards compatibility\n */\nexport const vec4 = Vec4;\n//# sourceMappingURL=vec4.js.map","import { EPSILON } from './common.js';\n/**\n * 2 Dimensional Vector\n */\nclass Vec2 extends Float32Array {\n /**\n * The number of bytes in a {@link Vec2}.\n */\n static BYTE_LENGTH = 2 * Float32Array.BYTES_PER_ELEMENT;\n /**\n * Create a {@link Vec2}.\n */\n constructor(...values) {\n switch (values.length) {\n case 2: {\n const v = values[0];\n if (typeof v === 'number') {\n super([v, values[1]]);\n }\n else {\n super(v, values[1], 2);\n }\n break;\n }\n case 1: {\n const v = values[0];\n if (typeof v === 'number') {\n super([v, v]);\n }\n else {\n super(v, 0, 2);\n }\n break;\n }\n default:\n super(2);\n break;\n }\n }\n //============\n // Attributes\n //============\n // Getters and setters to make component access read better.\n // These are likely to be a little bit slower than direct array access.\n /**\n * The x component of the vector. Equivalent to `this[0];`\n * @category Vector components\n */\n get x() { return this[0]; }\n set x(value) { this[0] = value; }\n /**\n * The y component of the vector. Equivalent to `this[1];`\n * @category Vector components\n */\n get y() { return this[1]; }\n set y(value) { this[1] = value; }\n // Alternate set of getters and setters in case this is being used to define\n // a color.\n /**\n * The r component of the vector. Equivalent to `this[0];`\n * @category Color components\n */\n get r() { return this[0]; }\n set r(value) { this[0] = value; }\n /**\n * The g component of the vector. Equivalent to `this[1];`\n * @category Color components\n */\n get g() { return this[1]; }\n set g(value) { this[1] = value; }\n /**\n * The magnitude (length) of this.\n * Equivalent to `Vec2.magnitude(this);`\n *\n * Magnitude is used because the `length` attribute is already defined by\n * TypedArrays to mean the number of elements in the array.\n */\n get magnitude() {\n return Math.hypot(this[0], this[1]);\n }\n /**\n * Alias for {@link Vec2.magnitude}\n */\n get mag() { return this.magnitude; }\n /**\n * The squared magnitude (length) of `this`.\n * Equivalent to `Vec2.squaredMagnitude(this);`\n */\n get squaredMagnitude() {\n const x = this[0];\n const y = this[1];\n return x * x + y * y;\n }\n /**\n * Alias for {@link Vec2.squaredMagnitude}\n */\n get sqrMag() { return this.squaredMagnitude; }\n /**\n * A string representation of `this`\n * Equivalent to `Vec2.str(this);`\n */\n get str() {\n return Vec2.str(this);\n }\n //===================\n // Instances methods\n //===================\n /**\n * Copy the values from another {@link Vec2} into `this`.\n *\n * @param a the source vector\n * @returns `this`\n */\n copy(a) {\n this.set(a);\n return this;\n }\n // Instead of zero(), use a.fill(0) for instances;\n /**\n * Adds a {@link Vec2} to `this`.\n * Equivalent to `Vec2.add(this, this, b);`\n *\n * @param b - The vector to add to `this`\n * @returns `this`\n */\n add(b) {\n this[0] += b[0];\n this[1] += b[1];\n return this;\n }\n /**\n * Subtracts a {@link Vec2} from `this`.\n * Equivalent to `Vec2.subtract(this, this, b);`\n *\n * @param b - The vector to subtract from `this`\n * @returns `this`\n */\n subtract(b) {\n this[0] -= b[0];\n this[1] -= b[1];\n return this;\n }\n /**\n * Alias for {@link Vec2.subtract}\n */\n sub(b) { return this; }\n /**\n * Multiplies `this` by a {@link Vec2}.\n * Equivalent to `Vec2.multiply(this, this, b);`\n *\n * @param b - The vector to multiply `this` by\n * @returns `this`\n */\n multiply(b) {\n this[0] *= b[0];\n this[1] *= b[1];\n return this;\n }\n /**\n * Alias for {@link Vec2.multiply}\n */\n mul(b) { return this; }\n /**\n * Divides `this` by a {@link Vec2}.\n * Equivalent to `Vec2.divide(this, this, b);`\n *\n * @param b - The vector to divide `this` by\n * @returns {Vec2} `this`\n */\n divide(b) {\n this[0] /= b[0];\n this[1] /= b[1];\n return this;\n }\n /**\n * Alias for {@link Vec2.divide}\n */\n div(b) { return this; }\n /**\n * Scales `this` by a scalar number.\n * Equivalent to `Vec2.scale(this, this, b);`\n *\n * @param b - Amount to scale `this` by\n * @returns `this`\n */\n scale(b) {\n this[0] *= b;\n this[1] *= b;\n return this;\n }\n /**\n * Calculates `this` scaled by a scalar value then adds the result to `this`.\n * Equivalent to `Vec2.scaleAndAdd(this, this, b, scale);`\n *\n * @param b - The vector to add to `this`\n * @param scale - The amount to scale `b` by before adding\n * @returns `this`\n */\n scaleAndAdd(b, scale) {\n this[0] += b[0] * scale;\n this[1] += b[1] * scale;\n return this;\n }\n /**\n * Calculates the euclidian distance between another {@link Vec2} and `this`.\n * Equivalent to `Vec2.distance(this, b);`\n *\n * @param b - The vector to calculate the distance to\n * @returns Distance between `this` and `b`\n */\n distance(b) {\n return Vec2.distance(this, b);\n }\n /**\n * Alias for {@link Vec2.distance}\n */\n dist(b) { return 0; }\n /**\n * Calculates the squared euclidian distance between another {@link Vec2} and `this`.\n * Equivalent to `Vec2.squaredDistance(this, b);`\n *\n * @param b The vector to calculate the squared distance to\n * @returns Squared distance between `this` and `b`\n */\n squaredDistance(b) {\n return Vec2.squaredDistance(this, b);\n }\n /**\n * Alias for {@link Vec2.squaredDistance}\n */\n sqrDist(b) { return 0; }\n /**\n * Negates the components of `this`.\n * Equivalent to `Vec2.negate(this, this);`\n *\n * @returns `this`\n */\n negate() {\n this[0] *= -1;\n this[1] *= -1;\n return this;\n }\n /**\n * Inverts the components of `this`.\n * Equivalent to `Vec2.inverse(this, this);`\n *\n * @returns `this`\n */\n invert() {\n this[0] = 1.0 / this[0];\n this[1] = 1.0 / this[1];\n return this;\n }\n /**\n * Sets each component of `this` to it's absolute value.\n * Equivalent to `Vec2.abs(this, this);`\n *\n * @returns `this`\n */\n abs() {\n this[0] = Math.abs(this[0]);\n this[1] = Math.abs(this[1]);\n return this;\n }\n /**\n * Calculates the dot product of this and another {@link Vec2}.\n * Equivalent to `Vec2.dot(this, b);`\n *\n * @param b - The second operand\n * @returns Dot product of `this` and `b`\n */\n dot(b) {\n return this[0] * b[0] + this[1] * b[1];\n }\n /**\n * Normalize `this`.\n * Equivalent to `Vec2.normalize(this, this);`\n *\n * @returns `this`\n */\n normalize() {\n return Vec2.normalize(this, this);\n }\n //================\n // Static methods\n //================\n /**\n * Creates a new, empty {@link Vec2}\n * @category Static\n *\n * @returns A new 2D vector\n */\n static create() {\n return new Vec2();\n }\n /**\n * Creates a new {@link Vec2} initialized with values from an existing vector\n * @category Static\n *\n * @param a - Vector to clone\n * @returns A new 2D vector\n */\n static clone(a) {\n return new Vec2(a);\n }\n /**\n * Creates a new {@link Vec2} initialized with the given values\n * @category Static\n *\n * @param x - X component\n * @param y - Y component\n * @returns A new 2D vector\n */\n static fromValues(x, y) {\n return new Vec2(x, y);\n }\n /**\n * Copy the values from one {@link Vec2} to another\n * @category Static\n *\n * @param out - the receiving vector\n * @param a - The source vector\n * @returns `out`\n */\n static copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n return out;\n }\n /**\n * Set the components of a {@link Vec2} to the given values\n * @category Static\n *\n * @param out - The receiving vector\n * @param x - X component\n * @param y - Y component\n * @returns `out`\n */\n static set(out, x, y) {\n out[0] = x;\n out[1] = y;\n return out;\n }\n /**\n * Adds two {@link Vec2}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n return out;\n }\n /**\n * Subtracts vector b from vector a\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n return out;\n }\n /**\n * Alias for {@link Vec2.subtract}\n * @category Static\n */\n static sub(out, a, b) { return [0, 0]; }\n /**\n * Multiplies two {@link Vec2}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static multiply(out, a, b) {\n out[0] = a[0] * b[0];\n out[1] = a[1] * b[1];\n return out;\n }\n /**\n * Alias for {@link Vec2.multiply}\n * @category Static\n */\n static mul(out, a, b) { return [0, 0]; }\n /**\n * Divides two {@link Vec2}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static divide(out, a, b) {\n out[0] = a[0] / b[0];\n out[1] = a[1] / b[1];\n return out;\n }\n /**\n * Alias for {@link Vec2.divide}\n * @category Static\n */\n static div(out, a, b) { return [0, 0]; }\n /**\n * Math.ceil the components of a {@link Vec2}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to ceil\n * @returns `out`\n */\n static ceil(out, a) {\n out[0] = Math.ceil(a[0]);\n out[1] = Math.ceil(a[1]);\n return out;\n }\n /**\n * Math.floor the components of a {@link Vec2}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to floor\n * @returns `out`\n */\n static floor(out, a) {\n out[0] = Math.floor(a[0]);\n out[1] = Math.floor(a[1]);\n return out;\n }\n /**\n * Returns the minimum of two {@link Vec2}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static min(out, a, b) {\n out[0] = Math.min(a[0], b[0]);\n out[1] = Math.min(a[1], b[1]);\n return out;\n }\n /**\n * Returns the maximum of two {@link Vec2}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static max(out, a, b) {\n out[0] = Math.max(a[0], b[0]);\n out[1] = Math.max(a[1], b[1]);\n return out;\n }\n /**\n * Math.round the components of a {@link Vec2}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to round\n * @returns `out`\n */\n static round(out, a) {\n out[0] = Math.round(a[0]);\n out[1] = Math.round(a[1]);\n return out;\n }\n /**\n * Scales a {@link Vec2} by a scalar number\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The vector to scale\n * @param b - Amount to scale the vector by\n * @returns `out`\n */\n static scale(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n return out;\n }\n /**\n * Adds two Vec2's after scaling the second operand by a scalar value\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @param scale - The amount to scale b by before adding\n * @returns `out`\n */\n static scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n return out;\n }\n /**\n * Calculates the euclidian distance between two {@link Vec2}s\n * @category Static\n *\n * @param a - The first operand\n * @param b - The second operand\n * @returns distance between `a` and `b`\n */\n static distance(a, b) {\n return Math.hypot(b[0] - a[0], b[1] - a[1]);\n }\n /**\n * Alias for {@link Vec2.distance}\n * @category Static\n */\n static dist(a, b) { return 0; }\n /**\n * Calculates the squared euclidian distance between two {@link Vec2}s\n * @category Static\n *\n * @param a - The first operand\n * @param b - The second operand\n * @returns Squared distance between `a` and `b`\n */\n static squaredDistance(a, b) {\n const x = b[0] - a[0];\n const y = b[1] - a[1];\n return x * x + y * y;\n }\n /**\n * Alias for {@link Vec2.distance}\n * @category Static\n */\n static sqrDist(a, b) { return 0; }\n /**\n * Calculates the magnitude (length) of a {@link Vec2}\n * @category Static\n *\n * @param a - Vector to calculate magnitude of\n * @returns Magnitude of a\n */\n static magnitude(a) {\n let x = a[0];\n let y = a[1];\n return Math.sqrt(x * x + y * y);\n }\n /**\n * Alias for {@link Vec2.magnitude}\n * @category Static\n */\n static mag(a) { return 0; }\n /**\n * Alias for {@link Vec2.magnitude}\n * @category Static\n * @deprecated Use {@link Vec2.magnitude} to avoid conflicts with builtin `length` methods/attribs\n *\n * @param a - vector to calculate length of\n * @returns length of a\n */\n // @ts-ignore: Length conflicts with Function.length\n static length(a) { return 0; }\n /**\n * Alias for {@link Vec2.magnitude}\n * @category Static\n * @deprecated Use {@link Vec2.mag}\n */\n static len(a) { return 0; }\n /**\n * Calculates the squared length of a {@link Vec2}\n * @category Static\n *\n * @param a - Vector to calculate squared length of\n * @returns Squared length of a\n */\n static squaredLength(a) {\n const x = a[0];\n const y = a[1];\n return x * x + y * y;\n }\n /**\n * Alias for {@link Vec2.squaredLength}\n */\n static sqrLen(a, b) { return 0; }\n /**\n * Negates the components of a {@link Vec2}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to negate\n * @returns `out`\n */\n static negate(out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n return out;\n }\n /**\n * Returns the inverse of the components of a {@link Vec2}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to invert\n * @returns `out`\n */\n static inverse(out, a) {\n out[0] = 1.0 / a[0];\n out[1] = 1.0 / a[1];\n return out;\n }\n /**\n * Returns the absolute value of the components of a {@link Vec2}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to compute the absolute values of\n * @returns `out`\n */\n static abs(out, a) {\n out[0] = Math.abs(a[0]);\n out[1] = Math.abs(a[1]);\n return out;\n }\n /**\n * Normalize a {@link Vec2}\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - Vector to normalize\n * @returns `out`\n */\n static normalize(out, a) {\n const x = a[0];\n const y = a[1];\n let len = x * x + y * y;\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len);\n }\n out[0] = a[0] * len;\n out[1] = a[1] * len;\n return out;\n }\n /**\n * Calculates the dot product of two {@link Vec2}s\n * @category Static\n *\n * @param a - The first operand\n * @param b - The second operand\n * @returns Dot product of `a` and `b`\n */\n static dot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n }\n /**\n * Computes the cross product of two {@link Vec2}s\n * Note that the cross product must by definition produce a 3D vector.\n * For this reason there is also not instance equivalent for this function.\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @returns `out`\n */\n static cross(out, a, b) {\n const z = a[0] * b[1] - a[1] * b[0];\n out[0] = out[1] = 0;\n out[2] = z;\n return out;\n }\n /**\n * Performs a linear interpolation between two {@link Vec2}s\n * @category Static\n *\n * @param out - The receiving vector\n * @param a - The first operand\n * @param b - The second operand\n * @param t - Interpolation amount, in the range [0-1], between the two inputs\n * @returns `out`\n */\n static lerp(out, a, b, t) {\n const ax = a[0];\n const ay = a[1];\n out[0] = ax + t * (b[0] - ax);\n out[1] = ay + t * (b[1] - ay);\n return out;\n }\n /**\n * Transforms the {@link Vec2} with a {@link Mat2}\n *\n * @param out - The receiving vector\n * @param a - The vector to transform\n * @param m - Matrix to transform with\n * @returns `out`\n */\n static transformMat2(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[2] * y;\n out[1] = m[1] * x + m[3] * y;\n return out;\n }\n /**\n * Transforms the {@link Vec2} with a {@link Mat2d}\n *\n * @param out - The receiving vector\n * @param a - The vector to transform\n * @param m - Matrix to transform with\n * @returns `out`\n */\n static transformMat2d(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n }\n /**\n * Transforms the {@link Vec2} with a {@link Mat3}\n * 3rd vector component is implicitly '1'\n *\n * @param out - The receiving vector\n * @param a - The vector to transform\n * @param m - Matrix to transform with\n * @returns `out`\n */\n static transformMat3(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n }\n /**\n * Transforms the {@link Vec2} with a {@link Mat4}\n * 3rd vector component is implicitly '0'\n * 4th vector component is implicitly '1'\n *\n * @param out - The receiving vector\n * @param a - The vector to transform\n * @param m - Matrix to transform with\n * @returns `out`\n */\n static transformMat4(out, a, m) {\n const x = a[0];\n const y = a[1];\n out[0] = m[0] * x + m[4] * y + m[12];\n out[1] = m[1] * x + m[5] * y + m[13];\n return out;\n }\n /**\n * Rotate a 2D vector\n * @category Static\n *\n * @param out - The receiving {@link Vec2}\n * @param a - The {@link Vec2} point to rotate\n * @param b - The origin of the rotation\n * @param rad - The angle of rotation in radians\n * @returns `out`\n */\n static rotate(out, a, b, rad) {\n //Translate point to the origin\n const p0 = a[0] - b[0];\n const p1 = a[1] - b[1];\n const sinC = Math.sin(rad);\n const cosC = Math.cos(rad);\n //perform rotation and translate to correct position\n out[0] = p0 * cosC - p1 * sinC + b[0];\n out[1] = p0 * sinC + p1 * cosC + b[1];\n return out;\n }\n /**\n * Get the angle between two 2D vectors\n * @category Static\n *\n * @param a - The first operand\n * @param b - The second operand\n * @returns The angle in radians\n */\n static angle(a, b) {\n const x1 = a[0];\n const y1 = a[1];\n const x2 = b[0];\n const y2 = b[1];\n // mag is the product of the magnitudes of a and b\n const mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x2 * x2 + y2 * y2);\n // mag &&.. short circuits if mag == 0\n const cosine = mag && (x1 * x2 + y1 * y2) / mag;\n // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1\n return Math.acos(Math.min(Math.max(cosine, -1), 1));\n }\n /**\n * Set the components of a {@link Vec2} to zero\n * @category Static\n *\n * @param out - The receiving vector\n * @returns `out`\n */\n static zero(out) {\n out[0] = 0.0;\n out[1] = 0.0;\n return out;\n }\n /**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n * @category Static\n *\n * @param a - The first vector.\n * @param b - The second vector.\n * @returns `true` if the vectors components are ===, `false` otherwise.\n */\n static exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1];\n }\n /**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n * @category Static\n *\n * @param a - The first vector.\n * @param b - The second vector.\n * @returns `true` if the vectors are approximately equal, `false` otherwise.\n */\n static equals(a, b) {\n const a0 = a[0];\n const a1 = a[1];\n const b0 = b[0];\n const b1 = b[1];\n return (Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)));\n }\n /**\n * Returns a string representation of a vector\n * @category Static\n *\n * @param a - Vector to represent as a string\n * @returns String representation of the vector\n */\n static str(a) {\n return `Vec2(${a.join(', ')})`;\n }\n}\nexport { Vec2 };\n// Instance method alias assignments\nVec2.prototype.sub = Vec2.prototype.subtract;\nVec2.prototype.mul = Vec2.prototype.multiply;\nVec2.prototype.div = Vec2.prototype.divide;\nVec2.prototype.dist = Vec2.prototype.distance;\nVec2.prototype.sqrDist = Vec2.prototype.squaredDistance;\n// Static method alias assignments\nVec2.sub = Vec2.subtract;\nVec2.mul = Vec2.multiply;\nVec2.div = Vec2.divide;\nVec2.dist = Vec2.distance;\nVec2.sqrDist = Vec2.squaredDistance;\nVec2.sqrLen = Vec2.squaredLength;\nVec2.mag = Vec2.magnitude;\nVec2.length = Vec2.magnitude;\nVec2.len = Vec2.magnitude;\n/**\n * Vec2 alias for backwards compatibility\n */\nexport const vec2 = Vec2;\n//# sourceMappingURL=vec2.js.map","export function blurImage(\n\timageData: ImageData,\n\tradius: number,\n\tquality: number,\n) {\n\tconst pixels = imageData.data;\n\tconst width = imageData.width;\n\tconst height = imageData.height;\n\n\tlet rsum: number;\n\tlet gsum: number;\n\tlet bsum: number;\n\tlet asum: number;\n\tlet x: number;\n\tlet y: number;\n\tlet i: number;\n\tlet p: number;\n\tlet p1: number;\n\tlet p2: number;\n\tlet yp: number;\n\tlet yi: number;\n\tlet yw: number;\n\tconst wm = width - 1;\n\tconst hm = height - 1;\n\tconst rad1x = radius + 1;\n\tconst divx = radius + rad1x;\n\tconst rad1y = radius + 1;\n\tconst divy = radius + rad1y;\n\tconst div2 = 1 / (divx * divy);\n\n\tconst r: number[] = [];\n\tconst g: number[] = [];\n\tconst b: number[] = [];\n\tconst a: number[] = [];\n\n\tconst vmin: number[] = [];\n\tconst vmax: number[] = [];\n\n\twhile (quality-- > 0) {\n\t\tyw = yi = 0;\n\n\t\tfor (y = 0; y < height; y++) {\n\t\t\trsum = pixels[yw] * rad1x;\n\t\t\tgsum = pixels[yw + 1] * rad1x;\n\t\t\tbsum = pixels[yw + 2] * rad1x;\n\t\t\tasum = pixels[yw + 3] * rad1x;\n\n\t\t\tfor (i = 1; i <= radius; i++) {\n\t\t\t\tp = yw + ((i > wm ? wm : i) << 2);\n\t\t\t\trsum += pixels[p++];\n\t\t\t\tgsum += pixels[p++];\n\t\t\t\tbsum += pixels[p++];\n\t\t\t\tasum += pixels[p];\n\t\t\t}\n\n\t\t\tfor (x = 0; x < width; x++) {\n\t\t\t\tr[yi] = rsum;\n\t\t\t\tg[yi] = gsum;\n\t\t\t\tb[yi] = bsum;\n\t\t\t\ta[yi] = asum;\n\n\t\t\t\tif (y === 0) {\n\t\t\t\t\tvmin[x] = Math.min(x + rad1x, wm) << 2;\n\t\t\t\t\tvmax[x] = Math.max(x - radius, 0) << 2;\n\t\t\t\t}\n\n\t\t\t\tp1 = yw + vmin[x];\n\t\t\t\tp2 = yw + vmax[x];\n\n\t\t\t\trsum += pixels[p1++] - pixels[p2++];\n\t\t\t\tgsum += pixels[p1++] - pixels[p2++];\n\t\t\t\tbsum += pixels[p1++] - pixels[p2++];\n\t\t\t\tasum += pixels[p1] - pixels[p2];\n\n\t\t\t\tyi++;\n\t\t\t}\n\t\t\tyw += width << 2;\n\t\t}\n\n\t\tfor (x = 0; x < width; x++) {\n\t\t\typ = x;\n\t\t\trsum = r[yp] * rad1y;\n\t\t\tgsum = g[yp] * rad1y;\n\t\t\tbsum = b[yp] * rad1y;\n\t\t\tasum = a[yp] * rad1y;\n\n\t\t\tfor (i = 1; i <= radius; i++) {\n\t\t\t\typ += i > hm ? 0 : width;\n\t\t\t\trsum += r[yp];\n\t\t\t\tgsum += g[yp];\n\t\t\t\tbsum += b[yp];\n\t\t\t\tasum += a[yp];\n\t\t\t}\n\n\t\t\tyi = x << 2;\n\t\t\tfor (y = 0; y < height; y++) {\n\t\t\t\tpixels[yi] = (rsum * div2 + 0.5) | 0;\n\t\t\t\tpixels[yi + 1] = (gsum * div2 + 0.5) | 0;\n\t\t\t\tpixels[yi + 2] = (bsum * div2 + 0.5) | 0;\n\t\t\t\tpixels[yi + 3] = (asum * div2 + 0.5) | 0;\n\n\t\t\t\tif (x === 0) {\n\t\t\t\t\tvmin[y] = Math.min(y + rad1y, hm) * width;\n\t\t\t\t\tvmax[y] = Math.max(y - radius, 0) * width;\n\t\t\t\t}\n\n\t\t\t\tp1 = x + vmin[y];\n\t\t\t\tp2 = x + vmax[y];\n\n\t\t\t\trsum += r[p1] - r[p2];\n\t\t\t\tgsum += g[p1] - g[p2];\n\t\t\t\tbsum += b[p1] - b[p2];\n\t\t\t\tasum += a[p1] - a[p2];\n\n\t\t\t\tyi += width << 2;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function saturateImage(imageData: ImageData, saturation: number) {\n\tconst pixels = imageData.data;\n\n\tfor (let i = 0; i < pixels.length; i += 4) {\n\t\tconst r = pixels[i];\n\t\tconst g = pixels[i + 1];\n\t\tconst b = pixels[i + 2];\n\t\tconst a = pixels[i + 3];\n\t\tconst gray = r * 0.3 + g * 0.59 + b * 0.11;\n\t\tpixels[i] = gray * (1 - saturation) + r * saturation;\n\t\tpixels[i + 1] = gray * (1 - saturation) + g * saturation;\n\t\tpixels[i + 2] = gray * (1 - saturation) + b * saturation;\n\t\tpixels[i + 3] = a;\n\t}\n}\n\nexport function brightnessImage(imageData: ImageData, brightness: number) {\n\tconst pixels = imageData.data;\n\n\tfor (let i = 0; i < pixels.length; i += 4) {\n\t\tconst r = pixels[i];\n\t\tconst g = pixels[i + 1];\n\t\tconst b = pixels[i + 2];\n\t\tconst a = pixels[i + 3];\n\t\tpixels[i] = r * brightness;\n\t\tpixels[i + 1] = g * brightness;\n\t\tpixels[i + 2] = b * brightness;\n\t\tpixels[i + 3] = a;\n\t}\n}\n\nexport function contrastImage(imageData: ImageData, contrast: number) {\n\tconst pixels = imageData.data;\n\n\tfor (let i = 0; i < pixels.length; i += 4) {\n\t\tconst r = pixels[i];\n\t\tconst g = pixels[i + 1];\n\t\tconst b = pixels[i + 2];\n\t\tconst a = pixels[i + 3];\n\t\tpixels[i] = (r - 128) * contrast + 128;\n\t\tpixels[i + 1] = (g - 128) * contrast + 128;\n\t\tpixels[i + 2] = (b - 128) * contrast + 128;\n\t\tpixels[i + 3] = a;\n\t}\n}\n","export default \"precision highp float;\\n\\nvarying vec2 v_uv;\\nuniform sampler2D u_texture;\\nuniform float u_alpha;\\n\\n/* Gradient noise from Jorge Jimenez's presentation: */\\n/* http://www.iryoku.com/next-generation-post-processing-in-call-of-duty-advanced-warfare */\\nfloat gradientNoise(in vec2 uv) {\\n return fract(52.9829189 * fract(dot(uv, vec2(0.06711056, 0.00583715))));\\n}\\n\\nvec2 rot(vec2 v, float a) {\\n float s = sin(a);\\n float c = cos(a);\\n mat2 m = mat2(c, s, -s, c);\\n return m * v;\\n}\\n\\nvoid main() {\\n float dither = (1.0 / 255.0) * gradientNoise(gl_FragCoord.xy) - (0.5 / 255.0);\\n\\n vec4 result = texture2D(u_texture, v_uv);\\n gl_FragColor = result * vec4(1.0, 1.0, 1.0, u_alpha) + vec4(dither);\\n}\\n\"","export default \"precision highp float;\\n\\nattribute vec2 a_pos;\\nattribute vec2 a_uv;\\nvarying vec2 v_uv;\\n\\nvoid main() {\\n v_uv = a_uv;\\n gl_Position = vec4(a_pos, 0.0, 1.0);\\n}\\n\"","interface ControlPointConf {\n\tcx: number;\n\tcy: number;\n\tx: number;\n\ty: number;\n\tur: number;\n\tvr: number;\n\tup: number;\n\tvp: number;\n}\n\ninterface ControlPointPreset {\n\twidth: number;\n\theight: number;\n\tconf: ControlPointConf[];\n}\n\nconst p = (\n\tcx: number,\n\tcy: number,\n\tx: number,\n\ty: number,\n\tur = 0,\n\tvr = 0,\n\tup = 1,\n\tvp = 1,\n) => Object.freeze({ cx, cy, x, y, ur, vr, up, vp }) as ControlPointConf;\nconst preset = (width: number, height: number, conf: ControlPointConf[]) =>\n\tObject.freeze({ width, height, conf }) as ControlPointPreset;\n\nexport const CONTROL_POINT_PRESETS = [\n\t// TODO: 竖屏推荐\n\tpreset(5, 5, [\n\t\tp(0, 0, -1, -1, 0, 0, 1, 1),\n\t\tp(1, 0, -0.5, -1, 0, 0, 1, 1),\n\t\tp(2, 0, 0, -1, 0, 0, 1, 1),\n\t\tp(3, 0, 0.5, -1, 0, 0, 1, 1),\n\t\tp(4, 0, 1, -1, 0, 0, 1, 1),\n\t\tp(0, 1, -1, -0.5, 0, 0, 1, 1),\n\t\tp(1, 1, -0.5, -0.5, 0, 0, 1, 1),\n\t\tp(2, 1, -0.0052029684413368305, -0.6131420587090777, 0, 0, 1, 1),\n\t\tp(3, 1, 0.5884227308309977, -0.3990805107556692, 0, 0, 1, 1),\n\t\tp(4, 1, 1, -0.5, 0, 0, 1, 1),\n\t\tp(0, 2, -1, 0, 0, 0, 1, 1),\n\t\tp(1, 2, -0.4210024670505933, -0.11895058380429502, 0, 0, 1, 1),\n\t\tp(2, 2, -0.1019613423315412, -0.023812118047224606, 0, -47, 0.629, 0.849),\n\t\tp(3, 2, 0.40275125660925437, -0.06345314544600389, 0, 0, 1, 1),\n\t\tp(4, 2, 1, 0, 0, 0, 1, 1),\n\t\tp(0, 3, -1, 0.5, 0, 0, 1, 1),\n\t\tp(1, 3, 0.06801958477287173, 0.5205913248960121, -31, -45, 1, 1),\n\t\tp(2, 3, 0.21446469120128908, 0.29331610114301043, 6, -56, 0.566, 1.321),\n\t\tp(3, 3, 0.5, 0.5, 0, 0, 1, 1),\n\t\tp(4, 3, 1, 0.5, 0, 0, 1, 1),\n\t\tp(0, 4, -1, 1, 0, 0, 1, 1),\n\t\tp(1, 4, -0.31378372841550195, 1, 0, 0, 1, 1),\n\t\tp(2, 4, 0.26153633255328046, 1, 0, 0, 1, 1),\n\t\tp(3, 4, 0.5, 1, 0, 0, 1, 1),\n\t\tp(4, 4, 1, 1, 0, 0, 1, 1),\n\t]),\n\tpreset(6, 6, [\n\t\tp(0, 0, -1, -1, 0, 0, 1, 1),\n\t\tp(1, 0, -0.6, -1, 0, 0, 1, 1),\n\t\tp(2, 0, -0.19999999999999996, -1, 0, 0, 1, 1),\n\t\tp(3, 0, 0.19999999999999996, -1, 0, 0, 1, 1),\n\t\tp(4, 0, 0.6000000000000001, -1, 0, 0, 1, 1),\n\t\tp(5, 0, 1, -1, 0, 0, 1, 1),\n\t\tp(0, 1, -1, -0.6, 0, 0, 1, 1),\n\t\tp(1, 1, -0.6, -0.6, 0, 0, 1, 1),\n\t\tp(2, 1, -0.10980661589020635, -0.4108069757237176, 0, 0, 1, 1),\n\t\tp(3, 1, 0.37398525356081525, -0.437252891735175, 0, 0, 1, 1),\n\t\tp(4, 1, 0.6000000000000001, -0.6, 0, 0, 1, 1),\n\t\tp(5, 1, 1, -0.6, 0, 0, 1, 1),\n\t\tp(0, 2, -1, -0.19999999999999996, 0, 0, 1, 1),\n\t\tp(1, 2, -0.5125306585683541, -0.1780829148228924, 0, 0, 1, 1),\n\t\tp(2, 2, -0.19999999999999996, -0.19999999999999996, 0, 0, 1, 1),\n\t\tp(3, 2, 0.19999999999999996, -0.19999999999999996, 0, 0, 1, 1),\n\t\tp(4, 2, 0.6485698281140977, -0.1939504644297667, 0, 0, 1, 1),\n\t\tp(5, 2, 1, -0.19999999999999996, 0, 0, 1, 1),\n\t\tp(0, 3, -1, 0.19999999999999996, 0, 0, 1, 1),\n\t\tp(1, 3, -0.7321983182109801, 0.23447337495584342, 0, 0, 1, 1),\n\t\tp(2, 3, -0.46545901721636285, 0.4619082526543773, 0, 0, 1, 1),\n\t\tp(3, 3, -0.12549716300753677, 0.4275285618394826, -65, -36, 1.195, 2.296),\n\t\tp(4, 3, 0.3582947064434847, -0.04320874316445944, 0, 0, 1, 1),\n\t\tp(5, 3, 1, 0.19999999999999996, 0, 0, 1, 1),\n\t\tp(0, 4, -1, 0.6000000000000001, 0, 0, 1, 1),\n\t\tp(1, 4, -0.742658682955867, 0.6549634395380164, 0, 0, 1, 1),\n\t\tp(2, 4, -0.3843911904434889, 0.7475241455781174, 0, 0, 0.535, 0.66),\n\t\tp(3, 4, 0.07847994951775883, 0.7263674127689514, 0, 0, 1, 1),\n\t\tp(4, 4, 0.6000000000000001, 0.6000000000000001, 0, 0, 1, 1),\n\t\tp(5, 4, 1, 0.6000000000000001, 0, 0, 1, 1),\n\t\tp(0, 5, -1, 1, 0, 0, 1, 1),\n\t\tp(1, 5, -0.6, 1, 0, 0, 1, 1),\n\t\tp(2, 5, -0.19999999999999996, 1, 0, 0, 1, 1),\n\t\tp(3, 5, 0.19999999999999996, 1, 0, 0, 1, 1),\n\t\tp(4, 5, 0.6000000000000001, 1, 0, 0, 1, 1),\n\t\tp(5, 5, 1, 1, 0, 0, 1, 1),\n\t]),\n\t// TODO: 横屏推荐\n\tpreset(4, 4, [\n\t\tp(0, 0, -1, -1, 0, 0, 1, 1),\n\t\tp(1, 0, -0.33333333333333337, -1, 0, 0, 1, 1),\n\t\tp(2, 0, 0.33333333333333326, -1, 0, 0, 1, 1),\n\t\tp(3, 0, 1, -1, 0, 0, 1, 1),\n\t\tp(0, 1, -1, -0.04495399932657351, 0, 0, 1, 1),\n\t\tp(1, 1, -0.24056117520129328, -0.22465999020104, 0, 0, 1, 1),\n\t\tp(2, 1, 0.334758885767489, -0.00531297192779423, 0, 0, 1, 1),\n\t\tp(3, 1, 0.9989920470678106, -0.3382976020775408, 8, 0, 0.566, 1.792),\n\t\tp(0, 2, -1, 0.33333333333333326, 0, 0, 1, 1),\n\t\tp(1, 2, -0.3425497314639411, -0.000027501607956947893, 0, 0, 1, 1),\n\t\tp(2, 2, 0.3321437945812673, 0.1981776353859399, 0, 0, 1, 1),\n\t\tp(3, 2, 1, 0.0766118180296832, 0, 0, 1, 1),\n\t\tp(0, 3, -1, 1, 0, 0, 1, 1),\n\t\tp(1, 3, -0.33333333333333337, 1, 0, 0, 1, 1),\n\t\tp(2, 3, 0.33333333333333326, 1, 0, 0, 1, 1),\n\t\tp(3, 3, 1, 1, 0, 0, 1, 1),\n\t]),\n\tpreset(4, 4, [\n\t\tp(0, 0, -1, -1, 0, 0, 1, 2.075),\n\t\tp(1, 0, -0.33333333333333337, -1, 0, 0, 1, 1),\n\t\tp(2, 0, 0.33333333333333326, -1, 0, 0, 1, 1),\n\t\tp(3, 0, 1, -1, 0, 0, 1, 1),\n\t\tp(0, 1, -1, -0.4545779491139603, 0, 0, 1, 1),\n\t\tp(1, 1, -0.33333333333333337, -0.33333333333333337, 0, 0, 1, 1),\n\t\tp(2, 1, 0.0889403142626457, -0.6025711180694033, -32, 45, 1, 1),\n\t\tp(3, 1, 1, -0.33333333333333337, 0, 0, 1, 1),\n\t\tp(0, 2, -1, -0.07402408608567845, 1, 0, 1, 0.094),\n\t\tp(1, 2, -0.2719422694359541, 0.09775369930903222, 25, -18, 1.321, 0),\n\t\tp(2, 2, 0.19877414408395877, 0.4307383294587789, 48, -40, 0.755, 0.975),\n\t\tp(3, 2, 1, 0.33333333333333326, -37, 0, 1, 1),\n\t\tp(0, 3, -1, 1, 0, 0, 1, 1),\n\t\tp(1, 3, -0.33333333333333337, 1, 0, 0, 1, 1),\n\t\tp(2, 3, 0.5125850864305672, 1, -20, -18, 0, 1.604),\n\t\tp(3, 3, 1, 1, 0, 0, 1, 1),\n\t]),\n\tpreset(4, 4, [\n\t\tp(0, 0, -1, -1, 0, 0, 1, 1),\n\t\tp(1, 0, -0.04704442742088466, -1, 0, 14, 2.013, 3.522),\n\t\tp(2, 0, 0.5910378220172194, -1, 0, 0, 1, 1),\n\t\tp(3, 0, 1, -1, 0, 0, 1, 1),\n\t\tp(0, 1, -1, -0.33333333333333337, 0, 0, 1, 1),\n\t\tp(1, 1, -0.13072734537998032, -0.20616084408160962, 0, 0, 1, 1),\n\t\tp(2, 1, 0.5178152688030109, -0.45722068427387885, 0, 0, 1, 1),\n\t\tp(3, 1, 1, -0.5021471819924956, 0, 0, 1, 1),\n\t\tp(0, 2, -1, 0.33333333333333326, 0, 0, 1, 1),\n\t\tp(1, 2, -0.4210024670505933, 0.2563178089041497, 0, 0, 1, 1),\n\t\tp(2, 2, 0.11247613493864139, -0.050239469646410795, 4, -2, 0.849, 1.132),\n\t\tp(3, 2, 1, -0.08195229156543427, 0, 0, 1, 1),\n\t\tp(0, 3, -1, 1, 0, 0, 1, 1),\n\t\tp(1, 3, -0.33333333333333337, 1, 0, 0, 1, 1),\n\t\tp(2, 3, 0.33333333333333326, 1, 0, 0, 1, 1),\n\t\tp(3, 3, 1, 1, 0, 0, 1, 1),\n\t]),\n\tpreset(5, 5, [\n\t\tp(0, 0, -1, -1, 0, 0, 1, 1),\n\t\tp(1, 0, -0.632824853134554, -1, 0, -31, 1.101, 1.038),\n\t\tp(2, 0, -0.1019613423315412, -1, 0, 0, 1, 1),\n\t\tp(3, 0, 0.7348678372594151, -1, 0, 39, 0.66, 2.421),\n\t\tp(4, 0, 1, -1, 0, 0, 1, 1),\n\t\tp(0, 1, -1, -0.5, 0, 0, 1, 1),\n\t\tp(1, 1, -0.7165077710936496, -0.5100753874722515, 0, 0, 0.629, 1),\n\t\tp(2, 1, -0.5491419351754585, -0.4149369217151808, 16, 25, 1, 1.478),\n\t\tp(3, 1, 0.5021247216856803, -0.5523591500309495, 0, 44, 0.629, 1.509),\n\t\tp(4, 1, 1, -0.5, 0, 0, 1, 1),\n\t\tp(0, 2, -1, 0, 0, 0, 1, 1),\n\t\tp(1, 2, -0.6851266768589888, -0.013241177407550042, 0, 0, 1, 1),\n\t\tp(2, 2, -0.36347046095371505, -0.09252323220510883, -23, -31, 1, 1),\n\t\tp(3, 2, 0.08371013189020227, -0.11630784864437649, 0, 0, 0.409, 1),\n\t\tp(4, 2, 1, -0.002670236767875478, 0, 0, 1, 1),\n\t\tp(0, 3, -1, 0.5, 0, 0, 1, 1),\n\t\tp(1, 3, -0.3294742755328324, 0.6844409048109668, -3, 19, 1.415, 1),\n\t\tp(2, 3, 0.028793216979545733, 0.36202721530089466, 6, 0, 1.541, 0.472),\n\t\tp(3, 3, 0.5230454511754543, 0.2801024253434172, 10, -42, 0, 1.352),\n\t\tp(4, 3, 1, 0.5, -3, 0, 1.981, 2.17),\n\t\tp(0, 4, -1, 1, 0, 0, 1, 1),\n\t\tp(1, 4, -0.48114956433369327, 1, 0, 53, 0, 1.509),\n\t\tp(2, 4, 0, 1, 0, 0, 1, 1),\n\t\tp(3, 4, 0.6093434603207717, 1, 0, 0, 0.629, 1),\n\t\tp(4, 4, 1, 1, 0, 0, 1, 1),\n\t]),\n] as const;\n","export default \"precision highp float;\\n\\nvarying vec3 v_color;\\nvarying vec2 v_uv;\\nuniform sampler2D u_texture;\\nuniform float u_time;\\nuniform float u_volume;\\n\\nvec2 rot(vec2 v, float a) {\\n float s = sin(a);\\n float c = cos(a);\\n mat2 m = mat2(c, s, -s, c);\\n return m * v;\\n}\\n\\nvoid main() {\\n vec4 result = texture2D(u_texture, rot(v_uv * max(1.0, 1.0 + u_volume), u_time + u_volume));\\n result *= vec4(v_color, 1.0);\\n result *= vec4(1.0 - u_volume * 0.1);\\n gl_FragColor = result;\\n}\\n\"","export default \"precision highp float;\\n\\nattribute vec2 a_pos;\\nattribute vec3 a_color;\\nattribute vec2 a_uv;\\nvarying vec3 v_color;\\nvarying vec2 v_uv;\\n\\nuniform float u_aspect;\\n\\nvoid main() {\\n v_color = a_color;\\n v_uv = a_uv;\\n vec2 pos = a_pos;\\n if (u_aspect > 1.0) {\\n pos.y *= u_aspect;\\n } else {\\n pos.x /= u_aspect;\\n }\\n gl_Position = vec4(pos, 0.0, 1.0);\\n}\\n\"","/**\n * @fileoverview\n * 基于 Mesh Gradient 渐变渲染的渲染器\n * 此渲染应该是 Apple Music 使用的背景渲染方式了\n * 参考内容 https://movingparts.io/gradient-meshes\n */\n\nimport { Mat4, Vec2, Vec3, Vec4 } from \"gl-matrix\";\nimport type { Disposable } from \"../../interfaces\";\nimport {\n\tloadResourceFromElement,\n\tloadResourceFromUrl,\n} from \"../../utils/resource\";\nimport { BaseRenderer } from \"../base\";\nimport {\n\tblurImage,\n\tbrightnessImage,\n\tcontrastImage,\n\tsaturateImage,\n} from \"../img\";\nimport blendFragShader from \"./blend.frag.glsl?raw\";\nimport blendVertShader from \"./blend.vert.glsl?raw\";\nimport { CONTROL_POINT_PRESETS } from \"./cp-presets\";\nimport meshFragShader from \"./mesh.frag.glsl?raw\";\nimport meshVertShader from \"./mesh.vert.glsl?raw\";\n\ntype RenderingContext = WebGLRenderingContext;\n\nclass GLProgram implements Disposable {\n\tprivate gl: RenderingContext;\n\tprogram: WebGLProgram;\n\tprivate vertexShader: WebGLShader;\n\tprivate fragmentShader: WebGLShader;\n\treadonly attrs: { [name: string]: number };\n\tconstructor(\n\t\tgl: RenderingContext,\n\t\tvertexShaderSource: string,\n\t\tfragmentShaderSource: string,\n\t\tprivate readonly label = \"unknown\",\n\t) {\n\t\tthis.gl = gl;\n\t\tthis.vertexShader = this.createShader(gl.VERTEX_SHADER, vertexShaderSource);\n\t\tthis.fragmentShader = this.createShader(\n\t\t\tgl.FRAGMENT_SHADER,\n\t\t\tfragmentShaderSource,\n\t\t);\n\t\tthis.program = this.createProgram();\n\n\t\tconst num = gl.getProgramParameter(this.program, gl.ACTIVE_ATTRIBUTES);\n\t\tconst attrs: { [name: string]: number } = {};\n\t\tfor (let i = 0; i < num; i++) {\n\t\t\tconst info = gl.getActiveAttrib(this.program, i);\n\t\t\tif (!info) continue;\n\t\t\tconst location = gl.getAttribLocation(this.program, info.name);\n\t\t\tif (location === -1) continue;\n\t\t\tattrs[info.name] = location;\n\t\t}\n\t\tthis.attrs = attrs;\n\t}\n\tprivate createShader(type: number, source: string) {\n\t\tconst gl = this.gl;\n\t\tconst shader = gl.createShader(type);\n\t\tif (!shader) throw new Error(\"Failed to create shader\");\n\t\tgl.shaderSource(shader, source);\n\t\tgl.compileShader(shader);\n\t\tif (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to compile shader for type ${type} \"${\n\t\t\t\t\tthis.label\n\t\t\t\t}\": ${gl.getShaderInfoLog(shader)}`,\n\t\t\t);\n\t\t}\n\t\treturn shader;\n\t}\n\tprivate createProgram() {\n\t\tconst gl = this.gl;\n\t\tconst program = gl.createProgram();\n\t\tif (!program) throw new Error(\"Failed to create program\");\n\t\tgl.attachShader(program, this.vertexShader);\n\t\tgl.attachShader(program, this.fragmentShader);\n\t\tgl.linkProgram(program);\n\t\tgl.validateProgram(program);\n\t\tif (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n\t\t\tconst errLog = gl.getProgramInfoLog(program);\n\t\t\tgl.deleteProgram(program);\n\t\t\tthrow new Error(`Failed to link program \"${this.label}\": ${errLog}`);\n\t\t}\n\t\treturn program;\n\t}\n\tuse() {\n\t\tconst gl = this.gl;\n\t\tgl.useProgram(this.program);\n\t}\n\tprivate notFoundUniforms: Set<string> = new Set();\n\tprivate warnUniformNotFound(name: string) {\n\t\tif (this.notFoundUniforms.has(name)) return;\n\t\tthis.notFoundUniforms.add(name);\n\t\tconsole.warn(\n\t\t\t`Failed to get uniform location for program \"${this.label}\": ${name}`,\n\t\t);\n\t}\n\tsetUniform1f(name: string, value: number) {\n\t\tconst gl = this.gl;\n\t\tconst location = gl.getUniformLocation(this.program, name);\n\t\tif (!location) this.warnUniformNotFound(name);\n\t\telse gl.uniform1f(location, value);\n\t}\n\tsetUniform2f(name: string, value1: number, value2: number) {\n\t\tconst gl = this.gl;\n\t\tconst location = gl.getUniformLocation(this.program, name);\n\t\tif (!location) this.warnUniformNotFound(name);\n\t\telse gl.uniform2f(location, value1, value2);\n\t}\n\tsetUniform1i(name: string, value: number) {\n\t\tconst gl = this.gl;\n\t\tconst location = gl.getUniformLocation(this.program, name);\n\t\tif (!location) this.warnUniformNotFound(name);\n\t\telse gl.uniform1i(location, value);\n\t}\n\tdispose() {\n\t\tconst gl = this.gl;\n\t\tgl.deleteShader(this.vertexShader);\n\t\tgl.deleteShader(this.fragmentShader);\n\t\tgl.deleteProgram(this.program);\n\t}\n}\n\nclass Mesh implements Disposable {\n\tprotected vertexWidth = 0;\n\tprotected vertexHeight = 0;\n\tprivate vertexBuffer: WebGLBuffer;\n\tprivate indexBuffer: WebGLBuffer;\n\tprivate vertexData: Float32Array;\n\tprivate indexData: Uint16Array;\n\tprivate vertexIndexLength = 0;\n\t// 调试用途,开启线框模式\n\tprivate wireFrame = false;\n\tconstructor(\n\t\tprivate readonly gl: RenderingContext,\n\t\tprivate readonly attrPos: number | undefined,\n\t\tprivate readonly attrColor: number | undefined,\n\t\tprivate readonly attrUV: number | undefined,\n\t) {\n\t\tconst vertexBuf = gl.createBuffer();\n\t\tif (!vertexBuf) throw new Error(\"Failed to create vertex buffer\");\n\t\tthis.vertexBuffer = vertexBuf;\n\t\tconst indexBuf = gl.createBuffer();\n\t\tif (!indexBuf) throw new Error(\"Failed to create index buffer\");\n\t\tthis.indexBuffer = indexBuf;\n\n\t\tthis.bind();\n\n\t\tthis.vertexData = new Float32Array(0);\n\t\tthis.indexData = new Uint16Array(0);\n\n\t\tthis.resize(2, 2);\n\t\tthis.update();\n\t}\n\n\tsetWireFrame(enable: boolean) {\n\t\tthis.wireFrame = enable;\n\t\tthis.resize(this.vertexWidth, this.vertexHeight);\n\t}\n\n\tsetVertexPos(vx: number, vy: number, x: number, y: number): void {\n\t\tconst idx = (vx + vy * this.vertexWidth) * 7;\n\t\tif (idx >= this.vertexData.length - 1) {\n\t\t\tconsole.warn(\"Vertex position out of range\", idx, this.vertexData.length);\n\t\t\treturn;\n\t\t}\n\t\tthis.vertexData[idx] = x;\n\t\tthis.vertexData[idx + 1] = y;\n\t}\n\n\tsetVertexColor(\n\t\tvx: number,\n\t\tvy: number,\n\t\tr: number,\n\t\tg: number,\n\t\tb: number,\n\t): void {\n\t\tconst idx = (vx + vy * this.vertexWidth) * 7 + 2;\n\t\tif (idx >= this.vertexData.length - 1) {\n\t\t\tconsole.warn(\"Vertex position out of range\", idx, this.vertexData.length);\n\t\t\treturn;\n\t\t}\n\t\tthis.vertexData[idx] = r;\n\t\tthis.vertexData[idx + 1] = g;\n\t\tthis.vertexData[idx + 2] = b;\n\t}\n\n\tsetVertexUV(vx: number, vy: number, x: number, y: number): void {\n\t\tconst idx = (vx + vy * this.vertexWidth) * 7 + 2 + 3;\n\t\tif (idx >= this.vertexData.length - 1) {\n\t\t\tconsole.warn(\"Vertex position out of range\", idx, this.vertexData.length);\n\t\t\treturn;\n\t\t}\n\t\tthis.vertexData[idx] = x;\n\t\tthis.vertexData[idx + 1] = y;\n\t}\n\n\tgetVertexIndexLength(): number {\n\t\treturn this.vertexIndexLength;\n\t}\n\n\tdraw() {\n\t\tconst gl = this.gl;\n\n\t\tif (this.wireFrame) {\n\t\t\tgl.drawElements(gl.LINES, this.vertexIndexLength, gl.UNSIGNED_SHORT, 0);\n\t\t} else {\n\t\t\tgl.drawElements(\n\t\t\t\tgl.TRIANGLES,\n\t\t\t\tthis.vertexIndexLength,\n\t\t\t\tgl.UNSIGNED_SHORT,\n\t\t\t\t0,\n\t\t\t);\n\t\t}\n\t}\n\n\tresize(vertexWidth: number, vertexHeight: number): void {\n\t\tthis.vertexWidth = vertexWidth;\n\t\tthis.vertexHeight = vertexHeight;\n\t\t// 2 个顶点坐标 + 3 个颜色值 + 2 个 UV 坐标\n\t\tthis.vertexIndexLength = vertexWidth * vertexHeight * 6;\n\t\tif (this.wireFrame) {\n\t\t\tthis.vertexIndexLength = vertexWidth * vertexHeight * 10;\n\t\t}\n\t\tconst vertexData = new Float32Array(\n\t\t\tvertexWidth * vertexHeight * (2 + 3 + 2),\n\t\t);\n\t\tconst indexData = new Uint16Array(this.vertexIndexLength);\n\t\tthis.vertexData = vertexData;\n\t\tthis.indexData = indexData;\n\t\tfor (let y = 0; y < vertexHeight; y++) {\n\t\t\tfor (let x = 0; x < vertexWidth; x++) {\n\t\t\t\tconst px = (x / (vertexWidth - 1)) * 2 - 1;\n\t\t\t\tconst py = (y / (vertexHeight - 1)) * 2 - 1;\n\t\t\t\tthis.setVertexPos(x, y, px || 0, py || 0);\n\t\t\t\tthis.setVertexColor(x, y, 1, 1, 1);\n\t\t\t\tthis.setVertexUV(x, y, x / (vertexWidth - 1), y / (vertexHeight - 1));\n\t\t\t}\n\t\t}\n\t\tfor (let y = 0; y < vertexHeight - 1; y++) {\n\t\t\tfor (let x = 0; x < vertexWidth - 1; x++) {\n\t\t\t\tif (this.wireFrame) {\n\t\t\t\t\tconst idx = (y * vertexWidth + x) * 10;\n\n\t\t\t\t\tindexData[idx] = y * vertexWidth + x;\n\t\t\t\t\tindexData[idx + 1] = y * vertexWidth + x + 1;\n\n\t\t\t\t\tindexData[idx + 2] = y * vertexWidth + x + 1;\n\t\t\t\t\tindexData[idx + 3] = (y + 1) * vertexWidth + x;\n\n\t\t\t\t\tindexData[idx + 4] = (y + 1) * vertexWidth + x;\n\t\t\t\t\tindexData[idx + 5] = (y + 1) * vertexWidth + x + 1;\n\n\t\t\t\t\tindexData[idx + 6] = (y + 1) * vertexWidth + x + 1;\n\t\t\t\t\tindexData[idx + 7] = y * vertexWidth + x + 1;\n\n\t\t\t\t\tindexData[idx + 8] = y * vertexWidth + x;\n\t\t\t\t\tindexData[idx + 9] = (y + 1) * vertexWidth + x;\n\t\t\t\t} else {\n\t\t\t\t\tconst idx = (y * vertexWidth + x) * 6;\n\t\t\t\t\tindexData[idx] = y * vertexWidth + x;\n\t\t\t\t\tindexData[idx + 1] = y * vertexWidth + x + 1;\n\t\t\t\t\tindexData[idx + 2] = (y + 1) * vertexWidth + x;\n\t\t\t\t\tindexData[idx + 3] = y * vertexWidth + x + 1;\n\t\t\t\t\tindexData[idx + 4] = (y + 1) * vertexWidth + x + 1;\n\t\t\t\t\tindexData[idx + 5] = (y + 1) * vertexWidth + x;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst gl = this.gl;\n\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);\n\t\tgl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indexData, gl.STATIC_DRAW);\n\t}\n\n\tbind() {\n\t\tconst gl = this.gl;\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);\n\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);\n\n\t\tif (this.attrPos !== undefined) {\n\t\t\tgl.vertexAttribPointer(this.attrPos, 2, gl.FLOAT, false, 4 * 7, 0);\n\t\t\tgl.enableVertexAttribArray(this.attrPos);\n\t\t}\n\t\tif (this.attrColor !== undefined) {\n\t\t\tgl.vertexAttribPointer(this.attrColor, 3, gl.FLOAT, false, 4 * 7, 4 * 2);\n\t\t\tgl.enableVertexAttribArray(this.attrColor);\n\t\t}\n\t\tif (this.attrUV !== undefined) {\n\t\t\tgl.vertexAttribPointer(this.attrUV, 2, gl.FLOAT, false, 4 * 7, 4 * 5);\n\t\t\tgl.enableVertexAttribArray(this.attrUV);\n\t\t}\n\t}\n\n\tupdate() {\n\t\tconst gl = this.gl;\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);\n\t\tgl.bufferData(gl.ARRAY_BUFFER, this.vertexData, gl.DYNAMIC_DRAW);\n\t}\n\n\tdispose(): void {\n\t\tthis.gl.deleteBuffer(this.vertexBuffer);\n\t\tthis.gl.deleteBuffer(this.indexBuffer);\n\t}\n}\n\nclass ControlPoint {\n\tcolor = Vec3.fromValues(1, 1, 1);\n\tlocation = Vec2.fromValues(0, 0);\n\tuTangent = Vec2.fromValues(0, 0);\n\tvTangent = Vec2.fromValues(0, 0);\n\tprivate _uRot = 0;\n\tprivate _vRot = 0;\n\tprivate _uScale = 1;\n\tprivate _vScale = 1;\n\n\tconstructor() {\n\t\tObject.seal(this);\n\t}\n\n\tget uRot() {\n\t\treturn this._uRot;\n\t}\n\n\tget vRot() {\n\t\treturn this._vRot;\n\t}\n\n\tset uRot(value: number) {\n\t\tthis._uRot = value;\n\t\tthis.updateUTangent();\n\t}\n\n\tset vRot(value: number) {\n\t\tthis._vRot = value;\n\t\tthis.updateVTangent();\n\t}\n\n\tget uScale() {\n\t\treturn this._uScale;\n\t}\n\n\tget vScale() {\n\t\treturn this._vScale;\n\t}\n\n\tset uScale(value: number) {\n\t\tthis._uScale = value;\n\t\tthis.updateUTangent();\n\t}\n\n\tset vScale(value: number) {\n\t\tthis._vScale = value;\n\t\tthis.updateVTangent();\n\t}\n\n\tprivate updateUTangent() {\n\t\tthis.uTangent[0] = Math.cos(this._uRot) * this._uScale;\n\t\tthis.uTangent[1] = Math.sin(this._uRot) * this._uScale;\n\t}\n\n\tprivate updateVTangent() {\n\t\tthis.vTangent[0] = -Math.sin(this._vRot) * this._vScale;\n\t\tthis.vTangent[1] = Math.cos(this._vRot) * this._vScale;\n\t}\n}\n\nconst H = Mat4.fromValues(2, -2, 1, 1, -3, 3, -2, -1, 0, 0, 1, 0, 1, 0, 0, 0);\nconst H_T = Mat4.clone(H).transpose();\n\nconst spUx = Vec4.create();\nconst spUy = Vec4.create();\nconst spV = Vec4.create();\n\nconst spxAcc = Mat4.create();\nconst spyAcc = Mat4.create();\nfunction surfacePoint(\n\tu: number,\n\tv: number,\n\tX: Mat4,\n\tY: Mat4,\n\toutput = Vec2.create(),\n): Vec2 {\n\tspUx[0] = u ** 3;\n\tspUx[1] = u ** 2;\n\tspUx[2] = u;\n\tspUx[3] = 1;\n\n\tspUy.copy(spUx);\n\n\tspV[0] = v ** 3;\n\tspV[1] = v ** 2;\n\tspV[2] = v;\n\tspV[3] = 1;\n\n\tspxAcc.copy(X).transpose();\n\tMat4.mul(spxAcc, spxAcc, H);\n\tMat4.mul(spxAcc, H_T, spxAcc);\n\tVec4.transformMat4(spUx, spUx, spxAcc);\n\tconst x = spV.dot(spUx);\n\n\tspyAcc.copy(Y).transpose();\n\tMat4.mul(spyAcc, spyAcc, H);\n\tMat4.mul(spyAcc, H_T, spyAcc);\n\tVec4.transformMat4(spUy, spUy, spyAcc);\n\tconst y = spV.dot(spUy);\n\n\toutput.x = x;\n\toutput.y = y;\n\treturn output;\n}\n\nfunction meshCoefficients(\n\tp00: ControlPoint,\n\tp01: ControlPoint,\n\tp10: ControlPoint,\n\tp11: ControlPoint,\n\taxis: \"x\" | \"y\",\n\toutput = Mat4.create(),\n): Mat4 {\n\tconst l = (p: ControlPoint) => p.location[axis];\n\tconst u = (p: ControlPoint) => p.uTangent[axis];\n\tconst v = (p: ControlPoint) => p.vTangent[axis];\n\n\toutput[0] = l(p00);\n\toutput[1] = l(p01);\n\toutput[2] = v(p00);\n\toutput[3] = v(p01);\n\toutput[4] = l(p10);\n\toutput[5] = l(p11);\n\toutput[6] = v(p10);\n\toutput[7] = v(p11);\n\toutput[8] = u(p00);\n\toutput[9] = u(p01);\n\toutput[10] = 0;\n\toutput[11] = 0;\n\toutput[12] = u(p10);\n\toutput[13] = u(p11);\n\toutput[14] = 0;\n\toutput[15] = 0;\n\n\treturn output;\n}\n\nfunction colorCoefficients(\n\tp00: ControlPoint,\n\tp01: ControlPoint,\n\tp10: ControlPoint,\n\tp11: ControlPoint,\n\taxis: \"r\" | \"g\" | \"b\",\n\toutput = Mat4.create(),\n): Mat4 {\n\tconst c = (p: ControlPoint) => p.color[axis];\n\toutput.fill(0);\n\toutput[0] = c(p00);\n\toutput[1] = c(p01);\n\toutput[4] = c(p10);\n\toutput[5] = c(p11);\n\t// return Mat4.fromValues(\n\t// c(p00), c(p01), 0, 0,\n\t// c(p10), c(p11), 0, 0,\n\t// 0, 0, 0, 0,\n\t// 0, 0, 0, 0,\n\t// );\n\treturn output;\n}\n\n// 将这个函数要用到的临时变量提取到外部,尽量避免资源分配提高性能\nconst cpUx = Vec4.create();\nconst cpUy = Vec4.create();\nconst cpUz = Vec4.create();\n\nconst cpV = Vec4.create();\n\nconst cprAcc = Mat4.create();\nconst cpgAcc = Mat4.create();\nconst cpbAcc = Mat4.create();\nconst cpResult = Vec3.create();\nfunction colorPoint(u: number, v: number, R: Mat4, G: Mat4, B: Mat4): Vec3 {\n\tcpUx[0] = u ** 3;\n\tcpUx[1] = u ** 2;\n\tcpUx[2] = u;\n\tcpUx[3] = 1;\n\tcpUy.copy(cpUx);\n\tcpUz.copy(cpUx);\n\n\tcpV[0] = v ** 3;\n\tcpV[1] = v ** 2;\n\tcpV[2] = v;\n\tcpV[3] = 1;\n\n\tcprAcc.copy(R).transpose();\n\tMat4.mul(cprAcc, cprAcc, H);\n\tMat4.mul(cprAcc, H_T, cprAcc);\n\tVec4.transformMat4(cpUx, cpUx, cprAcc);\n\tcpResult.r = cpV.dot(cpUx);\n\n\tcpgAcc.copy(G).transpose();\n\tMat4.mul(cpgAcc, cpgAcc, H);\n\tMat4.mul(cpgAcc, H_T, cpgAcc);\n\tVec4.transformMat4(cpUy, cpUy, cpgAcc);\n\tcpResult.g = cpV.dot(cpUy);\n\n\tcpbAcc.copy(B).transpose();\n\tMat4.mul(cpbAcc, cpbAcc, H);\n\tMat4.mul(cpbAcc, H_T, cpbAcc);\n\tVec4.transformMat4(cpUz, cpUz, cpbAcc);\n\tcpResult.b = cpV.dot(cpUz);\n\n\treturn cpResult;\n}\n\nclass Map2D<T> {\n\tprivate _width = 0;\n\tprivate _height = 0;\n\tprivate _data: T[] = [];\n\tconstructor(width: number, height: number) {\n\t\tthis.resize(width, height);\n\t\tObject.seal(this);\n\t}\n\tresize(width: number, height: number) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tthis._data = new Array(width * height).fill(0);\n\t}\n\tset(x: number, y: number, value: T) {\n\t\tthis._data[x + y * this._width] = value;\n\t}\n\tget(x: number, y: number) {\n\t\treturn this._data[x + y * this._width];\n\t}\n\tget width() {\n\t\treturn this._width;\n\t}\n\tget height() {\n\t\treturn this._height;\n\t}\n}\n\n// Bicubic Hermite Patch Mesh\nclass BHPMesh extends Mesh {\n\t/**\n\t * 细分级别,越大曲线越平滑,但是性能消耗也越大\n\t */\n\tprivate _subDivisions = 10;\n\tprivate _controlPoints: Map2D<ControlPoint> = new Map2D(3, 3);\n\n\tconstructor(\n\t\tgl: RenderingContext,\n\t\tattrPos: number,\n\t\tattrColor: number,\n\t\tattrUV: number,\n\t) {\n\t\tsuper(gl, attrPos, attrColor, attrUV);\n\t\tthis.resizeControlPoints(3, 3);\n\t\tObject.seal(this);\n\t}\n\toverride setWireFrame(enable: boolean) {\n\t\tsuper.setWireFrame(enable);\n\t\tthis.updateMesh();\n\t}\n\t/**\n\t * 以当前的控制点矩阵大小和细分级别为参考重新设置细分级别,此操作不会重设控制点数据\n\t * @param subDivisions 细分级别\n\t */\n\tresetSubdivition(subDivisions: number) {\n\t\tthis._subDivisions = subDivisions;\n\t\tsuper.resize(\n\t\t\t(this._controlPoints.width - 1) * subDivisions,\n\t\t\t(this._controlPoints.height - 1) * subDivisions,\n\t\t);\n\t}\n\t/**\n\t * 重设控制点矩阵尺寸,将会重置所有控制点的颜色和坐标数据\n\t * 请在调用此方法后重新设置颜色和坐标,并调用 updateMesh 方法更新网格\n\t * @param width 控制点宽度数量,必须大于等于 2\n\t * @param height 控制点高度数量,必须大于等于 2\n\t */\n\tresizeControlPoints(width: number, height: number) {\n\t\tif (!(width >= 2 && height >= 2)) {\n\t\t\tthrow new Error(\"Control points must be larger than 3x3 or equal\");\n\t\t}\n\t\tthis._controlPoints.resize(width, height);\n\t\tfor (let y = 0; y < height; y++) {\n\t\t\tfor (let x = 0; x < width; x++) {\n\t\t\t\tconst point = new ControlPoint();\n\t\t\t\tpoint.location.x = (x / (width - 1)) * 2 - 1;\n\t\t\t\tpoint.location.y = (y / (height - 1)) * 2 - 1;\n\t\t\t\tpoint.uTangent.x = 2 / (width - 1);\n\t\t\t\tpoint.vTangent.y = 2 / (height - 1);\n\t\t\t\tthis._controlPoints.set(x, y, point);\n\t\t\t}\n\t\t}\n\t\tthis.resetSubdivition(this._subDivisions);\n\t}\n\t/**\n\t * 获取指定位置的控制点,然后可以设置颜色和坐标属性\n\t * 留意颜色属性和坐标属性的值范围均参考 WebGL 的定义\n\t * 即颜色各个组件取值 [0-1],坐标取值 [-1, 1]\n\t * 点的位置以画面左下角为原点 (0,0)\n\t * @param x 需要获取的控制点的 x 坐标\n\t * @param y 需要获取的控制点的 y 坐标\n\t * @returns 控制点对象\n\t */\n\tgetControlPoint(x: number, y: number) {\n\t\treturn this._controlPoints.get(x, y);\n\t}\n\tprivate uMX = Mat4.create();\n\tprivate uMY = Mat4.create();\n\tprivate uMR = Mat4.create();\n\tprivate uMG = Mat4.create();\n\tprivate uMB = Mat4.create();\n\tprivate tmpV2 = Vec2.create();\n\t/**\n\t * 更新最终呈现的网格数据,此方法应在所有控制点或细分参数的操作完成后调用\n\t */\n\tupdateMesh() {\n\t\tconst subDivM1 = this._subDivisions - 1;\n\t\tconst tW = subDivM1 * (this._controlPoints.height - 1);\n\t\tconst tH = subDivM1 * (this._controlPoints.width - 1);\n\t\tfor (let x = 0; x < this._controlPoints.width - 1; x++) {\n\t\t\tfor (let y = 0; y < this._controlPoints.height - 1; y++) {\n\t\t\t\tconst p00 = this._controlPoints.get(x, y);\n\t\t\t\tconst p01 = this._controlPoints.get(x, y + 1);\n\t\t\t\tconst p10 = this._controlPoints.get(x + 1, y);\n\t\t\t\tconst p11 = this._controlPoints.get(x + 1, y + 1);\n\n\t\t\t\tconst X = meshCoefficients(p00, p01, p10, p11, \"x\", this.uMX);\n\t\t\t\tconst Y = meshCoefficients(p00, p01, p10, p11, \"y\", this.uMY);\n\n\t\t\t\tconst R = colorCoefficients(p00, p01, p10, p11, \"r\", this.uMR);\n\t\t\t\tconst G = colorCoefficients(p00, p01, p10, p11, \"g\", this.uMG);\n\t\t\t\tconst B = colorCoefficients(p00, p01, p10, p11, \"b\", this.uMB);\n\n\t\t\t\tconst sX = x / (this._controlPoints.width - 1);\n\t\t\t\tconst sY = y / (this._controlPoints.height - 1);\n\t\t\t\tfor (let u = 0; u < this._subDivisions; u++) {\n\t\t\t\t\tfor (let v = 0; v < this._subDivisions; v++) {\n\t\t\t\t\t\t// 不知道为啥 x 和 y 要反过来\n\t\t\t\t\t\t// 总之能跑就行(雾)\n\t\t\t\t\t\tconst vx = y * this._subDivisions + u;\n\t\t\t\t\t\tconst vy = x * this._subDivisions + v;\n\t\t\t\t\t\tconst [px, py] = surfacePoint(\n\t\t\t\t\t\t\tu / subDivM1,\n\t\t\t\t\t\t\tv / subDivM1,\n\t\t\t\t\t\t\tX,\n\t\t\t\t\t\t\tY,\n\t\t\t\t\t\t\tthis.tmpV2,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.setVertexPos(vx, vy, px, py);\n\t\t\t\t\t\tthis.setVertexUV(vx, vy, sX + v / tH, 1 - sY - u / tW);\n\t\t\t\t\t\tconst [pr, pg, pb] = colorPoint(\n\t\t\t\t\t\t\tu / subDivM1,\n\t\t\t\t\t\t\tv / subDivM1,\n\t\t\t\t\t\t\tR,\n\t\t\t\t\t\t\tG,\n\t\t\t\t\t\t\tB,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.setVertexColor(vx, vy, pr, pg, pb);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.update();\n\t}\n}\n\nclass GLTexture implements Disposable {\n\treadonly tex: WebGLTexture;\n\n\tconstructor(\n\t\tprivate gl: WebGLRenderingContext,\n\t\talbumImageData: ImageData,\n\t) {\n\t\tconst albumTexture = gl.createTexture();\n\t\tif (!albumTexture) throw new Error(\"Failed to create texture\");\n\t\tthis.tex = albumTexture;\n\t\tgl.activeTexture(gl.TEXTURE0);\n\t\tgl.bindTexture(gl.TEXTURE_2D, albumTexture);\n\t\tgl.texImage2D(\n\t\t\tgl.TEXTURE_2D,\n\t\t\t0,\n\t\t\tgl.RGBA,\n\t\t\tgl.RGBA,\n\t\t\tgl.UNSIGNED_BYTE,\n\t\t\talbumImageData,\n\t\t);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.MIRRORED_REPEAT);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.MIRRORED_REPEAT);\n\t}\n\n\tbind() {\n\t\tthis.gl.bindTexture(this.gl.TEXTURE_2D, this.tex);\n\t}\n\n\tdispose(): void {\n\t\tthis.gl.deleteTexture(this.tex);\n\t}\n}\n\nfunction createOffscreenCanvas(width: number, height: number) {\n\tif (\"OffscreenCanvas\" in window) return new OffscreenCanvas(width, height);\n\tconst canvas = document.createElement(\"canvas\");\n\tcanvas.width = width;\n\tcanvas.height = height;\n\treturn canvas;\n}\n\ninterface MeshState {\n\tmesh: BHPMesh;\n\ttexture: GLTexture;\n\talpha: number;\n}\n\nexport class MeshGradientRenderer extends BaseRenderer {\n\tprivate gl: RenderingContext;\n\tprivate lastFrameTime = 0;\n\tprivate frameTime = 0;\n\tprivate lastTickTime = 0;\n\tprivate volume = 0;\n\tprivate tickHandle = 0;\n\tprivate maxFPS = 60;\n\tprivate paused = false;\n\tprivate staticMode = false;\n\tprivate mainProgram: GLProgram;\n\tprivate blendProgram: GLProgram;\n\tprivate manualControl = false;\n\tprivate reduceImageSizeCanvas = createOffscreenCanvas(\n\t\t32,\n\t\t32,\n\t) as HTMLCanvasElement;\n\tprivate targetSize = Vec2.fromValues(0, 0);\n\tprivate currentSize = Vec2.fromValues(0, 0);\n\tprivate fullScreenMesh: Mesh;\n\tprivate drawFrameBuffer: WebGLFramebuffer;\n\tprivate drawFrameBufferTexture: WebGLTexture;\n\tprivate meshStates: MeshState[] = [];\n\tprivate _disposed = false;\n\n\tsetManualControl(enable: boolean) {\n\t\tthis.manualControl = enable;\n\t}\n\n\tsetWireFrame(enable: boolean) {\n\t\tfor (const state of this.meshStates) {\n\t\t\tstate.mesh.setWireFrame(enable);\n\t\t}\n\t}\n\n\tgetControlPoint(x: number, y: number): ControlPoint | undefined {\n\t\treturn this.meshStates[this.meshStates.length - 1]?.mesh?.getControlPoint(\n\t\t\tx,\n\t\t\ty,\n\t\t);\n\t}\n\n\tresizeControlPoints(width: number, height: number) {\n\t\treturn this.meshStates[\n\t\t\tthis.meshStates.length - 1\n\t\t]?.mesh?.resizeControlPoints(width, height);\n\t}\n\n\tresetSubdivition(subDivisions: number) {\n\t\treturn this.meshStates[this.meshStates.length - 1]?.mesh?.resetSubdivition(\n\t\t\tsubDivisions,\n\t\t);\n\t}\n\n\tprivate onTick(tickTime: number) {\n\t\tthis.tickHandle = 0;\n\t\tif (this.paused) return;\n\t\tif (this._disposed) return;\n\n\t\tif (Number.isNaN(this.lastFrameTime)) {\n\t\t\tthis.lastFrameTime = tickTime;\n\t\t}\n\t\tconst delta = tickTime - this.lastTickTime;\n\t\tconst frameDelta = tickTime - this.lastFrameTime;\n\t\tthis.lastFrameTime = tickTime;\n\t\tif (delta < 1000 / this.maxFPS) {\n\t\t\tthis.requestTick();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.frameTime += frameDelta;\n\n\t\tif (!(this.onRedraw(this.frameTime, frameDelta) && this.staticMode)) {\n\t\t\tthis.requestTick();\n\t\t} else if (this.staticMode) {\n\t\t\tthis.lastFrameTime = Number.NaN;\n\t\t}\n\n\t\tthis.lastTickTime = tickTime;\n\t}\n\n\tprivate checkIfResize() {\n\t\tconst [tW, tH] = [this.targetSize.x, this.targetSize.y];\n\t\tconst [cW, cH] = [this.currentSize.x, this.currentSize.y];\n\t\tif (tW !== cW || tH !== cH) {\n\t\t\tsuper.onResize(tW, tH);\n\t\t\tconst gl = this.gl;\n\t\t\tgl.bindTexture(gl.TEXTURE_2D, this.drawFrameBufferTexture);\n\t\t\tgl.texImage2D(\n\t\t\t\tgl.TEXTURE_2D,\n\t\t\t\t0,\n\t\t\t\tgl.RGBA,\n\t\t\t\ttW,\n\t\t\t\ttH,\n\t\t\t\t0,\n\t\t\t\tgl.RGBA,\n\t\t\t\tthis.supportTextureFloat ? gl.FLOAT : gl.UNSIGNED_BYTE,\n\t\t\t\tnull,\n\t\t\t);\n\t\t\tgl.bindFramebuffer(gl.FRAMEBUFFER, this.drawFrameBuffer);\n\t\t\tgl.viewport(0, 0, tW, tH);\n\t\t\tgl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\t\t\tgl.viewport(0, 0, tW, tH);\n\t\t\tthis.currentSize.x = tW;\n\t\t\tthis.currentSize.y = tH;\n\t\t}\n\t}\n\n\tprivate onRedraw(tickTime: number, delta: number) {\n\t\tconst latestMeshState = this.meshStates[this.meshStates.length - 1];\n\t\tlet canBeStatic = false;\n\t\tif (latestMeshState) {\n\t\t\tlatestMeshState.mesh.bind();\n\t\t\t// 考虑到我们并不逐帧更新网格控制点,因此也不需要重复调用 updateMesh\n\t\t\tif (this.manualControl) latestMeshState.mesh.updateMesh();\n\t\t\tlatestMeshState.alpha = Math.min(1, latestMeshState.alpha + delta / 500);\n\t\t\tif (latestMeshState.alpha >= 1) {\n\t\t\t\tconst deleted = this.meshStates.splice(0, this.meshStates.length - 1);\n\t\t\t\tfor (const state of deleted) {\n\t\t\t\t\tstate.mesh.dispose();\n\t\t\t\t\tstate.texture.dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.meshStates.length === 1 && latestMeshState.alpha >= 1) {\n\t\t\t\tcanBeStatic = true;\n\t\t\t}\n\t\t}\n\n\t\tconst gl = this.gl;\n\t\tgl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\t\tgl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\t\tgl.clear(gl.COLOR_BUFFER_BIT);\n\t\tthis.checkIfResize();\n\n\t\tthis.mainProgram.use();\n\t\tgl.activeTexture(gl.TEXTURE0);\n\t\tthis.mainProgram.setUniform1f(\"u_time\", tickTime / 10000);\n\t\tthis.mainProgram.setUniform1f(\n\t\t\t\"u_aspect\",\n\t\t\tthis.manualControl ? 1 : this.canvas.width / this.canvas.height,\n\t\t);\n\t\tthis.mainProgram.setUniform1i(\"u_texture\", 0);\n\n\t\tthis.mainProgram.setUniform1f(\"u_volume\", this.volume);\n\t\tfor (const state of this.meshStates) {\n\t\t\tgl.bindFramebuffer(gl.FRAMEBUFFER, this.drawFrameBuffer);\n\t\t\tgl.clear(gl.COLOR_BUFFER_BIT);\n\t\t\tthis.mainProgram.use();\n\t\t\tstate.texture.bind();\n\t\t\tstate.mesh.bind();\n\t\t\tstate.mesh.draw();\n\n\t\t\tgl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\t\t\tgl.activeTexture(gl.TEXTURE0);\n\t\t\tgl.bindTexture(gl.TEXTURE_2D, this.drawFrameBufferTexture);\n\t\t\tthis.blendProgram.use();\n\t\t\tthis.blendProgram.setUniform1f(\"u_alpha\", state.alpha);\n\t\t\tthis.blendProgram.setUniform1i(\"u_texture\", 0);\n\t\t\tthis.fullScreenMesh.bind();\n\t\t\tthis.fullScreenMesh.draw();\n\t\t}\n\n\t\tgl.flush();\n\n\t\treturn canBeStatic;\n\t}\n\n\tprivate onTickBinded = this.onTick.bind(this);\n\n\tprivate requestTick() {\n\t\tif (this._disposed) return;\n\t\tif (this.tickHandle === 0)\n\t\t\tthis.tickHandle = requestAnimationFrame(this.onTickBinded);\n\t}\n\n\tprivate supportTextureFloat = true;\n\n\tconstructor(canvas: HTMLCanvasElement) {\n\t\tsuper(canvas);\n\n\t\tconst gl = canvas.getContext(\"webgl\");\n\t\tif (!gl) throw new Error(\"WebGL not supported\");\n\t\tif (!gl.getExtension(\"EXT_color_buffer_float\"))\n\t\t\tconsole.warn(\"EXT_color_buffer_float not supported\");\n\t\tif (!gl.getExtension(\"EXT_float_blend\")) {\n\t\t\tconsole.warn(\"EXT_float_blend not supported\");\n\t\t\tthis.supportTextureFloat = false;\n\t\t}\n\t\tif (!gl.getExtension(\"OES_texture_float_linear\"))\n\t\t\tconsole.warn(\"OES_texture_float_linear not supported\");\n\t\tif (!gl.getExtension(\"OES_texture_float\")) {\n\t\t\tthis.supportTextureFloat = false;\n\t\t\tconsole.warn(\"OES_texture_float not supported\");\n\t\t}\n\n\t\tthis.gl = gl;\n\t\tgl.enable(gl.BLEND);\n\t\tgl.enable(gl.DEPTH_TEST);\n\t\tgl.depthFunc(gl.ALWAYS);\n\n\t\tthis.mainProgram = new GLProgram(\n\t\t\tgl,\n\t\t\tmeshVertShader,\n\t\t\tmeshFragShader,\n\t\t\t\"main-program-mg\",\n\t\t);\n\n\t\tthis.blendProgram = new GLProgram(\n\t\t\tgl,\n\t\t\tblendVertShader,\n\t\t\tblendFragShader,\n\t\t\t\"blend-program-mg\",\n\t\t);\n\n\t\tthis.fullScreenMesh = new Mesh(\n\t\t\tgl,\n\t\t\tthis.blendProgram.attrs.a_pos,\n\t\t\tthis.blendProgram.attrs.a_color,\n\t\t\tthis.blendProgram.attrs.a_uv,\n\t\t);\n\t\tthis.fullScreenMesh.update();\n\n\t\tconst drawFrameBufferTexture = gl.createTexture();\n\t\tif (!drawFrameBufferTexture)\n\t\t\tthrow new Error(\"Failed to create framebuffer texture\");\n\t\tthis.drawFrameBufferTexture = drawFrameBufferTexture;\n\t\tgl.bindTexture(gl.TEXTURE_2D, drawFrameBufferTexture);\n\t\tgl.texImage2D(\n\t\t\tgl.TEXTURE_2D,\n\t\t\t0,\n\t\t\tgl.RGBA,\n\t\t\tcanvas.width,\n\t\t\tcanvas.height,\n\t\t\t0,\n\t\t\tgl.RGBA,\n\t\t\tthis.supportTextureFloat ? gl.FLOAT : gl.UNSIGNED_BYTE,\n\t\t\tnull,\n\t\t);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\t\tconst drawFrameBuffer = gl.createFramebuffer();\n\t\tif (!drawFrameBuffer) throw new Error(\"Failed to create framebuffer\");\n\t\tthis.drawFrameBuffer = drawFrameBuffer;\n\t\tgl.bindFramebuffer(gl.FRAMEBUFFER, drawFrameBuffer);\n\t\tgl.framebufferTexture2D(\n\t\t\tgl.FRAMEBUFFER,\n\t\t\tgl.COLOR_ATTACHMENT0,\n\t\t\tgl.TEXTURE_2D,\n\t\t\tdrawFrameBufferTexture,\n\t\t\t0,\n\t\t);\n\n\t\tthis.requestTick();\n\t}\n\n\tprotected override onResize(width: number, height: number): void {\n\t\tthis.targetSize.x = Math.ceil(width);\n\t\tthis.targetSize.y = Math.ceil(height);\n\t}\n\n\toverride setStaticMode(enable: boolean): void {\n\t\tthis.staticMode = enable;\n\t\tthis.lastFrameTime = performance.now();\n\t\tthis.requestTick();\n\t}\n\toverride setFPS(fps: number): void {\n\t\tthis.maxFPS = fps;\n\t}\n\toverride pause(): void {\n\t\tif (this.tickHandle) {\n\t\t\tcancelAnimationFrame(this.tickHandle);\n\t\t\tthis.tickHandle = 0;\n\t\t}\n\t\tthis.paused = true;\n\t}\n\toverride resume(): void {\n\t\tthis.paused = false;\n\t\tthis.requestTick();\n\t}\n\toverride async setAlbum(\n\t\talbumSource: string | HTMLImageElement | HTMLVideoElement,\n\t\tisVideo?: boolean,\n\t): Promise<void> {\n\t\tif (typeof albumSource === \"string\" && albumSource.trim().length === 0)\n\t\t\tthrow new Error(\"Empty album url\");\n\t\tlet res: HTMLImageElement | HTMLVideoElement | null = null;\n\t\tlet remainRetryTimes = 5;\n\t\twhile (!res && remainRetryTimes > 0) {\n\t\t\ttry {\n\t\t\t\tif (typeof albumSource === \"string\") {\n\t\t\t\t\tres = await loadResourceFromUrl(albumSource, isVideo);\n\t\t\t\t} else {\n\t\t\t\t\tres = await loadResourceFromElement(albumSource);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`failed on loading album resource, retrying (${remainRetryTimes})`,\n\t\t\t\t\t{\n\t\t\t\t\t\talbumSource,\n\t\t\t\t\t\terror,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tremainRetryTimes--;\n\t\t\t}\n\t\t}\n\t\tif (!res) return;\n\t\t// resize image\n\t\tconst c = this.reduceImageSizeCanvas;\n\t\tconst ctx = c.getContext(\"2d\", {\n\t\t\twillReadFrequently: true,\n\t\t});\n\t\tif (!ctx) throw new Error(\"Failed to create canvas context\");\n\t\tctx.clearRect(0, 0, c.width, c.height);\n\t\t// Safari 不支持 filter\n\t\t// ctx.filter = baseFilter;\n\t\tconst imgw =\n\t\t\tres instanceof HTMLVideoElement ? res.videoWidth : res.naturalWidth;\n\t\tconst imgh =\n\t\t\tres instanceof HTMLVideoElement ? res.videoHeight : res.naturalHeight;\n\t\tif (imgw * imgh === 0) throw new Error(\"Invalid image size\");\n\t\tctx.drawImage(res, 0, 0, imgw, imgh, 0, 0, c.width, c.height);\n\n\t\tconst imageData = ctx.getImageData(0, 0, c.width, c.height);\n\t\tcontrastImage(imageData, 0.4);\n\t\tsaturateImage(imageData, 3.0);\n\t\tcontrastImage(imageData, 1.7);\n\t\tbrightnessImage(imageData, 0.75);\n\t\tblurImage(imageData, 2, 4);\n\n\t\tif (this.manualControl && this.meshStates.length > 0) {\n\t\t\tthis.meshStates[0].texture.dispose();\n\t\t\tthis.meshStates[0].texture = new GLTexture(this.gl, imageData);\n\t\t} else {\n\t\t\tconst newMesh = new BHPMesh(\n\t\t\t\tthis.gl,\n\t\t\t\tthis.mainProgram.attrs.a_pos,\n\t\t\t\tthis.mainProgram.attrs.a_color,\n\t\t\t\tthis.mainProgram.attrs.a_uv,\n\t\t\t);\n\t\t\tnewMesh.resetSubdivition(15);\n\n\t\t\tconst chosenPreset =\n\t\t\t\tCONTROL_POINT_PRESETS[\n\t\t\t\t\tMath.floor(Math.random() * CONTROL_POINT_PRESETS.length)\n\t\t\t\t];\n\t\t\tnewMesh.resizeControlPoints(chosenPreset.width, chosenPreset.height);\n\t\t\tconst uPower = 2 / (chosenPreset.width - 1);\n\t\t\tconst vPower = 2 / (chosenPreset.height - 1);\n\t\t\tfor (const cp of chosenPreset.conf) {\n\t\t\t\tconst p = newMesh.getControlPoint(cp.cx, cp.cy);\n\t\t\t\tp.location.x = cp.x;\n\t\t\t\tp.location.y = cp.y;\n\t\t\t\tp.uRot = (cp.ur * Math.PI) / 180;\n\t\t\t\tp.vRot = (cp.vr * Math.PI) / 180;\n\t\t\t\tp.uScale = uPower * cp.up;\n\t\t\t\tp.vScale = vPower * cp.vp;\n\t\t\t}\n\n\t\t\tnewMesh.updateMesh();\n\n\t\t\tconst albumTexture = new GLTexture(this.gl, imageData);\n\t\t\tconst newState: MeshState = {\n\t\t\t\tmesh: newMesh,\n\t\t\t\ttexture: albumTexture,\n\t\t\t\talpha: 0,\n\t\t\t};\n\t\t\tthis.meshStates.push(newState);\n\t\t}\n\n\t\tthis.requestTick();\n\t}\n\toverride setLowFreqVolume(volume: number): void {\n\t\tthis.volume = volume / 10;\n\t}\n\toverride setHasLyric(_hasLyric: boolean): void {\n\t\t// 不再考虑实现\n\t}\n\n\toverride dispose(): void {\n\t\tsuper.dispose();\n\t\tif (this.tickHandle) {\n\t\t\tcancelAnimationFrame(this.tickHandle);\n\t\t\tthis.tickHandle = 0;\n\t\t}\n\t\tthis._disposed = true;\n\t\tthis.mainProgram.dispose();\n\t\tthis.blendProgram.dispose();\n\t\tthis.fullScreenMesh.dispose();\n\t\tthis.gl.deleteFramebuffer(this.drawFrameBuffer);\n\t\tthis.gl.deleteTexture(this.drawFrameBufferTexture);\n\t\tfor (const state of this.meshStates) {\n\t\t\tstate.mesh.dispose();\n\t\t\tstate.texture.dispose();\n\t\t}\n\t}\n}\n","/**\n * @fileoverview\n * 一个播放歌词的组件\n * @author SteveXMH\n */\n\nexport { AbstractBaseRenderer, BaseRenderer } from \"./base\";\nimport { AbstractBaseRenderer, BaseRenderer } from \"./base\";\nexport { PixiRenderer } from \"./pixi-renderer\";\nexport { MeshGradientRenderer } from \"./mesh-renderer\";\n\nexport class BackgroundRender<Renderer extends BaseRenderer>\n\timplements AbstractBaseRenderer\n{\n\tprivate element: HTMLCanvasElement;\n\tprivate renderer: Renderer;\n\tconstructor(renderer: Renderer, canvas: HTMLCanvasElement) {\n\t\tthis.renderer = renderer;\n\n\t\tthis.element = canvas;\n\t\tcanvas.style.pointerEvents = \"none\";\n\t\tcanvas.style.zIndex = \"-1\";\n\t\tcanvas.style.contain = \"strict\";\n\t}\n\n\tstatic new<Renderer extends BaseRenderer>(type: {\n\t\tnew (canvas: HTMLCanvasElement): Renderer;\n\t}): BackgroundRender<Renderer> {\n\t\tconst canvas = document.createElement(\"canvas\");\n\t\treturn new BackgroundRender(new type(canvas), canvas);\n\t}\n\n\tsetRenderScale(scale: number): void {\n\t\tthis.renderer.setRenderScale(scale);\n\t}\n\n\tsetFlowSpeed(speed: number): void {\n\t\tthis.renderer.setFlowSpeed(speed);\n\t}\n\tsetStaticMode(enable: boolean): void {\n\t\tthis.renderer.setStaticMode(enable);\n\t}\n\tsetFPS(fps: number): void {\n\t\tthis.renderer.setFPS(fps);\n\t}\n\tpause(): void {\n\t\tthis.renderer.pause();\n\t}\n\tresume(): void {\n\t\tthis.renderer.resume();\n\t}\n\tsetLowFreqVolume(volume: number): void {\n\t\tthis.renderer.setLowFreqVolume(volume);\n\t}\n\tsetHasLyric(hasLyric: boolean): void {\n\t\tthis.renderer.setHasLyric(hasLyric);\n\t}\n\tsetAlbum(\n\t\talbumSource: string | HTMLImageElement | HTMLVideoElement,\n\t\tisVideo?: boolean,\n\t): Promise<void> {\n\t\treturn this.renderer.setAlbum(albumSource, isVideo);\n\t}\n\tgetElement() {\n\t\treturn this.element;\n\t}\n\tdispose() {\n\t\tthis.renderer.dispose();\n\t\tthis.element.remove();\n\t}\n}\n","export const VOID = -1;\nexport const PRIMITIVE = 0;\nexport const ARRAY = 1;\nexport const OBJECT = 2;\nexport const DATE = 3;\nexport const REGEXP = 4;\nexport const MAP = 5;\nexport const SET = 6;\nexport const ERROR = 7;\nexport const BIGINT = 8;\n// export const SYMBOL = 9;\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n const as = (out, index) => {\n $.set(index, out);\n return out;\n };\n\n const unpair = index => {\n if ($.has(index))\n return $.get(index);\n\n const [type, value] = _[index];\n switch (type) {\n case PRIMITIVE:\n case VOID:\n return as(value, index);\n case ARRAY: {\n const arr = as([], index);\n for (const index of value)\n arr.push(unpair(index));\n return arr;\n }\n case OBJECT: {\n const object = as({}, index);\n for (const [key, index] of value)\n object[unpair(key)] = unpair(index);\n return object;\n }\n case DATE:\n return as(new Date(value), index);\n case REGEXP: {\n const {source, flags} = value;\n return as(new RegExp(source, flags), index);\n }\n case MAP: {\n const map = as(new Map, index);\n for (const [key, index] of value)\n map.set(unpair(key), unpair(index));\n return map;\n }\n case SET: {\n const set = as(new Set, index);\n for (const index of value)\n set.add(unpair(index));\n return set;\n }\n case ERROR: {\n const {name, message} = value;\n return as(new env[name](message), index);\n }\n case BIGINT:\n return as(BigInt(value), index);\n case 'BigInt':\n return as(Object(BigInt(value)), index);\n }\n return as(new env[type](value), index);\n };\n\n return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n const type = typeof value;\n if (type !== 'object' || !value)\n return [PRIMITIVE, type];\n\n const asString = toString.call(value).slice(8, -1);\n switch (asString) {\n case 'Array':\n return [ARRAY, EMPTY];\n case 'Object':\n return [OBJECT, EMPTY];\n case 'Date':\n return [DATE, EMPTY];\n case 'RegExp':\n return [REGEXP, EMPTY];\n case 'Map':\n return [MAP, EMPTY];\n case 'Set':\n return [SET, EMPTY];\n }\n\n if (asString.includes('Array'))\n return [ARRAY, asString];\n\n if (asString.includes('Error'))\n return [ERROR, asString];\n\n return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n TYPE === PRIMITIVE &&\n (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n const as = (out, value) => {\n const index = _.push(out) - 1;\n $.set(value, index);\n return index;\n };\n\n const pair = value => {\n if ($.has(value))\n return $.get(value);\n\n let [TYPE, type] = typeOf(value);\n switch (TYPE) {\n case PRIMITIVE: {\n let entry = value;\n switch (type) {\n case 'bigint':\n TYPE = BIGINT;\n entry = value.toString();\n break;\n case 'function':\n case 'symbol':\n if (strict)\n throw new TypeError('unable to serialize ' + type);\n entry = null;\n break;\n case 'undefined':\n return as([VOID], value);\n }\n return as([TYPE, entry], value);\n }\n case ARRAY: {\n if (type)\n return as([type, [...value]], value);\n \n const arr = [];\n const index = as([TYPE, arr], value);\n for (const entry of value)\n arr.push(pair(entry));\n return index;\n }\n case OBJECT: {\n if (type) {\n switch (type) {\n case 'BigInt':\n return as([type, value.toString()], value);\n case 'Boolean':\n case 'Number':\n case 'String':\n return as([type, value.valueOf()], value);\n }\n }\n\n if (json && ('toJSON' in value))\n return pair(value.toJSON());\n\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const key of keys(value)) {\n if (strict || !shouldSkip(typeOf(value[key])))\n entries.push([pair(key), pair(value[key])]);\n }\n return index;\n }\n case DATE:\n return as([TYPE, value.toISOString()], value);\n case REGEXP: {\n const {source, flags} = value;\n return as([TYPE, {source, flags}], value);\n }\n case MAP: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const [key, entry] of value) {\n if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n entries.push([pair(key), pair(entry)]);\n }\n return index;\n }\n case SET: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const entry of value) {\n if (strict || !shouldSkip(typeOf(entry)))\n entries.push(pair(entry));\n }\n return index;\n }\n }\n\n const {message} = value;\n return as([TYPE, {name: type, message}], value);\n };\n\n return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n * if `true`, will not throw errors on incompatible types, and behave more\n * like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n const _ = [];\n return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n /* c8 ignore start */\n (any, options) => (\n options && ('json' in options || 'lossy' in options) ?\n deserialize(serialize(any, options)) : structuredClone(any)\n ) :\n (any, options) => deserialize(serialize(any, options));\n /* c8 ignore stop */\n\nexport {deserialize, serialize};\n","// biome-ignore lint/complexity/noBannedTypes: for debounce function\nexport function debounce<T extends Function>(cb: T, wait = 20) {\n\tlet h = 0;\n\t// biome-ignore lint/suspicious/noExplicitAny: function can be any\n\tconst callable = (...args: any) => {\n\t\tclearTimeout(h);\n\t\th = setTimeout(() => cb(...args), wait);\n\t};\n\treturn callable;\n}\n\n// biome-ignore lint/complexity/noBannedTypes: for debounce function\nexport function debounceFrame<T extends Function>(cb: T, frameTime = 1) {\n\tlet h = 0;\n\tlet ft = frameTime;\n\t// biome-ignore lint/suspicious/noExplicitAny: function can be any\n\tconst callable = (...args: any) => {\n\t\tft = frameTime;\n\t\tcancelAnimationFrame(h);\n\t\tconst onCB = () => {\n\t\t\tif (--ft <= 0) {\n\t\t\t\tcb(...args);\n\t\t\t} else {\n\t\t\t\th = requestAnimationFrame(onCB);\n\t\t\t}\n\t\t};\n\t\th = requestAnimationFrame(onCB);\n\t};\n\treturn callable;\n}\n","export const eqSet: <T>(xs: Set<T>, ys: Set<T>) => boolean = (\n\txs,\n\tys,\n): boolean => xs.size === ys.size && [...xs].every((x) => ys.has(x));\n","export function derivative(f: (x: number) => number) {\n\tconst h = 0.001;\n\treturn (x: number) => (f(x + h) - f(x - h)) / (2 * h);\n}\n\nexport function getVelocity(f: (t: number) => number): (t: number) => number {\n\treturn derivative(f);\n}\n","import { getVelocity } from \"./derivative\";\n\n/** MIT License github.com/pushkine/ */\nexport interface SpringParams {\n\tmass: number; // = 1.0\n\tdamping: number; // = 10.0\n\tstiffness: number; // = 100.0\n\tsoft: boolean; // = false\n}\n\ntype seconds = number;\n\nexport class Spring {\n\tprivate currentPosition = 0;\n\tprivate targetPosition = 0;\n\tprivate currentTime = 0;\n\tprivate params: Partial<SpringParams> = {};\n\tprivate currentSolver: (t: seconds) => number;\n\tprivate getV: (t: seconds) => number;\n\tprivate getV2: (t: seconds) => number;\n\tprivate queueParams:\n\t\t| (Partial<SpringParams> & {\n\t\t\t\ttime: number;\n\t\t })\n\t\t| undefined;\n\tprivate queuePosition:\n\t\t| {\n\t\t\t\ttime: number;\n\t\t\t\tposition: number;\n\t\t }\n\t\t| undefined;\n\tconstructor(currentPosition = 0) {\n\t\tthis.targetPosition = currentPosition;\n\t\tthis.currentPosition = this.targetPosition;\n\t\tthis.currentSolver = () => this.targetPosition;\n\t\tthis.getV = () => 0;\n\t\tthis.getV2 = () => 0;\n\t}\n\tprivate resetSolver() {\n\t\tconst curV = this.getV(this.currentTime);\n\t\tthis.currentTime = 0;\n\t\tthis.currentSolver = solveSpring(\n\t\t\tthis.currentPosition,\n\t\t\tcurV,\n\t\t\tthis.targetPosition,\n\t\t\t0,\n\t\t\tthis.params,\n\t\t);\n\t\tthis.getV = getVelocity(this.currentSolver);\n\t\tthis.getV2 = getVelocity(this.getV);\n\t}\n\tarrived() {\n\t\treturn (\n\t\t\tMath.abs(this.targetPosition - this.currentPosition) < 0.01 &&\n\t\t\tthis.getV(this.currentTime) < 0.01 &&\n\t\t\tthis.getV2(this.currentTime) < 0.01 &&\n\t\t\tthis.queueParams === undefined &&\n\t\t\tthis.queuePosition === undefined\n\t\t);\n\t}\n\tsetPosition(targetPosition: number) {\n\t\tthis.targetPosition = targetPosition;\n\t\tthis.currentPosition = targetPosition;\n\t\tthis.currentSolver = () => this.targetPosition;\n\t\tthis.getV = () => 0;\n\t\tthis.getV2 = () => 0;\n\t}\n\tupdate(delta = 0) {\n\t\tthis.currentTime += delta;\n\t\tthis.currentPosition = this.currentSolver(this.currentTime);\n\t\tif (this.queueParams) {\n\t\t\tthis.queueParams.time -= delta;\n\t\t\tif (this.queueParams.time <= 0) {\n\t\t\t\tthis.updateParams({\n\t\t\t\t\t...this.queueParams,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tif (this.queuePosition) {\n\t\t\tthis.queuePosition.time -= delta;\n\t\t\tif (this.queuePosition.time <= 0) {\n\t\t\t\tthis.setTargetPosition(this.queuePosition.position);\n\t\t\t}\n\t\t}\n\t\tif (this.arrived()) {\n\t\t\tthis.setPosition(this.targetPosition);\n\t\t}\n\t}\n\tupdateParams(params: Partial<SpringParams>, delay = 0) {\n\t\tif (delay > 0) {\n\t\t\tthis.queueParams = {\n\t\t\t\t...(this.queuePosition ?? {}),\n\t\t\t\t...params,\n\t\t\t\ttime: delay,\n\t\t\t};\n\t\t} else {\n\t\t\tthis.queuePosition = undefined;\n\t\t\tthis.params = {\n\t\t\t\t...this.params,\n\t\t\t\t...params,\n\t\t\t};\n\t\t\tthis.resetSolver();\n\t\t}\n\t}\n\tsetTargetPosition(targetPosition: number, delay = 0) {\n\t\tif (delay > 0) {\n\t\t\tthis.queuePosition = {\n\t\t\t\t...(this.queuePosition ?? {}),\n\t\t\t\tposition: targetPosition,\n\t\t\t\ttime: delay,\n\t\t\t};\n\t\t} else {\n\t\t\tthis.queuePosition = undefined;\n\t\t\tthis.targetPosition = targetPosition;\n\t\t\tthis.resetSolver();\n\t\t}\n\t}\n\tgetCurrentPosition() {\n\t\treturn this.currentPosition;\n\t}\n}\n\nfunction solveSpring(\n\tfrom: number,\n\tvelocity: number,\n\tto: number,\n\tdelay: seconds = 0,\n\tparams?: Partial<SpringParams>,\n): (t: seconds) => number {\n\tconst soft = params?.soft ?? false;\n\tconst stiffness = params?.stiffness ?? 100;\n\tconst damping = params?.damping ?? 10;\n\tconst mass = params?.mass ?? 1;\n\tconst delta = to - from;\n\tif (soft || 1.0 <= damping / (2.0 * Math.sqrt(stiffness * mass))) {\n\t\tconst angular_frequency = -Math.sqrt(stiffness / mass);\n\t\tconst leftover = -angular_frequency * delta - velocity;\n\t\treturn (t: seconds) => {\n\t\t\tt -= delay;\n\t\t\tif (t < 0) return from;\n\t\t\treturn to - (delta + t * leftover) * Math.E ** (t * angular_frequency);\n\t\t};\n\t}\n\tconst damping_frequency = Math.sqrt(4.0 * mass * stiffness - damping ** 2.0);\n\tconst leftover =\n\t\t(damping * delta - 2.0 * mass * velocity) / damping_frequency;\n\tconst dfm = (0.5 * damping_frequency) / mass;\n\tconst dm = -(0.5 * damping) / mass;\n\treturn (t: seconds) => {\n\t\tt -= delay;\n\t\tif (t < 0) return from;\n\t\treturn (\n\t\t\tto -\n\t\t\t(Math.cos(t * dfm) * delta + Math.sin(t * dfm) * leftover) *\n\t\t\t\tMath.E ** (t * dm)\n\t\t);\n\t};\n}\n","import { LyricPlayer } from \".\";\nimport { Disposable, HasElement } from \"../interfaces\";\nimport { Spring } from \"../utils/spring\";\nimport styles from \"../styles/lyric-player.module.css\";\n\nexport class BottomLineEl implements HasElement, Disposable {\n\tprivate element: HTMLElement = document.createElement(\"div\");\n\tprivate left = 0;\n\tprivate top = 0;\n\tprivate delay = 0;\n\t// 由 LyricPlayer 来设置\n\tlineSize: number[] = [0, 0];\n\treadonly lineTransforms = {\n\t\tposX: new Spring(0),\n\t\tposY: new Spring(0),\n\t};\n\tconstructor(private lyricPlayer: LyricPlayer) {\n\t\tthis.element.setAttribute(\"class\", styles.lyricLine);\n\t\tthis.rebuildStyle();\n\t}\n\tmeasureSize(): [number, number] {\n\t\tconst size: [number, number] = [\n\t\t\tthis.element.clientWidth,\n\t\t\tthis.element.clientHeight,\n\t\t];\n\t\treturn size;\n\t}\n\tprivate lastStyle = \"\";\n\tshow() {\n\t\tthis.rebuildStyle();\n\t}\n\thide() {\n\t\tthis.rebuildStyle();\n\t}\n\trebuildStyle() {\n\t\tlet style = `transform:translate(${this.lineTransforms.posX\n\t\t\t.getCurrentPosition()\n\t\t\t.toFixed(2)}px,${this.lineTransforms.posY\n\t\t\t.getCurrentPosition()\n\t\t\t.toFixed(2)}px);`;\n\t\tif (!this.lyricPlayer.getEnableSpring() && this.isInSight) {\n\t\t\tstyle += `transition-delay:${this.delay}ms;`;\n\t\t}\n\t\tif (style !== this.lastStyle) {\n\t\t\tthis.lastStyle = style;\n\t\t\tthis.element.setAttribute(\"style\", style);\n\t\t}\n\t}\n\tgetElement() {\n\t\treturn this.element;\n\t}\n\tsetTransform(\n\t\tleft: number = this.left,\n\t\ttop: number = this.top,\n\t\tforce = false,\n\t\tdelay = 0,\n\t) {\n\t\tthis.left = left;\n\t\tthis.top = top;\n\t\tthis.delay = (delay * 1000) | 0;\n\t\tif (force || !this.lyricPlayer.getEnableSpring()) {\n\t\t\tif (force) this.element.classList.add(styles.tmpDisableTransition);\n\t\t\tthis.lineTransforms.posX.setPosition(left);\n\t\t\tthis.lineTransforms.posY.setPosition(top);\n\t\t\tif (!this.lyricPlayer.getEnableSpring()) this.show();\n\t\t\telse this.rebuildStyle();\n\t\t\tif (force)\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tthis.element.classList.remove(styles.tmpDisableTransition);\n\t\t\t\t});\n\t\t} else {\n\t\t\tthis.lineTransforms.posX.setTargetPosition(left, delay);\n\t\t\tthis.lineTransforms.posY.setTargetPosition(top, delay);\n\t\t}\n\t}\n\tupdate(delta = 0) {\n\t\tif (!this.lyricPlayer.getEnableSpring()) return;\n\t\tthis.lineTransforms.posX.update(delta);\n\t\tthis.lineTransforms.posY.update(delta);\n\t\tif (this.isInSight) {\n\t\t\tthis.show();\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\tget isInSight() {\n\t\tconst l = this.lineTransforms.posX.getCurrentPosition();\n\t\tconst t = this.lineTransforms.posY.getCurrentPosition();\n\t\tconst r = l + this.lineSize[0];\n\t\tconst b = t + this.lineSize[1];\n\t\tconst pr = this.lyricPlayer.size[0];\n\t\tconst pb = this.lyricPlayer.size[1];\n\t\treturn !(l > pr || t > pb || r < 0 || b < 0);\n\t}\n\tdispose(): void {\n\t\tthis.element.remove();\n\t}\n}\n","import type { LyricPlayer } from \".\";\nimport type { Disposable, HasElement } from \"../interfaces\";\nimport styles from \"../styles/lyric-player.module.css\";\n\nfunction easeInOutBack(x: number): number {\n\tconst c1 = 1.70158;\n\tconst c2 = c1 * 1.525;\n\n\treturn x < 0.5\n\t\t? (Math.pow(2 * x, 2) * ((c2 + 1) * 2 * x - c2)) / 2\n\t\t: (Math.pow(2 * x - 2, 2) * ((c2 + 1) * (x * 2 - 2) + c2) + 2) / 2;\n}\n\nfunction easeOutExpo(x: number): number {\n\treturn x === 1 ? 1 : 1 - 2 ** (-10 * x);\n}\n\nconst clamp = (min: number, cur: number, max: number) =>\n\tMath.max(min, Math.min(cur, max));\n\nexport class InterludeDots implements HasElement, Disposable {\n\tprivate element: HTMLElement = document.createElement(\"div\");\n\tprivate dot0: HTMLElement = document.createElement(\"span\");\n\tprivate dot1: HTMLElement = document.createElement(\"span\");\n\tprivate dot2: HTMLElement = document.createElement(\"span\");\n\tprivate left = 0;\n\tprivate top = 0;\n\tprivate scale = 1;\n\tprivate playing = true;\n\tprivate lastStyle = \"\";\n\tprivate currentInterlude?: [number, number];\n\tprivate currentTime = 0;\n\tprivate interludeTime = 0;\n\tprivate targetBreatheDuration = 1500;\n\tconstructor(private readonly lyricPlayer: LyricPlayer) {\n\t\tthis.element.className = styles.interludeDots;\n\t\tthis.element.appendChild(this.dot0);\n\t\tthis.element.appendChild(this.dot1);\n\t\tthis.element.appendChild(this.dot2);\n\t}\n\tgetElement() {\n\t\treturn this.element;\n\t}\n\tsetTransform(left: number = this.left, top: number = this.top) {\n\t\tthis.left = left;\n\t\tthis.top = top;\n\t\tthis.update();\n\t}\n\tsetInterlude(interlude?: [number, number]) {\n\t\tthis.currentInterlude = interlude;\n\t\tthis.currentTime = interlude?.[0] ?? 0;\n\t}\n\tpause() {\n\t\tthis.playing = false;\n\t}\n\tresume() {\n\t\tthis.playing = true;\n\t}\n\tupdate(delta = 0) {\n\t\tif (!this.playing) return;\n\t\tthis.currentTime += delta;\n\t\tlet curStyle = \"\";\n\n\t\tcurStyle += `transform:translate(${this.left.toFixed(\n\t\t\t2,\n\t\t)}px, ${this.top.toFixed(2)}px)`;\n\n\t\t// 计算缩放大小\n\n\t\tif (this.currentInterlude) {\n\t\t\tconst interludeDuration =\n\t\t\t\tthis.currentInterlude[1] - this.currentInterlude[0];\n\t\t\tconst currentDuration = this.currentTime - this.currentInterlude[0];\n\t\t\tif (currentDuration <= interludeDuration) {\n\t\t\t\tconst breatheDuration =\n\t\t\t\t\tinterludeDuration /\n\t\t\t\t\tMath.ceil(interludeDuration / this.targetBreatheDuration);\n\t\t\t\tlet scale = 1;\n\t\t\t\tlet globalOpacity = 1;\n\n\t\t\t\tscale *=\n\t\t\t\t\tMath.sin(1.5 * Math.PI - (currentDuration / breatheDuration) * 2) /\n\t\t\t\t\t\t20 +\n\t\t\t\t\t1;\n\n\t\t\t\tif (currentDuration < 2000) {\n\t\t\t\t\tscale *= easeOutExpo(currentDuration / 2000);\n\t\t\t\t}\n\n\t\t\t\tif (currentDuration < 500) {\n\t\t\t\t\tglobalOpacity = 0;\n\t\t\t\t} else if (currentDuration < 1000) {\n\t\t\t\t\tglobalOpacity *= (currentDuration - 500) / 500;\n\t\t\t\t}\n\n\t\t\t\tif (interludeDuration - currentDuration < 750) {\n\t\t\t\t\tscale *=\n\t\t\t\t\t\t1 -\n\t\t\t\t\t\teaseInOutBack(\n\t\t\t\t\t\t\t(750 - (interludeDuration - currentDuration)) / 750 / 2,\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (interludeDuration - currentDuration < 375) {\n\t\t\t\t\tglobalOpacity *= clamp(\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t(interludeDuration - currentDuration) / 375,\n\t\t\t\t\t\t1,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst dotsDuration = Math.max(0, interludeDuration - 750);\n\n\t\t\t\tscale = Math.max(0, scale) * 0.7;\n\n\t\t\t\tcurStyle += ` scale(${scale})`;\n\n\t\t\t\tconst dot0Opacity = clamp(\n\t\t\t\t\t0.25,\n\t\t\t\t\t((currentDuration * 3) / dotsDuration) * 0.75,\n\t\t\t\t\t1,\n\t\t\t\t);\n\t\t\t\tconst dot1Opacity = clamp(\n\t\t\t\t\t0.25,\n\t\t\t\t\t(((currentDuration - dotsDuration / 3) * 3) / dotsDuration) * 0.75,\n\t\t\t\t\t1,\n\t\t\t\t);\n\t\t\t\tconst dot2Opacity = clamp(\n\t\t\t\t\t0.25,\n\t\t\t\t\t(((currentDuration - (dotsDuration / 3) * 2) * 3) / dotsDuration) *\n\t\t\t\t\t\t0.75,\n\t\t\t\t\t1,\n\t\t\t\t);\n\n\t\t\t\tthis.dot0.style.opacity = `${clamp(\n\t\t\t\t\t0,\n\t\t\t\t\tMath.max(0, globalOpacity * dot0Opacity),\n\t\t\t\t\t1,\n\t\t\t\t)}`;\n\t\t\t\tthis.dot1.style.opacity = `${clamp(\n\t\t\t\t\t0,\n\t\t\t\t\tMath.max(0, globalOpacity * dot1Opacity),\n\t\t\t\t\t1,\n\t\t\t\t)}`;\n\t\t\t\tthis.dot2.style.opacity = `${clamp(\n\t\t\t\t\t0,\n\t\t\t\t\tMath.max(0, globalOpacity * dot2Opacity),\n\t\t\t\t\t1,\n\t\t\t\t)}`;\n\t\t\t} else {\n\t\t\t\tcurStyle += \" scale(0)\";\n\t\t\t\tthis.dot0.style.opacity = \"0\";\n\t\t\t\tthis.dot1.style.opacity = \"0\";\n\t\t\t\tthis.dot2.style.opacity = \"0\";\n\t\t\t}\n\t\t} else {\n\t\t\tcurStyle += \" scale(0)\";\n\t\t\tthis.dot0.style.opacity = \"0\";\n\t\t\tthis.dot1.style.opacity = \"0\";\n\t\t\tthis.dot2.style.opacity = \"0\";\n\t\t}\n\n\t\tcurStyle += \";\";\n\n\t\tif (this.lastStyle !== curStyle) {\n\t\t\tthis.element.setAttribute(\"style\", curStyle);\n\t\t\tthis.lastStyle = curStyle;\n\t\t}\n\t}\n\tdispose() {\n\t\tthis.element.remove();\n\t}\n}\n","/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\n\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nvar float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\nfunction B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\nfunction C (aA1) { return 3.0 * aA1; }\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }\n\nfunction binarySubdivide (aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\n\nfunction newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\n\nfunction LinearEasing (x) {\n return x;\n}\n\nmodule.exports = function bezier (mX1, mY1, mX2, mY2) {\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if (mX1 === mY1 && mX2 === mY2) {\n return LinearEasing;\n }\n\n // Precompute samples table\n var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n\n function getTForX (aX) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n\n return function BezierEasing (x) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n};\n","// biome-ignore format: matrix\nexport type Matrix4 = [\n\tnumber, number, number, number,\n\tnumber, number, number, number,\n\tnumber, number, number, number,\n\tnumber, number, number, number,\n];\n\nexport function createMatrix4(): Matrix4 {\n\t// biome-ignore format: matrix\n\treturn [\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n ];\n}\n\nexport function scaleMatrix4(\n\tm: Matrix4,\n\tscale = 1,\n\torigin = { x: 0, y: 0 },\n): Matrix4 {\n\tconst [ox, oy] = [origin.x, origin.y];\n\t// biome-ignore format: matrix\n\treturn [\n m[0] * scale , m[1] * scale , m[2] * scale , m[3],\n m[4] * scale , m[5] * scale , m[6] * scale , m[7],\n m[8] * scale , m[9] * scale , m[10] * scale, m[11],\n m[12] - ox * scale + ox, m[13] - oy * scale + oy, m[14] , m[15]\n ];\n}\n\nexport function translateMatrix4(m: Matrix4, x = 0, y = 0, z = 0): Matrix4 {\n\t// biome-ignore format: matrix\n\treturn [\n m[0] , m[1] , m[2] , m[3] ,\n m[4] , m[5] , m[6] , m[7] ,\n m[8] , m[9] , m[10] , m[11],\n m[12] + x, m[13] + y, m[14] + z, m[15]\n ];\n}\n\nexport function matrix4ToCSS(m: Matrix4, fractionDigits = 4): string {\n\tconst format = (n: number, i: number) => n.toFixed(fractionDigits);\n\treturn `matrix3d(${m.map(format).join(\", \")})`;\n}\n","/**\n * @fileoverview\n * @see https://github.com/wilsonpage/fastdom/blob/master/fastdom.js\n */\n\ninterface Task<T> {\n\ttask: () => T;\n\tresolve: (value: T) => void;\n\treject: (reason?: any) => void;\n}\n\nconst measureTasks: Task<any>[] = [];\nconst mutateTasks: Task<any>[] = [];\nlet scheduled = false;\n\nfunction onFlush() {\n\tlet tmp = mutateTasks.shift();\n\twhile (tmp) {\n\t\ttry {\n\t\t\ttmp.resolve(tmp.task());\n\t\t} catch (error) {\n\t\t\ttmp.reject(error);\n\t\t}\n\t\ttmp = mutateTasks.shift();\n\t}\n\ttmp = measureTasks.shift();\n\twhile (tmp) {\n\t\ttry {\n\t\t\ttmp.resolve(tmp.task());\n\t\t} catch (error) {\n\t\t\ttmp.reject(error);\n\t\t}\n\t\ttmp = measureTasks.shift();\n\t}\n\tscheduled = false;\n}\n\nfunction scheduleFlush() {\n\tif (!scheduled) {\n\t\tscheduled = true;\n\t\trequestAnimationFrame(onFlush);\n\t}\n}\n\nexport function measure<T>(callback: () => T): Promise<T> {\n\tconst task: Task<T> = {\n\t\ttask: callback,\n\t\tresolve: () => {},\n\t\treject: () => {},\n\t};\n\tconst promise = new Promise<T>((resolve, reject) => {\n\t\ttask.resolve = resolve;\n\t\ttask.reject = reject;\n\t});\n\tmeasureTasks.push(task);\n\tscheduleFlush();\n\treturn promise;\n}\n\nexport function mutate(callback: () => void) {\n\tconst task: Task<void> = {\n\t\ttask: callback,\n\t\tresolve: () => {},\n\t\treject: () => {},\n\t};\n\tconst promise = new Promise((resolve, reject) => {\n\t\ttask.resolve = resolve;\n\t\ttask.reject = reject;\n\t});\n\tmutateTasks.push(task);\n\tscheduleFlush();\n\treturn promise;\n}\n","import bezier from \"bezier-easing\";\nimport type { LyricPlayer } from \".\";\nimport type {\n\tDisposable,\n\tHasElement,\n\tLyricLine,\n\tLyricWord,\n} from \"../interfaces\";\nimport styles from \"../styles/lyric-player.module.css\";\nimport { createMatrix4, matrix4ToCSS, scaleMatrix4 } from \"../utils/matrix\";\nimport { measure, mutate } from \"../utils/schedule\";\nimport { Spring } from \"../utils/spring\";\n\nconst CJKEXP = /^[\\p{Unified_Ideograph}\\u0800-\\u9FFC]+$/u;\n\ninterface RealWord extends LyricWord {\n\tmainElement: HTMLSpanElement;\n\tsubElements: HTMLSpanElement[];\n\telementAnimations: Animation[];\n\tmaskAnimations: Animation[];\n\twidth: number;\n\theight: number;\n\tpadding: number;\n\tshouldEmphasize: boolean;\n}\n\nconst ANIMATION_FRAME_QUANTITY = 32;\n\nconst norNum = (min: number, max: number) => (x: number) =>\n\tMath.min(1, Math.max(0, (x - min) / (max - min)));\nconst EMP_EASING_MID = 0.5;\nconst beginNum = norNum(0, EMP_EASING_MID);\nconst endNum = norNum(EMP_EASING_MID, 1);\n\nconst bezIn = bezier(0.2, 0.4, 0.58, 1.0);\nconst bezOut = bezier(0.3, 0.0, 0.58, 1.0);\n\nconst makeEmpEasing = (mid: number) => {\n\treturn (x: number) => (x < mid ? bezIn(beginNum(x)) : 1 - bezOut(endNum(x)));\n};\n\nfunction generateFadeGradient(\n\twidth: number,\n\tpadding = 0,\n\tbright = \"rgba(0,0,0,var(--bright-mask-alpha, 1.0))\",\n\tdark = \"rgba(0,0,0,var(--dark-mask-alpha, 1.0))\",\n): [string, number] {\n\tconst totalAspect = 2 + width + padding;\n\tconst widthInTotal = width / totalAspect;\n\tconst leftPos = (1 - widthInTotal) / 2;\n\treturn [\n\t\t`linear-gradient(to right,${bright} ${leftPos * 100}%,${dark} ${\n\t\t\t(leftPos + widthInTotal) * 100\n\t\t}%)`,\n\t\ttotalAspect,\n\t];\n}\n\n// 将输入的单词重新分组,之间没有空格的单词将会组合成一个单词数组\n// 例如输入:[\"Life\", \" \", \"is\", \" a\", \" su\", \"gar so\", \"sweet\"]\n// 应该返回:[\"Life\", \" \", \"is\", \" a\", [\" su\", \"gar\"], \"so\", \"sweet\"]\nfunction chunkAndSplitLyricWords(\n\twords: LyricWord[],\n): (LyricWord | LyricWord[])[] {\n\tconst resplitedWords: LyricWord[] = [];\n\n\tfor (const w of words) {\n\t\tconst realLength = w.word.replace(/\\s/g, \"\").length;\n\t\tconst splited = w.word.split(\" \").filter((v) => v.trim().length > 0);\n\t\tif (splited.length > 1) {\n\t\t\tif (w.word.startsWith(\" \")) {\n\t\t\t\tresplitedWords.push({\n\t\t\t\t\tword: \" \",\n\t\t\t\t\tstartTime: 0,\n\t\t\t\t\tendTime: 0,\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet charPos = 0;\n\t\t\tfor (const s of splited) {\n\t\t\t\tconst word: LyricWord = {\n\t\t\t\t\tword: s,\n\t\t\t\t\tstartTime:\n\t\t\t\t\t\tw.startTime + (charPos / realLength) * (w.endTime - w.startTime),\n\t\t\t\t\tendTime:\n\t\t\t\t\t\tw.startTime +\n\t\t\t\t\t\t((charPos + s.length) / realLength) * (w.endTime - w.startTime),\n\t\t\t\t};\n\t\t\t\tresplitedWords.push(word);\n\t\t\t\tresplitedWords.push({\n\t\t\t\t\tword: \" \",\n\t\t\t\t\tstartTime: 0,\n\t\t\t\t\tendTime: 0,\n\t\t\t\t});\n\t\t\t\tcharPos += s.length;\n\t\t\t}\n\t\t\tif (!w.word.endsWith(\" \")) {\n\t\t\t\tresplitedWords.pop();\n\t\t\t}\n\t\t} else {\n\t\t\tresplitedWords.push({\n\t\t\t\t...w,\n\t\t\t});\n\t\t}\n\t}\n\n\tlet wordChunk: string[] = [];\n\tlet wChunk: LyricWord[] = [];\n\tconst result: (LyricWord | LyricWord[])[] = [];\n\n\tfor (const w of resplitedWords) {\n\t\tconst word = w.word;\n\t\twordChunk.push(word);\n\t\twChunk.push(w);\n\t\tif (word.length > 0 && word.trim().length === 0) {\n\t\t\twordChunk.pop();\n\t\t\twChunk.pop();\n\t\t\tif (wChunk.length === 1) {\n\t\t\t\tresult.push(wChunk[0]);\n\t\t\t} else if (wChunk.length > 1) {\n\t\t\t\tresult.push(wChunk);\n\t\t\t}\n\t\t\tresult.push(w);\n\t\t\twordChunk = [];\n\t\t\twChunk = [];\n\t\t} else if (\n\t\t\t!/^\\s*[^\\s]*\\s*$/.test(wordChunk.join(\"\")) ||\n\t\t\tCJKEXP.test(word)\n\t\t) {\n\t\t\twordChunk.pop();\n\t\t\twChunk.pop();\n\t\t\tif (wChunk.length === 1) {\n\t\t\t\tresult.push(wChunk[0]);\n\t\t\t} else if (wChunk.length > 1) {\n\t\t\t\tresult.push(wChunk);\n\t\t\t}\n\t\t\twordChunk = [word];\n\t\t\twChunk = [w];\n\t\t}\n\t}\n\n\tif (wChunk.length === 1) {\n\t\tresult.push(wChunk[0]);\n\t} else {\n\t\tresult.push(wChunk);\n\t}\n\n\treturn result;\n}\n\n// 果子在对辉光效果的解释是一种强调(emphasized)效果\n// 条件是一个单词时长大于等于 1s 且长度小于等于 7\nexport function shouldEmphasize(word: LyricWord): boolean {\n\treturn (\n\t\tword.endTime - word.startTime >= 1000 &&\n\t\tword.word.trim().length <= 7 &&\n\t\tword.word.trim().length > 1\n\t);\n}\n\nexport class RawLyricLineMouseEvent extends MouseEvent {\n\tconstructor(\n\t\tpublic readonly line: LyricLineEl,\n\t\tevent: MouseEvent,\n\t) {\n\t\tsuper(event.type, event);\n\t}\n}\n\nfunction getScaleFromTransform(transform: string): number {\n\tconst match = transform.match(/matrix\\(([^)]+)\\)/);\n\tif (match) {\n\t\tconst values = match[1].split(\", \");\n\t\tconst scaleX = Number.parseFloat(values[0]);\n\t\tconst scaleY = Number.parseFloat(values[3]);\n\t\treturn (scaleX + scaleY) / 2; // Average of scaleX and scaleY\n\t}\n\treturn 1; // Default scale value if not found\n}\n\ntype MouseEventMap = {\n\t[evt in keyof HTMLElementEventMap]: HTMLElementEventMap[evt] extends MouseEvent\n\t\t? evt\n\t\t: never;\n};\ntype MouseEventTypes = MouseEventMap[keyof MouseEventMap];\ntype MouseEventListener = (\n\tthis: LyricLineEl,\n\tev: RawLyricLineMouseEvent,\n) => void;\n\nexport class LyricLineEl extends EventTarget implements HasElement, Disposable {\n\tprivate element: HTMLElement = document.createElement(\"div\");\n\tprivate left = 0;\n\tprivate top = 0;\n\tprivate scale = 1;\n\tprivate blur = 0;\n\tprivate delay = 0;\n\tprivate splittedWords: RealWord[] = [];\n\t// 由 LyricPlayer 来设置\n\tlineSize: number[] = [0, 0];\n\treadonly lineTransforms = {\n\t\tposX: new Spring(0),\n\t\tposY: new Spring(0),\n\t\tscale: new Spring(100),\n\t};\n\n\tconstructor(\n\t\tprivate lyricPlayer: LyricPlayer,\n\t\tprivate lyricLine: LyricLine = {\n\t\t\twords: [],\n\t\t\ttranslatedLyric: \"\",\n\t\t\tromanLyric: \"\",\n\t\t\tstartTime: 0,\n\t\t\tendTime: 0,\n\t\t\tisBG: false,\n\t\t\tisDuet: false,\n\t\t},\n\t) {\n\t\tsuper();\n\t\tthis._prevParentEl = lyricPlayer.getElement();\n\t\tthis.element.setAttribute(\"class\", styles.lyricLine);\n\t\tif (this.lyricLine.isBG) {\n\t\t\tthis.element.classList.add(styles.lyricBgLine);\n\t\t}\n\t\tif (this.lyricLine.isDuet) {\n\t\t\tthis.element.classList.add(styles.lyricDuetLine);\n\t\t}\n\t\tthis.element.appendChild(document.createElement(\"div\")); // 歌词行\n\t\tthis.element.appendChild(document.createElement(\"div\")); // 翻译行\n\t\tthis.element.appendChild(document.createElement(\"div\")); // 音译行\n\t\tconst main = this.element.children[0] as HTMLDivElement;\n\t\tconst trans = this.element.children[1] as HTMLDivElement;\n\t\tconst roman = this.element.children[2] as HTMLDivElement;\n\t\tmain.setAttribute(\"class\", styles.lyricMainLine);\n\t\ttrans.setAttribute(\"class\", styles.lyricSubLine);\n\t\troman.setAttribute(\"class\", styles.lyricSubLine);\n\t\tthis.rebuildElement();\n\t\tthis.rebuildStyle();\n\t}\n\tprivate listenersMap = new Map<string, Set<MouseEventListener>>();\n\tprivate readonly onMouseEvent = (e: MouseEvent) => {\n\t\tconst wrapped = new RawLyricLineMouseEvent(this, e);\n\t\tfor (const listener of this.listenersMap.get(e.type) ?? []) {\n\t\t\tlistener.call(this, wrapped);\n\t\t}\n\t\tif (!this.dispatchEvent(wrapped) || wrapped.defaultPrevented) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\treturn false;\n\t\t}\n\t};\n\n\taddMouseEventListener(\n\t\ttype: MouseEventTypes,\n\t\tcallback: MouseEventListener | null,\n\t\toptions?: boolean | AddEventListenerOptions | undefined,\n\t): void {\n\t\tif (callback) {\n\t\t\tconst listeners = this.listenersMap.get(type) ?? new Set();\n\t\t\tif (listeners.size === 0)\n\t\t\t\tthis.element.addEventListener(type, this.onMouseEvent, options);\n\t\t\tlisteners.add(callback);\n\t\t\tthis.listenersMap.set(type, listeners);\n\t\t}\n\t}\n\n\tremoveMouseEventListener(\n\t\ttype: MouseEventTypes,\n\t\tcallback: MouseEventListener | null,\n\t\toptions?: boolean | EventListenerOptions | undefined,\n\t): void {\n\t\tif (callback) {\n\t\t\tconst listeners = this.listenersMap.get(type);\n\t\t\tif (listeners) {\n\t\t\t\tlisteners.delete(callback);\n\t\t\t\tif (listeners.size === 0)\n\t\t\t\t\tthis.element.removeEventListener(type, this.onMouseEvent, options);\n\t\t\t}\n\t\t}\n\t}\n\n\tareWordsOnSameLine(word1: RealWord, word2: RealWord) {\n\t\tif (word1?.mainElement && word2?.mainElement) {\n\t\t\tconst word1el = word1.mainElement;\n\t\t\tconst word2el = word2.mainElement;\n\n\t\t\tconst rect1 = word1el.getBoundingClientRect();\n\t\t\tconst rect2 = word2el.getBoundingClientRect();\n\n\t\t\t// 检查两个单词的顶部距离是否相等(或者差值很小)\n\t\t\tconst topDifference = Math.abs(rect1.top - rect2.top);\n\n\t\t\t// 如果顶部距离相差很小,可以认为它们在同一行上\n\t\t\treturn topDifference < 10;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tprivate isEnabled = false;\n\tprivate hasFaded = false;\n\tasync enable(maskAnimationTime = this.lyricLine.startTime) {\n\t\tthis.isEnabled = true;\n\t\tthis.hasFaded = false;\n\t\tthis.element.classList.add(styles.active);\n\t\tawait this.waitMaskImageUpdated();\n\t\tconst main = this.element.children[0] as HTMLDivElement;\n\t\tfor (const word of this.splittedWords) {\n\t\t\tfor (const a of word.elementAnimations) {\n\t\t\t\ta.currentTime = 0;\n\t\t\t\ta.playbackRate = 1;\n\t\t\t\ta.play();\n\t\t\t}\n\t\t\tfor (const a of word.maskAnimations) {\n\t\t\t\ta.currentTime = Math.min(\n\t\t\t\t\tthis.totalDuration,\n\t\t\t\t\tMath.max(0, maskAnimationTime - this.lyricLine.startTime),\n\t\t\t\t);\n\t\t\t\ta.playbackRate = 1;\n\t\t\t\ta.play();\n\t\t\t}\n\t\t}\n\t\tmain.classList.add(styles.active);\n\t}\n\tdisable(maskAnimationTime = 0) {\n\t\tthis.isEnabled = false;\n\t\tthis.hasFaded = true;\n\t\tthis.element.classList.remove(styles.active);\n\t\tconst main = this.element.children[0] as HTMLDivElement;\n\t\tlet i = 0;\n\t\tfor (const word of this.splittedWords) {\n\t\t\tfor (const a of word.elementAnimations) {\n\t\t\t\tif (\n\t\t\t\t\ta.id === \"float-word\" ||\n\t\t\t\t\ta.id.includes(\"emphasize-word-float-only\")\n\t\t\t\t) {\n\t\t\t\t\ta.playbackRate = -1;\n\t\t\t\t\ta.play();\n\t\t\t\t}\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\tmain.classList.remove(styles.active);\n\t}\n\tprivate lastWord?: RealWord;\n\tresume(currentTime = 0) {\n\t\tif (!this.isEnabled) return;\n\t\tfor (const word of this.splittedWords) {\n\t\t\tfor (const a of word.elementAnimations) {\n\t\t\t\tif (\n\t\t\t\t\t!this.lastWord ||\n\t\t\t\t\tthis.splittedWords.indexOf(this.lastWord) <\n\t\t\t\t\t\tthis.splittedWords.indexOf(word)\n\t\t\t\t) {\n\t\t\t\t\ta.play();\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const a of word.maskAnimations) {\n\t\t\t\tif (\n\t\t\t\t\t!this.lastWord ||\n\t\t\t\t\tthis.splittedWords.indexOf(this.lastWord) <\n\t\t\t\t\t\tthis.splittedWords.indexOf(word)\n\t\t\t\t) {\n\t\t\t\t\ta.play();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tpause(currentTime = 0) {\n\t\tif (!this.isEnabled) return;\n\t\tfor (const word of this.splittedWords) {\n\t\t\tfor (const a of word.elementAnimations) {\n\t\t\t\tif (word.startTime >= currentTime) {\n\t\t\t\t\ta.pause();\n\t\t\t\t} else {\n\t\t\t\t\tthis.lastWord = word;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const a of word.maskAnimations) {\n\t\t\t\tif (word.startTime >= currentTime) {\n\t\t\t\t\ta.pause();\n\t\t\t\t} else {\n\t\t\t\t\tthis.lastWord = word;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tsetMaskAnimationState(maskAnimationTime = 0) {\n\t\tconst t = maskAnimationTime - this.lyricLine.startTime;\n\t\tfor (const word of this.splittedWords) {\n\t\t\tfor (const a of word.maskAnimations) {\n\t\t\t\ta.currentTime = Math.min(this.totalDuration, Math.max(0, t));\n\t\t\t\ta.playbackRate = 1;\n\t\t\t\tif (t >= 0 && t < this.totalDuration) a.play();\n\t\t\t\telse a.pause();\n\t\t\t}\n\t\t}\n\t}\n\tmeasureSize(): [number, number] {\n\t\tthis.hasFaded = false;\n\t\tif (this._hide) {\n\t\t\tif (this._prevParentEl) {\n\t\t\t\tthis._prevParentEl.appendChild(this.element);\n\t\t\t}\n\t\t\tthis.element.style.display = \"\";\n\t\t\tthis.element.style.visibility = \"hidden\";\n\t\t}\n\t\tconst size: [number, number] = [\n\t\t\tthis.element.clientWidth,\n\t\t\tthis.element.clientHeight,\n\t\t];\n\t\tif (this._hide) {\n\t\t\tif (this._prevParentEl) {\n\t\t\t\tthis.element.remove();\n\t\t\t}\n\t\t\tthis.element.style.display = \"none\";\n\t\t\tthis.element.style.visibility = \"\";\n\t\t}\n\t\treturn size;\n\t}\n\tsetLine(line: LyricLine) {\n\t\tthis.lyricLine = line;\n\t\tif (this.lyricLine.isBG) {\n\t\t\tthis.element.classList.add(styles.lyricBgLine);\n\t\t} else {\n\t\t\tthis.element.classList.remove(styles.lyricBgLine);\n\t\t}\n\t\tif (this.lyricLine.isDuet) {\n\t\t\tthis.element.classList.add(styles.lyricDuetLine);\n\t\t} else {\n\t\t\tthis.element.classList.remove(styles.lyricDuetLine);\n\t\t}\n\t\tthis.rebuildElement();\n\t\tthis.rebuildStyle();\n\t}\n\tgetLine() {\n\t\treturn this.lyricLine;\n\t}\n\tprivate _hide = true;\n\tprivate _prevParentEl: HTMLElement | null = null;\n\tprivate lastStyle = \"\";\n\tshow() {\n\t\tthis._hide = false;\n\t\tif (this._prevParentEl) {\n\t\t\tthis._prevParentEl.appendChild(this.element);\n\t\t\tthis._prevParentEl = null;\n\t\t}\n\t\tthis.rebuildStyle();\n\t}\n\thide() {\n\t\tthis._hide = true;\n\t\tif (this.element.parentElement) {\n\t\t\tthis._prevParentEl = this.element.parentElement;\n\t\t\tthis.element.remove();\n\t\t}\n\t\tthis.rebuildStyle();\n\t}\n\trebuildStyle() {\n\t\tif (this._hide) {\n\t\t\tif (this.lastStyle !== \"display:none;transform:translate(0,-10000px);\") {\n\t\t\t\tthis.lastStyle = \"display:none;transform:translate(0,-10000px);\";\n\t\t\t\tthis.element.setAttribute(\n\t\t\t\t\t\"style\",\n\t\t\t\t\t\"display:none;transform:translate(0,-10000px);\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tlet style = \"\";\n\t\t// if (this.lyricPlayer.getEnableSpring()) {\n\t\tstyle += `transform:translate(${this.lineTransforms.posX\n\t\t\t.getCurrentPosition()\n\t\t\t.toFixed(1)}px,${this.lineTransforms.posY\n\t\t\t.getCurrentPosition()\n\t\t\t.toFixed(\n\t\t\t\t1,\n\t\t\t)}px) scale(${(this.lineTransforms.scale.getCurrentPosition() / 100).toFixed(4)});`;\n\t\tif (!this.lyricPlayer.getEnableSpring() && this.isInSight) {\n\t\t\tstyle += `transition-delay:${this.delay}ms;`;\n\t\t}\n\t\tstyle += `filter:blur(${Math.min(32, this.blur)}px);`;\n\t\tif (style !== this.lastStyle) {\n\t\t\tthis.lastStyle = style;\n\t\t\tthis.element.setAttribute(\"style\", style);\n\t\t}\n\t}\n\trebuildElement() {\n\t\tthis.disposeElements();\n\t\tconst main = this.element.children[0] as HTMLDivElement;\n\t\tconst trans = this.element.children[1] as HTMLDivElement;\n\t\tconst roman = this.element.children[2] as HTMLDivElement;\n\t\t// 如果是非动态歌词,那么就不需要分词了\n\t\tif (this.lyricPlayer._getIsNonDynamic()) {\n\t\t\tmain.innerText = this.lyricLine.words.map((w) => w.word).join(\"\");\n\t\t\ttrans.innerText = this.lyricLine.translatedLyric;\n\t\t\troman.innerText = this.lyricLine.romanLyric;\n\t\t\treturn;\n\t\t}\n\t\tconst chunkedWords = chunkAndSplitLyricWords(this.lyricLine.words);\n\t\tmain.innerHTML = \"\";\n\t\tfor (const chunk of chunkedWords) {\n\t\t\tif (Array.isArray(chunk)) {\n\t\t\t\t// 多个没有空格的单词组合成的一个单词数组\n\t\t\t\tif (chunk.length === 0) continue;\n\t\t\t\tconst merged = chunk.reduce(\n\t\t\t\t\t(a, b) => {\n\t\t\t\t\t\ta.endTime = Math.max(a.endTime, b.endTime);\n\t\t\t\t\t\ta.startTime = Math.min(a.startTime, b.startTime);\n\t\t\t\t\t\ta.word += b.word;\n\t\t\t\t\t\treturn a;\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tword: \"\",\n\t\t\t\t\t\tstartTime: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\tendTime: Number.NEGATIVE_INFINITY,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tconst emp = chunk\n\t\t\t\t\t.map((word) => shouldEmphasize(word))\n\t\t\t\t\t.reduce((a, b) => a || b, shouldEmphasize(merged));\n\t\t\t\tconst wrapperWordEl = document.createElement(\"span\");\n\t\t\t\twrapperWordEl.classList.add(styles.emphasizeWrapper);\n\t\t\t\tconst characterElements: HTMLElement[] = [];\n\t\t\t\tfor (const word of chunk) {\n\t\t\t\t\tconst mainWordEl = document.createElement(\"span\");\n\t\t\t\t\t// const mainWordFloatAnimation = this.initFloatAnimation(\n\t\t\t\t\t// \tmerged,\n\t\t\t\t\t// \tmainWordEl,\n\t\t\t\t\t// );\n\t\t\t\t\tif (emp) {\n\t\t\t\t\t\tmainWordEl.classList.add(styles.emphasize);\n\t\t\t\t\t\tconst charEls: HTMLSpanElement[] = [];\n\t\t\t\t\t\tfor (const char of word.word.trim().split(\"\")) {\n\t\t\t\t\t\t\tconst charEl = document.createElement(\"span\");\n\t\t\t\t\t\t\tcharEl.innerText = char;\n\t\t\t\t\t\t\tcharEls.push(charEl);\n\t\t\t\t\t\t\tcharacterElements.push(charEl);\n\t\t\t\t\t\t\tmainWordEl.appendChild(charEl);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst realWord: RealWord = {\n\t\t\t\t\t\t\t...word,\n\t\t\t\t\t\t\tmainElement: mainWordEl,\n\t\t\t\t\t\t\tsubElements: charEls,\n\t\t\t\t\t\t\telementAnimations: [this.initFloatAnimation(word, mainWordEl)],\n\t\t\t\t\t\t\tmaskAnimations: [],\n\t\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\t\theight: 0,\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\tshouldEmphasize: emp,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.splittedWords.push(realWord);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmainWordEl.innerText = word.word;\n\t\t\t\t\t\tthis.splittedWords.push({\n\t\t\t\t\t\t\t...word,\n\t\t\t\t\t\t\tmainElement: mainWordEl,\n\t\t\t\t\t\t\tsubElements: [],\n\t\t\t\t\t\t\telementAnimations: [this.initFloatAnimation(word, mainWordEl)],\n\t\t\t\t\t\t\tmaskAnimations: [],\n\t\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\t\theight: 0,\n\t\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\t\tshouldEmphasize: emp,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\twrapperWordEl.appendChild(mainWordEl);\n\t\t\t\t}\n\t\t\t\tif (emp) {\n\t\t\t\t\tthis.splittedWords[\n\t\t\t\t\t\tthis.splittedWords.length - 1\n\t\t\t\t\t].elementAnimations.push(\n\t\t\t\t\t\t...this.initEmphasizeAnimation(\n\t\t\t\t\t\t\tmerged,\n\t\t\t\t\t\t\tcharacterElements,\n\t\t\t\t\t\t\tmerged.endTime - merged.startTime,\n\t\t\t\t\t\t\tmerged.startTime - this.lyricLine.startTime,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (merged.word.trimStart() !== merged.word) {\n\t\t\t\t\tmain.appendChild(document.createTextNode(\" \"));\n\t\t\t\t}\n\t\t\t\tmain.appendChild(wrapperWordEl);\n\t\t\t\tif (merged.word.trimEnd() !== merged.word && shouldEmphasize(merged)) {\n\t\t\t\t\tmain.appendChild(document.createTextNode(\" \"));\n\t\t\t\t}\n\t\t\t} else if (chunk.word.trim().length === 0) {\n\t\t\t\t// 纯空格\n\t\t\t\tmain.appendChild(document.createTextNode(\" \"));\n\t\t\t} else {\n\t\t\t\t// 单个单词\n\t\t\t\tconst emp = shouldEmphasize(chunk);\n\t\t\t\tconst mainWordEl = document.createElement(\"span\");\n\t\t\t\tconst realWord: RealWord = {\n\t\t\t\t\t...chunk,\n\t\t\t\t\tmainElement: mainWordEl,\n\t\t\t\t\tsubElements: [],\n\t\t\t\t\telementAnimations: [this.initFloatAnimation(chunk, mainWordEl)],\n\t\t\t\t\tmaskAnimations: [],\n\t\t\t\t\twidth: 0,\n\t\t\t\t\theight: 0,\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\tshouldEmphasize: emp,\n\t\t\t\t};\n\t\t\t\tif (shouldEmphasize(chunk)) {\n\t\t\t\t\tmainWordEl.classList.add(styles.emphasize);\n\t\t\t\t\tconst charEls: HTMLSpanElement[] = [];\n\t\t\t\t\tfor (const char of chunk.word.trim().split(\"\")) {\n\t\t\t\t\t\tconst charEl = document.createElement(\"span\");\n\t\t\t\t\t\tcharEl.innerText = char;\n\t\t\t\t\t\tcharEls.push(charEl);\n\t\t\t\t\t\tmainWordEl.appendChild(charEl);\n\t\t\t\t\t}\n\t\t\t\t\trealWord.subElements = charEls;\n\t\t\t\t\tconst duration = Math.abs(realWord.endTime - realWord.startTime);\n\t\t\t\t\trealWord.elementAnimations.push(\n\t\t\t\t\t\t...this.initEmphasizeAnimation(\n\t\t\t\t\t\t\tchunk,\n\t\t\t\t\t\t\tcharEls,\n\t\t\t\t\t\t\tduration,\n\t\t\t\t\t\t\trealWord.startTime - this.lyricLine.startTime,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\t// realWord.elementAnimations = this.initEmphasizeAnimation(realWord);\n\t\t\t\t} else {\n\t\t\t\t\tmainWordEl.innerText = chunk.word.trim();\n\t\t\t\t}\n\t\t\t\tif (chunk.word.trimStart() !== chunk.word) {\n\t\t\t\t\tmain.appendChild(document.createTextNode(\" \"));\n\t\t\t\t}\n\t\t\t\tmain.appendChild(mainWordEl);\n\t\t\t\tif (chunk.word.trimEnd() !== chunk.word) {\n\t\t\t\t\tmain.appendChild(document.createTextNode(\" \"));\n\t\t\t\t}\n\t\t\t\tthis.splittedWords.push(realWord);\n\t\t\t}\n\t\t}\n\t\ttrans.innerText = this.lyricLine.translatedLyric;\n\t\troman.innerText = this.lyricLine.romanLyric;\n\t}\n\tprivate initFloatAnimation(word: LyricWord, wordEl: HTMLSpanElement) {\n\t\tconst delay = word.startTime - this.lyricLine.startTime;\n\t\tconst duration = Math.max(1000, word.endTime - word.startTime);\n\t\tlet up = 0.05;\n\t\tif (this.lyricLine.isBG) {\n\t\t\tup *= 2;\n\t\t}\n\t\tconst a = wordEl.animate(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\ttransform: \"translateY(0px)\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttransform: `translateY(${-up}em)`,\n\t\t\t\t},\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration: Number.isFinite(duration) ? duration : 0,\n\t\t\t\tdelay: Number.isFinite(delay) ? delay : 0,\n\t\t\t\tid: \"float-word\",\n\t\t\t\tcomposite: \"add\",\n\t\t\t\tfill: \"both\",\n\t\t\t\teasing: \"ease-out\",\n\t\t\t},\n\t\t);\n\t\ta.pause();\n\t\treturn a;\n\t}\n\t// 按照原 Apple Music 参考,强调效果只应用缩放、轻微左右位移和辉光效果,原主要的悬浮位移效果不变\n\t// 为了避免产生锯齿抖动感,使用 matrix3d 来实现缩放和位移\n\tprivate initEmphasizeAnimation(\n\t\tword: LyricWord,\n\t\tcharacterElements: HTMLElement[],\n\t\tduration: number,\n\t\tdelay: number,\n\t): Animation[] {\n\t\tconst de = Math.max(0, delay);\n\t\tlet du = Math.max(1000, duration);\n\n\t\tlet result: Animation[] = [];\n\n\t\tlet amount = du / 2000;\n\t\tamount = amount > 1 ? Math.sqrt(amount) : amount ** 3;\n\t\tlet blur = du / 3000;\n\t\tblur = blur > 1 ? Math.sqrt(blur) : blur ** 3;\n\t\tamount *= 0.6;\n\t\tblur *= 0.5;\n\t\tif (\n\t\t\tthis.lyricLine.words.length > 0 &&\n\t\t\tword.word.includes(\n\t\t\t\tthis.lyricLine.words[this.lyricLine.words.length - 1].word,\n\t\t\t)\n\t\t) {\n\t\t\tamount *= 1.6;\n\t\t\tblur *= 1.5;\n\t\t\tdu *= 1.2;\n\t\t}\n\t\tamount = Math.min(1.2, amount);\n\t\tblur = Math.min(0.8, blur);\n\n\t\tconst animateDu = Number.isFinite(du) ? du : 0;\n\t\tconst empEasing = makeEmpEasing(EMP_EASING_MID);\n\n\t\tresult = characterElements.flatMap((el, i, arr) => {\n\t\t\tconst wordDe = de + (du / 2.5 / arr.length) * i;\n\t\t\tconst result: Animation[] = [];\n\n\t\t\tconst frames: Keyframe[] = new Array(ANIMATION_FRAME_QUANTITY)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, j) => {\n\t\t\t\t\tconst x = (j + 1) / ANIMATION_FRAME_QUANTITY;\n\t\t\t\t\tconst transX = empEasing(x);\n\t\t\t\t\tconst glowLevel = empEasing(x) * blur;\n\n\t\t\t\t\tconst mat = scaleMatrix4(createMatrix4(), 1 + transX * 0.1 * amount);\n\t\t\t\t\tconst offsetX = -transX * 0.03 * amount * (arr.length / 2 - i);\n\t\t\t\t\tconst offsetY = -transX * 0.025 * amount;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\toffset: x,\n\t\t\t\t\t\ttransform: `${matrix4ToCSS(\n\t\t\t\t\t\t\tmat,\n\t\t\t\t\t\t\t4,\n\t\t\t\t\t\t)} translate(${offsetX}em, ${offsetY}em)`,\n\t\t\t\t\t\ttextShadow: `0 0 ${Math.min(\n\t\t\t\t\t\t\t0.3,\n\t\t\t\t\t\t\tblur * 0.3,\n\t\t\t\t\t\t)}em rgba(255, 255, 255, ${glowLevel})`,\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\tconst glow = el.animate(frames, {\n\t\t\t\tduration: animateDu,\n\t\t\t\tdelay: Number.isFinite(wordDe) ? wordDe : 0,\n\t\t\t\tid: `emphasize-word-${el.innerText}-${i}`,\n\t\t\t\titerations: 1,\n\t\t\t\tcomposite: \"replace\",\n\t\t\t\teasing: \"linear\",\n\t\t\t\tfill: \"both\",\n\t\t\t});\n\t\t\tglow.onfinish = () => {\n\t\t\t\tglow.pause();\n\t\t\t};\n\t\t\tglow.pause();\n\t\t\tresult.push(glow);\n\n\t\t\tconst floatFrame: Keyframe[] = new Array(ANIMATION_FRAME_QUANTITY)\n\t\t\t\t.fill(0)\n\t\t\t\t.map((_, j) => {\n\t\t\t\t\tconst x = (j + 1) / ANIMATION_FRAME_QUANTITY;\n\t\t\t\t\tlet y = Math.sin(x * Math.PI);\n\t\t\t\t\t// y = x < 0.5 ? y : Math.max(y, 1.0);\n\t\t\t\t\tif (this.lyricLine.isBG) {\n\t\t\t\t\t\ty *= 2;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\toffset: x,\n\t\t\t\t\t\ttransform: `translateY(${-y * 0.05}em)`,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\tconst float = el.animate(floatFrame, {\n\t\t\t\tduration: animateDu * 1.4,\n\t\t\t\tdelay: Number.isFinite(wordDe) ? wordDe - 400 : 0,\n\t\t\t\tid: \"emphasize-word-float\",\n\t\t\t\titerations: 1,\n\t\t\t\tcomposite: \"add\",\n\t\t\t\teasing: \"linear\",\n\t\t\t\tfill: \"both\",\n\t\t\t});\n\t\t\tfloat.onfinish = () => {\n\t\t\t\tfloat.pause();\n\t\t\t};\n\t\t\tfloat.pause();\n\t\t\tresult.push(float);\n\n\t\t\treturn result;\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tprivate get totalDuration() {\n\t\treturn this.lyricLine.endTime - this.lyricLine.startTime;\n\t}\n\tprivate maskImageDirty = false;\n\tprivate markImageDirtyPromises: (() => void)[] = [];\n\tmarkMaskImageDirty(): Promise<void> {\n\t\tthis.maskImageDirty = true;\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.markImageDirtyPromises.push(resolve);\n\t\t});\n\t}\n\twaitMaskImageUpdated(): Promise<void> {\n\t\tif (this.maskImageDirty) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.markImageDirtyPromises.push(resolve);\n\t\t\t});\n\t\t}\n\t\treturn Promise.resolve();\n\t}\n\tasync updateMaskImage() {\n\t\tconst resolves = this.markImageDirtyPromises;\n\t\tthis.markImageDirtyPromises = [];\n\t\tthis.maskImageDirty = false;\n\t\tif (this._hide) {\n\t\t\tawait mutate(() => {\n\t\t\t\tif (this._prevParentEl) {\n\t\t\t\t\tthis._prevParentEl.appendChild(this.element);\n\t\t\t\t}\n\t\t\t\tthis.element.style.display = \"\";\n\t\t\t\tthis.element.style.visibility = \"hidden\";\n\t\t\t});\n\t\t}\n\t\tfor (const word of this.splittedWords) {\n\t\t\tconst el = word.mainElement;\n\t\t\tif (el) {\n\t\t\t\tawait measure(() => {\n\t\t\t\t\tword.padding = Number.parseFloat(getComputedStyle(el).paddingLeft);\n\t\t\t\t\tword.width = el.clientWidth - word.padding * 2;\n\t\t\t\t\tword.height = el.clientHeight - word.padding * 2;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tword.width = 0;\n\t\t\t\tword.height = 0;\n\t\t\t\tword.padding = 0;\n\t\t\t}\n\t\t}\n\t\tif (this.lyricPlayer.supportMaskImage) {\n\t\t\tthis.generateWebAnimationBasedMaskImage();\n\t\t} else {\n\t\t\tthis.generateCalcBasedMaskImage();\n\t\t}\n\t\tif (this._hide) {\n\t\t\tawait mutate(() => {\n\t\t\t\tif (this._prevParentEl) {\n\t\t\t\t\tthis.element.remove();\n\t\t\t\t}\n\t\t\t\tthis.element.style.display = \"none\";\n\t\t\t\tthis.element.style.visibility = \"\";\n\t\t\t});\n\t\t}\n\t\tfor (const resolve of resolves) {\n\t\t\tresolve();\n\t\t}\n\t}\n\tprivate generateCalcBasedMaskImage() {\n\t\tfor (const word of this.splittedWords) {\n\t\t\tconst wordEl = word.mainElement;\n\t\t\tif (wordEl) {\n\t\t\t\tword.width = wordEl.clientWidth;\n\t\t\t\tword.height = wordEl.clientHeight;\n\t\t\t\tconst fadeWidth = word.height * this.lyricPlayer.wordFadeWidth;\n\t\t\t\tconst [maskImage, totalAspect] = generateFadeGradient(\n\t\t\t\t\tfadeWidth / word.width,\n\t\t\t\t);\n\t\t\t\tconst totalAspectStr = `${totalAspect * 100}% 100%`;\n\t\t\t\tif (this.lyricPlayer.supportMaskImage) {\n\t\t\t\t\twordEl.style.maskImage = maskImage;\n\t\t\t\t\twordEl.style.maskRepeat = \"no-repeat\";\n\t\t\t\t\twordEl.style.maskOrigin = \"left\";\n\t\t\t\t\twordEl.style.maskSize = totalAspectStr;\n\t\t\t\t} else {\n\t\t\t\t\twordEl.style.webkitMaskImage = maskImage;\n\t\t\t\t\twordEl.style.webkitMaskRepeat = \"no-repeat\";\n\t\t\t\t\twordEl.style.webkitMaskOrigin = \"left\";\n\t\t\t\t\twordEl.style.webkitMaskSize = totalAspectStr;\n\t\t\t\t}\n\t\t\t\tconst w = word.width + fadeWidth;\n\t\t\t\tconst maskPos = `clamp(${-w}px,calc(${-w}px + (var(--amll-player-time) - ${\n\t\t\t\t\tword.startTime\n\t\t\t\t})*${\n\t\t\t\t\tw / Math.abs(word.endTime - word.startTime)\n\t\t\t\t}px),0px) 0px, left top`;\n\t\t\t\twordEl.style.maskPosition = maskPos;\n\t\t\t\twordEl.style.webkitMaskPosition = maskPos;\n\t\t\t}\n\t\t}\n\t}\n\tprivate generateWebAnimationBasedMaskImage() {\n\t\t// 因为歌词行有可能比行内单词的结束时间早,有可能导致过渡动画提早停止出现瑕疵\n\t\t// 所以要以单词的结束时间为准\n\t\tconst totalFadeDuration =\n\t\t\tMath.max(\n\t\t\t\tthis.splittedWords.reduce((pv, w) => Math.max(w.endTime, pv), 0),\n\t\t\t\tthis.lyricLine.endTime,\n\t\t\t) - this.lyricLine.startTime;\n\t\tthis.splittedWords.forEach((word, i) => {\n\t\t\tconst wordEl = word.mainElement;\n\t\t\tif (wordEl) {\n\t\t\t\tconst fadeWidth = word.height * this.lyricPlayer.wordFadeWidth;\n\t\t\t\tconst [maskImage, totalAspect] = generateFadeGradient(\n\t\t\t\t\tfadeWidth / (word.width + word.padding * 2),\n\t\t\t\t);\n\t\t\t\tconst totalAspectStr = `${totalAspect * 100}% 100%`;\n\t\t\t\tif (this.lyricPlayer.supportMaskImage) {\n\t\t\t\t\twordEl.style.maskImage = maskImage;\n\t\t\t\t\twordEl.style.maskRepeat = \"no-repeat\";\n\t\t\t\t\twordEl.style.maskOrigin = \"left\";\n\t\t\t\t\twordEl.style.maskSize = totalAspectStr;\n\t\t\t\t} else {\n\t\t\t\t\twordEl.style.webkitMaskImage = maskImage;\n\t\t\t\t\twordEl.style.webkitMaskRepeat = \"no-repeat\";\n\t\t\t\t\twordEl.style.webkitMaskOrigin = \"left\";\n\t\t\t\t\twordEl.style.webkitMaskSize = totalAspectStr;\n\t\t\t\t}\n\t\t\t\t// 为了尽可能将渐变动画在相连的每个单词间近似衔接起来\n\t\t\t\t// 要综合每个单词的效果时间和间隙生成动画帧数组\n\t\t\t\tconst widthBeforeSelf =\n\t\t\t\t\tthis.splittedWords.slice(0, i).reduce((a, b) => a + b.width, 0) +\n\t\t\t\t\t(this.splittedWords[0] ? fadeWidth : 0);\n\t\t\t\tconst minOffset = -(word.width + word.padding * 2 + fadeWidth);\n\t\t\t\tconst clampOffset = (x: number) => Math.max(minOffset, Math.min(0, x));\n\t\t\t\tlet curPos = -widthBeforeSelf - word.width - word.padding - fadeWidth;\n\t\t\t\tlet timeOffset = 0;\n\t\t\t\tconst frames: Keyframe[] = [];\n\t\t\t\tlet lastPos = curPos;\n\t\t\t\tlet lastTime = 0;\n\t\t\t\tconst pushFrame = () => {\n\t\t\t\t\tconst easing = \"cubic-bezier(.33,.12,.83,.9)\";\n\t\t\t\t\tconst moveOffset = curPos - lastPos;\n\t\t\t\t\tconst time = Math.max(0, Math.min(1, timeOffset));\n\t\t\t\t\tconst duration = time - lastTime;\n\t\t\t\t\tconst d = Math.abs(duration / moveOffset);\n\t\t\t\t\t// 因为有可能会和之前的动画有边界\n\t\t\t\t\tif (curPos > minOffset && lastPos < minOffset) {\n\t\t\t\t\t\tconst staticTime = Math.abs(lastPos - minOffset) * d;\n\t\t\t\t\t\tconst value = `${clampOffset(lastPos)}px 0`;\n\t\t\t\t\t\tconst frame: Keyframe = {\n\t\t\t\t\t\t\toffset: lastTime + staticTime,\n\t\t\t\t\t\t\tmaskPosition: value,\n\t\t\t\t\t\t\teasing: easing,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tframes.push(frame);\n\t\t\t\t\t}\n\t\t\t\t\tif (curPos > 0 && lastPos < 0) {\n\t\t\t\t\t\tconst staticTime = Math.abs(lastPos) * d;\n\t\t\t\t\t\tconst value = `${clampOffset(curPos)}px 0`;\n\t\t\t\t\t\tconst frame: Keyframe = {\n\t\t\t\t\t\t\toffset: lastTime + staticTime,\n\t\t\t\t\t\t\tmaskPosition: value,\n\t\t\t\t\t\t\teasing: easing,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tframes.push(frame);\n\t\t\t\t\t}\n\t\t\t\t\tconst value = `${clampOffset(curPos)}px 0`;\n\t\t\t\t\tconst frame: Keyframe = {\n\t\t\t\t\t\toffset: time,\n\t\t\t\t\t\tmaskPosition: value,\n\t\t\t\t\t\teasing: easing,\n\t\t\t\t\t};\n\t\t\t\t\tframes.push(frame);\n\t\t\t\t\tlastPos = curPos;\n\t\t\t\t\tlastTime = time;\n\t\t\t\t};\n\t\t\t\tpushFrame();\n\t\t\t\tlet lastTimeStamp = 0;\n\t\t\t\tthis.splittedWords.forEach((otherWord, j) => {\n\t\t\t\t\t// 停顿\n\t\t\t\t\t{\n\t\t\t\t\t\tconst curTimeStamp = otherWord.startTime - this.lyricLine.startTime;\n\t\t\t\t\t\tconst staticDuration = curTimeStamp - lastTimeStamp;\n\t\t\t\t\t\ttimeOffset += staticDuration / totalFadeDuration;\n\t\t\t\t\t\tif (staticDuration > 0) pushFrame();\n\t\t\t\t\t\tlastTimeStamp = curTimeStamp;\n\t\t\t\t\t}\n\t\t\t\t\t// 移动\n\t\t\t\t\t{\n\t\t\t\t\t\tconst fadeDuration = otherWord.endTime - otherWord.startTime;\n\t\t\t\t\t\ttimeOffset += fadeDuration / totalFadeDuration;\n\t\t\t\t\t\tcurPos += otherWord.width;\n\t\t\t\t\t\tif (j === 0) {\n\t\t\t\t\t\t\tcurPos += fadeWidth * 1.5;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (j === this.splittedWords.length - 1) {\n\t\t\t\t\t\t\tcurPos += fadeWidth * 0.5;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (fadeDuration > 0) pushFrame();\n\t\t\t\t\t\tlastTimeStamp += fadeDuration;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tfor (const a of word.maskAnimations) {\n\t\t\t\t\ta.cancel();\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\t// TODO: 如果此处动画帧计算出错,需要一个后备方案\n\t\t\t\t\tconst ani = wordEl.animate(frames, {\n\t\t\t\t\t\tduration: totalFadeDuration || 1,\n\t\t\t\t\t\tid: `fade-word-${word.word}-${i}`,\n\t\t\t\t\t\tfill: \"both\",\n\t\t\t\t\t\teasing: \"cubic-bezier(1,1,.66,.99)\",\n\t\t\t\t\t});\n\t\t\t\t\tani.pause();\n\t\t\t\t\tword.maskAnimations = [ani];\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconsole.warn(\"应用渐变动画发生错误\", frames, totalFadeDuration, err);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tgetElement() {\n\t\treturn this.element;\n\t}\n\tsetTransform(\n\t\tleft: number = this.left,\n\t\ttop: number = this.top,\n\t\tscale: number = this.scale,\n\t\topacity = 1,\n\t\tsubopacity = 0.4,\n\t\tblur = 0,\n\t\tforce = false,\n\t\tdelay = 0,\n\t) {\n\t\tconst beforeInSight = this.isInSight;\n\t\tconst enableSpring = this.lyricPlayer.getEnableSpring();\n\t\tthis.left = left;\n\t\tthis.top = top;\n\t\tthis.scale = scale;\n\t\tthis.delay = (delay * 1000) | 0;\n\t\tconst main = this.element.children[0] as HTMLDivElement;\n\t\tconst trans = this.element.children[1] as HTMLDivElement;\n\t\tconst roman = this.element.children[2] as HTMLDivElement;\n\t\t// main.style.opacity = `${opacity *\n\t\t// \t(!this.hasFaded ? 1 : this.lyricPlayer._getIsNonDynamic() ? 1 : 0.3)\n\t\t// \t}`;\n\t\tmain.style.opacity = `${opacity}`;\n\t\ttrans.style.opacity = `${subopacity}`;\n\t\troman.style.opacity = `${subopacity}`;\n\t\tif (force || !enableSpring) {\n\t\t\tthis.blur = Math.min(32, blur);\n\t\t\tif (force) this.element.classList.add(styles.tmpDisableTransition);\n\t\t\t// this.lineWebAnimationTransforms.posX.setTargetPosition(left);\n\t\t\t// this.lineWebAnimationTransforms.posY.setTargetPosition(top);\n\t\t\t// this.lineWebAnimationTransforms.scale.setTargetPosition(scale);\n\t\t\tthis.lineTransforms.posX.setPosition(left);\n\t\t\tthis.lineTransforms.posY.setPosition(top);\n\t\t\tthis.lineTransforms.scale.setPosition(scale);\n\t\t\tif (!enableSpring) {\n\t\t\t\tconst afterInSight = this.isInSight;\n\t\t\t\tif (beforeInSight || afterInSight) {\n\t\t\t\t\tthis.show();\n\t\t\t\t} else {\n\t\t\t\t\tthis.hide();\n\t\t\t\t}\n\t\t\t} else this.rebuildStyle();\n\t\t\tif (force)\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tthis.element.classList.remove(styles.tmpDisableTransition);\n\t\t\t\t});\n\t\t} else {\n\t\t\t// this.lineWebAnimationTransforms.posX.stop();\n\t\t\t// this.lineWebAnimationTransforms.posY.stop();\n\t\t\t// this.lineWebAnimationTransforms.scale.stop();\n\t\t\tthis.lineTransforms.posX.setTargetPosition(left, delay);\n\t\t\tthis.lineTransforms.posY.setTargetPosition(top, delay);\n\t\t\tthis.lineTransforms.scale.setTargetPosition(scale);\n\t\t\tif (this.blur !== Math.min(32, blur)) {\n\t\t\t\tthis.blur = Math.min(32, blur);\n\t\t\t\tconst roundedBlur = blur.toFixed(3);\n\t\t\t\tthis.element.style.filter = `blur(${roundedBlur}px)`;\n\t\t\t}\n\t\t}\n\t}\n\tupdate(delta = 0) {\n\t\tif (!this.lyricPlayer.getEnableSpring()) return;\n\t\tthis.lineTransforms.posX.update(delta);\n\t\tthis.lineTransforms.posY.update(delta);\n\t\tthis.lineTransforms.scale.update(delta);\n\t\tif (this.isInSight) {\n\t\t\tthis.show();\n\t\t\tif (this.maskImageDirty) {\n\t\t\t\tthis.updateMaskImage();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t\tif (this.lyricPlayer.getEnableSpring()) {\n\t\t\tthis.element.style.setProperty(\n\t\t\t\t\"--bright-mask-alpha\",\n\t\t\t\t`${\n\t\t\t\t\tMath.max(\n\t\t\t\t\t\t0.0,\n\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t1.0,\n\t\t\t\t\t\t\tthis.lineTransforms.scale.getCurrentPosition() / 100 - 0.97,\n\t\t\t\t\t\t) / 0.03,\n\t\t\t\t\t) *\n\t\t\t\t\t\t0.8 +\n\t\t\t\t\t0.2\n\t\t\t\t}`,\n\t\t\t);\n\t\t\tthis.element.style.setProperty(\n\t\t\t\t\"--dark-mask-alpha\",\n\t\t\t\t`${\n\t\t\t\t\tMath.max(\n\t\t\t\t\t\t0.0,\n\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t1.0,\n\t\t\t\t\t\t\tthis.lineTransforms.scale.getCurrentPosition() / 100 - 0.97,\n\t\t\t\t\t\t) / 0.03,\n\t\t\t\t\t) *\n\t\t\t\t\t\t0.2 +\n\t\t\t\t\t0.2\n\t\t\t\t}`,\n\t\t\t);\n\t\t} else {\n\t\t\tconst computedStyle = window.getComputedStyle(this.element);\n\t\t\tconst transform = computedStyle.transform;\n\n\t\t\t// Extract the scale value from the transform property\n\t\t\tconst scale = getScaleFromTransform(transform);\n\n\t\t\tthis.element.style.setProperty(\n\t\t\t\t\"--bright-mask-alpha\",\n\t\t\t\t`${Math.max(0.0, Math.min(1.0, (scale - 0.97) / 0.03)) * 0.8 + 0.2}`,\n\t\t\t);\n\t\t\tthis.element.style.setProperty(\n\t\t\t\t\"--dark-mask-alpha\",\n\t\t\t\t`${Math.max(0.0, Math.min(1.0, (scale - 0.97) / 0.03)) * 0.2 + 0.2}`,\n\t\t\t);\n\t\t}\n\t}\n\n\t_getDebugTargetPos(): string {\n\t\treturn `[位移: ${this.left}, ${this.top}; 缩放: ${this.scale}; 延时: ${this.delay}]`;\n\t}\n\n\tget isInSight() {\n\t\tconst l = this.lineTransforms.posX.getCurrentPosition();\n\t\tconst t = this.lineTransforms.posY.getCurrentPosition();\n\t\tconst w = this.lineSize[0];\n\t\tconst h = this.lineSize[1];\n\t\tconst r = l + w;\n\t\tconst b = t + h;\n\t\tconst pr = this.lyricPlayer.size[0];\n\t\tconst pb = this.lyricPlayer.size[1];\n\t\treturn !(l > pr + w || r < -w || t > pb + h || b < -h);\n\t}\n\tprivate disposeElements() {\n\t\tfor (const realWord of this.splittedWords) {\n\t\t\tfor (const a of realWord.elementAnimations) {\n\t\t\t\ta.cancel();\n\t\t\t}\n\t\t\tfor (const a of realWord.maskAnimations) {\n\t\t\t\ta.cancel();\n\t\t\t}\n\t\t\tfor (const sub of realWord.subElements) {\n\t\t\t\tsub.remove();\n\t\t\t\tsub.parentNode?.removeChild(sub);\n\t\t\t}\n\t\t\trealWord.elementAnimations = [];\n\t\t\trealWord.maskAnimations = [];\n\t\t\trealWord.subElements = [];\n\t\t\trealWord.mainElement.remove();\n\t\t\trealWord.mainElement.parentNode?.removeChild(realWord.mainElement);\n\t\t}\n\t\tthis.splittedWords = [];\n\t}\n\tdispose(): void {\n\t\tthis.disposeElements();\n\t\tthis.element.remove();\n\t}\n}\n","/**\n * @fileoverview\n * 一个播放歌词的组件\n * @author SteveXMH\n */\n\nimport structuredClone from \"@ungap/structured-clone\";\nimport type { Disposable, HasElement, LyricLine } from \"../interfaces\";\nimport \"../styles/index.css\";\nimport styles from \"../styles/lyric-player.module.css\";\nimport { debounceFrame } from \"../utils/debounce\";\nimport { eqSet } from \"../utils/eq-set\";\nimport type { SpringParams } from \"../utils/spring\";\nimport { BottomLineEl } from \"./bottom-line\";\nimport { InterludeDots } from \"./interlude-dots\";\nimport { LyricLineEl, type RawLyricLineMouseEvent } from \"./lyric-line\";\n\n/**\n * 歌词行鼠标相关事件,可以获取到歌词行的索引和歌词行元素\n */\nexport class LyricLineMouseEvent extends MouseEvent {\n\tconstructor(\n\t\t/**\n\t\t * 歌词行索引\n\t\t */\n\t\tpublic readonly lineIndex: number,\n\t\t/**\n\t\t * 歌词行元素\n\t\t */\n\t\tpublic readonly line: LyricLineEl,\n\t\tevent: MouseEvent,\n\t) {\n\t\tsuper(`line-${event.type}`, event);\n\t}\n}\n\nexport type LyricLineMouseEventListener = (evt: LyricLineMouseEvent) => void;\n\n/**\n * 歌词播放组件,本框架的核心组件\n *\n * 尽可能贴切 Apple Music for iPad 的歌词效果设计,且做了力所能及的优化措施\n */\nexport class LyricPlayer extends EventTarget implements HasElement, Disposable {\n\tprivate element: HTMLElement = document.createElement(\"div\");\n\tprivate currentTime = 0;\n\tprivate lastCurrentTime = 0;\n\tprivate lyricLines: LyricLine[] = [];\n\tprivate processedLines: LyricLine[] = [];\n\tprivate lyricLinesEl: LyricLineEl[] = [];\n\tprivate lyricLinesSize: WeakMap<LyricLineEl, [number, number]> =\n\t\tnew WeakMap();\n\tprivate lyricLinesIndexes: WeakMap<LyricLineEl, number> = new WeakMap();\n\tprivate hotLines: Set<number> = new Set();\n\tprivate bufferedLines: Set<number> = new Set();\n\tprivate scrollToIndex = 0;\n\tprivate _wordFadeWidth = 0.5;\n\tprivate allowScroll = true;\n\tprivate scrolledHandler = 0;\n\tprivate isScrolled = false;\n\tprivate isSeeking = false;\n\tprivate initializeSeeking = false;\n\tprivate invokedByScrollEvent = false;\n\tprivate scrollOffset = 0;\n\tprivate hidePassedLines = false;\n\tprivate debounceCalcLayout = debounceFrame(async () => {\n\t\tthis.calcLayout(true, true);\n\t\tthis.lyricLinesEl.forEach((el, i) => {\n\t\t\tel.markMaskImageDirty().then(() => {\n\t\t\t\tif (this.hotLines.has(i)) {\n\t\t\t\t\tel.enable(this.currentTime);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}, 5);\n\tprivate resizeObserver: ResizeObserver = new ResizeObserver(\n\t\tdebounceFrame(\n\t\t\t((e) => {\n\t\t\t\tconst rect = e[0].contentRect;\n\t\t\t\tthis.size[0] = rect.width;\n\t\t\t\tthis.size[1] = rect.height;\n\t\t\t\tconst styles = getComputedStyle(e[0].target);\n\t\t\t\tconst innerWidth =\n\t\t\t\t\tthis.element.clientWidth -\n\t\t\t\t\tNumber.parseFloat(styles.paddingLeft) -\n\t\t\t\t\tNumber.parseFloat(styles.paddingRight);\n\t\t\t\tconst innerHeight =\n\t\t\t\t\tthis.element.clientHeight -\n\t\t\t\t\tNumber.parseFloat(styles.paddingTop) -\n\t\t\t\t\tNumber.parseFloat(styles.paddingBottom);\n\t\t\t\tthis.innerSize[0] = innerWidth;\n\t\t\t\tthis.innerSize[1] = innerHeight;\n\t\t\t\tthis.rebuildStyle();\n\t\t\t\tthis.lyricLinesEl.forEach((el, i) => {\n\t\t\t\t\tel.markMaskImageDirty().then(() => {\n\t\t\t\t\t\tif (this.hotLines.has(i)) {\n\t\t\t\t\t\t\tel.enable(this.currentTime);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tfor (const el of this.lyricLinesEl) {\n\t\t\t\t\tel.markMaskImageDirty();\n\t\t\t\t}\n\t\t\t\tthis.debounceCalcLayout();\n\t\t\t}) as ResizeObserverCallback,\n\t\t\t5,\n\t\t),\n\t);\n\tprivate posXSpringParams: Partial<SpringParams> = {\n\t\tmass: 1,\n\t\tdamping: 10,\n\t\tstiffness: 100,\n\t};\n\tprivate posYSpringParams: Partial<SpringParams> = {\n\t\tmass: 0.9,\n\t\tdamping: 15,\n\t\tstiffness: 90,\n\t};\n\tprivate scaleSpringParams: Partial<SpringParams> = {\n\t\tmass: 2,\n\t\tdamping: 25,\n\t\tstiffness: 100,\n\t};\n\t// private scaleSpringParams: Partial<SpringParams> = {\n\t// \tmass: 1,\n\t// \tdamping: 25,\n\t// \tstiffness: 40,\n\t// };\n\tprivate scaleForBGSpringParams: Partial<SpringParams> = {\n\t\tmass: 1,\n\t\tdamping: 20,\n\t\tstiffness: 50,\n\t};\n\tprivate enableBlur = true;\n\tprivate enableScale = true;\n\tprivate interludeDots: InterludeDots;\n\tprivate interludeDotsSize: [number, number] = [0, 0];\n\tprivate bottomLine: BottomLineEl;\n\treadonly supportPlusLighter = CSS.supports(\"mix-blend-mode\", \"plus-lighter\");\n\treadonly supportMaskImage = CSS.supports(\"mask-image\", \"none\");\n\tprivate disableSpring = false;\n\tprivate alignAnchor: \"top\" | \"bottom\" | \"center\" = \"center\";\n\tprivate alignPosition = 0.35;\n\tprivate isNonDynamic = false;\n\tprivate isNonDuet = false;\n\tprivate scrollBoundary = [0, 0];\n\treadonly size: [number, number] = [0, 0];\n\treadonly innerSize: [number, number] = [0, 0];\n\tprivate readonly onLineClickedHandler = (e: RawLyricLineMouseEvent) => {\n\t\tconst evt = new LyricLineMouseEvent(\n\t\t\tthis.lyricLinesIndexes.get(e.line) ?? -1,\n\t\t\te.line,\n\t\t\te,\n\t\t);\n\t\tif (!this.dispatchEvent(evt)) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\t};\n\t/**\n\t * 是否为非逐词歌词\n\t * @internal\n\t */\n\t_getIsNonDynamic() {\n\t\treturn this.isNonDynamic;\n\t}\n\tsetIsSeeking(isSeeking: boolean) {\n\t\tthis.isSeeking = isSeeking;\n\t}\n\t/**\n\t * 设置是否使用物理弹簧算法实现歌词动画效果,默认启用\n\t *\n\t * 如果启用,则会通过弹簧算法实时处理歌词位置,但是需要性能足够强劲的电脑方可流畅运行\n\t *\n\t * 如果不启用,则会回退到基于 `transition` 的过渡效果,对低性能的机器比较友好,但是效果会比较单一\n\t */\n\tsetEnableSpring(enable = true) {\n\t\tthis.disableSpring = !enable;\n\t\tif (enable) {\n\t\t\tthis.element.classList.remove(styles.disableSpring);\n\t\t} else {\n\t\t\tthis.element.classList.add(styles.disableSpring);\n\t\t}\n\t\tthis.calcLayout(true);\n\t}\n\t/**\n\t * 获取当前是否启用了物理弹簧\n\t * @returns 是否启用物理弹簧\n\t */\n\tgetEnableSpring() {\n\t\treturn !this.disableSpring;\n\t}\n\t/**\n\t * 是否启用歌词行缩放效果,默认启用\n\t *\n\t * 如果启用,非选中的歌词行会轻微缩小以凸显当前播放歌词行效果\n\t *\n\t * 此效果对性能影响微乎其微,推荐启用\n\t * @param enable 是否启用歌词行缩放效果\n\t */\n\tsetEnableScale(enable = true) {\n\t\tthis.enableScale = enable;\n\t\tthis.calcLayout();\n\t}\n\t/**\n\t * 获取当前是否启用了歌词行缩放效果\n\t * @returns 是否启用歌词行缩放效果\n\t */\n\tgetEnableScale() {\n\t\treturn this.enableScale;\n\t}\n\tprivate _baseFontSize = Number.parseFloat(\n\t\tgetComputedStyle(this.element).fontSize,\n\t);\n\tpublic get baseFontSize() {\n\t\treturn this._baseFontSize;\n\t}\n\tprivate isPageVisible = true;\n\tprivate onPageShow = () => {\n\t\tthis.isPageVisible = true;\n\t\tthis.setCurrentTime(this.currentTime, true);\n\t};\n\tprivate onPageHide = () => {\n\t\tthis.isPageVisible = false;\n\t};\n\tconstructor() {\n\t\tsuper();\n\t\tthis.interludeDots = new InterludeDots(this);\n\t\tthis.bottomLine = new BottomLineEl(this);\n\t\tthis.element.setAttribute(\"class\", \"amll-lyric-player\");\n\t\tif (this.disableSpring) {\n\t\t\tthis.element.classList.add(styles.disableSpring);\n\t\t}\n\t\tthis.rebuildStyle();\n\t\tthis.resizeObserver.observe(this.element);\n\t\tthis.element.appendChild(this.interludeDots.getElement());\n\t\tthis.element.appendChild(this.bottomLine.getElement());\n\t\tthis.interludeDots.setTransform(0, 200);\n\t\twindow.addEventListener(\"pageshow\", this.onPageShow);\n\t\twindow.addEventListener(\"pagehide\", this.onPageHide);\n\t\tlet startScrollY = 0;\n\t\tlet direction: \"up\" | \"down\" | \"none\" = \"none\";\n\t\tlet startTouchPosY = 0;\n\t\tlet startScrollTime = 0;\n\t\tlet scrollSpeed = 0;\n\t\tlet scrollId = Symbol(\"amll-scroll\");\n\t\tlet lastMoveY = 0;\n\t\tlet lastDragTime = 0;\n\t\tthis.element.addEventListener(\"touchstart\", (evt) => {\n\t\t\tif (this.beginScrollHandler()) {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tstartScrollY = this.scrollOffset;\n\t\t\t\tstartTouchPosY = evt.touches[0].screenY;\n\t\t\t\tlastMoveY = startTouchPosY;\n\t\t\t\tstartScrollTime = Date.now();\n\t\t\t\tscrollSpeed = 0;\n\t\t\t}\n\t\t});\n\t\tthis.element.addEventListener(\"touchmove\", (evt) => {\n\t\t\tif (this.beginScrollHandler()) {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tconst touchScreenY = evt.touches[0].screenY;\n\t\t\t\tconst delta = touchScreenY - startTouchPosY;\n\t\t\t\tconst lastDelta = touchScreenY - lastMoveY;\n\t\t\t\tconst targetDirection =\n\t\t\t\t\tlastDelta > 0 ? \"down\" : lastDelta < 0 ? \"up\" : \"none\";\n\t\t\t\tif (direction !== targetDirection) {\n\t\t\t\t\tdirection = targetDirection;\n\t\t\t\t\tstartScrollY = this.scrollOffset;\n\t\t\t\t\tstartTouchPosY = touchScreenY;\n\t\t\t\t\tstartScrollTime = Date.now();\n\t\t\t\t} else {\n\t\t\t\t\tthis.scrollOffset = startScrollY - delta;\n\t\t\t\t}\n\t\t\t\tlastMoveY = touchScreenY;\n\t\t\t\tlastDragTime = Date.now();\n\t\t\t\tthis.limitScrollOffset();\n\t\t\t\tthis.calcLayout(true);\n\t\t\t}\n\t\t});\n\t\tthis.element.addEventListener(\"touchend\", (evt) => {\n\t\t\tif (this.beginScrollHandler()) {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tstartTouchPosY = 0;\n\t\t\t\tconst curTime = Date.now();\n\t\t\t\tif (curTime - lastDragTime > 100) return this.endScrollHandler();\n\t\t\t\tconst scrollDuration = curTime - startScrollTime;\n\t\t\t\tscrollSpeed =\n\t\t\t\t\t((this.scrollOffset - startScrollY) / scrollDuration) * 1000;\n\t\t\t\tlet lt = 0;\n\t\t\t\tconst curScrollId = Symbol(\"amll-scroll\");\n\t\t\t\tscrollId = curScrollId;\n\t\t\t\tconst onScrollFrame = (dt: number) => {\n\t\t\t\t\tlt ||= dt;\n\t\t\t\t\tif (scrollId === curScrollId && this.beginScrollHandler()) {\n\t\t\t\t\t\tthis.scrollOffset += (scrollSpeed * (dt - lt)) / 1000;\n\t\t\t\t\t\tscrollSpeed *= 0.99;\n\t\t\t\t\t\tthis.limitScrollOffset();\n\t\t\t\t\t\tthis.calcLayout(true);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tMath.abs(scrollSpeed) > 1 &&\n\t\t\t\t\t\t\t!this.scrollBoundary.includes(this.scrollOffset)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\trequestAnimationFrame(onScrollFrame);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.endScrollHandler();\n\t\t\t\t\t\tlt = dt;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\trequestAnimationFrame(onScrollFrame);\n\t\t\t\tthis.endScrollHandler();\n\t\t\t}\n\t\t});\n\t\tthis.element.addEventListener(\"wheel\", (evt) => {\n\t\t\tif (this.beginScrollHandler()) {\n\t\t\t\tif (evt.deltaMode === evt.DOM_DELTA_PIXEL) {\n\t\t\t\t\tthis.scrollOffset += evt.deltaY;\n\t\t\t\t\tthis.limitScrollOffset();\n\t\t\t\t\tthis.calcLayout(true);\n\t\t\t\t} else {\n\t\t\t\t\tthis.scrollOffset += evt.deltaY * 50;\n\t\t\t\t\tthis.limitScrollOffset();\n\t\t\t\t\tthis.calcLayout(false);\n\t\t\t\t}\n\t\t\t\tthis.endScrollHandler();\n\t\t\t}\n\t\t});\n\t}\n\tprivate beginScrollHandler() {\n\t\tconst allowed = this.allowScroll;\n\t\tif (allowed) {\n\t\t\tthis.isScrolled = true;\n\t\t\tthis.invokedByScrollEvent = true;\n\t\t\tclearTimeout(this.scrolledHandler);\n\t\t\tthis.scrolledHandler = setTimeout(() => {\n\t\t\t\tthis.isScrolled = false;\n\t\t\t\tthis.scrollOffset = 0;\n\t\t\t}, 5000);\n\t\t}\n\t\treturn allowed;\n\t}\n\tprivate endScrollHandler() {\n\t\tthis.invokedByScrollEvent = false;\n\t}\n\tprivate limitScrollOffset() {\n\t\tthis.scrollOffset = Math.max(\n\t\t\tMath.min(this.scrollBoundary[1], this.scrollOffset),\n\t\t\tthis.scrollBoundary[0],\n\t\t);\n\t}\n\t/**\n\t * 获取当前播放时间里是否处于间奏区间\n\t * 如果是则会返回单位为毫秒的始末时间\n\t * 否则返回 undefined\n\t *\n\t * 这个只允许内部调用\n\t * @returns [开始时间,结束时间,大概处于的歌词行ID,下一句是否为对唱歌词] 或 undefined 如果不处于间奏区间\n\t */\n\tgetCurrentInterlude(): [number, number, number, boolean] | undefined {\n\t\tif (this.bufferedLines.size > 0) return undefined;\n\t\tconst currentTime = this.currentTime + 20;\n\t\tconst i = this.scrollToIndex;\n\t\tif (i === 0) {\n\t\t\tif (this.processedLines[0]?.startTime) {\n\t\t\t\tif (this.processedLines[0].startTime > currentTime) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\tcurrentTime,\n\t\t\t\t\t\tMath.max(currentTime, this.processedLines[0].startTime - 250),\n\t\t\t\t\t\t-2,\n\t\t\t\t\t\tthis.processedLines[0].isDuet,\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tthis.processedLines[1].startTime > currentTime &&\n\t\t\t\t\tthis.processedLines[0].endTime < currentTime\n\t\t\t\t) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\tMath.max(this.processedLines[0].endTime, currentTime),\n\t\t\t\t\t\tthis.processedLines[1].startTime,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tthis.processedLines[1].isDuet,\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (\n\t\t\tthis.processedLines[i]?.endTime &&\n\t\t\tthis.processedLines[i + 1]?.startTime\n\t\t) {\n\t\t\tif (\n\t\t\t\tthis.processedLines[i + 1].startTime > currentTime &&\n\t\t\t\tthis.processedLines[i].endTime < currentTime\n\t\t\t) {\n\t\t\t\treturn [\n\t\t\t\t\tMath.max(this.processedLines[i].endTime, currentTime),\n\t\t\t\t\tthis.processedLines[i + 1].startTime,\n\t\t\t\t\ti,\n\t\t\t\t\tthis.processedLines[i + 1].isDuet,\n\t\t\t\t];\n\t\t\t}\n\t\t\tif (\n\t\t\t\tthis.processedLines[i + 2]?.startTime &&\n\t\t\t\tthis.processedLines[i + 2].startTime > currentTime &&\n\t\t\t\tthis.processedLines[i + 1].endTime < currentTime\n\t\t\t) {\n\t\t\t\treturn [\n\t\t\t\t\tMath.max(this.processedLines[i + 1].endTime, currentTime),\n\t\t\t\t\tthis.processedLines[i + 2].startTime,\n\t\t\t\t\ti + 1,\n\t\t\t\t\tthis.processedLines[i + 2].isDuet,\n\t\t\t\t];\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\t/**\n\t * 重建样式\n\t *\n\t * 这个只允许内部调用\n\t *\n\t * @private\n\t */\n\trebuildStyle() {\n\t\tthis._baseFontSize = Number.parseFloat(\n\t\t\tgetComputedStyle(this.element).fontSize,\n\t\t);\n\t\tlet style = \"\";\n\t\tstyle += \"--amll-lp-width:\";\n\t\tconst width = this.innerSize[0] - this._baseFontSize * 2;\n\t\tstyle += `${width.toFixed(4)}px;`;\n\t\tstyle += \"--amll-lp-height:\";\n\t\tstyle += `${(this.innerSize[1] - this._baseFontSize * 2).toFixed(4)}px;`;\n\t\t// 原本想用 calc 来计算的,但是发现算式复杂之后无法解析,所以只能用 JS 来计算直接结果了\n\t\tstyle += \"--amll-lp-line-width:\";\n\t\tif (this.innerSize[0] < 768) {\n\t\t\tstyle += `${width.toFixed(4)}px;`;\n\t\t} else {\n\t\t\tstyle += `${(width * 0.8).toFixed(4)}px;`;\n\t\t}\n\n\t\t// style += \"--amll-player-time:\";\n\t\t// style += this.currentTime;\n\t\t// style += \";\";\n\t\tthis.element.setAttribute(\"style\", style);\n\t}\n\t/**\n\t * 设置是否隐藏已经播放过的歌词行,默认不隐藏\n\t * @param hide 是否隐藏已经播放过的歌词行,默认不隐藏\n\t */\n\tsetHidePassedLines(hide: boolean) {\n\t\tthis.hidePassedLines = hide;\n\t\tthis.calcLayout();\n\t}\n\t/**\n\t * 设置是否启用歌词行的模糊效果\n\t * @param enable 是否启用\n\t */\n\tsetEnableBlur(enable: boolean) {\n\t\tif (this.enableBlur === enable) return;\n\t\tthis.enableBlur = enable;\n\t\tthis.calcLayout();\n\t}\n\n\tpublic get wordFadeWidth() {\n\t\treturn this._wordFadeWidth;\n\t}\n\n\t/**\n\t * 设置文字动画的渐变宽度,单位以歌词行的主文字字体大小的倍数为单位,默认为 0.5,即一个全角字符的一半宽度\n\t *\n\t * 如果要模拟 Apple Music for Android 的效果,可以设置为 1\n\t *\n\t * 如果要模拟 Apple Music for iPad 的效果,可以设置为 0.5\n\t *\n\t * 如果想要近乎禁用渐变效果,可以设置成非常接近 0 的小数(例如 `0.0001` ),但是**不可以为 0**\n\t *\n\t * @param value 需要设置的渐变宽度,单位以歌词行的主文字字体大小的倍数为单位,默认为 0.5\n\t */\n\tsetWordFadeWidth(value = 0.5) {\n\t\tthis._wordFadeWidth = Math.max(0.0001, value);\n\t\tfor (const el of this.lyricLinesEl) {\n\t\t\tel.markMaskImageDirty();\n\t\t}\n\t}\n\n\t/**\n\t * 设置当前播放歌词,要注意传入后这个数组内的信息不得修改,否则会发生错误\n\t * @param lines 歌词数组\n\t * @param initialTime 初始时间,默认为 0\n\t */\n\tsetLyricLines(lines: LyricLine[], initialTime = 0) {\n\t\tfor (const line of lines) {\n\t\t\tfor (const word of line.words) {\n\t\t\t\tword.word = word.word.replace(/\\s+/g, \" \");\n\t\t\t}\n\t\t}\n\t\tthis.lastCurrentTime = initialTime;\n\t\tthis.currentTime = initialTime;\n\t\tthis.lyricLines = lines;\n\t\tthis.processedLines = structuredClone(lines) as LyricLine[];\n\n\t\tthis.isNonDynamic = true;\n\t\tthis.isNonDuet = true;\n\t\tfor (const line of this.processedLines) {\n\t\t\tif (line.words.length > 1) {\n\t\t\t\tthis.isNonDynamic = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tfor (const line of this.processedLines) {\n\t\t\tif (line.isDuet) {\n\t\t\t\tthis.isNonDuet = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.rebuildStyle();\n\n\t\t// 将行间有较短空隙的两个歌词行的结束时间拉长,与下一行歌词行的开始时间一致,以便于更好的显示\n\t\tthis.processedLines.forEach((line, i, lines) => {\n\t\t\tconst nextLine = lines[i + 1];\n\t\t\tconst lastWord = line.words[line.words.length - 1];\n\t\t\tif (lastWord) {\n\t\t\t\tif (nextLine) {\n\t\t\t\t\tif (nextLine.startTime > line.endTime) {\n\t\t\t\t\t\tline.endTime = Math.min(line.endTime + 1500, nextLine.startTime);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tline.endTime = line.endTime + 1500;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// 让背景歌词和上一行歌词一同出现\n\t\tthis.processedLines.forEach((line, i, lines) => {\n\t\t\tif (line.isBG) return;\n\t\t\tconst nextLine = lines[i + 1];\n\t\t\tif (nextLine?.isBG) {\n\t\t\t\tnextLine.startTime = Math.min(nextLine.startTime, line.startTime);\n\t\t\t}\n\t\t});\n\t\tfor (const line of this.lyricLinesEl) {\n\t\t\tline.removeMouseEventListener(\"click\", this.onLineClickedHandler);\n\t\t\tline.removeMouseEventListener(\"contextmenu\", this.onLineClickedHandler);\n\t\t\tline.dispose();\n\t\t}\n\n\t\t// 创建新的歌词行元素\n\t\tthis.lyricLinesEl = this.processedLines.map((line) => {\n\t\t\tconst lineEl = new LyricLineEl(this, line);\n\t\t\tlineEl.addMouseEventListener(\"click\", this.onLineClickedHandler);\n\t\t\tlineEl.addMouseEventListener(\"contextmenu\", this.onLineClickedHandler);\n\t\t\treturn lineEl;\n\t\t});\n\n\t\tthis.lyricLinesEl.forEach((el, i) => {\n\t\t\tthis.element.appendChild(el.getElement());\n\t\t\tthis.lyricLinesIndexes.set(el, i);\n\t\t\tel.markMaskImageDirty();\n\t\t});\n\t\tthis.interludeDots.setInterlude(undefined);\n\t\tthis.hotLines.clear();\n\t\tthis.bufferedLines.clear();\n\t\tthis.setLinePosXSpringParams({});\n\t\tthis.setLinePosYSpringParams({});\n\t\tthis.setLineScaleSpringParams({});\n\t\tthis.resetScroll();\n\t\tthis.setCurrentTime(0, true);\n\t\tthis.calcLayout(true, true);\n\t}\n\t/**\n\t * 重置用户滚动状态\n\t *\n\t * 请在用户完成滚动点击跳转歌词时调用本事件再调用 `calcLayout` 以正确滚动到目标位置\n\t */\n\tresetScroll() {\n\t\tthis.isScrolled = false;\n\t\tthis.scrollOffset = 0;\n\t\tthis.invokedByScrollEvent = false;\n\t\tclearTimeout(this.scrolledHandler);\n\t\tthis.scrolledHandler = 0;\n\t}\n\t/**\n\t * 重新布局定位歌词行的位置,调用完成后再逐帧调用 `update`\n\t * 函数即可让歌词通过动画移动到目标位置。\n\t *\n\t * 函数有一个 `force` 参数,用于指定是否强制修改布局,也就是不经过动画直接调整元素位置和大小。\n\t *\n\t * 此函数还有一个 `reflow` 参数,用于指定是否需要重新计算布局\n\t *\n\t * 因为计算布局必定会导致浏览器重排布局,所以会大幅度影响流畅度和性能,故请只在以下情况下将其设置为 true:\n\t *\n\t * 1. 歌词页面大小发生改变时(这个组件会自行处理)\n\t * 2. 加载了新的歌词时(不论前后歌词是否完全一样)\n\t * 3. 用户自行跳转了歌曲播放位置(不论距离远近)\n\t *\n\t * @param force 是否不经过动画直接修改布局定位\n\t * @param reflow 是否进行重新布局(重新计算每行歌词大小)\n\t */\n\tcalcLayout(force = false, reflow = false) {\n\t\tif (reflow) {\n\t\t\t// this.emUnit = Number.parseFloat(getComputedStyle(this.element).fontSize);\n\t\t\tfor (const el of this.lyricLinesEl) {\n\t\t\t\tconst size: [number, number] = el.measureSize();\n\t\t\t\tthis.lyricLinesSize.set(el, size);\n\t\t\t\tel.lineSize = size;\n\t\t\t}\n\t\t\tthis.interludeDotsSize[0] = this.interludeDots.getElement().clientWidth;\n\t\t\tthis.interludeDotsSize[1] = this.interludeDots.getElement().clientHeight;\n\n\t\t\tthis.bottomLine.lineSize = this.bottomLine.measureSize();\n\t\t}\n\t\tconst interlude = this.getCurrentInterlude();\n\t\tlet curPos = -this.scrollOffset;\n\t\tlet targetAlignIndex = this.scrollToIndex;\n\t\tlet interludeDuration = 0;\n\t\tif (interlude) {\n\t\t\tinterludeDuration = interlude[1] - interlude[0];\n\t\t\tif (interludeDuration >= 4000) {\n\t\t\t\tconst nextLine = this.lyricLinesEl[interlude[2] + 1];\n\t\t\t\tif (nextLine) {\n\t\t\t\t\ttargetAlignIndex = interlude[2] + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthis.interludeDots.setInterlude(undefined);\n\t\t}\n\t\tconst scrollOffset = this.lyricLinesEl\n\t\t\t.slice(0, targetAlignIndex)\n\t\t\t.reduce(\n\t\t\t\t(acc, el) =>\n\t\t\t\t\tacc +\n\t\t\t\t\t(el.getLine().isBG ? 0 : (this.lyricLinesSize.get(el)?.[1] ?? 0)),\n\t\t\t\t0,\n\t\t\t);\n\t\tthis.scrollBoundary[0] = -scrollOffset;\n\t\tcurPos -= scrollOffset;\n\t\tcurPos += this.size[1] * this.alignPosition;\n\t\tconst curLine = this.lyricLinesEl[targetAlignIndex];\n\t\tif (curLine) {\n\t\t\tconst lineHeight = this.lyricLinesSize.get(curLine)?.[1] ?? 0;\n\t\t\tswitch (this.alignAnchor) {\n\t\t\t\tcase \"bottom\":\n\t\t\t\t\tcurPos -= lineHeight;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"center\":\n\t\t\t\t\tcurPos -= lineHeight / 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"top\":\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tconst latestIndex = Math.max(...this.bufferedLines);\n\t\tlet delay = 0;\n\t\tlet baseDelay = 0.05;\n\t\tlet setDots = false;\n\t\tthis.lyricLinesEl.forEach((el, i) => {\n\t\t\tconst hasBuffered = this.bufferedLines.has(i);\n\t\t\tconst isActive =\n\t\t\t\thasBuffered || (i >= this.scrollToIndex && i < latestIndex);\n\t\t\tconst line = el.getLine();\n\t\t\tlet left = 24;\n\t\t\tif (line.isDuet) {\n\t\t\t\tleft = this.size[0] - (this.lyricLinesSize.get(el)?.[0] ?? 0);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!setDots &&\n\t\t\t\tinterludeDuration >= 4000 &&\n\t\t\t\t((i === this.scrollToIndex && interlude?.[2] === -2) ||\n\t\t\t\t\ti === this.scrollToIndex + 1)\n\t\t\t) {\n\t\t\t\tsetDots = true;\n\t\t\t\tthis.interludeDots.setTransform(24, curPos + 10);\n\t\t\t\tif (interlude) {\n\t\t\t\t\tthis.interludeDots.setInterlude([interlude[0], interlude[1]]);\n\t\t\t\t}\n\t\t\t\tcurPos += this.interludeDotsSize[1] + 40;\n\t\t\t}\n\t\t\tlet targetOpacity: number;\n\t\t\tlet targetSubOpacity: number;\n\n\t\t\tif (this.hidePassedLines) {\n\t\t\t\tif (i < (interlude ? interlude[2] + 1 : this.scrollToIndex)) {\n\t\t\t\t\ttargetOpacity = 0;\n\t\t\t\t\ttargetSubOpacity = 0;\n\t\t\t\t} else if (hasBuffered) {\n\t\t\t\t\ttargetOpacity = 0.85;\n\t\t\t\t\ttargetSubOpacity = 0.4;\n\t\t\t\t} else {\n\t\t\t\t\ttargetOpacity = this.isNonDynamic ? 0.2 : 1;\n\t\t\t\t\ttargetSubOpacity = 0.2;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (hasBuffered) {\n\t\t\t\t\ttargetOpacity = 0.85;\n\t\t\t\t\ttargetSubOpacity = 0.4;\n\t\t\t\t} else {\n\t\t\t\t\ttargetOpacity = this.isNonDynamic ? 0.2 : 1;\n\t\t\t\t\ttargetSubOpacity = 0.2;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet blurLevel = 0;\n\t\t\tif (this.enableBlur) {\n\t\t\t\tif (isActive) {\n\t\t\t\t\tblurLevel = 0;\n\t\t\t\t} else {\n\t\t\t\t\tblurLevel = 1;\n\t\t\t\t\tif (i < this.scrollToIndex) {\n\t\t\t\t\t\tblurLevel += Math.abs(this.scrollToIndex - i) + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tblurLevel += Math.abs(\n\t\t\t\t\t\t\ti - Math.max(this.scrollToIndex, latestIndex),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.invokedByScrollEvent) {\n\t\t\t\tblurLevel = 0;\n\t\t\t}\n\n\t\t\tconst SCALE_ASPECT = this.enableScale ? 97 : 100;\n\n\t\t\tel.setTransform(\n\t\t\t\tleft,\n\t\t\t\tcurPos,\n\t\t\t\tisActive ? 100 : line.isBG ? 75 : SCALE_ASPECT,\n\t\t\t\ttargetOpacity,\n\t\t\t\ttargetSubOpacity,\n\t\t\t\twindow.innerWidth <= 1024 ? blurLevel * 0.8 : blurLevel,\n\t\t\t\tforce,\n\t\t\t\tdelay,\n\t\t\t);\n\t\t\tif (line.isBG && isActive) {\n\t\t\t\tcurPos += this.lyricLinesSize.get(el)?.[1] ?? 0;\n\t\t\t} else if (!line.isBG) {\n\t\t\t\tcurPos += this.lyricLinesSize.get(el)?.[1] ?? 0;\n\t\t\t}\n\t\t\tif (curPos >= 0 && !this.isSeeking) {\n\t\t\t\tif (!line.isBG) delay += baseDelay;\n\t\t\t\t// if (i >= this.scrollToIndex - 1) baseDelay *= 1.05;\n\t\t\t\t// baseDelay = Math.min(baseDelay, 0.055);\n\n\t\t\t\t// delay += 0.05;\n\n\t\t\t\t// baseDelay = baseDelay > 0.15 ? 0 : baseDelay;\n\t\t\t\t// delay = (i - this.scrollToIndex) * 0.06;\n\t\t\t\tif (i >= this.scrollToIndex) baseDelay /= 1.05;\n\t\t\t\t// baseDelay = Math.max(baseDelay, 0.04);\n\t\t\t}\n\t\t});\n\t\tthis.scrollBoundary[1] = curPos + this.scrollOffset - this.size[1] / 2;\n\t\t// console.groupEnd();\n\t\tthis.bottomLine.setTransform(24, curPos, force, delay);\n\t}\n\t/**\n\t * 获取当前歌词的播放位置\n\t *\n\t * 一般和最后调用 `setCurrentTime` 给予的参数一样\n\t * @returns 当前播放位置\n\t */\n\tgetCurrentTime() {\n\t\treturn this.currentTime;\n\t}\n\t/**\n\t * 获取当前歌词数组\n\t *\n\t * 一般和最后调用 `setLyricLines` 给予的参数一样\n\t * @returns 当前歌词数组\n\t */\n\tgetLyricLines() {\n\t\treturn this.lyricLines;\n\t}\n\tgetElement(): HTMLElement {\n\t\treturn this.element;\n\t}\n\t/**\n\t * 获取一个特殊的底栏元素,默认是空白的,可以往内部添加任意元素\n\t *\n\t * 这个元素始终在歌词的底部,可以用于显示歌曲创作者等信息\n\t *\n\t * 但是请勿删除该元素,只能在内部存放元素\n\t *\n\t * @returns 一个元素,可以往内部添加任意元素\n\t */\n\tgetBottomLineElement(): HTMLElement {\n\t\treturn this.bottomLine.getElement();\n\t}\n\t/**\n\t * 设置目标歌词行的对齐方式,默认为 `center`\n\t *\n\t * - 设置成 `top` 的话将会向目标歌词行的顶部对齐\n\t * - 设置成 `bottom` 的话将会向目标歌词行的底部对齐\n\t * - 设置成 `center` 的话将会向目标歌词行的垂直中心对齐\n\t * @param alignAnchor 歌词行对齐方式,详情见函数说明\n\t */\n\tsetAlignAnchor(alignAnchor: \"top\" | \"bottom\" | \"center\") {\n\t\tthis.alignAnchor = alignAnchor;\n\t}\n\t/**\n\t * 设置默认的歌词行对齐位置,相对于整个歌词播放组件的大小位置,默认为 `0.5`\n\t * @param alignPosition 一个 `[0.0-1.0]` 之间的任意数字,代表组件高度由上到下的比例位置\n\t */\n\tsetAlignPosition(alignPosition: number) {\n\t\tthis.alignPosition = alignPosition;\n\t}\n\t/**\n\t * 设置当前播放进度,单位为毫秒且**必须是整数**,此时将会更新内部的歌词进度信息\n\t * 内部会根据调用间隔和播放进度自动决定如何滚动和显示歌词,所以这个的调用频率越快越准确越好\n\t *\n\t * 调用完成后,可以每帧调用 `update` 函数来执行歌词动画效果\n\t * @param time 当前播放进度,单位为毫秒\n\t */\n\tsetCurrentTime(time: number, isSeek = false) {\n\t\t// 我在这里定义了歌词的选择状态:\n\t\t// 普通行:当前不处于时间范围内的歌词行\n\t\t// 热行:当前绝对处于播放时间内的歌词行,且一般会被立刻加入到缓冲行中\n\t\t// 缓冲行:一般处于播放时间后的歌词行,会因为当前播放状态的缘故推迟解除状态\n\n\t\t// 然后我们需要让歌词行为如下:\n\t\t// 如果当前仍有缓冲行的情况下加入新热行,则不会解除当前缓冲行,且也不会修改当前滚动位置\n\t\t// 如果当前所有缓冲行都将被删除且没有新热行加入,则删除所有缓冲行,且也不会修改当前滚动位置\n\t\t// 如果当前所有缓冲行都将被删除且有新热行加入,则删除所有缓冲行并加入新热行作为缓冲行,然后修改当前滚动位置\n\t\tthis.initializeSeeking = isSeek;\n\t\tthis.currentTime = time;\n\t\tif (Math.abs(this.currentTime - this.lastCurrentTime) >= 100) {\n\t\t\tthis.initializeSeeking = true;\n\t\t} else this.initializeSeeking = false;\n\t\tif (!this.isPageVisible) return;\n\t\tif (!this._getIsNonDynamic() && !this.supportMaskImage)\n\t\t\tthis.element.style.setProperty(\"--amll-player-time\", `${time}`);\n\t\tif (this.isScrolled) return;\n\t\tconst removedHotIds = new Set<number>();\n\t\tconst removedIds = new Set<number>();\n\t\tconst addedIds = new Set<number>();\n\n\t\tif (isSeek) {\n\t\t\tfor (const line of this.lyricLinesEl) {\n\t\t\t\tline.setMaskAnimationState(time);\n\t\t\t}\n\t\t}\n\n\t\t// 先检索当前已经超出时间范围的缓冲行,列入待删除集内\n\t\tfor (const lastHotId of this.hotLines) {\n\t\t\tconst line = this.processedLines[lastHotId];\n\t\t\tif (line) {\n\t\t\t\tif (line.isBG) return;\n\t\t\t\tconst nextLine = this.processedLines[lastHotId + 1];\n\t\t\t\tif (nextLine?.isBG) {\n\t\t\t\t\tconst nextMainLine = this.processedLines[lastHotId + 2];\n\t\t\t\t\tconst startTime = Math.min(line.startTime, nextLine?.startTime);\n\t\t\t\t\tconst endTime = Math.min(\n\t\t\t\t\t\tMath.max(line.endTime, nextMainLine?.startTime ?? Number.MAX_VALUE),\n\t\t\t\t\t\tMath.max(line.endTime, nextLine?.endTime),\n\t\t\t\t\t);\n\t\t\t\t\tif (startTime > time || endTime <= time) {\n\t\t\t\t\t\tthis.hotLines.delete(lastHotId);\n\t\t\t\t\t\tremovedHotIds.add(lastHotId);\n\t\t\t\t\t\tthis.hotLines.delete(lastHotId + 1);\n\t\t\t\t\t\tremovedHotIds.add(lastHotId + 1);\n\t\t\t\t\t\tif (isSeek) {\n\t\t\t\t\t\t\tthis.lyricLinesEl[lastHotId].disable(time);\n\t\t\t\t\t\t\tthis.lyricLinesEl[lastHotId + 1].disable(time);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (line.startTime > time || line.endTime <= time) {\n\t\t\t\t\tthis.hotLines.delete(lastHotId);\n\t\t\t\t\tremovedHotIds.add(lastHotId);\n\t\t\t\t\tif (isSeek) this.lyricLinesEl[lastHotId].disable(time);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.hotLines.delete(lastHotId);\n\t\t\t\tremovedHotIds.add(lastHotId);\n\t\t\t\tif (isSeek) this.lyricLinesEl[lastHotId].disable(time);\n\t\t\t}\n\t\t}\n\t\tthis.processedLines.forEach((line, id, arr) => {\n\t\t\tif (!line.isBG && line.startTime <= time && line.endTime > time) {\n\t\t\t\tif (!this.hotLines.has(id)) {\n\t\t\t\t\tthis.hotLines.add(id);\n\t\t\t\t\taddedIds.add(id);\n\t\t\t\t\tif (isSeek) this.lyricLinesEl[id].enable(time);\n\t\t\t\t\tif (arr[id + 1]?.isBG) {\n\t\t\t\t\t\tthis.hotLines.add(id + 1);\n\t\t\t\t\t\taddedIds.add(id + 1);\n\t\t\t\t\t\tif (isSeek) this.lyricLinesEl[id + 1].enable(time);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tfor (const v of this.bufferedLines) {\n\t\t\tif (!this.hotLines.has(v)) {\n\t\t\t\tremovedIds.add(v);\n\t\t\t\tif (isSeek) this.lyricLinesEl[v].disable(time);\n\t\t\t}\n\t\t}\n\t\tif (isSeek) {\n\t\t\tif (this.bufferedLines.size > 0) {\n\t\t\t\tthis.scrollToIndex = Math.min(...this.bufferedLines);\n\t\t\t} else {\n\t\t\t\tthis.scrollToIndex = this.processedLines.findIndex(\n\t\t\t\t\t(line) => line.startTime >= time,\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.bufferedLines.clear();\n\t\t\tfor (const v of this.hotLines) {\n\t\t\t\tthis.bufferedLines.add(v);\n\t\t\t}\n\t\t\tthis.calcLayout(true);\n\t\t} else if (removedIds.size > 0 || addedIds.size > 0) {\n\t\t\tif (removedIds.size === 0 && addedIds.size > 0) {\n\t\t\t\tfor (const v of addedIds) {\n\t\t\t\t\tthis.bufferedLines.add(v);\n\t\t\t\t\tthis.lyricLinesEl[v].enable(time);\n\t\t\t\t}\n\t\t\t\tthis.scrollToIndex = Math.min(...this.bufferedLines);\n\t\t\t\tthis.calcLayout();\n\t\t\t} else if (addedIds.size === 0 && removedIds.size > 0) {\n\t\t\t\tif (eqSet(removedIds, this.bufferedLines)) {\n\t\t\t\t\tfor (const v of this.bufferedLines) {\n\t\t\t\t\t\tif (!this.hotLines.has(v)) {\n\t\t\t\t\t\t\tthis.bufferedLines.delete(v);\n\t\t\t\t\t\t\tthis.lyricLinesEl[v].disable(time);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.calcLayout();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const v of addedIds) {\n\t\t\t\t\tthis.bufferedLines.add(v);\n\t\t\t\t\tthis.lyricLinesEl[v].enable(time);\n\t\t\t\t}\n\t\t\t\tfor (const v of removedIds) {\n\t\t\t\t\tthis.bufferedLines.delete(v);\n\t\t\t\t\tthis.lyricLinesEl[v].disable(time);\n\t\t\t\t}\n\t\t\t\tif (this.bufferedLines.size > 0)\n\t\t\t\t\tthis.scrollToIndex = Math.min(...this.bufferedLines);\n\t\t\t\tthis.calcLayout();\n\t\t\t}\n\t\t}\n\t\tthis.lastCurrentTime = time;\n\t}\n\t/**\n\t * 暂停部分效果演出,目前会暂停播放间奏点的动画\n\t */\n\tpause() {\n\t\tthis.interludeDots.pause();\n\t\tfor (const line of this.lyricLinesEl) {\n\t\t\tline.pause(this.currentTime);\n\t\t}\n\t}\n\t/**\n\t * 恢复部分效果演出,目前会恢复播放间奏点的动画\n\t */\n\tresume() {\n\t\tthis.interludeDots.resume();\n\t\tfor (const line of this.lyricLinesEl) {\n\t\t\tline.resume(this.currentTime);\n\t\t}\n\t}\n\t/**\n\t * 更新动画,这个函数应该被逐帧调用或者在以下情况下调用一次:\n\t *\n\t * 1. 刚刚调用完设置歌词函数的时候\n\t * @param delta 距离上一次被调用到现在的时长,单位为毫秒(可为浮点数)\n\t */\n\tupdate(delta = 0) {\n\t\tif (!this.isPageVisible) return;\n\t\tconst deltaS = delta / 1000;\n\t\tthis.interludeDots.update(delta);\n\t\tthis.bottomLine.update(deltaS);\n\t\tfor (const line of this.lyricLinesEl) {\n\t\t\tline.update(deltaS);\n\t\t}\n\t}\n\n\t/**\n\t * 设置所有歌词行在横坐标上的弹簧属性,包括重量、弹力和阻力。\n\t *\n\t * @param params 需要设置的弹簧属性,提供的属性将会覆盖原来的属性,未提供的属性将会保持原样\n\t */\n\tsetLinePosXSpringParams(params: Partial<SpringParams>) {\n\t\tthis.posXSpringParams = {\n\t\t\t...this.posXSpringParams,\n\t\t\t...params,\n\t\t};\n\t\tthis.bottomLine.lineTransforms.posX.updateParams(this.posXSpringParams);\n\t\tfor (const line of this.lyricLinesEl) {\n\t\t\tline.lineTransforms.posX.updateParams(this.posXSpringParams);\n\t\t}\n\t}\n\t/**\n\t * 设置所有歌词行在纵坐标上的弹簧属性,包括重量、弹力和阻力。\n\t *\n\t * @param params 需要设置的弹簧属性,提供的属性将会覆盖原来的属性,未提供的属性将会保持原样\n\t */\n\tsetLinePosYSpringParams(params: Partial<SpringParams>) {\n\t\tthis.posYSpringParams = {\n\t\t\t...this.posYSpringParams,\n\t\t\t...params,\n\t\t};\n\t\tthis.bottomLine.lineTransforms.posY.updateParams(this.posYSpringParams);\n\t\tfor (const line of this.lyricLinesEl) {\n\t\t\tline.lineTransforms.posY.updateParams(this.posYSpringParams);\n\t\t}\n\t}\n\t/**\n\t * 设置所有歌词行在缩放大小上的弹簧属性,包括重量、弹力和阻力。\n\t *\n\t * @param params 需要设置的弹簧属性,提供的属性将会覆盖原来的属性,未提供的属性将会保持原样\n\t */\n\tsetLineScaleSpringParams(params: Partial<SpringParams>) {\n\t\tthis.scaleSpringParams = {\n\t\t\t...this.scaleSpringParams,\n\t\t\t...params,\n\t\t};\n\t\tthis.scaleForBGSpringParams = {\n\t\t\t...this.scaleForBGSpringParams,\n\t\t\t...params,\n\t\t};\n\t\tfor (const line of this.lyricLinesEl) {\n\t\t\tif (line.getLine().isBG) {\n\t\t\t\tline.lineTransforms.scale.updateParams(this.scaleForBGSpringParams);\n\t\t\t} else {\n\t\t\t\tline.lineTransforms.scale.updateParams(this.scaleSpringParams);\n\t\t\t}\n\t\t}\n\t}\n\tdispose(): void {\n\t\tthis.element.remove();\n\t\tthis.resizeObserver.disconnect();\n\t\tfor (const el of this.lyricLinesEl) {\n\t\t\tel.dispose();\n\t\t}\n\t\twindow.removeEventListener(\"pageshow\", this.onPageShow);\n\t\tthis.bottomLine.dispose();\n\t\tthis.interludeDots.dispose();\n\t}\n}\n"],"names":["AbstractBaseRenderer","BaseRenderer","canvas","__publicField","width","height","scale","speed","loadImage","imageUrl","resolve","reject","img","loadVideo","videoUrl","video","playing","timeupdate","rejected","checkReady","err","loadResourceFromUrl","url","isVideo","loadResourceFromElement","element","TimedContainer","Container","PixiRenderer","delta","lastContainer","s1","s2","s3","s4","maxSize","Application","minBorder","maxBorder","c0","ColorMatrixFilter","c1","c2","_a","filter","BlurFilter","BulgePinchFilter","enable","fps","_volume","_hasLyric","albumSource","res","remainRetryTimes","tex","_b","Texture","error","container","Sprite","EPSILON","IDENTITY_4X4","_Mat4","values","v","a","b","rad","axis","fovy","aspect","near","far","left","right","bottom","top","out","a01","a02","a03","a12","a13","a23","a00","a10","a11","a20","a21","a22","a30","a31","a32","a33","b00","b01","b02","b03","b04","b05","b06","b07","b08","b09","b10","b11","det","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","x","y","z","len","s","c","t","b12","b20","b21","b22","q","w","x2","y2","z2","xx","xy","xz","yy","yz","zz","wx","wy","wz","bx","by","bz","bw","ax","ay","az","aw","magnitude","tmpVec3","cx","cy","cz","mat","m11","m12","m13","m21","m22","m23","m31","m32","m33","is1","is2","is3","sm11","sm12","sm13","sm21","sm22","sm23","sm31","sm32","sm33","trace","S","out_r","out_t","out_s","sx","sy","sz","o","ox","oy","oz","out0","out1","out2","out4","out5","out6","out8","out9","out10","yx","zx","zy","rl","tb","nf","f","fov","upTan","downTan","leftTan","rightTan","xScale","yScale","lr","bt","eye","center","up","eyex","eyey","eyez","upx","upy","upz","centerx","centery","centerz","z0","z1","x0","x1","y0","y1","target","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a14","a15","b13","b14","b15","Mat4","_Vec3","value","angle","sinTotal","ratioA","ratioB","d","factorTimes2","factor1","factor2","factor3","factor4","inverseFactor","inverseFactorTimesTwo","m","qx","qy","qz","w2","uvx","uvy","uvz","uuvx","uuvy","uuvz","py","pz","px","mag","cosine","Vec3","_Vec4","u","e","g","h","i","j","qw","ix","iy","iz","iw","Vec4","_Vec2","p0","p1","sinC","cosC","Vec2","blurImage","imageData","radius","quality","pixels","rsum","gsum","bsum","asum","p","p2","yp","yi","yw","wm","hm","rad1x","divx","rad1y","divy","div2","r","vmin","vmax","saturateImage","saturation","gray","brightnessImage","brightness","contrastImage","contrast","blendFragShader","blendVertShader","ur","vr","vp","preset","conf","CONTROL_POINT_PRESETS","meshFragShader","meshVertShader","GLProgram","gl","vertexShaderSource","fragmentShaderSource","label","num","attrs","info","location","type","source","shader","program","errLog","name","value1","value2","Mesh","attrPos","attrColor","attrUV","vertexBuf","indexBuf","vx","vy","idx","vertexWidth","vertexHeight","vertexData","indexData","ControlPoint","H","H_T","spUx","spUy","spV","spxAcc","spyAcc","surfacePoint","X","Y","output","meshCoefficients","p00","p01","p10","p11","l","colorCoefficients","cpUx","cpUy","cpUz","cpV","cprAcc","cpgAcc","cpbAcc","cpResult","colorPoint","R","G","B","Map2D","BHPMesh","subDivisions","point","subDivM1","tW","tH","sX","sY","pr","pg","pb","GLTexture","albumImageData","albumTexture","createOffscreenCanvas","MeshGradientRenderer","drawFrameBufferTexture","drawFrameBuffer","state","tickTime","frameDelta","cW","cH","latestMeshState","canBeStatic","deleted","ctx","imgw","imgh","newMesh","chosenPreset","uPower","vPower","cp","newState","volume","BackgroundRender","renderer","hasLyric","VOID","PRIMITIVE","ARRAY","OBJECT","DATE","REGEXP","MAP","SET","ERROR","BIGINT","env","deserializer","$","_","as","index","unpair","arr","object","key","flags","map","set","message","deserialize","serialized","EMPTY","toString","keys","typeOf","asString","shouldSkip","TYPE","serializer","strict","json","pair","entry","entries","serialize","lossy","structuredClone$1","any","options","debounceFrame","cb","frameTime","ft","args","onCB","eqSet","xs","ys","derivative","getVelocity","Spring","currentPosition","curV","solveSpring","targetPosition","params","delay","from","velocity","to","soft","stiffness","damping","mass","angular_frequency","leftover","damping_frequency","dfm","dm","BottomLineEl","lyricPlayer","styles","style","force","easeInOutBack","easeOutExpo","clamp","min","cur","max","InterludeDots","interlude","curStyle","interludeDuration","currentDuration","breatheDuration","globalOpacity","dotsDuration","dot0Opacity","dot1Opacity","dot2Opacity","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","C","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","LinearEasing","src","mY1","mY2","sampleValues","getTForX","intervalStart","currentSample","lastSample","dist","guessForT","initialSlope","createMatrix4","scaleMatrix4","origin","matrix4ToCSS","fractionDigits","format","n","measureTasks","mutateTasks","scheduled","onFlush","tmp","scheduleFlush","measure","callback","task","promise","mutate","CJKEXP","ANIMATION_FRAME_QUANTITY","norNum","EMP_EASING_MID","beginNum","endNum","bezIn","bezier","bezOut","makeEmpEasing","mid","generateFadeGradient","padding","bright","dark","totalAspect","widthInTotal","leftPos","chunkAndSplitLyricWords","words","resplitedWords","realLength","splited","charPos","word","wordChunk","wChunk","result","shouldEmphasize","RawLyricLineMouseEvent","line","event","getScaleFromTransform","transform","match","scaleX","scaleY","LyricLineEl","lyricLine","wrapped","listener","main","trans","roman","listeners","word1","word2","word1el","word2el","rect1","rect2","maskAnimationTime","currentTime","size","chunkedWords","chunk","merged","emp","wrapperWordEl","characterElements","mainWordEl","charEls","char","charEl","realWord","duration","wordEl","de","du","amount","blur","animateDu","empEasing","el","wordDe","frames","transX","glowLevel","offsetX","offsetY","glow","floatFrame","float","resolves","fadeWidth","maskImage","totalAspectStr","maskPos","totalFadeDuration","pv","widthBeforeSelf","minOffset","clampOffset","curPos","timeOffset","lastPos","lastTime","pushFrame","easing","moveOffset","time","staticTime","frame","lastTimeStamp","otherWord","curTimeStamp","staticDuration","fadeDuration","ani","opacity","subopacity","beforeInSight","enableSpring","afterInSight","roundedBlur","sub","LyricLineMouseEvent","lineIndex","LyricPlayer","rect","innerWidth","innerHeight","evt","startScrollY","direction","startTouchPosY","startScrollTime","scrollSpeed","scrollId","lastMoveY","lastDragTime","touchScreenY","lastDelta","targetDirection","curTime","scrollDuration","lt","curScrollId","onScrollFrame","dt","isSeeking","allowed","_c","_d","hide","lines","initialTime","structuredClone","nextLine","lineEl","reflow","targetAlignIndex","scrollOffset","acc","curLine","lineHeight","latestIndex","baseDelay","setDots","hasBuffered","isActive","targetOpacity","targetSubOpacity","blurLevel","SCALE_ASPECT","alignAnchor","alignPosition","isSeek","removedHotIds","removedIds","addedIds","lastHotId","nextMainLine","startTime","endTime","id","deltaS"],"mappings":"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","x_google_ignoreList":[3,4,5,6,7,16,17,18,19,26]}
|