From 12e97481a1a1e275c4384cf57799a9613c43c4e4 Mon Sep 17 00:00:00 2001 From: alvarosabu Date: Fri, 13 Dec 2024 10:39:11 +0100 Subject: [PATCH 01/65] docs: un-comment back the new features --- docs/.vitepress/config.ts | 12 ++++++------ docs/component-list/components.ts | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index f332b3292..52dc27285 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -75,16 +75,16 @@ export default defineConfig({ { text: 'useFBO', link: '/guide/abstractions/use-fbo' }, { text: 'useSurfaceSampler', link: '/guide/abstractions/use-surface-sampler' }, { text: 'Sampler', link: '/guide/abstractions/sampler' }, - /* { text: 'Edges', link: '/guide/abstractions/edges' }, */ + { text: 'Edges', link: '/guide/abstractions/edges' }, { text: 'PositionalAudio', link: '/guide/abstractions/positional-audio' }, { text: 'AnimatedSprite', link: '/guide/abstractions/animated-sprite' }, - /* { text: 'Mask', link: '/guide/abstractions/mask' }, + { text: 'Mask', link: '/guide/abstractions/mask' }, { text: 'CubeCamera', link: '/guide/abstractions/cube-camera' }, { text: 'ScreenSizer', link: '/guide/abstractions/screen-sizer' }, { text: 'ScreenSpace', link: '/guide/abstractions/screen-space' }, { text: 'Outline', link: '/guide/abstractions/outline' }, { text: 'Image', link: '/guide/abstractions/image' }, - { text: 'Billboard', link: '/guide/abstractions/billboard' }, */ + { text: 'Billboard', link: '/guide/abstractions/billboard' }, ], }, { @@ -119,7 +119,7 @@ export default defineConfig({ { text: 'MeshGlassMaterial', link: '/guide/materials/glass-material' }, { text: 'CustomShaderMaterial', link: '/guide/materials/custom-shader-material' }, { text: 'MeshReflectionMaterial', link: '/guide/materials/mesh-reflection-material' }, - /* { text: 'MeshDiscardMaterial', link: '/guide/materials/mesh-discard-material' }, */ + { text: 'MeshDiscardMaterial', link: '/guide/materials/mesh-discard-material' }, ], }, { @@ -159,9 +159,9 @@ export default defineConfig({ { text: 'Precipitation', link: '/guide/staging/precipitation' }, { text: 'Sparkles', link: '/guide/staging/sparkles' }, { text: 'Ocean', link: '/guide/staging/ocean' }, - /* { text: 'Align', link: '/guide/staging/align' }, + { text: 'Align', link: '/guide/staging/align' }, { text: 'SoftShadows', link: '/guide/staging/soft-shadows' }, - { text: 'Grid', link: '/guide/staging/grid' }, */ + { text: 'Grid', link: '/guide/staging/grid' }, ], }, { diff --git a/docs/component-list/components.ts b/docs/component-list/components.ts index bc0f235f7..80adbff4e 100644 --- a/docs/component-list/components.ts +++ b/docs/component-list/components.ts @@ -17,13 +17,13 @@ export default [ }, { text: 'Sampler', link: '/guide/abstractions/sampler' }, { text: 'PositionalAudio', link: '/guide/abstractions/positional-audio' }, - /* { text: 'Mask', link: '/guide/abstractions/mask' }, + { text: 'Mask', link: '/guide/abstractions/mask' }, { text: 'CubeCamera', link: '/guide/abstractions/cube-camera' }, { text: 'GradientTexture', link: '/guide/abstractions/gradient-texture' }, { text: 'ScreenSpace', link: '/guide/abstractions/screen-space' }, { text: 'Outline', link: '/guide/abstractions/outline' }, { text: 'Image', link: '/guide/abstractions/image' }, - { text: 'Billboard', link: '/guide/abstractions/billboard' }, */ + { text: 'Billboard', link: '/guide/abstractions/billboard' }, ], }, { @@ -66,10 +66,10 @@ export default [ text: 'HolographicMaterial', link: '/guide/materials/holographic-material', }, - /* { + { text: 'MeshDiscardMaterial', link: '/guide/materials/mesh-discard-material', - }, */ + }, ], }, { @@ -109,9 +109,9 @@ export default [ { text: 'Sparkles', link: '/guide/staging/sparkles' }, { text: 'Ocean', link: '/guide/staging/ocean' }, { text: 'Fit', link: '/guide/staging/fit' }, - /* { text: 'Align', link: '/guide/staging/align' }, + { text: 'Align', link: '/guide/staging/align' }, { text: 'SoftShadows', link: '/guide/staging/soft-shadows' }, - { text: 'Grid', link: '/guide/staging/grid' }, */ + { text: 'Grid', link: '/guide/staging/grid' }, ], }, { From 63535a24689c5fb1353b26d2add7f899a74ada37 Mon Sep 17 00:00:00 2001 From: andretchen0 Date: Fri, 13 Dec 2024 10:42:45 +0100 Subject: [PATCH 02/65] feat(Helper): add component, demo, docs (#543) * feat(Helper): add component, demo, docs * refactor(useHelper): use destructuring * refactor(useHelper): remove --------- Co-authored-by: Alvaro Saburido --- docs/.vitepress/config.ts | 1 + .../theme/components/HelperDemo.vue | 33 +++++++++++++ docs/component-list/components.ts | 1 + docs/guide/controls/helper.md | 18 ++++++++ .../vue/src/pages/controls/HelperDemo.vue | 38 +++++++++++++++ playground/vue/src/router/routes/controls.ts | 5 ++ src/core/controls/Helper/component.vue | 29 ++++++++++++ src/core/controls/Helper/useHelper.ts | 46 +++++++++++++++++++ src/core/controls/index.ts | 2 + 9 files changed, 173 insertions(+) create mode 100644 docs/.vitepress/theme/components/HelperDemo.vue create mode 100644 docs/guide/controls/helper.md create mode 100644 playground/vue/src/pages/controls/HelperDemo.vue create mode 100644 src/core/controls/Helper/component.vue create mode 100644 src/core/controls/Helper/useHelper.ts diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 52dc27285..af6d9b50e 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -97,6 +97,7 @@ export default defineConfig({ { text: 'KeyboardControls', link: '/guide/controls/keyboard-controls' }, { text: 'ScrollControls', link: '/guide/controls/scroll-controls' }, { text: 'MapControls', link: '/guide/controls/map-controls' }, + { text: 'Helper', link: '/guide/controls/helper' }, ], }, { diff --git a/docs/.vitepress/theme/components/HelperDemo.vue b/docs/.vitepress/theme/components/HelperDemo.vue new file mode 100644 index 000000000..c6b81b9bb --- /dev/null +++ b/docs/.vitepress/theme/components/HelperDemo.vue @@ -0,0 +1,33 @@ + + + diff --git a/docs/component-list/components.ts b/docs/component-list/components.ts index 80adbff4e..02f72ca98 100644 --- a/docs/component-list/components.ts +++ b/docs/component-list/components.ts @@ -39,6 +39,7 @@ export default [ { text: 'KeyboardControls', link: '/guide/controls/keyboard-controls' }, { text: 'ScrollControls', link: '/guide/controls/scroll-controls' }, { text: 'MapControls', link: '/guide/controls/map-controls' }, + { text: 'Helper', link: '/guide/controls/helper' }, ], }, { diff --git a/docs/guide/controls/helper.md b/docs/guide/controls/helper.md new file mode 100644 index 000000000..e641df8f6 --- /dev/null +++ b/docs/guide/controls/helper.md @@ -0,0 +1,18 @@ +# Helper + +`` handles instantiation, updates, and removal/disposal of THREE Helpers. + + + + + +## Usage + +<<< @/.vitepress/theme/components/HelperDemo.vue + +## Props + +| Prop | Description | Default | +| :------------------ | :-------------------------------------------------------------------------------------------- | ----------- | +| **type** | Helper constructor - required | | +| **args** | Helper constructor args | `[]` | diff --git a/playground/vue/src/pages/controls/HelperDemo.vue b/playground/vue/src/pages/controls/HelperDemo.vue new file mode 100644 index 000000000..a57ceea15 --- /dev/null +++ b/playground/vue/src/pages/controls/HelperDemo.vue @@ -0,0 +1,38 @@ + + + diff --git a/playground/vue/src/router/routes/controls.ts b/playground/vue/src/router/routes/controls.ts index 931aa55f6..baec8bd07 100644 --- a/playground/vue/src/router/routes/controls.ts +++ b/playground/vue/src/router/routes/controls.ts @@ -34,4 +34,9 @@ export const controlsRoutes = [ name: 'ScrollControls', component: () => import('../../pages/controls/ScrollControlsDemo.vue'), }, + { + path: '/controls/helper', + name: 'Helper', + component: () => import('../../pages/controls/HelperDemo.vue'), + }, ] diff --git a/src/core/controls/Helper/component.vue b/src/core/controls/Helper/component.vue new file mode 100644 index 000000000..8e6a00d4f --- /dev/null +++ b/src/core/controls/Helper/component.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/core/controls/Helper/useHelper.ts b/src/core/controls/Helper/useHelper.ts new file mode 100644 index 000000000..5814a22e0 --- /dev/null +++ b/src/core/controls/Helper/useHelper.ts @@ -0,0 +1,46 @@ +import type { Object3D } from 'three' +import type { MaybeRefOrGetter } from 'vue' +import { onBeforeUnmount, shallowRef, toValue, watchEffect } from 'vue' +import { useLoop, useTres } from '@tresjs/core' + +// NOTE: Source +// https://github.com/pmndrs/drei/blob/master/src/core/Helper.tsx + +type HelperType = Object3D & { update: () => void, dispose: () => void } +type HelperConstructor = new (...args: any[]) => any + +export function useHelper( + object3D: MaybeRefOrGetter, + helperConstructor: T, + ...args: any[] +) { + const helper = shallowRef() + const { scene } = useTres() + + let currentHelper: HelperType = undefined! + + watchEffect(() => { + if (object3D && toValue(object3D) && helperConstructor) { + // eslint-disable-next-line new-cap + helper.value = currentHelper = new helperConstructor(toValue(object3D), ...args) + } + + if (currentHelper) { + // NOTE: Prevent the helpers from blocking rays + currentHelper.traverse(child => (child.raycast = () => null)) + scene.value.add(currentHelper) + } + }) + + onBeforeUnmount(() => { + helper.value = undefined + scene.value.remove(currentHelper) + currentHelper.dispose?.() + }) + + useLoop().onBeforeRender(() => { + helper.value?.update?.() + }) + + return helper +} diff --git a/src/core/controls/index.ts b/src/core/controls/index.ts index d803b2af3..07887bf4d 100644 --- a/src/core/controls/index.ts +++ b/src/core/controls/index.ts @@ -1,4 +1,5 @@ import CameraControls, { BaseCameraControls } from './CameraControls.vue' +import Helper from './Helper/component.vue' import KeyboardControls from './KeyboardControls.vue' import MapControls from './MapControls.vue' import OrbitControls from './OrbitControls.vue' @@ -9,6 +10,7 @@ import TransformControls from './TransformControls.vue' export { BaseCameraControls, CameraControls, + Helper, KeyboardControls, MapControls, OrbitControls, From 4528f64063d2f9cc903cc9f21c8c09ef792b919a Mon Sep 17 00:00:00 2001 From: andretchen0 Date: Sat, 14 Dec 2024 10:43:09 +0100 Subject: [PATCH 03/65] feat(PointMaterial): add component, demo, docs (#545) * feat(PointMaterial): add component, demo, docs * chore: lint * refactor: remove unused function argument * feat: deconstruct points material imports --------- Co-authored-by: alvarosabu --- docs/.vitepress/config.ts | 1 + .../theme/components/PointMaterialDemo.vue | 31 +++++++++++++ docs/component-list/components.ts | 2 + docs/guide/materials/point-material.md | 19 ++++++++ .../src/pages/materials/PointMaterialDemo.vue | 45 +++++++++++++++++++ playground/vue/src/router/routes/materials.ts | 5 +++ src/core/materials/index.ts | 11 ++++- .../materials/pointMaterial/component.vue | 34 ++++++++++++++ src/core/materials/pointMaterial/material.ts | 32 +++++++++++++ 9 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 docs/.vitepress/theme/components/PointMaterialDemo.vue create mode 100644 docs/guide/materials/point-material.md create mode 100644 playground/vue/src/pages/materials/PointMaterialDemo.vue create mode 100644 src/core/materials/pointMaterial/component.vue create mode 100644 src/core/materials/pointMaterial/material.ts diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index af6d9b50e..f34104d1a 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -120,6 +120,7 @@ export default defineConfig({ { text: 'MeshGlassMaterial', link: '/guide/materials/glass-material' }, { text: 'CustomShaderMaterial', link: '/guide/materials/custom-shader-material' }, { text: 'MeshReflectionMaterial', link: '/guide/materials/mesh-reflection-material' }, + { text: 'PointMaterial', link: '/guide/materials/point-material' }, { text: 'MeshDiscardMaterial', link: '/guide/materials/mesh-discard-material' }, ], }, diff --git a/docs/.vitepress/theme/components/PointMaterialDemo.vue b/docs/.vitepress/theme/components/PointMaterialDemo.vue new file mode 100644 index 000000000..96a2e9405 --- /dev/null +++ b/docs/.vitepress/theme/components/PointMaterialDemo.vue @@ -0,0 +1,31 @@ + + + diff --git a/docs/component-list/components.ts b/docs/component-list/components.ts index 02f72ca98..776a45a71 100644 --- a/docs/component-list/components.ts +++ b/docs/component-list/components.ts @@ -68,6 +68,8 @@ export default [ link: '/guide/materials/holographic-material', }, { + text: 'PointMaterial', + link: '/guide/materials/point-material', text: 'MeshDiscardMaterial', link: '/guide/materials/mesh-discard-material', }, diff --git a/docs/guide/materials/point-material.md b/docs/guide/materials/point-material.md new file mode 100644 index 000000000..e01307c1d --- /dev/null +++ b/docs/guide/materials/point-material.md @@ -0,0 +1,19 @@ +# PointMaterial + + + + + +`` extends `THREE.PointsMaterial`. It renders the points as dots, rather than the default squares. + +::: info +N.B., stacking order and transparency of objects using `THREE.PointsMaterial` and by extension `` can be somewhat unintuitive, especially when combined with other on-screen objects. [Please see discussions at threejs.org for more infomation.](https://discourse.threejs.org/search?q=points%20transparency) +::: + +## Usage + +<<< @/.vitepress/theme/components/PointMaterialDemo.vue + +## Props + +All [`THREE.PointsMaterial` properties](https://threejs.org/docs/#api/en/materials/PointsMaterial) are inherited by `PointMaterial`. diff --git a/playground/vue/src/pages/materials/PointMaterialDemo.vue b/playground/vue/src/pages/materials/PointMaterialDemo.vue new file mode 100644 index 000000000..b96a93830 --- /dev/null +++ b/playground/vue/src/pages/materials/PointMaterialDemo.vue @@ -0,0 +1,45 @@ + + + diff --git a/playground/vue/src/router/routes/materials.ts b/playground/vue/src/router/routes/materials.ts index 4f808cf8c..4e241135b 100644 --- a/playground/vue/src/router/routes/materials.ts +++ b/playground/vue/src/router/routes/materials.ts @@ -24,6 +24,11 @@ export const materialsRoutes = [ name: 'HolographicMaterial', component: () => import('../../pages/materials/HolographicMaterialDemo.vue'), }, + { + path: '/materials/point-material', + name: 'PointMaterial', + component: () => import('../../pages/materials/PointMaterialDemo.vue'), + }, { path: '/materials/discard-material', name: 'MeshDiscardMaterial', diff --git a/src/core/materials/index.ts b/src/core/materials/index.ts index 1b246627f..ab9f7b90d 100644 --- a/src/core/materials/index.ts +++ b/src/core/materials/index.ts @@ -4,5 +4,14 @@ import MeshDiscardMaterial from './meshDiscardMaterial/index.vue' import MeshGlassMaterial from './meshGlassMaterial/index.vue' import MeshReflectionMaterial from './meshReflectionMaterial/index.vue' import MeshWobbleMaterial from './meshWobbleMaterial/index.vue' +import PointMaterial from './pointMaterial/component.vue' -export { CustomShaderMaterial, HolographicMaterial, MeshDiscardMaterial, MeshGlassMaterial, MeshReflectionMaterial, MeshWobbleMaterial } +export { + CustomShaderMaterial, + HolographicMaterial, + MeshDiscardMaterial, + MeshGlassMaterial, + MeshReflectionMaterial, + MeshWobbleMaterial, + PointMaterial, +} diff --git a/src/core/materials/pointMaterial/component.vue b/src/core/materials/pointMaterial/component.vue new file mode 100644 index 000000000..0f3624d36 --- /dev/null +++ b/src/core/materials/pointMaterial/component.vue @@ -0,0 +1,34 @@ + + + diff --git a/src/core/materials/pointMaterial/material.ts b/src/core/materials/pointMaterial/material.ts new file mode 100644 index 000000000..b9b50ddce --- /dev/null +++ b/src/core/materials/pointMaterial/material.ts @@ -0,0 +1,32 @@ +import { PointsMaterial as PointsMaterialImpl, type PointsMaterialParameters } from 'three' + +// NOTE: Source +// https://github.com/pmndrs/drei/blob/master/src/core/PointMaterial.tsx + +const opaque_fragment = 'opaque_fragment' + +export class PointMaterial extends PointsMaterialImpl { + constructor(props: PointsMaterialParameters) { + super(props) + this.onBeforeCompile = (shader, renderer) => { + const { isWebGL2 } = renderer.capabilities + shader.fragmentShader = shader.fragmentShader.replace( + `#include <${opaque_fragment}>`, + ` + ${ + !isWebGL2 + ? `#extension GL_OES_standard_derivatives : enable\n#include <${opaque_fragment}>` + : `#include <${opaque_fragment}>` + } + vec2 cxy = 2.0 * gl_PointCoord - 1.0; + float r = dot(cxy, cxy); + float delta = fwidth(r); + float mask = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r); + gl_FragColor = vec4(gl_FragColor.rgb, mask * gl_FragColor.a ); + #include + #include + `, + ) + } + } +} From 34a3db5162d084f9fc3db82885a271a1a8c31424 Mon Sep 17 00:00:00 2001 From: andretchen0 Date: Sat, 14 Dec 2024 13:47:18 +0100 Subject: [PATCH 04/65] feat(ScreenQuad): add component, playground, docs (#530) --- docs/.vitepress/config.ts | 1 + .../theme/components/ScreenQuadDemo.vue | 13 +++ docs/component-list/components.ts | 1 + docs/guide/shapes/screen-quad.md | 12 +++ .../vue/src/pages/shapes/ScreenQuadDemo.vue | 87 +++++++++++++++++++ playground/vue/src/router/routes/shapes.ts | 5 ++ src/core/shapes/ScreenQuad.vue | 23 +++++ src/core/shapes/index.ts | 2 + 8 files changed, 144 insertions(+) create mode 100644 docs/.vitepress/theme/components/ScreenQuadDemo.vue create mode 100644 docs/guide/shapes/screen-quad.md create mode 100644 playground/vue/src/pages/shapes/ScreenQuadDemo.vue create mode 100644 src/core/shapes/ScreenQuad.vue diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index f34104d1a..c3dee1aa2 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -140,6 +140,7 @@ export default defineConfig({ { text: 'Plane', link: '/guide/shapes/plane' }, { text: 'Ring', link: '/guide/shapes/ring' }, { text: 'RoundedBox', link: '/guide/shapes/rounded-box' }, + { text: 'ScreenQuad', link: '/guide/shapes/screen-quad' }, { text: 'Sphere', link: '/guide/shapes/sphere' }, { text: 'Superformula', link: '/guide/shapes/superformula' }, { text: 'Tetrahedron', link: '/guide/shapes/tetrahedron' }, diff --git a/docs/.vitepress/theme/components/ScreenQuadDemo.vue b/docs/.vitepress/theme/components/ScreenQuadDemo.vue new file mode 100644 index 000000000..b006b09aa --- /dev/null +++ b/docs/.vitepress/theme/components/ScreenQuadDemo.vue @@ -0,0 +1,13 @@ + + + diff --git a/docs/component-list/components.ts b/docs/component-list/components.ts index 776a45a71..608d94626 100644 --- a/docs/component-list/components.ts +++ b/docs/component-list/components.ts @@ -90,6 +90,7 @@ export default [ { text: 'Plane', link: '/guide/shapes/plane' }, { text: 'Ring', link: '/guide/shapes/ring' }, { text: 'RoundedBox', link: '/guide/shapes/rounded-box' }, + { text: 'ScreenQuad', link: '/guide/shapes/screen-quad' }, { text: 'Sphere', link: '/guide/shapes/sphere' }, { text: 'Superformula', link: '/guide/shapes/superformula' }, { text: 'Tetrahedron', link: '/guide/shapes/tetrahedron' }, diff --git a/docs/guide/shapes/screen-quad.md b/docs/guide/shapes/screen-quad.md new file mode 100644 index 000000000..7c0caafd4 --- /dev/null +++ b/docs/guide/shapes/screen-quad.md @@ -0,0 +1,12 @@ +# ScreenQuad + +A triangle that fills the screen when using a THREE.OrthographicCamera. Useful for full-screen fragment shader work. + +## Usage + +<<< @/.vitepress/theme/components/ScreenQuadDemo.vue + +## References + +* [Why a triangle?](https://www.cginternals.com/en/blog/2018-01-10-screen-aligned-quads-and-triangles.html) +* [Simple postprocessing in THREE.js](https://luruke.medium.com/simple-postprocessing-in-three-js-91936ecadfb7) diff --git a/playground/vue/src/pages/shapes/ScreenQuadDemo.vue b/playground/vue/src/pages/shapes/ScreenQuadDemo.vue new file mode 100644 index 000000000..18aabbf2a --- /dev/null +++ b/playground/vue/src/pages/shapes/ScreenQuadDemo.vue @@ -0,0 +1,87 @@ + + + diff --git a/playground/vue/src/router/routes/shapes.ts b/playground/vue/src/router/routes/shapes.ts index acd6bdc97..d831ec132 100644 --- a/playground/vue/src/router/routes/shapes.ts +++ b/playground/vue/src/router/routes/shapes.ts @@ -24,6 +24,11 @@ export const shapesRoutes = [ name: 'RoundedBox', component: () => import('../../pages/shapes/RoundedBoxDemo.vue'), }, + { + path: '/shapes/screenQuad', + name: 'ScreenQuad', + component: () => import('../../pages/shapes/ScreenQuadDemo.vue'), + }, { path: '/shapes/on-demand-shapes', name: 'on-demand Shapes', diff --git a/src/core/shapes/ScreenQuad.vue b/src/core/shapes/ScreenQuad.vue new file mode 100644 index 000000000..f47a43ceb --- /dev/null +++ b/src/core/shapes/ScreenQuad.vue @@ -0,0 +1,23 @@ + + + diff --git a/src/core/shapes/index.ts b/src/core/shapes/index.ts index 29635ef34..b82286fda 100644 --- a/src/core/shapes/index.ts +++ b/src/core/shapes/index.ts @@ -10,6 +10,7 @@ import Octahedron from './Octahedron.vue' import Plane from './Plane.vue' import Ring from './Ring.vue' import RoundedBox from './RoundedBox.vue' +import ScreenQuad from './ScreenQuad.vue' import Sphere from './Sphere.vue' import Superformula from './Superformula.vue' import Tetrahedron from './Tetrahedron.vue' @@ -30,6 +31,7 @@ export { Plane, Ring, RoundedBox, + ScreenQuad, Sphere, Superformula, Tetrahedron, From 2ebc1e6c75107d6914b4ad3b7e8488b06f5db2f6 Mon Sep 17 00:00:00 2001 From: andretchen0 Date: Tue, 17 Dec 2024 09:19:59 +0100 Subject: [PATCH 05/65] feat(MarchingCubes): add component, demo, docs (#553) * feat(MarchingCubes): add component, demo, docs * feat(MarchingCubes): add default material * chore: lint --------- Co-authored-by: alvarosabu --- docs/.vitepress/config.ts | 1 + .../theme/components/MarchingCubesDemo.vue | 29 +++++++ docs/component-list/components.ts | 1 + docs/guide/abstractions/marching-cubes.md | 41 +++++++++ .../pages/abstractions/MarchingCubesDemo.vue | 83 +++++++++++++++++++ .../vue/src/router/routes/abstractions.ts | 5 ++ .../MarchingCubes/MarchingCube.vue | 35 ++++++++ .../MarchingCubes/MarchingCubes.vue | 46 ++++++++++ .../MarchingCubes/MarchingPlane.vue | 33 ++++++++ src/core/abstractions/MarchingCubes/const.ts | 3 + src/core/abstractions/index.ts | 6 ++ 11 files changed, 283 insertions(+) create mode 100644 docs/.vitepress/theme/components/MarchingCubesDemo.vue create mode 100644 docs/guide/abstractions/marching-cubes.md create mode 100644 playground/vue/src/pages/abstractions/MarchingCubesDemo.vue create mode 100644 src/core/abstractions/MarchingCubes/MarchingCube.vue create mode 100644 src/core/abstractions/MarchingCubes/MarchingCubes.vue create mode 100644 src/core/abstractions/MarchingCubes/MarchingPlane.vue create mode 100644 src/core/abstractions/MarchingCubes/const.ts diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index c3dee1aa2..bc5c98df5 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -78,6 +78,7 @@ export default defineConfig({ { text: 'Edges', link: '/guide/abstractions/edges' }, { text: 'PositionalAudio', link: '/guide/abstractions/positional-audio' }, { text: 'AnimatedSprite', link: '/guide/abstractions/animated-sprite' }, + { text: 'MarchingCubes', link: '/guide/abstractions/marching-cubes' }, { text: 'Mask', link: '/guide/abstractions/mask' }, { text: 'CubeCamera', link: '/guide/abstractions/cube-camera' }, { text: 'ScreenSizer', link: '/guide/abstractions/screen-sizer' }, diff --git a/docs/.vitepress/theme/components/MarchingCubesDemo.vue b/docs/.vitepress/theme/components/MarchingCubesDemo.vue new file mode 100644 index 000000000..ed3aa37ef --- /dev/null +++ b/docs/.vitepress/theme/components/MarchingCubesDemo.vue @@ -0,0 +1,29 @@ + + + diff --git a/docs/component-list/components.ts b/docs/component-list/components.ts index 608d94626..71253f3c5 100644 --- a/docs/component-list/components.ts +++ b/docs/component-list/components.ts @@ -17,6 +17,7 @@ export default [ }, { text: 'Sampler', link: '/guide/abstractions/sampler' }, { text: 'PositionalAudio', link: '/guide/abstractions/positional-audio' }, + { text: 'MarchingCubes', link: '/guide/abstractions/marching-cubes' }, { text: 'Mask', link: '/guide/abstractions/mask' }, { text: 'CubeCamera', link: '/guide/abstractions/cube-camera' }, { text: 'GradientTexture', link: '/guide/abstractions/gradient-texture' }, diff --git a/docs/guide/abstractions/marching-cubes.md b/docs/guide/abstractions/marching-cubes.md new file mode 100644 index 000000000..8a827e7e0 --- /dev/null +++ b/docs/guide/abstractions/marching-cubes.md @@ -0,0 +1,41 @@ +# MarchingCubes + + + + + +`` is a wrapper around [THREE's Marching Cubes](https://threejs.org/examples/#webgl_marchingcubes). + +It includes 3 components: + +* `` – container element for ``s and ``s +* `` - an individual metaball +* `` – optional bounding plane that interacts with the metaballs + +## Usage + +<<< @/.vitepress/theme/components/MarchingCubesDemo.vue + +## Props + +| Prop | Description | Default | +| :----| :---------- | ------- | +| `resolution` | Resolution of the marching cube field. Higher resolution produces smoother meshes at the cost of performance and memory. | `28` | +| `maxPolyCount` | Maximum number of polygons to generate. | `10000` | +| `enableUvs` | Whether UVs are enabled. | `false` | +| `enableColors` | Whether vertex colors are enabled. | `false` | + +## `` Props + +| Prop | Description | Default | +| :----| :---------- | ------- | +| `strength` | How strongly this cube affects the marching cube field. | `0.5` | +| `subtract` | How quickly strength moves to `0` over distance. | `12` | + +## `` Props + +| Prop | Description | Default | +| :----| :---------- | ------- | +| `planeType` | Which axis the plane appears on. `'x' \| 'y' \| 'z'` | `'x'` | +| `strength` | How strongly this plane affects the marching cube field. | `0.5` | +| `subtract` | How quickly strength moves to `0` over distance. | `12` | diff --git a/playground/vue/src/pages/abstractions/MarchingCubesDemo.vue b/playground/vue/src/pages/abstractions/MarchingCubesDemo.vue new file mode 100644 index 000000000..763963019 --- /dev/null +++ b/playground/vue/src/pages/abstractions/MarchingCubesDemo.vue @@ -0,0 +1,83 @@ + + + diff --git a/playground/vue/src/router/routes/abstractions.ts b/playground/vue/src/router/routes/abstractions.ts index 5095cc0c2..ed82ac4f2 100644 --- a/playground/vue/src/router/routes/abstractions.ts +++ b/playground/vue/src/router/routes/abstractions.ts @@ -64,6 +64,11 @@ export const abstractionsRoutes = [ name: 'AnimatedSprite', component: () => import('../../pages/abstractions/AnimatedSpriteDemo.vue'), }, + { + path: '/abstractions/marching-cubes', + name: 'MarchingCubes', + component: () => import('../../pages/abstractions/MarchingCubesDemo.vue'), + }, { path: '/abstractions/mask', name: 'Mask', diff --git a/src/core/abstractions/MarchingCubes/MarchingCube.vue b/src/core/abstractions/MarchingCubes/MarchingCube.vue new file mode 100644 index 000000000..751d2aea5 --- /dev/null +++ b/src/core/abstractions/MarchingCubes/MarchingCube.vue @@ -0,0 +1,35 @@ + + + diff --git a/src/core/abstractions/MarchingCubes/MarchingCubes.vue b/src/core/abstractions/MarchingCubes/MarchingCubes.vue new file mode 100644 index 000000000..e42ea4ab2 --- /dev/null +++ b/src/core/abstractions/MarchingCubes/MarchingCubes.vue @@ -0,0 +1,46 @@ + + + diff --git a/src/core/abstractions/MarchingCubes/MarchingPlane.vue b/src/core/abstractions/MarchingCubes/MarchingPlane.vue new file mode 100644 index 000000000..aa257db6f --- /dev/null +++ b/src/core/abstractions/MarchingCubes/MarchingPlane.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/core/abstractions/MarchingCubes/const.ts b/src/core/abstractions/MarchingCubes/const.ts new file mode 100644 index 000000000..848e6ec7c --- /dev/null +++ b/src/core/abstractions/MarchingCubes/const.ts @@ -0,0 +1,3 @@ +const MARCHING_CUBES_PROVIDE_KEY = Symbol('marchingCubes') + +export { MARCHING_CUBES_PROVIDE_KEY } diff --git a/src/core/abstractions/index.ts b/src/core/abstractions/index.ts index 2223eb976..3c58983af 100644 --- a/src/core/abstractions/index.ts +++ b/src/core/abstractions/index.ts @@ -6,6 +6,9 @@ import GradientTexture from './GradientTexture.vue' import Image from './Image/component.vue' import Lensflare from './Lensflare/component.vue' import Levioso from './Levioso.vue' +import MarchingCube from './MarchingCubes/MarchingCube.vue' +import MarchingCubes from './MarchingCubes/MarchingCubes.vue' +import MarchingPlane from './MarchingCubes/MarchingPlane.vue' import Mask from './Mask/component.vue' import MouseParallax from './MouseParallax.vue' import Outline from './Outline/component.vue' @@ -34,6 +37,9 @@ export { Image, Lensflare, Levioso, + MarchingCube, + MarchingCubes, + MarchingPlane, Mask, MouseParallax, Outline, From 99c3a60d5e99d25dcb65da1f04ccd4ce0499d919 Mon Sep 17 00:00:00 2001 From: andretchen0 Date: Thu, 2 Jan 2025 10:19:42 +0100 Subject: [PATCH 06/65] feat(CubicBezierLine): add component, demo, docs (#546) * feat(CubicBezierLine): add component, demo, docs * docs: revert broken link --- docs/.vitepress/config.ts | 1 + .../theme/components/CubicBezierLineDemo.vue | 21 +++++ docs/component-list/components.ts | 1 + docs/guide/shapes/cubic-bezier-line.md | 22 +++++ .../src/pages/shapes/CubicBezierLineDemo.vue | 93 +++++++++++++++++++ playground/vue/src/router/routes/shapes.ts | 5 + src/core/shapes/CubicBezierLine.vue | 33 +++++++ src/core/shapes/index.ts | 2 + 8 files changed, 178 insertions(+) create mode 100644 docs/.vitepress/theme/components/CubicBezierLineDemo.vue create mode 100644 docs/guide/shapes/cubic-bezier-line.md create mode 100644 playground/vue/src/pages/shapes/CubicBezierLineDemo.vue create mode 100644 src/core/shapes/CubicBezierLine.vue diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index bc5c98df5..f36c78ab1 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -133,6 +133,7 @@ export default defineConfig({ { text: 'CatmullRomCurve3', link: '/guide/shapes/catmullromcurve3' }, { text: 'Circle', link: '/guide/shapes/circle' }, { text: 'Cone', link: '/guide/shapes/cone' }, + { text: 'CubicBezierLine', link: '/guide/shapes/cubic-bezier-line' }, { text: 'Cylinder', link: '/guide/shapes/cylinder' }, { text: 'Dodecahedron', link: '/guide/shapes/dodecahedron' }, { text: 'Icosahedron', link: '/guide/shapes/icosahedron' }, diff --git a/docs/.vitepress/theme/components/CubicBezierLineDemo.vue b/docs/.vitepress/theme/components/CubicBezierLineDemo.vue new file mode 100644 index 000000000..4a7a684c6 --- /dev/null +++ b/docs/.vitepress/theme/components/CubicBezierLineDemo.vue @@ -0,0 +1,21 @@ + + + diff --git a/docs/component-list/components.ts b/docs/component-list/components.ts index 71253f3c5..d6d14f37c 100644 --- a/docs/component-list/components.ts +++ b/docs/component-list/components.ts @@ -83,6 +83,7 @@ export default [ { text: 'CatmullRomCurve3', link: '/guide/shapes/catmullromcurve3' }, { text: 'Circle', link: '/guide/shapes/circle' }, { text: 'Cone', link: '/guide/shapes/cone' }, + { text: 'CubicBezierLine', link: '/guide/shapes/cubic-bezier-line' }, { text: 'Cylinder', link: '/guide/shapes/cylinder' }, { text: 'Dodecahedron', link: '/guide/shapes/dodecahedron' }, { text: 'Icosahedron', link: '/guide/shapes/icosahedron' }, diff --git a/docs/guide/shapes/cubic-bezier-line.md b/docs/guide/shapes/cubic-bezier-line.md new file mode 100644 index 000000000..d07fed0d6 --- /dev/null +++ b/docs/guide/shapes/cubic-bezier-line.md @@ -0,0 +1,22 @@ +# CubicBezierLine + + + + + +`` renders a `` between start and end points, with additional 2 control points. + +## Usage +<<< @/.vitepress/theme/components/CubicBezierLineDemo.vue + +## Props + +`` inherits all props but `points` from ``. + +| Prop | Type | Description | Default | +| ------------ | --------- | ----------------------------------------------------------------------------- | -------------- | +| `start` | `Vector3 \| [number, number, number]` | Starting point | | +| `end` | `Vector3 \| [number, number, number]` | Ending point | | +| `midA` | `Vector3 \| [number, number, number]` | First control point | | +| `midB` | `Vector3 \| [number, number, number]` | Second control point | | +| `segments` | `number` | Number of segments in the resulting curve (higher = smoother) | 20 | diff --git a/playground/vue/src/pages/shapes/CubicBezierLineDemo.vue b/playground/vue/src/pages/shapes/CubicBezierLineDemo.vue new file mode 100644 index 000000000..13f251a05 --- /dev/null +++ b/playground/vue/src/pages/shapes/CubicBezierLineDemo.vue @@ -0,0 +1,93 @@ + + + diff --git a/playground/vue/src/router/routes/shapes.ts b/playground/vue/src/router/routes/shapes.ts index d831ec132..77de3b6e4 100644 --- a/playground/vue/src/router/routes/shapes.ts +++ b/playground/vue/src/router/routes/shapes.ts @@ -4,6 +4,11 @@ export const shapesRoutes = [ name: 'CatmullRomCurve3', component: () => import('../../pages/shapes/CatmullRomCurve3Demo.vue'), }, + { + path: '/shapes/cubic-bezier-line', + name: 'CubicBezierLine', + component: () => import('../../pages/shapes/CubicBezierLineDemo.vue'), + }, { path: '/shapes/cylinder', name: 'Cylinder', diff --git a/src/core/shapes/CubicBezierLine.vue b/src/core/shapes/CubicBezierLine.vue new file mode 100644 index 000000000..f03f261b4 --- /dev/null +++ b/src/core/shapes/CubicBezierLine.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/core/shapes/index.ts b/src/core/shapes/index.ts index b82286fda..3bede1a4d 100644 --- a/src/core/shapes/index.ts +++ b/src/core/shapes/index.ts @@ -2,6 +2,7 @@ import Box from './Box.vue' import CatmullRomCurve3 from './CatmullRomCurve3.vue' import Circle from './Circle.vue' import Cone from './Cone.vue' +import CubicBezierLine from './CubicBezierLine.vue' import Cylinder from './Cylinder.vue' import Dodecahedron from './Dodecahedron.vue' import Icosahedron from './Icosahedron.vue' @@ -23,6 +24,7 @@ export { CatmullRomCurve3, Circle, Cone, + CubicBezierLine, Cylinder, Dodecahedron, Icosahedron, From 4a9f006d5c318781d52f6e943b7c4f342a077667 Mon Sep 17 00:00:00 2001 From: andretchen0 Date: Thu, 2 Jan 2025 10:24:57 +0100 Subject: [PATCH 07/65] feat(QuadraticBezierLine): add component, demo, docs (#548) Co-authored-by: alvarosabu --- docs/.vitepress/config.ts | 1 + .../components/QuadraticBezierLineDemo.vue | 18 ++++ docs/component-list/components.ts | 1 + docs/guide/shapes/quadratic-bezier-line.md | 21 +++++ .../pages/shapes/QuadraticBezierLineDemo.vue | 87 +++++++++++++++++++ playground/vue/src/router/routes/shapes.ts | 5 ++ src/core/shapes/QuadraticBezierLine.vue | 31 +++++++ src/core/shapes/index.ts | 2 + 8 files changed, 166 insertions(+) create mode 100644 docs/.vitepress/theme/components/QuadraticBezierLineDemo.vue create mode 100644 docs/guide/shapes/quadratic-bezier-line.md create mode 100644 playground/vue/src/pages/shapes/QuadraticBezierLineDemo.vue create mode 100644 src/core/shapes/QuadraticBezierLine.vue diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index f36c78ab1..799615f52 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -140,6 +140,7 @@ export default defineConfig({ { text: 'Line2', link: '/guide/shapes/line2' }, { text: 'Octahedron', link: '/guide/shapes/octahedron' }, { text: 'Plane', link: '/guide/shapes/plane' }, + { text: 'QuadraticBezierLine', link: '/guide/shapes/quadratic-bezier-line' }, { text: 'Ring', link: '/guide/shapes/ring' }, { text: 'RoundedBox', link: '/guide/shapes/rounded-box' }, { text: 'ScreenQuad', link: '/guide/shapes/screen-quad' }, diff --git a/docs/.vitepress/theme/components/QuadraticBezierLineDemo.vue b/docs/.vitepress/theme/components/QuadraticBezierLineDemo.vue new file mode 100644 index 000000000..daf41704c --- /dev/null +++ b/docs/.vitepress/theme/components/QuadraticBezierLineDemo.vue @@ -0,0 +1,18 @@ + + + diff --git a/docs/component-list/components.ts b/docs/component-list/components.ts index d6d14f37c..45fc3ce1c 100644 --- a/docs/component-list/components.ts +++ b/docs/component-list/components.ts @@ -90,6 +90,7 @@ export default [ { text: 'Line2', link: '/guide/shapes/line2' }, { text: 'Octahedron', link: '/guide/shapes/octahedron' }, { text: 'Plane', link: '/guide/shapes/plane' }, + { text: 'QuadraticBezierLine', link: '/guide/shapes/quadratic-bezier-line' }, { text: 'Ring', link: '/guide/shapes/ring' }, { text: 'RoundedBox', link: '/guide/shapes/rounded-box' }, { text: 'ScreenQuad', link: '/guide/shapes/screen-quad' }, diff --git a/docs/guide/shapes/quadratic-bezier-line.md b/docs/guide/shapes/quadratic-bezier-line.md new file mode 100644 index 000000000..53fc46ff1 --- /dev/null +++ b/docs/guide/shapes/quadratic-bezier-line.md @@ -0,0 +1,21 @@ +# QuadraticBezierLine + + + + + +`` renders a `` between start and end points, with an optional control point. + +## Usage +<<< @/.vitepress/theme/components/QuadraticBezierLineDemo.vue + +## Props + +`` inherits all props but `points` from ``. + +| Prop | Type | Description | Default | Required | +| ------------ | --------- | ----------------------------------------------------------------------------- | -------------- | ---- | +| `start` | `Vector3 \| [number, number, number]` | Starting point | | yes | +| `end` | `Vector3 \| [number, number, number]` | Ending point | | yes | +| `mid` | `Vector3 \| [number, number, number]` | Control point | | no | +| `segments` | `number` | Number of segments in the resulting curve (higher = smoother) | 20 | no | diff --git a/playground/vue/src/pages/shapes/QuadraticBezierLineDemo.vue b/playground/vue/src/pages/shapes/QuadraticBezierLineDemo.vue new file mode 100644 index 000000000..3be597628 --- /dev/null +++ b/playground/vue/src/pages/shapes/QuadraticBezierLineDemo.vue @@ -0,0 +1,87 @@ + + + diff --git a/playground/vue/src/router/routes/shapes.ts b/playground/vue/src/router/routes/shapes.ts index 77de3b6e4..579020814 100644 --- a/playground/vue/src/router/routes/shapes.ts +++ b/playground/vue/src/router/routes/shapes.ts @@ -4,6 +4,11 @@ export const shapesRoutes = [ name: 'CatmullRomCurve3', component: () => import('../../pages/shapes/CatmullRomCurve3Demo.vue'), }, + { + path: '/shapes/quadratic-bezier-line', + name: 'QuadraticBezierLine', + component: () => import('../../pages/shapes/QuadraticBezierLineDemo.vue'), + }, { path: '/shapes/cubic-bezier-line', name: 'CubicBezierLine', diff --git a/src/core/shapes/QuadraticBezierLine.vue b/src/core/shapes/QuadraticBezierLine.vue new file mode 100644 index 000000000..4bc81e495 --- /dev/null +++ b/src/core/shapes/QuadraticBezierLine.vue @@ -0,0 +1,31 @@ + + + diff --git a/src/core/shapes/index.ts b/src/core/shapes/index.ts index 3bede1a4d..7ce436748 100644 --- a/src/core/shapes/index.ts +++ b/src/core/shapes/index.ts @@ -2,6 +2,7 @@ import Box from './Box.vue' import CatmullRomCurve3 from './CatmullRomCurve3.vue' import Circle from './Circle.vue' import Cone from './Cone.vue' +import QuadraticBezierLine from './QuadraticBezierLine.vue' import CubicBezierLine from './CubicBezierLine.vue' import Cylinder from './Cylinder.vue' import Dodecahedron from './Dodecahedron.vue' @@ -31,6 +32,7 @@ export { Line2, Octahedron, Plane, + QuadraticBezierLine, Ring, RoundedBox, ScreenQuad, From 7e6b8d0dbbe2f1f0500072815c86c2cf0c559a58 Mon Sep 17 00:00:00 2001 From: andretchen0 Date: Thu, 2 Jan 2025 10:33:37 +0100 Subject: [PATCH 08/65] feat(AccumulativeShadows): add component, demo, docs (#558) * feat(AccumulativeShadows): add component, demo, docs * refactor(RandomizedLights): rename interface * refactor(AccumulativeShadows): change default alphaTest value * refactor(AccumulativeShadows): expose update function --- docs/.vitepress/config.ts | 2 + .../components/AccumulativeShadowsDemo.vue | 20 ++ docs/component-list/components.ts | 2 + docs/guide/staging/accumulative-shadows.md | 34 +++ docs/guide/staging/randomized-lights.md | 35 ++++ .../pages/staging/AccumulativeShadowsDemo.vue | 90 ++++++++ playground/vue/src/router/routes/staging.ts | 5 + .../ProgressiveLightMap.ts | 141 +++++++++++++ .../AccumulativeShadows/SoftShadowMaterial.ts | 37 ++++ .../staging/AccumulativeShadows/component.vue | 193 ++++++++++++++++++ .../RandomizedLights/RandomizedLights.ts | 131 ++++++++++++ .../staging/RandomizedLights/component.vue | 70 +++++++ src/core/staging/index.ts | 4 + 13 files changed, 764 insertions(+) create mode 100644 docs/.vitepress/theme/components/AccumulativeShadowsDemo.vue create mode 100644 docs/guide/staging/accumulative-shadows.md create mode 100644 docs/guide/staging/randomized-lights.md create mode 100644 playground/vue/src/pages/staging/AccumulativeShadowsDemo.vue create mode 100644 src/core/staging/AccumulativeShadows/ProgressiveLightMap.ts create mode 100644 src/core/staging/AccumulativeShadows/SoftShadowMaterial.ts create mode 100644 src/core/staging/AccumulativeShadows/component.vue create mode 100644 src/core/staging/RandomizedLights/RandomizedLights.ts create mode 100644 src/core/staging/RandomizedLights/component.vue diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 799615f52..f7310543d 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -161,6 +161,7 @@ export default defineConfig({ { text: 'Sky', link: '/guide/staging/sky' }, { text: 'Stars', link: '/guide/staging/stars' }, { text: 'Smoke', link: '/guide/staging/smoke' }, + { text: 'AccumulativeShadows', link: '/guide/staging/accumulative-shadows' }, { text: 'ContactShadows', link: '/guide/staging/contact-shadows' }, { text: 'Precipitation', link: '/guide/staging/precipitation' }, { text: 'Sparkles', link: '/guide/staging/sparkles' }, @@ -168,6 +169,7 @@ export default defineConfig({ { text: 'Align', link: '/guide/staging/align' }, { text: 'SoftShadows', link: '/guide/staging/soft-shadows' }, { text: 'Grid', link: '/guide/staging/grid' }, + { text: 'RandomizedLights', link: '/guide/staging/randomized-lights' }, ], }, { diff --git a/docs/.vitepress/theme/components/AccumulativeShadowsDemo.vue b/docs/.vitepress/theme/components/AccumulativeShadowsDemo.vue new file mode 100644 index 000000000..1cbc6d22d --- /dev/null +++ b/docs/.vitepress/theme/components/AccumulativeShadowsDemo.vue @@ -0,0 +1,20 @@ + + + diff --git a/docs/component-list/components.ts b/docs/component-list/components.ts index 45fc3ce1c..99bda8c50 100644 --- a/docs/component-list/components.ts +++ b/docs/component-list/components.ts @@ -111,6 +111,7 @@ export default [ { text: 'Sky', link: '/guide/staging/sky' }, { text: 'Stars', link: '/guide/staging/stars' }, { text: 'Smoke', link: '/guide/staging/smoke' }, + { text: 'AccumulativeShadows', link: '/guide/staging/accumulative-shadows' }, { text: 'ContactShadows', link: '/guide/staging/contact-shadows' }, { text: 'Precipitation', link: '/guide/staging/precipitation' }, { text: 'Sparkles', link: '/guide/staging/sparkles' }, @@ -119,6 +120,7 @@ export default [ { text: 'Align', link: '/guide/staging/align' }, { text: 'SoftShadows', link: '/guide/staging/soft-shadows' }, { text: 'Grid', link: '/guide/staging/grid' }, + { text: 'RandomizedLights', link: '/guide/staging/randomized-lights' }, ], }, { diff --git a/docs/guide/staging/accumulative-shadows.md b/docs/guide/staging/accumulative-shadows.md new file mode 100644 index 000000000..f481f42c7 --- /dev/null +++ b/docs/guide/staging/accumulative-shadows.md @@ -0,0 +1,34 @@ +# AccumulativeShadows + + + + + +`` is a `THREE.DirectionalLight`-based shadow component. It displays shadows on a single shadow catcher plane, included in the component. It is based on [Drei component of the same name](http://drei.docs.pmnd.rs/staging/accumulative-shadows). + +## Usage + +<<< @/.vitepress/theme/components/AccumulativeShadowsDemo.vue + +## Props + +| Prop | Description | Default | +| - | - | - | +| `once` | Whether shadow creation only happens once (resets after props change) | `false` | +| `accumulate` | Whether shadows accumulate progressively over several frames | `true` | +| `frames` | Number of frames to render. More yields cleaner results but takes more time. If `accumulate && once`, 1 frame will be consumed every update for `frames` updates. Otherwise, `frames` frames are consumed for every update. | `40` | +| `blend` | If `accumulate`, controls the refresh ratio | `100` | +| `limit` | If less than `Infinity`, limits the amount of frames rendered. Use this to increase performance once a movable scene has settled | `Infinity` | +| `scale` | Scale of the plane | `10` | +| `opacity` | Opacity of the plane | `1` | +| `alphaTest` | Discards alpha pixels | `0.65` | +| `color` | Shadow color | `'black'` | +| `colorBlend` | If less than `Infinity`, limits the amount of frames rendered. Use this to increase performance once a movable scene has settled | `Infinity` | +| `resolution` | Buffer resolution | `1024` | +| `toneMapped` | Texture tonemapping | `true` | + +## Slot + +You can bring your own lights to ``, but it's designed to be used with ``. + +By default, there's a `` instance provided in ``'s ``. You can replace it with your own `` or an alternative by passing it as a child component. diff --git a/docs/guide/staging/randomized-lights.md b/docs/guide/staging/randomized-lights.md new file mode 100644 index 000000000..7cf5fe430 --- /dev/null +++ b/docs/guide/staging/randomized-lights.md @@ -0,0 +1,35 @@ +# RandomizedLights + +`` internally creates multiple lights and jiggles them. You would normally add it as a child of ``. + +It is based on this [Drei component](http://drei.docs.pmnd.rs/staging/randomized-light). + +## Usage + +```vue + +``` + +## Props + +| Prop | Description | Default | +| - | - | - | +| `count` | Number of lights | `8`| +| `radius` | Radius of the jiggle, higher values make softer light | `1` | +| `intensity` | Light intensity | `Math.PI` | +| `ambient` | "Ambient occlusion" to directional light ratio, lower values mean less AO | `0.5` | +| `castShadow` | If the lights cast shadows | `true` | +| `bias` | Default shadow bias | `0` | +| `mapSize` | Size of the lights' shadow map | `512` | +| `size` | Size of the lights' shadow camera frustum | `10` | +| `near` | Lights' shadow camera near value | `0.5` | +| `far` | Lights' shadow camera far value | `500` | +| `position` | Position | `[5, 5, -10]` | diff --git a/playground/vue/src/pages/staging/AccumulativeShadowsDemo.vue b/playground/vue/src/pages/staging/AccumulativeShadowsDemo.vue new file mode 100644 index 000000000..c2a5ee48b --- /dev/null +++ b/playground/vue/src/pages/staging/AccumulativeShadowsDemo.vue @@ -0,0 +1,90 @@ + + + diff --git a/playground/vue/src/router/routes/staging.ts b/playground/vue/src/router/routes/staging.ts index de21d5975..7efd31458 100644 --- a/playground/vue/src/router/routes/staging.ts +++ b/playground/vue/src/router/routes/staging.ts @@ -64,4 +64,9 @@ export const stagingRoutes = [ name: 'Grid', component: () => import('../../pages/staging/GridDemo.vue'), }, + { + path: '/staging/accumulative-shadows', + name: 'Accumulative Shadows', + component: () => import('../../pages/staging/AccumulativeShadowsDemo.vue'), + }, ] diff --git a/src/core/staging/AccumulativeShadows/ProgressiveLightMap.ts b/src/core/staging/AccumulativeShadows/ProgressiveLightMap.ts new file mode 100644 index 000000000..6f380bb6a --- /dev/null +++ b/src/core/staging/AccumulativeShadows/ProgressiveLightMap.ts @@ -0,0 +1,141 @@ +import type { Camera, Group, Light, Material, Mesh, Scene, ShaderMaterial, Texture, WebGLRenderer } from 'three' +import { Color, HalfFloatType, MeshLambertMaterial, NearestFilter, WebGLRenderTarget } from 'three' +import { MeshDiscardMaterial as DiscardMaterial } from '../../materials/meshDiscardMaterial/material' + +function isLight(object: any): object is Light { + return object.isLight +} + +function isGeometry(object: any): object is Mesh { + return !!object.geometry +} + +// NOTE: Based on "Progressive Light Map Accumulator", by [zalo](https://github.com/zalo/) +export class ProgressiveLightMap { + renderer: WebGLRenderer + res: number + scene: Scene + object: Mesh | null + lightsGroup: Group | null = null + buffer1Active: boolean + progressiveLightMap1: WebGLRenderTarget + progressiveLightMap2: WebGLRenderTarget + discardMat: ShaderMaterial + targetMat: MeshLambertMaterial + previousShadowMap: { value: Texture } + averagingWindow: { value: number } + clearColor: Color + clearAlpha: number + lights: { object: Light, intensity: number }[] + meshes: { object: Mesh, material: Material | Material[] }[] + + constructor(renderer: WebGLRenderer, scene: Scene, res = 1024) { + this.renderer = renderer + this.res = res + this.scene = scene + this.buffer1Active = false + this.lights = [] + this.meshes = [] + this.object = null + this.clearColor = new Color() + this.clearAlpha = 0 + + // NOTE: Create the Progressive LightMap Texture + const textureParams = { + type: HalfFloatType, + magFilter: NearestFilter, + minFilter: NearestFilter, + } + this.progressiveLightMap1 = new WebGLRenderTarget(this.res, this.res, textureParams) + this.progressiveLightMap2 = new WebGLRenderTarget(this.res, this.res, textureParams) + + // NOTE: Inject some spicy new logic into a standard phong material + this.discardMat = new DiscardMaterial() + this.targetMat = new MeshLambertMaterial({ fog: false }) + this.previousShadowMap = { value: this.progressiveLightMap1.texture } + this.averagingWindow = { value: 100 } + this.targetMat.onBeforeCompile = (shader) => { + // NOTE: Vertex Shader: Set Vertex Positions to the Unwrapped UV Positions + shader.vertexShader + = `varying vec2 vUv; + ${shader.vertexShader.slice(0, -1)} + vUv = uv; + gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }` + + // NOTE: Fragment Shader: Set Pixels to average in the Previous frame's Shadows + const bodyStart = shader.fragmentShader.indexOf('void main() {') + shader.fragmentShader + = ` + varying vec2 vUv; + ${shader.fragmentShader.slice(0, bodyStart)} + uniform sampler2D previousShadowMap; + uniform float averagingWindow; + ${shader.fragmentShader.slice(bodyStart - 1, -1)} + vec3 texelOld = texture2D(previousShadowMap, vUv).rgb; + gl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0 / averagingWindow); + }` + + // NOTE: Set the Previous Frame's Texture Buffer and Averaging Window + shader.uniforms.previousShadowMap = this.previousShadowMap + shader.uniforms.averagingWindow = this.averagingWindow + } + } + + clear() { + this.renderer.getClearColor(this.clearColor) + this.clearAlpha = this.renderer.getClearAlpha() + this.renderer.setClearColor('black', 1) + this.renderer.setRenderTarget(this.progressiveLightMap1) + this.renderer.clear() + this.renderer.setRenderTarget(this.progressiveLightMap2) + this.renderer.clear() + this.renderer.setRenderTarget(null) + this.renderer.setClearColor(this.clearColor, this.clearAlpha) + + this.lights = [] + this.meshes = [] + this.scene.traverse((object) => { + if (object === this.lightsGroup) { return false } + if (isGeometry(object)) { + this.meshes.push({ object, material: object.material }) + } + else if (isLight(object)) { + this.lights.push({ object, intensity: object.intensity }) + } + }) + } + + prepare() { + this.lights.forEach(light => (light.object.intensity = 0)) + this.meshes.forEach(mesh => (mesh.object.material = this.discardMat)) + } + + finish() { + this.lights.forEach(light => (light.object.intensity = light.intensity)) + this.meshes.forEach(mesh => (mesh.object.material = mesh.material)) + } + + configure(object: Mesh, lightsGroup: Group) { + this.object = object + this.lightsGroup = lightsGroup + } + + update(camera: Camera, blendWindow = 100) { + if (!this.object) { return } + // NOTE: Set each object's material to the UV Unwrapped Surface Mapping Version + this.averagingWindow.value = blendWindow + this.object.material = this.targetMat + // NOTE: Ping-pong two surface buffers for reading/writing + const activeMap = this.buffer1Active ? this.progressiveLightMap1 : this.progressiveLightMap2 + const inactiveMap = this.buffer1Active ? this.progressiveLightMap2 : this.progressiveLightMap1 + // NOTE: Render the object's surface maps + const oldBg = this.scene.background + this.scene.background = null + this.renderer.setRenderTarget(activeMap) + this.previousShadowMap.value = inactiveMap.texture + this.buffer1Active = !this.buffer1Active + this.renderer.render(this.scene, camera) + this.renderer.setRenderTarget(null) + this.scene.background = oldBg + } +} diff --git a/src/core/staging/AccumulativeShadows/SoftShadowMaterial.ts b/src/core/staging/AccumulativeShadows/SoftShadowMaterial.ts new file mode 100644 index 000000000..de769adb5 --- /dev/null +++ b/src/core/staging/AccumulativeShadows/SoftShadowMaterial.ts @@ -0,0 +1,37 @@ +import { shaderMaterial } from '../../../utils/shaderMaterial' +import type { ColorRepresentation, Texture } from 'three' +import { Color } from 'three' + +export interface SoftShadowMaterialProps { + map: Texture + color?: ColorRepresentation + alphaTest?: number + blend?: number +} + +export const SoftShadowMaterial = /* @__PURE__ */ shaderMaterial( + { + color: new Color(), + blend: 2.0, + alphaTest: 0.75, + opacity: 0, + map: null, + }, + `varying vec2 vUv; + void main() { + gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.); + vUv = uv; + }`, + `varying vec2 vUv; + uniform sampler2D map; + uniform vec3 color; + uniform float opacity; + uniform float alphaTest; + uniform float blend; + void main() { + vec4 sampledDiffuseColor = texture2D(map, vUv); + gl_FragColor = vec4(color * sampledDiffuseColor.r * blend, max(0.0, (1.0 - (sampledDiffuseColor.r + sampledDiffuseColor.g + sampledDiffuseColor.b) / alphaTest)) * opacity); + #include + #include + }`, +) diff --git a/src/core/staging/AccumulativeShadows/component.vue b/src/core/staging/AccumulativeShadows/component.vue new file mode 100644 index 000000000..66691aba4 --- /dev/null +++ b/src/core/staging/AccumulativeShadows/component.vue @@ -0,0 +1,193 @@ + + + diff --git a/src/core/staging/RandomizedLights/RandomizedLights.ts b/src/core/staging/RandomizedLights/RandomizedLights.ts new file mode 100644 index 000000000..a1cf42f6c --- /dev/null +++ b/src/core/staging/RandomizedLights/RandomizedLights.ts @@ -0,0 +1,131 @@ +import { DirectionalLight, Group, MathUtils, Vector3 } from 'three' + +export default class RandomizedLights extends Group { + /** Light position */ + position: Vector3 = new Vector3(0, 0, 0) + /** Radius of the jiggle, higher values make softer light */ + radius = 1 + /** Light intensity */ + intensity = Math.PI + /** Ambient occlusion, lower values mean less AO, hight more, you can mix AO and directional light */ + ambient = 0.5 + /** If the lights cast shadows */ + castShadow = true + /** Default shadow bias */ + bias = 0 + + constructor(config: Partial = {}) { + super() + Object.assign(this, config) + if (this.count === 0) { this.count = 8 } + if (!config.mapSize) { + this.mapSize = 512 + } + if (!config.size) { + this.size = 10 + } + if (!config.near) { + this.near = 0.5 + } + if (!config.far) { + this.far = 500 + } + } + + get length() { + return this.position.length() + } + + set count(n: number) { + this.clear() + for (let i = 0; i < n; i++) { + this.add(new DirectionalLight('white', this.intensity)) + } + } + + get count() { + return this.children.filter(c => 'isDirectionalLight' in c).length + } + + get mapSize() { + return this.lights[0].shadow.mapSize.width + } + + set mapSize(n: number) { + for (const light of this.lights) { + // NOTE: Changing the map size requires 2 modifications. + // https://discourse.threejs.org/t/change-resolution-of-shadows-dinamically/50744/6 + light.shadow.mapSize.set(n, n) + light.shadow.map?.setSize(n, n) + } + } + + get size() { + return this.lights[0].shadow.camera.right + } + + set size(n: number) { + for (const light of this.lights) { + light.shadow.camera.left = -n + light.shadow.camera.right = n + light.shadow.camera.top = n + light.shadow.camera.bottom = -n + } + } + + get near() { + return this.lights[0].shadow.camera.near + } + + set near(n: number) { + for (const light of this.lights) { + light.shadow.camera.near = this.near + } + } + + get far() { + return this.lights[0].shadow.camera.far + } + + set far(n: number) { + for (const light of this.lights) { + light.shadow.camera.far = this.far + } + } + + get lights(): DirectionalLight[] { + return this.children.filter(c => 'isDirectionalLight' in c) as DirectionalLight[] + } + + update() { + const lights = this.lights + const lightIntensity = this.intensity / lights.length + let ambientCount = Math.floor(this.ambient * lights.length) + + for (const light of lights) { + light.castShadow = this.castShadow + light.shadow.bias = this.bias + + light.intensity = lightIntensity + + if (ambientCount-- > 0) { + const lambda = Math.acos(2 * Math.random() - 1) - Math.PI / 2.0 + const phi = 2 * Math.PI * Math.random() + light.position.set( + Math.cos(lambda) * Math.cos(phi) * this.length, + Math.abs(Math.cos(lambda) * Math.sin(phi) * this.length), + Math.sin(lambda) * this.length, + ) + } + else { + if (Math.random() > this.ambient) { + light.position.set( + this.position.x + MathUtils.randFloatSpread(this.radius), + this.position.y + MathUtils.randFloatSpread(this.radius), + this.position.z + MathUtils.randFloatSpread(this.radius), + ) + } + } + } + } +} diff --git a/src/core/staging/RandomizedLights/component.vue b/src/core/staging/RandomizedLights/component.vue new file mode 100644 index 000000000..bd2936e78 --- /dev/null +++ b/src/core/staging/RandomizedLights/component.vue @@ -0,0 +1,70 @@ + + + diff --git a/src/core/staging/index.ts b/src/core/staging/index.ts index fc6ea028c..f1828ab9d 100644 --- a/src/core/staging/index.ts +++ b/src/core/staging/index.ts @@ -1,3 +1,4 @@ +import AccumulativeShadows from './AccumulativeShadows/component.vue' import Align from './Align.vue' import Backdrop from './Backdrop.vue' import ContactShadows from './ContactShadows.vue' @@ -5,6 +6,7 @@ import Fit from './Fit.vue' import Grid from './Grid.vue' import Ocean from './Ocean.vue' import Precipitation from './Precipitation.vue' +import RandomizedLights from './RandomizedLights/component.vue' import Sky from './Sky.vue' import Smoke from './Smoke.vue' import SoftShadows from './SoftShadows.vue' @@ -14,6 +16,7 @@ import Environment from './useEnvironment/component.vue' import Lightformer from './useEnvironment/lightformer/index.vue' export { + AccumulativeShadows, Align, Backdrop, ContactShadows, @@ -23,6 +26,7 @@ export { Lightformer, Ocean, Precipitation, + RandomizedLights, Sky, Smoke, SoftShadows, From 592ec68de83fcd5a62523b32b96ade825437ea68 Mon Sep 17 00:00:00 2001 From: andretchen0 Date: Thu, 2 Jan 2025 10:57:35 +0100 Subject: [PATCH 09/65] feat(Bounds): add component, demo, docs (#408) (#568) * feat(Bounds): add component, demo, docs * refactor(Bounds): useScreenSize -> useResize * refactor(Bounds): rename variables, remove unneeded state * docs: fix material items merge issue --------- Co-authored-by: alvarosabu --- docs/.vitepress/config.ts | 1 + .../theme/components/BoundsDemo.vue | 32 ++ docs/component-list/components.ts | 3 + docs/guide/staging/bounds.md | 68 +++ .../vue/src/pages/staging/BoundsDemo.vue | 145 ++++++ playground/vue/src/router/routes/staging.ts | 5 + src/core/staging/Bounds/Bounds.ts | 433 ++++++++++++++++++ src/core/staging/Bounds/component.vue | 109 +++++ src/core/staging/index.ts | 2 + 9 files changed, 798 insertions(+) create mode 100644 docs/.vitepress/theme/components/BoundsDemo.vue create mode 100644 docs/guide/staging/bounds.md create mode 100644 playground/vue/src/pages/staging/BoundsDemo.vue create mode 100644 src/core/staging/Bounds/Bounds.ts create mode 100644 src/core/staging/Bounds/component.vue diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index f7310543d..99120cf5d 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -169,6 +169,7 @@ export default defineConfig({ { text: 'Align', link: '/guide/staging/align' }, { text: 'SoftShadows', link: '/guide/staging/soft-shadows' }, { text: 'Grid', link: '/guide/staging/grid' }, + { text: 'Bounds', link: '/guide/staging/bounds' }, { text: 'RandomizedLights', link: '/guide/staging/randomized-lights' }, ], }, diff --git a/docs/.vitepress/theme/components/BoundsDemo.vue b/docs/.vitepress/theme/components/BoundsDemo.vue new file mode 100644 index 000000000..4c95a476e --- /dev/null +++ b/docs/.vitepress/theme/components/BoundsDemo.vue @@ -0,0 +1,32 @@ + + + diff --git a/docs/component-list/components.ts b/docs/component-list/components.ts index 99bda8c50..e92fdb112 100644 --- a/docs/component-list/components.ts +++ b/docs/component-list/components.ts @@ -71,6 +71,8 @@ export default [ { text: 'PointMaterial', link: '/guide/materials/point-material', + }, + { text: 'MeshDiscardMaterial', link: '/guide/materials/mesh-discard-material', }, @@ -120,6 +122,7 @@ export default [ { text: 'Align', link: '/guide/staging/align' }, { text: 'SoftShadows', link: '/guide/staging/soft-shadows' }, { text: 'Grid', link: '/guide/staging/grid' }, + { text: 'Bounds', link: '/guide/staging/bounds' }, { text: 'RandomizedLights', link: '/guide/staging/randomized-lights' }, ], }, diff --git a/docs/guide/staging/bounds.md b/docs/guide/staging/bounds.md new file mode 100644 index 000000000..ecaeb559b --- /dev/null +++ b/docs/guide/staging/bounds.md @@ -0,0 +1,68 @@ +# Bounds + + + + + +Calculates a boundary box and centers the camera accordingly. Its `lookAt` method accepts a target to look at imperatively e.g., after a click. + +::: info +If you are using other camera controls, be sure to make them the 'default'. +```vue + +``` +::: + +## Usage + +<<< @/.vitepress/theme/components/BoundsDemo.vue + +## Props + +| Name | Description | Default | +| :--- | :--- | ---- | +| `duration` | Duration of the `lookAt` animation in seconds | `1.0` | +| `offset` | Additional distance from the target when using `lookAt` with a `Box3` or `Object3D` | `0.2` | +| `useResize` | Whether to re`lookAt` the last target when the screen is resized | `false` | +| `useMounted` | Whether to `lookAt` the `Bounds` object when the component is mounts | `false` | +| `clip` | Whether to adjust the camera's `near` and `far` settings when using `lookAt` | `false` | +| `easing` | Animation's easing function. `t` and the returned value should be in the interval `[0, 1]` | Cubic ease out | + +## `lookAt` + +`` `lookAt` points the camera at its first argument: an `Object3D`, `Box3` or `Vector3`. + +``` + /** + * Calculates a boundary box around an `Object3D` and centers the camera accordingly. + */ + lookAt(object: Object3D): void + /** + * Calculates a boundary box around an `Object3D` and centers the camera accordingly and animates the camera's `up` vector. + */ + lookAt(object: Object3D, up: VectorFlexibleParams): void + /** + * Centers the camera's viewport on a `Box3`. + */ + lookAt(box3: Box3): void + /** + * Centers the camera's viewport on a `Box3` and animates the camera's `up` vector. + */ + lookAt(box3: Box3, up: VectorFlexibleParams): void + /** + * Look at a `Vector3`. + */ + lookAt(target: VectorFlexibleParams): void + /** + * Look at a `Vector3`, if provided. Move the camera to `position`. + */ + lookAt(target: VectorFlexibleParams | undefined | null, position: VectorFlexibleParams): void + /** + * Look at a `Vector3`, if provided. Move the camera to `position` and animate the camera's `up` vector. + */ + lookAt(target: VectorFlexibleParams | undefined | null, position: VectorFlexibleParams, up: VectorFlexibleParams): void + /** + * Rerun `lookAt` using the prior arguments. If `lookAt` has never been called, uses the `Bounds` object. + */ + lookAt(): void +``` diff --git a/playground/vue/src/pages/staging/BoundsDemo.vue b/playground/vue/src/pages/staging/BoundsDemo.vue new file mode 100644 index 000000000..5a1bf3bcd --- /dev/null +++ b/playground/vue/src/pages/staging/BoundsDemo.vue @@ -0,0 +1,145 @@ + + + diff --git a/playground/vue/src/router/routes/staging.ts b/playground/vue/src/router/routes/staging.ts index 7efd31458..44bce07f3 100644 --- a/playground/vue/src/router/routes/staging.ts +++ b/playground/vue/src/router/routes/staging.ts @@ -44,6 +44,11 @@ export const stagingRoutes = [ name: 'Ocean', component: () => import('../../pages/staging/OceanDemo.vue'), }, + { + path: '/staging/bounds', + name: 'Bounds', + component: () => import('../../pages/staging/BoundsDemo.vue'), + }, { path: '/staging/fit', name: 'Fit', diff --git a/src/core/staging/Bounds/Bounds.ts b/src/core/staging/Bounds/Bounds.ts new file mode 100644 index 000000000..d753fc43a --- /dev/null +++ b/src/core/staging/Bounds/Bounds.ts @@ -0,0 +1,433 @@ +import type { VectorFlexibleParams } from '@tresjs/core' +import { normalizeVectorFlexibleParam } from '@tresjs/core' +import type { Camera, OrthographicCamera, PerspectiveCamera } from 'three' +import { Box3, Matrix4, Object3D, Quaternion, Vector3 } from 'three' +import { clamp } from 'three/src/math/MathUtils' + +interface SizeReturn { + box: Box3 + size: Vector3 + center: Vector3 + distance: number +} + +export interface BoundsControlsProto { + update: () => void + target: Vector3 + maxDistance: number + addEventListener: (event: string, callback: (event: any) => void) => void + removeEventListener: (event: string, callback: (event: any) => void) => void +} + +interface StartT { + position: Vector3 + quaternion: Quaternion + zoom: number +} + +interface GoalT { + position: Vector3 | undefined + quaternion: Quaternion | undefined + zoom: number | undefined + up: Vector3 | undefined + lookAt: Vector3 | undefined + box: Box3 | undefined + object: Box3 | Object3D | undefined +} + +export interface OnLookAtCallbackArg { + position: Vector3 + quaternion: Quaternion + zoom: number | undefined + up: Vector3 | undefined + lookAt: Vector3 + box: Box3 + object: Box3 | Object3D | undefined +} + +type CachedFitArgs = + [ Vector3 | null, Vector3, Vector3 ] + | [ Vector3 | null, Vector3] + | [ Vector3 | null] + | [ Object3D ] + | [ Object3D, Vector3 ] + | [ Box3 ] + | [ Box3, Vector3 ] + +enum AnimationState { + NONE = 0, + ACTIVE = 2, +} + +const isOrthographicCamera = (def: Camera): def is OrthographicCamera => + def && (def as OrthographicCamera).isOrthographicCamera +const isPerspectiveCamera = (def: Camera): def is PerspectiveCamera => + def && (def as PerspectiveCamera).isPerspectiveCamera +const isBox3 = (def: any): def is Box3 => def && (def as Box3).isBox3 + +const easingFnDefault = (t: number) => { return 1 - Math.exp(-5 * t) + 0.007 * t } + +export class Bounds extends Object3D { + camera: Camera + offset = 0.2 + duration = 1 + clip = true + + private _start: StartT = { + position: new Vector3(), + quaternion: new Quaternion(), + zoom: 1, + } + + private _goal: GoalT = { + position: undefined, + quaternion: undefined, + zoom: undefined, + up: undefined, + lookAt: undefined, + box: undefined, + object: undefined, + } + + private _animationState = AnimationState.NONE + private _t = 0.0 + private _controls: BoundsControlsProto | null = null + private _controlsRemoveEventListener = () => {} + + // NOTE: Overloaded functions and TS `Parameters` does not work. + // moz-extension://b37b5993-6262-452a-b49a-4f9e44f44989/confirm-page.html?url=https%3A%2F%2Fgithub.com%2Fmicrosoft%2FTypeScript%2Fissues%2F29732&cookieStoreId=firefox-container-21¤tCookieStoreId=firefox-container-8 + private _cachedFitArgs: CachedFitArgs = [this] + + constructor(camera: Camera) { + super() + this.camera = camera + } + + dispose() { + this.controls = null + } + + onStart(_: OnLookAtCallbackArg) {} + onCancel(_: OnLookAtCallbackArg) {} + onEnd(_: OnLookAtCallbackArg) {} + easing = easingFnDefault + + get controls() { + return this._controls + } + + set controls(controls: BoundsControlsProto | null) { + this._controlsRemoveEventListener() + this._controlsRemoveEventListener = () => {} + + if (controls) { + this._controls = controls + // NOTE: Try to prevent drag hijacking + // Attach an event to listen to `controls` "start". + // It is triggered when active controls are interacted with and + // should cancel animations here. + // https://threejs.org/docs/#examples/en/controls/OrbitControls + const callback = () => { + if (controls && this._goal.lookAt && this._animationState !== AnimationState.NONE) { + const front = new Vector3().setFromMatrixColumn(this.camera.matrix, 2) + const d0 = this._start.position.distanceTo(controls.target) + const d1 = (this._goal.position || this._start.position).distanceTo(this._goal.lookAt) + const d = (1 - this._t) * d0 + this._t * d1 + + controls.target.copy(this.camera.position).addScaledVector(front, -d) + controls.update() + this._stop() + } + + this._animationState = AnimationState.NONE + } + + controls.addEventListener('start', callback) + + this._controlsRemoveEventListener = () => controls.removeEventListener('start', callback) + } + } + + private _stop() { + if (this._goal.position) { + this.onCancel(this._goal as OnLookAtCallbackArg) + } + _resetGoal(this._goal) + } + + /** + * Calculates a boundary box around an `Object3D` and centers the camera accordingly. + */ + lookAt(object: Object3D): void + /** + * Calculates a boundary box around an `Object3D` and centers the camera accordingly and animates the camera's `up` vector. + */ + lookAt(object: Object3D, up: VectorFlexibleParams): void + /** + * Centers the camera's viewport on a `Box3`. + */ + lookAt(box3: Box3): void + /** + * Centers the camera's viewport on a `Box3` and animates the camera's `up` vector. + */ + lookAt(box3: Box3, up: VectorFlexibleParams): void + /** + * Look at a `Vector3`. + */ + lookAt(target: VectorFlexibleParams): void + /** + * Look at a `Vector3`, if provided. Move the camera to `position`. + */ + lookAt(target: VectorFlexibleParams | undefined | null, position: VectorFlexibleParams): void + /** + * Look at a `Vector3`, if provided. Move the camera to `position` and animate the camera's `up` vector. + */ + lookAt(target: VectorFlexibleParams | undefined | null, position: VectorFlexibleParams, up: VectorFlexibleParams): void + /** + * Rerun `lookAt` using the prior arguments. If `lookAt` has never been called, uses the `Bounds` object. + */ + lookAt(): void + lookAt( + arg0?: Object3D | Box3 | VectorFlexibleParams | undefined | null, + arg1?: VectorFlexibleParams, + arg2?: VectorFlexibleParams, + ) { + // NOTE: Normalize args + const size = arguments.length + + let args: CachedFitArgs = this._cachedFitArgs + const v1 = arg1 ? new Vector3().fromArray(normalizeVectorFlexibleParam(arg1)) : new Vector3() + const v2 = arg2 ? new Vector3().fromArray(normalizeVectorFlexibleParam(arg2)) : new Vector3() + + if (size === 0) { + // NOTE: We didn't get any args, use prior args. + args = this._cachedFitArgs + } + else if (!arg0 && arg0 !== 0) { + // NOTE: `fit(lookAt=undefined | null)` + if (size === 1) { args = [null] } + // NOTE: `fit(lookAt=undefined | null, lookAt: VectorFlexibleParams)` + else if (size === 2) { args = [null, v1] } + // NOTE: `fit(lookAt=undefined | null, lookAt: VectorFlexibleParams, up: VectorFlexibleParams)` + else if (size === 3) { args = [null, v1, v2] } + } + else if (typeof arg0 === 'number' || (arg0 as Vector3).isVector3 || Array.isArray(arg0)) { + const v0 = new Vector3().fromArray(normalizeVectorFlexibleParam(arg0 as VectorFlexibleParams)) + // NOTE: `fit(position: VectorFlexibleParams)` + if (size === 1) { args = [v0] } + // NOTE: `fit(position: VectorFlexibleParams, lookAt: VectorFlexibleParams)` + else if (size === 2) { args = [v0, v1] } + // NOTE: `fit(position: VectorFlexibleParams, lookAt: VectorFlexibleParams, up: VectorFlexibleParams)` + else if (size === 3) { args = [v0, v1, v2] } + } + else if ((arg0 as Box3).isBox3) { + // NOTE: `fit(box3: Box3)` + if (size === 1) { args = [arg0 as Box3] } + // NOTE: `fit(box3: Box3, up)` + else { args = [arg0 as Box3, arg1 as Vector3] } + } + else if ((arg0 as Object3D).isObject3D) { + // NOTE: `fit(object: Object3D)` + if (size === 1) { args = [arg0 as Object3D] } + // NOTE: `fit(object: Object3D, up)` + else { args = [arg0 as Object3D, arg1 as Vector3] } + } + + // NOTE: End normalization. + + this._cachedFitArgs = args + + this._stop() + _resetGoal(this._goal) + + if (args.length > 0 && (args[0] === null || args[0] === undefined || (args[0] as Vector3).isVector3)) { + // NOTE: The user sent specific numeric values, not an object. + const [lookAt, position, up] = args + this._start.position.copy(this.camera.position) + this._start.quaternion.copy(this.camera.quaternion) + isOrthographicCamera(this.camera) && (this._start.zoom = (this.camera as OrthographicCamera).zoom) + + if (position) { + this._goal.position = Array.isArray(position) ? new Vector3(...position) : (position as Vector3).clone() + } + else { + this._goal.position = this.camera.position + } + + if (lookAt) { + this._goal.lookAt = Array.isArray(lookAt) ? new Vector3(...lookAt) : (lookAt as Vector3).clone() + } + else { + this._goal.lookAt = new Vector3(0, 0, 1).applyQuaternion(this.camera.quaternion) + } + + if (up) { + this._goal.up = Array.isArray(up) ? new Vector3(...up) : up.clone() + } + + const mCamRot = new Matrix4().lookAt( + this._goal.position || this.camera.position, + this._goal.lookAt, + this._goal.up ?? this.camera.up, + ) + this._goal.quaternion = new Quaternion().setFromRotationMatrix(mCamRot) + } + else { + const box3OrObject = args[0] as Box3 | Object3D + const { center, distance, box } = _getSize(box3OrObject, this.camera, this.offset) + + this._start.position.copy(this.camera.position) + this._start.quaternion.copy(this.camera.quaternion) + isOrthographicCamera(this.camera) && (this._start.zoom = (this.camera as OrthographicCamera).zoom) + + const direction = this.camera.position.clone().sub(center).normalize() + this._goal.object = box3OrObject + this._goal.box = box + this._goal.position = center.clone().addScaledVector(direction, distance) + this._goal.lookAt = center.clone() + const mCamRot = new Matrix4().lookAt(this._goal.position, this._goal.lookAt, this.camera.up) + this._goal.quaternion = new Quaternion().setFromRotationMatrix(mCamRot) + + if (isOrthographicCamera(this.camera)) { + let maxHeight = 0 + let maxWidth = 0 + const vertices = [ + new Vector3(box.min.x, box.min.y, box.min.z), + new Vector3(box.min.x, box.max.y, box.min.z), + new Vector3(box.min.x, box.min.y, box.max.z), + new Vector3(box.min.x, box.max.y, box.max.z), + new Vector3(box.max.x, box.max.y, box.max.z), + new Vector3(box.max.x, box.max.y, box.min.z), + new Vector3(box.max.x, box.min.y, box.max.z), + new Vector3(box.max.x, box.min.y, box.min.z), + ] + + // NOTE: Transform the center and each corner to camera space + const goal = this._goal + const pos = goal.position || this.camera.position + const target = goal.lookAt || this._controls?.target + const up = goal.up || this.camera.up + const mCamWInv = target + ? new Matrix4().lookAt(pos, target, up).setPosition(pos).invert() + : this.camera.matrixWorldInverse + for (const v of vertices) { + v.applyMatrix4(mCamWInv) + maxHeight = Math.max(maxHeight, Math.abs(v.y)) + maxWidth = Math.max(maxWidth, Math.abs(v.x)) + } + maxHeight *= 2 + maxWidth *= 2 + const zoomForHeight = (this.camera.top - this.camera.bottom) / maxHeight + const zoomForWidth = (this.camera.right - this.camera.left) / maxWidth + + goal.zoom = Math.min(zoomForHeight, zoomForWidth) / (1 + this.offset) + // NOTE: Fix possible division by 0. + if (Number.isNaN(goal.zoom)) { goal.zoom = 0 } + } + + if (this.clip) { + if (isPerspectiveCamera(this.camera)) { + this.camera.near = Math.abs(distance) / 100 + this.camera.far = Math.abs(distance) * 100 + this.camera.updateProjectionMatrix() + } + + if (this._controls) { + this._controls.maxDistance = Math.abs(distance) * 100 + this._controls.update() + } + } + } + + this._t = 0 + this._animationState = AnimationState.ACTIVE + + this.onStart && this.onStart(this._goal as OnLookAtCallbackArg) + } + + animate(delta: number) { + if (this._animationState === AnimationState.NONE) { + return false + } + + if (this._animationState === AnimationState.ACTIVE) { + this._t += delta / this.duration + this._t = clamp(this._t, 0, 1) + + if (this._t >= 1) { + this._goal.position && this.camera.position.copy(this._goal.position) + this._goal.quaternion && this.camera.quaternion.copy(this._goal.quaternion) + this._goal.up && this.camera.up.copy(this._goal.up) + this._goal.zoom && isOrthographicCamera(this.camera) && (this.camera.zoom = this._goal.zoom) + + this.camera.updateMatrixWorld() + if (isPerspectiveCamera(this.camera)) { + this.camera.updateProjectionMatrix() + } + + if (this._controls && this._goal.lookAt) { + this._controls.target.copy(this._goal.lookAt) + this._controls.update() + } + + this._animationState = AnimationState.NONE + this.onEnd && this.onEnd(this._goal as OnLookAtCallbackArg) + _resetGoal(this._goal) + } + else { + const k = this.easing && this.easing(this._t) + + this._goal.position && this.camera.position.lerpVectors(this._start.position, this._goal.position, k) + this._goal.quaternion && this.camera.quaternion.slerpQuaternions(this._start.quaternion, this._goal.quaternion, k) + this._goal.up && this.camera.up.set(0, 1, 0).applyQuaternion(this.camera.quaternion) + this._goal.zoom + && isOrthographicCamera(this.camera) + && (this.camera.zoom = (1 - k) * this._start.zoom + k * this._goal.zoom) + + this.camera.updateMatrixWorld() + if (isPerspectiveCamera(this.camera)) { + this.camera.updateProjectionMatrix() + } + } + } + + return true + } +} + +function _getSize(box3OrObject: Box3 | Object3D, camera: Camera, offset = 0): SizeReturn { + const box = new Box3() + if (isBox3(box3OrObject)) { + box.copy(box3OrObject) + } + else { + box3OrObject.updateWorldMatrix(true, true) + box.setFromObject(box3OrObject) + } + + if (box.isEmpty()) { + const max = camera.position.length() || 10 + box.setFromCenterAndSize(new Vector3(), new Vector3(max, max, max)) + } + + const boxSize = box.getSize(new Vector3()) + const center = box.getCenter(new Vector3()) + const maxSize = Math.max(boxSize.x, boxSize.y, boxSize.z) + const fitHeightDistance = isOrthographicCamera(camera) + ? maxSize * 4 + : maxSize / (2 * Math.atan((Math.PI * (camera as PerspectiveCamera).fov) / 360)) + const fitWidthDistance = isOrthographicCamera(camera) ? maxSize * 4 : fitHeightDistance / (camera as PerspectiveCamera).aspect + const distance = (1 + offset) * Math.max(fitHeightDistance, fitWidthDistance) + + return { box, size: boxSize, center, distance } +} + +function _resetGoal(goal: GoalT) { + goal.position = undefined + goal.quaternion = undefined + goal.zoom = undefined + goal.up = undefined + goal.lookAt = undefined + goal.box = undefined + goal.object = undefined +} diff --git a/src/core/staging/Bounds/component.vue b/src/core/staging/Bounds/component.vue new file mode 100644 index 000000000..900ce10fe --- /dev/null +++ b/src/core/staging/Bounds/component.vue @@ -0,0 +1,109 @@ + + + diff --git a/src/core/staging/index.ts b/src/core/staging/index.ts index f1828ab9d..4c441c017 100644 --- a/src/core/staging/index.ts +++ b/src/core/staging/index.ts @@ -1,6 +1,7 @@ import AccumulativeShadows from './AccumulativeShadows/component.vue' import Align from './Align.vue' import Backdrop from './Backdrop.vue' +import Bounds from './Bounds/component.vue' import ContactShadows from './ContactShadows.vue' import Fit from './Fit.vue' import Grid from './Grid.vue' @@ -19,6 +20,7 @@ export { AccumulativeShadows, Align, Backdrop, + Bounds, ContactShadows, Environment, Fit, From 789110ed03667302a88ce6104c8744fcaee15a7c Mon Sep 17 00:00:00 2001 From: andretchen0 Date: Thu, 2 Jan 2025 11:00:42 +0100 Subject: [PATCH 10/65] refactor(Align): change callback to emit, improve naming (#571) --- docs/guide/staging/align.md | 6 +++--- src/core/staging/Align.vue | 23 +++++++++++++++++------ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/docs/guide/staging/align.md b/docs/guide/staging/align.md index 04e5bb2cf..3fd276933 100644 --- a/docs/guide/staging/align.md +++ b/docs/guide/staging/align.md @@ -30,13 +30,13 @@ All props are optional. | `onAlign` | Callback that fires when updating, after measurement. | | `cacheKey` | If set, component will only update when `cacheKey`'s value changes. If unset, component will update every frame. | -## `OnAlignCallbackProps` +## `AlignCallbackOptions` ```ts -export interface OnAlignCallbackProps { +export interface AlignCallbackOptions { /** The next parent above */ parent: Object3D - /** The outmost container group of the component */ + /** The outmost container group of the component */ container: Object3D width: number height: number diff --git a/src/core/staging/Align.vue b/src/core/staging/Align.vue index 69e87fe36..c2a31448d 100644 --- a/src/core/staging/Align.vue +++ b/src/core/staging/Align.vue @@ -8,7 +8,7 @@ import { shallowRef, toValue, watchEffect } from 'vue' // NOTE: Sources // https://github.com/pmndrs/drei/blob/master/src/core/Center.tsx -export interface OnAlignCallbackProps { +export interface AlignCallbackOptions { /** The next parent above */ parent: Object3D /** The outmost container group of the component */ @@ -41,8 +41,6 @@ export interface AlignProps { disableZ?: boolean /** See https://threejs.org/docs/index.html?q=box3#api/en/math/Box3.setFromObject */ precise?: boolean - /** Callback, fires when updating, after measurement */ - onAlign?: (props: OnAlignCallbackProps) => void /** Optional cacheKey to keep the component from recalculating on every render */ cacheKey?: MaybeRefOrGetter } @@ -52,6 +50,11 @@ const props = withDefaults(defineProps(), { cacheKey: undefined, }) +const emit = defineEmits<{ + (e: 'update', props: AlignCallbackOptions): void + (e: 'change', props: AlignCallbackOptions): void +}>() + const ref = shallowRef() const outer = shallowRef() const inner = shallowRef() @@ -60,6 +63,8 @@ const box3 = new Box3() const center = new Vector3() const sphere = new Sphere() +const previous = { width: 0, height: 0, depth: 0, position: new Vector3() } + function update() { if (!outer.value || !inner.value || !ref.value) { return } outer.value.matrixWorld.identity() @@ -79,9 +84,11 @@ function update() { props.disable || props.disableZ ? 0 : -center.z + zAlign, ) - // Only fire onCentered if the bounding box has changed - if (typeof props.onAlign !== 'undefined') { - props.onAlign({ + if (previous.width !== width + || previous.height !== height + || previous.depth !== depth + || !outer.value.position.equals(previous.position)) { + emit('change', { parent: ref.value.parent!, container: ref.value, width, @@ -94,6 +101,10 @@ function update() { horizontalAlignment: xAlign, depthAlignment: zAlign, }) + previous.width = width + previous.height = height + previous.depth = depth + previous.position.copy(outer.value.position) } } From c0c1bcc15743f0c93f8908b9e29d2555a4c79c85 Mon Sep 17 00:00:00 2001 From: andretchen0 Date: Thu, 2 Jan 2025 15:15:27 +0100 Subject: [PATCH 11/65] feat(CircleShadow): add component, demo, docs (#549) * feat(CircleShadow): add component, demo, docs * docs(CircleShadow): fix prop name --------- Co-authored-by: alvarosabu --- docs/.vitepress/config.ts | 1 + .../theme/components/CircleShadowDemo.vue | 18 ++++++ docs/component-list/components.ts | 1 + docs/guide/staging/circle-shadow.md | 23 +++++++ .../src/pages/staging/CircleShadowDemo.vue | 38 +++++++++++ playground/vue/src/router/routes/staging.ts | 7 ++- src/core/staging/CircleShadow.vue | 63 +++++++++++++++++++ src/core/staging/index.ts | 2 + 8 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 docs/.vitepress/theme/components/CircleShadowDemo.vue create mode 100644 docs/guide/staging/circle-shadow.md create mode 100644 playground/vue/src/pages/staging/CircleShadowDemo.vue create mode 100644 src/core/staging/CircleShadow.vue diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 99120cf5d..57e54030f 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -169,6 +169,7 @@ export default defineConfig({ { text: 'Align', link: '/guide/staging/align' }, { text: 'SoftShadows', link: '/guide/staging/soft-shadows' }, { text: 'Grid', link: '/guide/staging/grid' }, + { text: 'CircleShadow', link: '/guide/staging/circle-shadow' }, { text: 'Bounds', link: '/guide/staging/bounds' }, { text: 'RandomizedLights', link: '/guide/staging/randomized-lights' }, ], diff --git a/docs/.vitepress/theme/components/CircleShadowDemo.vue b/docs/.vitepress/theme/components/CircleShadowDemo.vue new file mode 100644 index 000000000..4f7dbd89d --- /dev/null +++ b/docs/.vitepress/theme/components/CircleShadowDemo.vue @@ -0,0 +1,18 @@ + + + diff --git a/docs/component-list/components.ts b/docs/component-list/components.ts index e92fdb112..e67c7c00c 100644 --- a/docs/component-list/components.ts +++ b/docs/component-list/components.ts @@ -122,6 +122,7 @@ export default [ { text: 'Align', link: '/guide/staging/align' }, { text: 'SoftShadows', link: '/guide/staging/soft-shadows' }, { text: 'Grid', link: '/guide/staging/grid' }, + { text: 'CircleShadow', link: '/guide/staging/circle-shadow' }, { text: 'Bounds', link: '/guide/staging/bounds' }, { text: 'RandomizedLights', link: '/guide/staging/randomized-lights' }, ], diff --git a/docs/guide/staging/circle-shadow.md b/docs/guide/staging/circle-shadow.md new file mode 100644 index 000000000..4e693c2bf --- /dev/null +++ b/docs/guide/staging/circle-shadow.md @@ -0,0 +1,23 @@ +# CircleShadow + + + + + +`` is a cheap, texture-based radial gradient on a `THREE.PlaneGeometry`. + +## Usage + +<<< @/.vitepress/theme/components/CircleShadowDemo.vue + +## Props + +All props are optional. + +| Name | Description | Default | +| :--- | :--- | ------- | +| `color` | Color of the shadow as a `Color \| number \| string` | `'black'` | +| `opacity` | Opacity of the shadow | `0.5` | +| `offset` | Placement of the first radial gradient color stop. `0.0` is the center of the circle. `1.0` is edge. | `0` | +| `fog` | Whether the material is affected by fog | `false` | +| `depthWrite` | Whether rendering the material has any effect on the depth buffer | `false` | diff --git a/playground/vue/src/pages/staging/CircleShadowDemo.vue b/playground/vue/src/pages/staging/CircleShadowDemo.vue new file mode 100644 index 000000000..865bad284 --- /dev/null +++ b/playground/vue/src/pages/staging/CircleShadowDemo.vue @@ -0,0 +1,38 @@ + + + diff --git a/playground/vue/src/router/routes/staging.ts b/playground/vue/src/router/routes/staging.ts index 44bce07f3..656084213 100644 --- a/playground/vue/src/router/routes/staging.ts +++ b/playground/vue/src/router/routes/staging.ts @@ -22,7 +22,7 @@ export const stagingRoutes = [ { path: '/staging/backdrop', name: 'Backdrop', - component: () => import('../../pages/staging/BackdropDemo.vue'), + component: () => import('../../pages/staging/CircleShadowDemo.vue'), }, { path: '/staging/contact-shadows', @@ -69,6 +69,11 @@ export const stagingRoutes = [ name: 'Grid', component: () => import('../../pages/staging/GridDemo.vue'), }, + { + path: '/staging/circle-shadow', + name: 'CircleShadow', + component: () => import('../../pages/staging/CircleShadowDemo.vue'), + }, { path: '/staging/accumulative-shadows', name: 'Accumulative Shadows', diff --git a/src/core/staging/CircleShadow.vue b/src/core/staging/CircleShadow.vue new file mode 100644 index 000000000..e0cc30bf3 --- /dev/null +++ b/src/core/staging/CircleShadow.vue @@ -0,0 +1,63 @@ + + + diff --git a/src/core/staging/index.ts b/src/core/staging/index.ts index 4c441c017..7d5aa2d1f 100644 --- a/src/core/staging/index.ts +++ b/src/core/staging/index.ts @@ -7,6 +7,7 @@ import Fit from './Fit.vue' import Grid from './Grid.vue' import Ocean from './Ocean.vue' import Precipitation from './Precipitation.vue' +import CircleShadow from './CircleShadow.vue' import RandomizedLights from './RandomizedLights/component.vue' import Sky from './Sky.vue' import Smoke from './Smoke.vue' @@ -21,6 +22,7 @@ export { Align, Backdrop, Bounds, + CircleShadow, ContactShadows, Environment, Fit, From 9db8c782d434a33c64663f313bc289199281f4eb Mon Sep 17 00:00:00 2001 From: andretchen0 Date: Fri, 3 Jan 2025 15:32:55 +0100 Subject: [PATCH 12/65] feat(Stage): add component, demo, docs (#572) * feat(AccumulativeShadows): add component, demo, docs * feat(Bounds): add component, demo, docs * refactor(Bounds): useScreenSize -> useResize * refactor(Bounds): rename variables, remove unneeded state * refactor(Align): change callback to emit, improve naming * refactor(RandomizedLights): rename interface * refactor(AccumulativeShadows): change default alphaTest value * refactor(AccumulativeShadows): expose update function * feat(Stage): add component, demo, docs * docs: fix material items * feat: import RandomizedLightsProps from correct file * refactor(Stage): update types --------- Co-authored-by: alvarosabu --- docs/.vitepress/config.ts | 2 + .../.vitepress/theme/components/StageDemo.vue | 45 ++++ docs/component-list/components.ts | 2 + docs/guide/staging/stage.md | 77 ++++++ .../vue/src/pages/staging/StageDemo.vue | 141 ++++++++++ playground/vue/src/router/routes/staging.ts | 5 + src/core/staging/Stage.vue | 249 ++++++++++++++++++ src/core/staging/index.ts | 2 + 8 files changed, 523 insertions(+) create mode 100644 docs/.vitepress/theme/components/StageDemo.vue create mode 100644 docs/guide/staging/stage.md create mode 100644 playground/vue/src/pages/staging/StageDemo.vue create mode 100644 src/core/staging/Stage.vue diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 57e54030f..ec4c08e37 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -172,6 +172,8 @@ export default defineConfig({ { text: 'CircleShadow', link: '/guide/staging/circle-shadow' }, { text: 'Bounds', link: '/guide/staging/bounds' }, { text: 'RandomizedLights', link: '/guide/staging/randomized-lights' }, + { text: 'Bounds', link: '/guide/staging/bounds' }, + { text: 'Stage', link: '/guide/staging/stage' }, ], }, { diff --git a/docs/.vitepress/theme/components/StageDemo.vue b/docs/.vitepress/theme/components/StageDemo.vue new file mode 100644 index 000000000..e9f39d945 --- /dev/null +++ b/docs/.vitepress/theme/components/StageDemo.vue @@ -0,0 +1,45 @@ + + + diff --git a/docs/component-list/components.ts b/docs/component-list/components.ts index e67c7c00c..20d6f43e1 100644 --- a/docs/component-list/components.ts +++ b/docs/component-list/components.ts @@ -125,6 +125,8 @@ export default [ { text: 'CircleShadow', link: '/guide/staging/circle-shadow' }, { text: 'Bounds', link: '/guide/staging/bounds' }, { text: 'RandomizedLights', link: '/guide/staging/randomized-lights' }, + { text: 'Bounds', link: '/guide/staging/bounds' }, + { text: 'Stage', link: '/guide/staging/stage' }, ], }, { diff --git a/docs/guide/staging/stage.md b/docs/guide/staging/stage.md new file mode 100644 index 000000000..9f02a69cc --- /dev/null +++ b/docs/guide/staging/stage.md @@ -0,0 +1,77 @@ +# Stage + + + + + +This component creates a "stage" for your models. It sets up: + +* model lighting +* ground shadows +* zoom to fit +* environment + +::: info +If you are using other camera controls, be sure to make them the 'default'. +```vue + +``` +::: + +::: info +If you are using `shadows="accumulative"`, enable shadows on your canvas. +```vue + +``` + +And on your objects. + +```vue + + ... + +``` +::: + +## Usage + +<<< @/.vitepress/theme/components/StageDemo.vue + +## Props + +```ts +interface StageProps { + /** Lighting setup, default: "rembrandt" */ + lighting?: + | null | undefined | false + | 'rembrandt' + | 'portrait' + | 'upfront' + | 'soft' + | { main: [x: number, y: number, z: number], fill: [x: number, y: number, z: number] } + /** Controls the ground shadows, default: "contact" */ + shadows?: boolean | 'contact' | 'accumulative' | StageShadows + /** Optionally wraps and thereby centers the models using , can also be a camera offset, default: true */ + adjustCamera?: boolean | number + /** The default environment, default: "city" */ + environment?: string | Partial | null + /** Lighting intensity, `0` removes lights, default: 0.5 */ + intensity?: number + /** To adjust alignment, default: undefined */ + align?: Partial +} + +type StageShadows = Partial & + Partial & + Partial & { + type: 'contact' | 'accumulative' + /** Shadow plane offset, default: 0 */ + offset?: number + /** Shadow bias, default: -0.0001 */ + bias?: number + /** Shadow normal bias, default: 0 */ + normalBias?: number + /** Shadow map size, default: 1024 */ + size?: number + } +``` diff --git a/playground/vue/src/pages/staging/StageDemo.vue b/playground/vue/src/pages/staging/StageDemo.vue new file mode 100644 index 000000000..5ce5b7793 --- /dev/null +++ b/playground/vue/src/pages/staging/StageDemo.vue @@ -0,0 +1,141 @@ + + + diff --git a/playground/vue/src/router/routes/staging.ts b/playground/vue/src/router/routes/staging.ts index 656084213..1bd750e70 100644 --- a/playground/vue/src/router/routes/staging.ts +++ b/playground/vue/src/router/routes/staging.ts @@ -79,4 +79,9 @@ export const stagingRoutes = [ name: 'Accumulative Shadows', component: () => import('../../pages/staging/AccumulativeShadowsDemo.vue'), }, + { + path: '/staging/stage', + name: 'Stage', + component: () => import('../../pages/staging/StageDemo.vue'), + }, ] diff --git a/src/core/staging/Stage.vue b/src/core/staging/Stage.vue new file mode 100644 index 000000000..37e9e6e9a --- /dev/null +++ b/src/core/staging/Stage.vue @@ -0,0 +1,249 @@ + + + diff --git a/src/core/staging/index.ts b/src/core/staging/index.ts index 7d5aa2d1f..02248a415 100644 --- a/src/core/staging/index.ts +++ b/src/core/staging/index.ts @@ -13,6 +13,7 @@ import Sky from './Sky.vue' import Smoke from './Smoke.vue' import SoftShadows from './SoftShadows.vue' import Sparkles from './Sparkles/component.vue' +import Stage from './Stage.vue' import Stars from './Stars.vue' import Environment from './useEnvironment/component.vue' import Lightformer from './useEnvironment/lightformer/index.vue' @@ -35,5 +36,6 @@ export { Smoke, SoftShadows, Sparkles, + Stage, Stars, } From 000858f0bff8726cbf01941284b0b7b644a0af10 Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 3 Jan 2025 18:55:52 +0100 Subject: [PATCH 13/65] chore(Outline): type material --- src/core/abstractions/Outline/component.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/abstractions/Outline/component.vue b/src/core/abstractions/Outline/component.vue index 981b69db4..9c1491cb2 100644 --- a/src/core/abstractions/Outline/component.vue +++ b/src/core/abstractions/Outline/component.vue @@ -1,7 +1,7 @@ + + diff --git a/docs/component-list/components.ts b/docs/component-list/components.ts index 20d6f43e1..b7e2d1603 100644 --- a/docs/component-list/components.ts +++ b/docs/component-list/components.ts @@ -137,6 +137,7 @@ export default [ { text: 'StatsGl', link: '/guide/misc/stats-gl' }, { text: 'useGLTFExporter', link: '/guide/misc/use-gltf-exporter' }, { text: 'BakeShadows', link: '/guide/misc/bake-shadows' }, + { text: 'LOD', link: '/guide/misc/lod' }, ], }, { diff --git a/docs/guide/misc/lod.md b/docs/guide/misc/lod.md new file mode 100644 index 000000000..e753a8346 --- /dev/null +++ b/docs/guide/misc/lod.md @@ -0,0 +1,19 @@ +# LOD + +Level of Detail - show meshes with more or less geometry based on distance from the camera. + +`` is a wrapper for THREE's [LOD](https://threejs.org/docs/?q=LOD#api/en/objects/LOD) class. + + + + + +## Usage +<<< @/.vitepress/theme/components/LODDemo.vue + +## Props + +| Prop | Description | Default | +| :----------------- | :--------------------------------------------------------------------- | ------- | +| **levels** | `number[]` - The distances at which to display each level of detail. There should be one `levels` value for each `LOD` child. | | +| **hysteresis** | Threshold used to avoid flickering at LOD boundaries, as a fraction of distance. | `0.0` | diff --git a/playground/vue/src/pages/misc/LODDemo.vue b/playground/vue/src/pages/misc/LODDemo.vue new file mode 100644 index 000000000..aa44f45d6 --- /dev/null +++ b/playground/vue/src/pages/misc/LODDemo.vue @@ -0,0 +1,78 @@ + + + diff --git a/playground/vue/src/router/routes/misc.ts b/playground/vue/src/router/routes/misc.ts index ee134671a..6020bf30f 100644 --- a/playground/vue/src/router/routes/misc.ts +++ b/playground/vue/src/router/routes/misc.ts @@ -1,4 +1,9 @@ export const miscRoutes = [ + { + path: '/misc/lod', + name: 'LOD', + component: () => import('../../pages/misc/LODDemo.vue'), + }, { path: '/misc/html', name: 'HTML', diff --git a/src/core/misc/LOD.vue b/src/core/misc/LOD.vue new file mode 100644 index 000000000..90bbd6932 --- /dev/null +++ b/src/core/misc/LOD.vue @@ -0,0 +1,76 @@ + + + diff --git a/src/core/misc/index.ts b/src/core/misc/index.ts index 1da1623ce..ac4df9af8 100644 --- a/src/core/misc/index.ts +++ b/src/core/misc/index.ts @@ -1,7 +1,8 @@ import { BakeShadows } from './BakeShadows' +import LOD from './LOD.vue' import Html from './html/HTML.vue' import { Stats } from './Stats' import { StatsGl } from './StatsGl' import { useGLTFExporter } from './useGLTFExporter' -export { BakeShadows, Html, Stats, StatsGl, useGLTFExporter } +export { BakeShadows, Html, LOD, Stats, StatsGl, useGLTFExporter } From 59e188839951e9cc2b8b0f4fc9772d73aca97ae3 Mon Sep 17 00:00:00 2001 From: alvarosabu Date: Sun, 5 Jan 2025 19:14:15 +0100 Subject: [PATCH 15/65] refactor(Bounds): replace clamp import with MathUtils.clamp for consistency --- src/core/staging/Bounds/Bounds.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/core/staging/Bounds/Bounds.ts b/src/core/staging/Bounds/Bounds.ts index d753fc43a..104152422 100644 --- a/src/core/staging/Bounds/Bounds.ts +++ b/src/core/staging/Bounds/Bounds.ts @@ -1,8 +1,7 @@ import type { VectorFlexibleParams } from '@tresjs/core' import { normalizeVectorFlexibleParam } from '@tresjs/core' import type { Camera, OrthographicCamera, PerspectiveCamera } from 'three' -import { Box3, Matrix4, Object3D, Quaternion, Vector3 } from 'three' -import { clamp } from 'three/src/math/MathUtils' +import { Box3, MathUtils, Matrix4, Object3D, Quaternion, Vector3 } from 'three' interface SizeReturn { box: Box3 @@ -352,7 +351,7 @@ export class Bounds extends Object3D { if (this._animationState === AnimationState.ACTIVE) { this._t += delta / this.duration - this._t = clamp(this._t, 0, 1) + this._t = MathUtils.clamp(this._t, 0, 1) if (this._t >= 1) { this._goal.position && this.camera.position.copy(this._goal.position) From b0ba62159c4ae9b2e51f85dcad5c9fe8d03ff6e8 Mon Sep 17 00:00:00 2001 From: andretchen0 Date: Mon, 6 Jan 2025 11:01:13 +0100 Subject: [PATCH 16/65] feat(useIntersect): add function, demo, docs (#550) Co-authored-by: alvarosabu --- docs/.vitepress/config.ts | 1 + docs/component-list/components.ts | 1 + docs/guide/misc/use-intersect.md | 37 ++++++++++ .../pages/misc/useIntersect/TheExperience.vue | 16 +++++ .../vue/src/pages/misc/useIntersect/index.vue | 67 ++++++++++++++++++ playground/vue/src/router/routes/misc.ts | 5 ++ src/core/misc/index.ts | 11 ++- src/core/misc/useIntersect.ts | 70 +++++++++++++++++++ 8 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 docs/guide/misc/use-intersect.md create mode 100644 playground/vue/src/pages/misc/useIntersect/TheExperience.vue create mode 100644 playground/vue/src/pages/misc/useIntersect/index.vue create mode 100644 src/core/misc/useIntersect.ts diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 9970c96d1..feca1a8de 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -185,6 +185,7 @@ export default defineConfig({ { text: 'StatsGl', link: '/guide/misc/stats-gl' }, { text: 'useGLTFExporter', link: '/guide/misc/use-gltf-exporter' }, { text: 'BakeShadows', link: '/guide/misc/bake-shadows' }, + { text: 'useIntersect', link: '/guide/misc/use-intersect' }, { text: 'LOD', link: '/guide/misc/lod' }, ], }, diff --git a/docs/component-list/components.ts b/docs/component-list/components.ts index b7e2d1603..69ae2d4a5 100644 --- a/docs/component-list/components.ts +++ b/docs/component-list/components.ts @@ -137,6 +137,7 @@ export default [ { text: 'StatsGl', link: '/guide/misc/stats-gl' }, { text: 'useGLTFExporter', link: '/guide/misc/use-gltf-exporter' }, { text: 'BakeShadows', link: '/guide/misc/bake-shadows' }, + { text: 'useIntersect', link: '/guide/misc/use-intersect' }, { text: 'LOD', link: '/guide/misc/lod' }, ], }, diff --git a/docs/guide/misc/use-intersect.md b/docs/guide/misc/use-intersect.md new file mode 100644 index 000000000..787d1be10 --- /dev/null +++ b/docs/guide/misc/use-intersect.md @@ -0,0 +1,37 @@ +# useIntersect + +`useIntersect` is a function that returns `intersect`, a `Ref` that's updated when the observed object enters or leaves the screen. This relies on [THREE.Object3D.onBeforeRender](https://threejs.org/docs/#api/en/core/Object3D.onBeforeRender) so it only works on objects that are effectively rendered, like meshes, lines, sprites. It won't work on other types like group, object3d, bone, etc. + +## Usage + +::: warning +`useIntersect` requires a `TresCanvas` context, so it is only available in `TresCanvas` descendant components' ` + + +``` + +## Arguments + +| Name | Description | Type | +| :----------- | ----------- | ----------- | +| **onChange** | Optional callback function triggered when the observed object enters or leaves the screen. | `(isIntersected: boolean) => void` | + +## Return + +| Name | Description | Type | +| :----------- | ----------- | ----------- | +| **ref** | Vue `ShallowRef` to pass to the object to be observed. | `ShallowRef` | +| **intersects** | Updates when the observed object's intersect status changes. | `ShallowRef` | +| **off** | Calling this function stops `useIntersect` until `ref` changes. | `() => void` | diff --git a/playground/vue/src/pages/misc/useIntersect/TheExperience.vue b/playground/vue/src/pages/misc/useIntersect/TheExperience.vue new file mode 100644 index 000000000..8cc1f5825 --- /dev/null +++ b/playground/vue/src/pages/misc/useIntersect/TheExperience.vue @@ -0,0 +1,16 @@ + + + diff --git a/playground/vue/src/pages/misc/useIntersect/index.vue b/playground/vue/src/pages/misc/useIntersect/index.vue new file mode 100644 index 000000000..8622152d9 --- /dev/null +++ b/playground/vue/src/pages/misc/useIntersect/index.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/playground/vue/src/router/routes/misc.ts b/playground/vue/src/router/routes/misc.ts index 6020bf30f..38ce3366b 100644 --- a/playground/vue/src/router/routes/misc.ts +++ b/playground/vue/src/router/routes/misc.ts @@ -34,4 +34,9 @@ export const miscRoutes = [ name: 'GLTFExporter', component: () => import('../../pages/misc/GLTFExporterDemo.vue'), }, + { + path: '/misc/useIntersect', + name: 'useIntersect', + component: () => import('../../pages/misc/useIntersect/index.vue'), + }, ] diff --git a/src/core/misc/index.ts b/src/core/misc/index.ts index ac4df9af8..f83c28b57 100644 --- a/src/core/misc/index.ts +++ b/src/core/misc/index.ts @@ -4,5 +4,14 @@ import Html from './html/HTML.vue' import { Stats } from './Stats' import { StatsGl } from './StatsGl' import { useGLTFExporter } from './useGLTFExporter' +import { useIntersect } from './useIntersect' -export { BakeShadows, Html, LOD, Stats, StatsGl, useGLTFExporter } +export { + BakeShadows, + Html, + LOD, + Stats, + StatsGl, + useGLTFExporter, + useIntersect, +} diff --git a/src/core/misc/useIntersect.ts b/src/core/misc/useIntersect.ts new file mode 100644 index 000000000..e40ab6cc5 --- /dev/null +++ b/src/core/misc/useIntersect.ts @@ -0,0 +1,70 @@ +import { useLoop } from '@tresjs/core' +import type { Object3D } from 'three' +import type { Ref } from 'vue' +import { shallowRef, unref, watch } from 'vue' + +// NOTE: Inspiration +// https://github.com/pmndrs/drei/blob/master/src/core/useIntersect.tsx + +type UseIntersectCallback = (isIntersected: boolean) => void + +// NOTE: As of this writing, Cientos components +// use `defineExpose` in this form: +// defineExpose({ instance: THE_COMPONENT }) +// +// This means they have to be accessed like +// `obj.instance`, and not merely `obj` +interface CientosExposed { instance: Object3D } +type ObjOrCientosExposed = Object3D | CientosExposed +function normalizeCientosInstance(obj: ObjOrCientosExposed) { + if ('onBeforeRender' in obj && 'onAfterRender' in obj) { return obj } + return obj.instance +} + +export function useIntersect(onChange: Ref | UseIntersectCallback = () => {}) { + const ref = shallowRef() + const intersect = shallowRef(false) + let _isIntersected = false + let _oldIsIntersected = false + + const loop = useLoop() + + function setup(objOrCientosExposed: ObjOrCientosExposed) { + const obj = normalizeCientosInstance(objOrCientosExposed) + + let oldOnRender = obj.onBeforeRender + + const { off: off0 } = loop.onBeforeRender(() => { + _isIntersected = false + + // NOTE: If the object is inside the frustum, THREE will call onBeforeRender. + oldOnRender = obj.onBeforeRender + obj.onBeforeRender = () => (_isIntersected = true) + }) + + const { off: off1 } = loop.onAfterRender(() => { + if (_isIntersected !== _oldIsIntersected) { + intersect.value = _isIntersected + unref(onChange)?.(_isIntersected) + _oldIsIntersected = _isIntersected + } + }) + + return () => { + off0() + off1() + obj.onBeforeRender = oldOnRender + } + } + + let teardown = () => { } + + watch(ref, () => { + teardown() + if (ref.value) { + teardown = setup(ref.value) + } + }) + + return { ref, intersect, off: () => teardown() } +} From 4da0c42c0f501891570f958b4e2b65aec73bc99f Mon Sep 17 00:00:00 2001 From: alvarosabu Date: Mon, 6 Jan 2025 11:21:47 +0100 Subject: [PATCH 17/65] chore: update dependencies in package.json and pnpm-lock.yaml - Bump versions for several dependencies including: - @vueuse/core from ^12.0.0 to ^12.3.0 - three-stdlib from ^2.34.0 to ^2.35.2 - eslint from ^9.16.0 to ^9.17.0 - release-it from ^17.10.0 to ^18.0.0 - typescript-eslint packages to ^8.19.0 - Update various other dependencies to their latest versions for improved compatibility and performance. - Update pnpm-lock.yaml to reflect the changes in package.json and ensure consistency across the project. --- package.json | 32 +- pnpm-lock.yaml | 2769 ++++++++++++++++++++++++++++-------------------- 2 files changed, 1638 insertions(+), 1163 deletions(-) diff --git a/package.json b/package.json index 0d335cd6e..43f161ea5 100644 --- a/package.json +++ b/package.json @@ -61,36 +61,36 @@ "vue": ">=3.3" }, "dependencies": { - "@vueuse/core": "^12.0.0", + "@vueuse/core": "^12.3.0", "camera-controls": "^2.9.0", "stats-gl": "^2.0.1", "stats.js": "^0.17.0", "three-custom-shader-material": "^5.4.0", - "three-stdlib": "^2.34.0" + "three-stdlib": "^2.35.2" }, "devDependencies": { - "@release-it/conventional-changelog": "^9.0.3", - "@tresjs/core": "^4.3.1", + "@release-it/conventional-changelog": "^9.0.4", + "@tresjs/core": "^4.3.2", "@tresjs/eslint-config": "^1.4.0", - "@types/node": "^22.10.1", - "@types/three": "^0.170.0", - "@typescript-eslint/eslint-plugin": "^8.17.0", - "@typescript-eslint/parser": "^8.17.0", + "@types/node": "^22.10.5", + "@types/three": "^0.171.0", + "@typescript-eslint/eslint-plugin": "^8.19.0", + "@typescript-eslint/parser": "^8.19.0", "@vitejs/plugin-vue": "^5.2.1", - "eslint": "^9.16.0", + "eslint": "^9.17.0", "eslint-plugin-vue": "^9.32.0", "gsap": "^3.12.5", "kolorist": "^1.8.0", - "pathe": "^1.1.2", - "release-it": "^17.10.0", + "pathe": "^2.0.0", + "release-it": "^18.0.0", "rollup-plugin-analyzer": "^4.0.0", - "rollup-plugin-visualizer": "^5.12.0", - "three": "^0.171.0", + "rollup-plugin-visualizer": "^5.13.1", + "three": "^0.172.0", "typescript": "^5.7.2", - "unocss": "^0.65.1", - "vite": "^6.0.2", + "unocss": "^0.65.3", + "vite": "^6.0.7", "vite-plugin-banner": "^0.8.0", - "vite-plugin-dts": "4.3.0", + "vite-plugin-dts": "4.4.0", "vite-plugin-glsl": "^1.3.1", "vite-svg-loader": "^5.1.0", "vitepress": "1.5.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8d20a8ebd..1d40caea6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,57 +9,57 @@ importers: .: dependencies: '@vueuse/core': - specifier: ^12.0.0 - version: 12.0.0(typescript@5.7.2) + specifier: ^12.3.0 + version: 12.3.0(typescript@5.7.2) camera-controls: specifier: ^2.9.0 - version: 2.9.0(three@0.171.0) + version: 2.9.0(three@0.172.0) stats-gl: specifier: ^2.0.1 - version: 2.4.2(@types/three@0.170.0)(three@0.171.0) + version: 2.4.2(@types/three@0.171.0)(three@0.172.0) stats.js: specifier: ^0.17.0 version: 0.17.0 three-custom-shader-material: specifier: ^5.4.0 - version: 5.4.0(three@0.171.0) + version: 5.4.0(three@0.172.0) three-stdlib: - specifier: ^2.34.0 - version: 2.34.0(three@0.171.0) + specifier: ^2.35.2 + version: 2.35.2(three@0.172.0) vue: specifier: '>=3.3' version: 3.5.13(typescript@5.7.2) devDependencies: '@release-it/conventional-changelog': - specifier: ^9.0.3 - version: 9.0.3(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)(release-it@17.10.0(typescript@5.7.2)) + specifier: ^9.0.4 + version: 9.0.4(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)(release-it@18.0.0(@types/node@22.10.5)(typescript@5.7.2)) '@tresjs/core': - specifier: ^4.3.1 - version: 4.3.1(three@0.171.0)(vue@3.5.13(typescript@5.7.2)) + specifier: ^4.3.2 + version: 4.3.2(three@0.172.0)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)) '@tresjs/eslint-config': specifier: ^1.4.0 - version: 1.4.0(@typescript-eslint/utils@8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2))(@vue/compiler-sfc@3.5.13)(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) + version: 1.4.0(@typescript-eslint/utils@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@types/node': - specifier: ^22.10.1 - version: 22.10.1 + specifier: ^22.10.5 + version: 22.10.5 '@types/three': - specifier: ^0.170.0 - version: 0.170.0 + specifier: ^0.171.0 + version: 0.171.0 '@typescript-eslint/eslint-plugin': - specifier: ^8.17.0 - version: 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) + specifier: ^8.19.0 + version: 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/parser': - specifier: ^8.17.0 - version: 8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) + specifier: ^8.19.0 + version: 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.1(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2)) + version: 5.2.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) eslint: - specifier: ^9.16.0 - version: 9.16.0(jiti@2.4.1) + specifier: ^9.17.0 + version: 9.17.0(jiti@2.4.2) eslint-plugin-vue: specifier: ^9.32.0 - version: 9.32.0(eslint@9.16.0(jiti@2.4.1)) + version: 9.32.0(eslint@9.17.0(jiti@2.4.2)) gsap: specifier: ^3.12.5 version: 3.12.5 @@ -67,44 +67,44 @@ importers: specifier: ^1.8.0 version: 1.8.0 pathe: - specifier: ^1.1.2 - version: 1.1.2 + specifier: ^2.0.0 + version: 2.0.0 release-it: - specifier: ^17.10.0 - version: 17.10.0(typescript@5.7.2) + specifier: ^18.0.0 + version: 18.0.0(@types/node@22.10.5)(typescript@5.7.2) rollup-plugin-analyzer: specifier: ^4.0.0 version: 4.0.0 rollup-plugin-visualizer: - specifier: ^5.12.0 - version: 5.12.0(rollup@4.28.0) + specifier: ^5.13.1 + version: 5.13.1(rollup@4.30.0) three: - specifier: ^0.171.0 - version: 0.171.0 + specifier: ^0.172.0 + version: 0.172.0 typescript: specifier: ^5.7.2 version: 5.7.2 unocss: - specifier: ^0.65.1 - version: 0.65.1(postcss@8.4.49)(rollup@4.28.0)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2)) + specifier: ^0.65.3 + version: 0.65.3(postcss@8.4.49)(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) vite: - specifier: ^6.0.2 - version: 6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1) + specifier: ^6.0.7 + version: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0) vite-plugin-banner: specifier: ^0.8.0 version: 0.8.0 vite-plugin-dts: - specifier: 4.3.0 - version: 4.3.0(@types/node@22.10.1)(rollup@4.28.0)(typescript@5.7.2)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1)) + specifier: 4.4.0 + version: 4.4.0(@types/node@22.10.5)(rollup@4.30.0)(typescript@5.7.2)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0)) vite-plugin-glsl: specifier: ^1.3.1 - version: 1.3.1(rollup@4.28.0)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1)) + version: 1.3.1(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0)) vite-svg-loader: specifier: ^5.1.0 version: 5.1.0(vue@3.5.13(typescript@5.7.2)) vitepress: specifier: 1.5.0 - version: 1.5.0(@algolia/client-search@5.15.0)(@types/node@22.10.1)(postcss@8.4.49)(search-insights@2.17.3)(typescript@5.7.2) + version: 1.5.0(@algolia/client-search@5.18.0)(@types/node@22.10.5)(postcss@8.4.49)(search-insights@2.17.3)(typescript@5.7.2) docs: dependencies: @@ -114,13 +114,13 @@ importers: devDependencies: '@tresjs/leches': specifier: ^0.14.0 - version: 0.14.0(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2)) + version: 0.14.0(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) markdown-it: specifier: ^14.0.0 version: 14.1.0 unocss: specifier: ^0.65.1 - version: 0.65.1(postcss@8.4.49)(rollup@4.28.0)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2)) + version: 0.65.1(postcss@8.4.49)(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) vite-svg-loader: specifier: ^5.1.0 version: 5.1.0(vue@3.5.13(typescript@5.7.2)) @@ -129,36 +129,32 @@ importers: dependencies: '@tresjs/core': specifier: 4.3.1 - version: 4.3.1(three@0.171.0)(vue@3.5.13(typescript@5.7.2)) + version: 4.3.1(three@0.172.0)(vue@3.5.13(typescript@5.7.2)) vue-router: specifier: ^4.5.0 version: 4.5.0(vue@3.5.13(typescript@5.7.2)) devDependencies: '@tresjs/leches': specifier: ^0.14.0 - version: 0.14.0(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2)) + version: 0.14.0(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) unplugin-auto-import: specifier: ^0.18.6 - version: 0.18.6(@vueuse/core@12.0.0(typescript@5.7.2))(rollup@4.28.0) + version: 0.18.6(@vueuse/core@12.3.0(typescript@5.7.2))(rollup@4.30.0) unplugin-vue-components: specifier: ^0.27.5 - version: 0.27.5(@babel/parser@7.26.2)(rollup@4.28.0)(vue@3.5.13(typescript@5.7.2)) + version: 0.27.5(@babel/parser@7.26.3)(rollup@4.30.0)(vue@3.5.13(typescript@5.7.2)) vite-plugin-glsl: specifier: ^1.3.1 - version: 1.3.1(rollup@4.28.0)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1)) + version: 1.3.1(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0)) vite-plugin-qrcode: specifier: ^0.2.3 - version: 0.2.3(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1)) + version: 0.2.3(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0)) vue-tsc: specifier: ^2.1.10 version: 2.1.10(typescript@5.7.2) packages: - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - '@algolia/autocomplete-core@1.17.7': resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} @@ -191,8 +187,8 @@ packages: resolution: {integrity: sha512-2SP6bGGWOTN920MLZv8s7yIR3OqY03vEe4U+vb2MGdL8a/8EQznF3L/nTC/rGf/hvEfZlX2tGFxPJaF2waravg==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.15.0': - resolution: {integrity: sha512-IofrVh213VLsDkPoSKMeM9Dshrv28jhDlBDLRcVJQvlL8pzue7PEB1EZ4UoJFYS3NSn7JOcJ/V+olRQzXlJj1w==} + '@algolia/client-common@5.18.0': + resolution: {integrity: sha512-X1WMSC+1ve2qlMsemyTF5bIjwipOT+m99Ng1Tyl36ZjQKTa54oajBKE0BrmM8LD8jGdtukAgkUhFoYOaRbMcmQ==} engines: {node: '>= 14.0.0'} '@algolia/client-insights@5.13.0': @@ -211,8 +207,8 @@ packages: resolution: {integrity: sha512-s2ge3uZ6Zg2sPSFibqijgEYsuorxcc8KVHg3I95nOPHvFHdnBtSHymhZvq4sp/fu8ijt/Y8jLwkuqm5myn+2Sg==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.15.0': - resolution: {integrity: sha512-Z32gEMrRRpEta5UqVQA612sLdoqY3AovvUPClDfMxYrbdDAebmGDVPtSogUba1FZ4pP5dx20D3OV3reogLKsRA==} + '@algolia/client-search@5.18.0': + resolution: {integrity: sha512-qI3LcFsVgtvpsBGR7aNSJYxhsR+Zl46+958ODzg8aCxIcdxiK7QEVLMJMZAR57jGqW0Lg/vrjtuLFDMfSE53qA==} engines: {node: '>= 14.0.0'} '@algolia/ingestion@1.13.0': @@ -231,24 +227,24 @@ packages: resolution: {integrity: sha512-NV6oSCt5lFuzfsVQoSBpewEWf/h4ySr7pv2bfwu9yF/jc/g39pig8+YpuqsxlRWBm/lTGVA2V0Ai9ySwrNumIA==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.15.0': - resolution: {integrity: sha512-Po/GNib6QKruC3XE+WKP1HwVSfCDaZcXu48kD+gwmtDlqHWKc7Bq9lrS0sNZ456rfCKhXksOmMfUs4wRM/Y96w==} + '@algolia/requester-browser-xhr@5.18.0': + resolution: {integrity: sha512-1XFjW0C3pV0dS/9zXbV44cKI+QM4ZIz9cpatXpsjRlq6SUCpLID3DZHsXyE6sTb8IhyPaUjk78GEJT8/3hviqg==} engines: {node: '>= 14.0.0'} '@algolia/requester-fetch@5.13.0': resolution: {integrity: sha512-094bK4rumf+rXJazxv3mq6eKRM0ep5AxIo8T0YmOdldswQt79apeufFiPLN19nHEWH22xR2FelimD+T/wRSP+Q==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.15.0': - resolution: {integrity: sha512-rOZ+c0P7ajmccAvpeeNrUmEKoliYFL8aOR5qGW5pFq3oj3Iept7Y5mEtEsOBYsRt6qLnaXn4zUKf+N8nvJpcIw==} + '@algolia/requester-fetch@5.18.0': + resolution: {integrity: sha512-0uodeNdAHz1YbzJh6C5xeQ4T6x5WGiUxUq3GOaT/R4njh5t78dq+Rb187elr7KtnjUmETVVuCvmEYaThfTHzNg==} engines: {node: '>= 14.0.0'} '@algolia/requester-node-http@5.13.0': resolution: {integrity: sha512-JY5xhEYMgki53Wm+A6R2jUpOUdD0zZnBq+PC5R1TGMNOYL1s6JjDrJeMsvaI2YWxYMUSoCnRoltN/yf9RI8n3A==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.15.0': - resolution: {integrity: sha512-b1jTpbFf9LnQHEJP5ddDJKE2sAlhYd7EVSOWgzo/27n/SfCoHfqD0VWntnWYD83PnOKvfe8auZ2+xCb0TXotrQ==} + '@algolia/requester-node-http@5.18.0': + resolution: {integrity: sha512-tZCqDrqJ2YE2I5ukCQrYN8oiF6u3JIdCxrtKq+eniuLkjkO78TKRnXrVcKZTmfFJyyDK8q47SfDcHzAA3nHi6w==} engines: {node: '>= 14.0.0'} '@alvarosabu/utils@3.2.0': @@ -331,10 +327,19 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.26.3': + resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/types@7.26.0': resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} + '@babel/types@7.26.3': + resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} + engines: {node: '>=6.9.0'} + '@clack/core@0.3.4': resolution: {integrity: sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==} @@ -403,8 +408,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.24.0': - resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -421,8 +426,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.24.0': - resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -439,8 +444,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.24.0': - resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -457,8 +462,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.24.0': - resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -475,8 +480,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.24.0': - resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -493,8 +498,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.24.0': - resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -511,8 +516,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.24.0': - resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -529,8 +534,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.24.0': - resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -547,8 +552,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.24.0': - resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -565,8 +570,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.24.0': - resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -583,8 +588,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.24.0': - resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -601,8 +606,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.24.0': - resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -619,8 +624,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.24.0': - resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -637,8 +642,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.24.0': - resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -655,8 +660,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.24.0': - resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -673,8 +678,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.24.0': - resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -691,12 +696,18 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.24.0': - resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} @@ -709,8 +720,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.24.0': - resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -721,8 +732,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.24.0': - resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -739,8 +750,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.24.0': - resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -757,8 +768,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.24.0': - resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -775,8 +786,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.24.0': - resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -793,8 +804,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.24.0': - resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -811,8 +822,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.24.0': - resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -835,10 +846,6 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.10.0': - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -847,32 +854,32 @@ packages: resolution: {integrity: sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-array@0.19.0': - resolution: {integrity: sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==} + '@eslint/config-array@0.19.1': + resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.9.0': - resolution: {integrity: sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==} + '@eslint/core@0.9.1': + resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.2.0': resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.16.0': - resolution: {integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==} + '@eslint/js@9.17.0': + resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/markdown@6.1.1': resolution: {integrity: sha512-Z+1js5AeqidwhNBbnIPM6Fn4eY9D5i1NleamS0UBW6BG0J4lpvhIVOKVIi22kmH5gvxDmHUp5MHkkkjda0TehA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.4': - resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + '@eslint/object-schema@2.1.5': + resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.3': - resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==} + '@eslint/plugin-kit@0.2.4': + resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@humanfs/core@0.19.1': @@ -911,9 +918,88 @@ packages: '@iconify/utils@2.1.33': resolution: {integrity: sha512-jP9h6v/g0BIZx0p7XGJJVtkVnydtbgTgt9mVNcGDYwaa7UhdHdI9dvoq+gKj9sijMSJKxUPEG2JyjsgXjxL7Kw==} - '@inquirer/figures@1.0.8': - resolution: {integrity: sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==} + '@iconify/utils@2.2.1': + resolution: {integrity: sha512-0/7J7hk4PqXmxo5PDBDxmnecw5PxklZJfNjIVG9FM0mEfVrvfudS22rYWsqVk6gR3UJ/mSYS90X4R3znXnqfNA==} + + '@inquirer/checkbox@4.0.4': + resolution: {integrity: sha512-fYAKCAcGNMdfjL6hZTRUwkIByQ8EIZCXKrIQZH7XjADnN/xvRUhj8UdBbpC4zoUzvChhkSC/zRKaP/tDs3dZpg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/confirm@5.1.1': + resolution: {integrity: sha512-vVLSbGci+IKQvDOtzpPTCOiEJCNidHcAq9JYVoWTW0svb5FiwSLotkM+JXNXejfjnzVYV9n0DTBythl9+XgTxg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/core@10.1.2': + resolution: {integrity: sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ==} + engines: {node: '>=18'} + + '@inquirer/editor@4.2.1': + resolution: {integrity: sha512-xn9aDaiP6nFa432i68JCaL302FyL6y/6EG97nAtfIPnWZ+mWPgCMLGc4XZ2QQMsZtu9q3Jd5AzBPjXh10aX9kA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/expand@4.0.4': + resolution: {integrity: sha512-GYocr+BPyxKPxQ4UZyNMqZFSGKScSUc0Vk17II3J+0bDcgGsQm0KYQNooN1Q5iBfXsy3x/VWmHGh20QnzsaHwg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/figures@1.0.9': + resolution: {integrity: sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ==} + engines: {node: '>=18'} + + '@inquirer/input@4.1.1': + resolution: {integrity: sha512-nAXAHQndZcXB+7CyjIW3XuQZZHbQQ0q8LX6miY6bqAWwDzNa9JUioDBYrFmOUNIsuF08o1WT/m2gbBXvBhYVxg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/number@3.0.4': + resolution: {integrity: sha512-DX7a6IXRPU0j8kr2ovf+QaaDiIf+zEKaZVzCWdLOTk7XigqSXvoh4cul7x68xp54WTQrgSnW7P1WBJDbyY3GhA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/password@4.0.4': + resolution: {integrity: sha512-wiliQOWdjM8FnBmdIHtQV2Ca3S1+tMBUerhyjkRCv1g+4jSvEweGu9GCcvVEgKDhTBT15nrxvk5/bVrGUqSs1w==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/prompts@7.2.1': + resolution: {integrity: sha512-v2JSGri6/HXSfoGIwuKEn8sNCQK6nsB2BNpy2lSX6QH9bsECrMv93QHnj5+f+1ZWpF/VNioIV2B/PDox8EvGuQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/rawlist@4.0.4': + resolution: {integrity: sha512-IsVN2EZdNHsmFdKWx9HaXb8T/s3FlR/U1QPt9dwbSyPtjFbMTlW9CRFvnn0bm/QIsrMRD2oMZqrQpSWPQVbXXg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/search@3.0.4': + resolution: {integrity: sha512-tSkJk2SDmC2MEdTIjknXWmCnmPr5owTs9/xjfa14ol1Oh95n6xW7SYn5fiPk4/vrJPys0ggSWiISdPze4LTa7A==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/select@4.0.4': + resolution: {integrity: sha512-ZzYLuLoUzTIW9EJm++jBpRiTshGqS3Q1o5qOEQqgzaBlmdsjQr6pA4TUNkwu6OBYgM2mIRbCz6mUhFDfl/GF+w==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/type@3.0.2': + resolution: {integrity: sha512-ZhQ4TvhwHZF+lGhQ2O/rsjo80XoZR5/5qhOY3t6FJuX5XBg5Be8YzYTvaUGJnc12AUGI2nr4QSUE4PhKSigx7g==} engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} @@ -933,11 +1019,11 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@microsoft/api-extractor-model@7.30.0': - resolution: {integrity: sha512-26/LJZBrsWDKAkOWRiQbdVgcfd1F3nyJnAiJzsAgpouPk7LtOIj7PK9aJtBaw/pUXrkotEg27RrT+Jm/q0bbug==} + '@microsoft/api-extractor-model@7.30.1': + resolution: {integrity: sha512-CTS2PlASJHxVY8hqHORVb1HdECWOEMcMnM6/kDkPr0RZapAFSIHhg9D4jxuE8g+OWYHtPc10LCpmde5pylTRlA==} - '@microsoft/api-extractor@7.48.0': - resolution: {integrity: sha512-FMFgPjoilMUWeZXqYRlJ3gCVRhB7WU/HN88n8OLqEsmsG4zBdX/KQdtJfhq95LQTQ++zfu0Em1LLb73NqRCLYQ==} + '@microsoft/api-extractor@7.48.1': + resolution: {integrity: sha512-HN9Osa1WxqLM66RaqB5nPAadx+nTIQmY/XtkFdaJvusjG8Tus++QqZtD7KPZDSkhEMGHsYeSyeU8qUzCDUXPjg==} hasBin: true '@microsoft/tsdoc-config@0.17.1': @@ -958,53 +1044,53 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@octokit/auth-token@4.0.0': - resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} + '@octokit/auth-token@5.1.1': + resolution: {integrity: sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==} engines: {node: '>= 18'} - '@octokit/core@5.2.0': - resolution: {integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==} + '@octokit/core@6.1.3': + resolution: {integrity: sha512-z+j7DixNnfpdToYsOutStDgeRzJSMnbj8T1C/oQjB6Aa+kRfNjs/Fn7W6c8bmlt6mfy3FkgeKBRnDjxQow5dow==} engines: {node: '>= 18'} - '@octokit/endpoint@9.0.5': - resolution: {integrity: sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==} + '@octokit/endpoint@10.1.2': + resolution: {integrity: sha512-XybpFv9Ms4hX5OCHMZqyODYqGTZ3H6K6Vva+M9LR7ib/xr1y1ZnlChYv9H680y77Vd/i/k+thXApeRASBQkzhA==} engines: {node: '>= 18'} - '@octokit/graphql@7.1.0': - resolution: {integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==} + '@octokit/graphql@8.1.2': + resolution: {integrity: sha512-bdlj/CJVjpaz06NBpfHhp4kGJaRZfz7AzC+6EwUImRtrwIw8dIgJ63Xg0OzV9pRn3rIzrt5c2sa++BL0JJ8GLw==} engines: {node: '>= 18'} '@octokit/openapi-types@22.2.0': resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} - '@octokit/plugin-paginate-rest@11.3.1': - resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==} + '@octokit/plugin-paginate-rest@11.3.6': + resolution: {integrity: sha512-zcvqqf/+TicbTCa/Z+3w4eBJcAxCFymtc0UAIsR3dEVoNilWld4oXdscQ3laXamTszUZdusw97K8+DrbFiOwjw==} engines: {node: '>= 18'} peerDependencies: - '@octokit/core': '5' + '@octokit/core': '>=6' - '@octokit/plugin-request-log@4.0.1': - resolution: {integrity: sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==} + '@octokit/plugin-request-log@5.3.1': + resolution: {integrity: sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==} engines: {node: '>= 18'} peerDependencies: - '@octokit/core': '5' + '@octokit/core': '>=6' - '@octokit/plugin-rest-endpoint-methods@13.2.2': - resolution: {integrity: sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==} + '@octokit/plugin-rest-endpoint-methods@13.2.6': + resolution: {integrity: sha512-wMsdyHMjSfKjGINkdGKki06VEkgdEldIGstIEyGX0wbYHGByOwN/KiM+hAAlUwAtPkP3gvXtVQA9L3ITdV2tVw==} engines: {node: '>= 18'} peerDependencies: - '@octokit/core': ^5 + '@octokit/core': '>=6' - '@octokit/request-error@5.1.0': - resolution: {integrity: sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==} + '@octokit/request-error@6.1.6': + resolution: {integrity: sha512-pqnVKYo/at0NuOjinrgcQYpEbv4snvP3bKMRqHaD9kIsk9u1LCpb2smHZi8/qJfgeNqLo5hNW4Z7FezNdEo0xg==} engines: {node: '>= 18'} - '@octokit/request@8.4.0': - resolution: {integrity: sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==} + '@octokit/request@9.1.4': + resolution: {integrity: sha512-tMbOwGm6wDII6vygP3wUVqFTw3Aoo0FnVQyhihh8vVq12uO3P+vQZeo2CKMpWtPSogpACD0yyZAlVlQnjW71DA==} engines: {node: '>= 18'} - '@octokit/rest@20.1.1': - resolution: {integrity: sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==} + '@octokit/rest@21.0.2': + resolution: {integrity: sha512-+CiLisCoyWmYicH25y1cDfCrv41kRSvTq6pPWtRroRJzhsCZWZyCqGyI8foJT5LmScADSwRAnr/xo+eewL04wQ==} engines: {node: '>= 18'} '@octokit/types@13.6.2': @@ -1022,15 +1108,15 @@ packages: resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} engines: {node: '>=12.22.0'} - '@pnpm/npm-conf@2.2.2': - resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} + '@pnpm/npm-conf@2.3.1': + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} engines: {node: '>=12'} '@polka/url@1.0.0-next.28': resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} - '@release-it/conventional-changelog@9.0.3': - resolution: {integrity: sha512-+3TL+B89Kc+VTbfGxpTvJkbegWt5XIzkovsYVJyoZpOZDG07v25FU8c5R5Q8yNUs76Ikfq0sp+ZTTxmefG4Hiw==} + '@release-it/conventional-changelog@9.0.4': + resolution: {integrity: sha512-eSZVATX2qiyxzpXdIVNczxTGR+uD4lG/ZEfDDYBJ8vKIj6fKp+eYicIS8Ff/eL3bA9XiQTmllKqxPRzmz9d45w==} engines: {node: ^18.18.0 || ^20.9.0 || ^22.0.0} peerDependencies: release-it: ^17.0.0 @@ -1044,13 +1130,22 @@ packages: rollup: optional: true + '@rollup/pluginutils@5.1.4': + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/rollup-android-arm-eabi@4.26.0': resolution: {integrity: sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm-eabi@4.28.0': - resolution: {integrity: sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==} + '@rollup/rollup-android-arm-eabi@4.30.0': + resolution: {integrity: sha512-qFcFto9figFLz2g25DxJ1WWL9+c91fTxnGuwhToCl8BaqDsDYMl/kOnBXAyAqkkzAWimYMSWNPWEjt+ADAHuoQ==} cpu: [arm] os: [android] @@ -1059,8 +1154,8 @@ packages: cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.28.0': - resolution: {integrity: sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==} + '@rollup/rollup-android-arm64@4.30.0': + resolution: {integrity: sha512-vqrQdusvVl7dthqNjWCL043qelBK+gv9v3ZiqdxgaJvmZyIAAXMjeGVSqZynKq69T7062T5VrVTuikKSAAVP6A==} cpu: [arm64] os: [android] @@ -1069,8 +1164,8 @@ packages: cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.28.0': - resolution: {integrity: sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==} + '@rollup/rollup-darwin-arm64@4.30.0': + resolution: {integrity: sha512-617pd92LhdA9+wpixnzsyhVft3szYiN16aNUMzVkf2N+yAk8UXY226Bfp36LvxYTUt7MO/ycqGFjQgJ0wlMaWQ==} cpu: [arm64] os: [darwin] @@ -1079,8 +1174,8 @@ packages: cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.28.0': - resolution: {integrity: sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==} + '@rollup/rollup-darwin-x64@4.30.0': + resolution: {integrity: sha512-Y3b4oDoaEhCypg8ajPqigKDcpi5ZZovemQl9Edpem0uNv6UUjXv7iySBpGIUTSs2ovWOzYpfw9EbFJXF/fJHWw==} cpu: [x64] os: [darwin] @@ -1089,8 +1184,8 @@ packages: cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.28.0': - resolution: {integrity: sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==} + '@rollup/rollup-freebsd-arm64@4.30.0': + resolution: {integrity: sha512-3REQJ4f90sFIBfa0BUokiCdrV/E4uIjhkWe1bMgCkhFXbf4D8YN6C4zwJL881GM818qVYE9BO3dGwjKhpo2ABA==} cpu: [arm64] os: [freebsd] @@ -1099,8 +1194,8 @@ packages: cpu: [x64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.28.0': - resolution: {integrity: sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==} + '@rollup/rollup-freebsd-x64@4.30.0': + resolution: {integrity: sha512-ZtY3Y8icbe3Cc+uQicsXG5L+CRGUfLZjW6j2gn5ikpltt3Whqjfo5mkyZ86UiuHF9Q3ZsaQeW7YswlHnN+lAcg==} cpu: [x64] os: [freebsd] @@ -1109,8 +1204,8 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.28.0': - resolution: {integrity: sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==} + '@rollup/rollup-linux-arm-gnueabihf@4.30.0': + resolution: {integrity: sha512-bsPGGzfiHXMhQGuFGpmo2PyTwcrh2otL6ycSZAFTESviUoBOuxF7iBbAL5IJXc/69peXl5rAtbewBFeASZ9O0g==} cpu: [arm] os: [linux] @@ -1119,8 +1214,8 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.28.0': - resolution: {integrity: sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==} + '@rollup/rollup-linux-arm-musleabihf@4.30.0': + resolution: {integrity: sha512-kvyIECEhs2DrrdfQf++maCWJIQ974EI4txlz1nNSBaCdtf7i5Xf1AQCEJWOC5rEBisdaMFFnOWNLYt7KpFqy5A==} cpu: [arm] os: [linux] @@ -1129,8 +1224,8 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.28.0': - resolution: {integrity: sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==} + '@rollup/rollup-linux-arm64-gnu@4.30.0': + resolution: {integrity: sha512-CFE7zDNrokaotXu+shwIrmWrFxllg79vciH4E/zeK7NitVuWEaXRzS0mFfFvyhZfn8WfVOG/1E9u8/DFEgK7WQ==} cpu: [arm64] os: [linux] @@ -1139,18 +1234,23 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.28.0': - resolution: {integrity: sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==} + '@rollup/rollup-linux-arm64-musl@4.30.0': + resolution: {integrity: sha512-MctNTBlvMcIBP0t8lV/NXiUwFg9oK5F79CxLU+a3xgrdJjfBLVIEHSAjQ9+ipofN2GKaMLnFFXLltg1HEEPaGQ==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-loongarch64-gnu@4.30.0': + resolution: {integrity: sha512-fBpoYwLEPivL3q368+gwn4qnYnr7GVwM6NnMo8rJ4wb0p/Y5lg88vQRRP077gf+tc25akuqd+1Sxbn9meODhwA==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': resolution: {integrity: sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': - resolution: {integrity: sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.30.0': + resolution: {integrity: sha512-1hiHPV6dUaqIMXrIjN+vgJqtfkLpqHS1Xsg0oUfUVD98xGp1wX89PIXgDF2DWra1nxAd8dfE0Dk59MyeKaBVAw==} cpu: [ppc64] os: [linux] @@ -1159,8 +1259,8 @@ packages: cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.28.0': - resolution: {integrity: sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==} + '@rollup/rollup-linux-riscv64-gnu@4.30.0': + resolution: {integrity: sha512-U0xcC80SMpEbvvLw92emHrNjlS3OXjAM0aVzlWfar6PR0ODWCTQtKeeB+tlAPGfZQXicv1SpWwRz9Hyzq3Jx3g==} cpu: [riscv64] os: [linux] @@ -1169,8 +1269,8 @@ packages: cpu: [s390x] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.28.0': - resolution: {integrity: sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==} + '@rollup/rollup-linux-s390x-gnu@4.30.0': + resolution: {integrity: sha512-VU/P/IODrNPasgZDLIFJmMiLGez+BN11DQWfTVlViJVabyF3JaeaJkP6teI8760f18BMGCQOW9gOmuzFaI1pUw==} cpu: [s390x] os: [linux] @@ -1179,8 +1279,8 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.28.0': - resolution: {integrity: sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==} + '@rollup/rollup-linux-x64-gnu@4.30.0': + resolution: {integrity: sha512-laQVRvdbKmjXuFA3ZiZj7+U24FcmoPlXEi2OyLfbpY2MW1oxLt9Au8q9eHd0x6Pw/Kw4oe9gwVXWwIf2PVqblg==} cpu: [x64] os: [linux] @@ -1189,8 +1289,8 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.28.0': - resolution: {integrity: sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==} + '@rollup/rollup-linux-x64-musl@4.30.0': + resolution: {integrity: sha512-3wzKzduS7jzxqcOvy/ocU/gMR3/QrHEFLge5CD7Si9fyHuoXcidyYZ6jyx8OPYmCcGm3uKTUl+9jUSAY74Ln5A==} cpu: [x64] os: [linux] @@ -1199,8 +1299,8 @@ packages: cpu: [arm64] os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.28.0': - resolution: {integrity: sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==} + '@rollup/rollup-win32-arm64-msvc@4.30.0': + resolution: {integrity: sha512-jROwnI1+wPyuv696rAFHp5+6RFhXGGwgmgSfzE8e4xfit6oLRg7GyMArVUoM3ChS045OwWr9aTnU+2c1UdBMyw==} cpu: [arm64] os: [win32] @@ -1209,8 +1309,8 @@ packages: cpu: [ia32] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.28.0': - resolution: {integrity: sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==} + '@rollup/rollup-win32-ia32-msvc@4.30.0': + resolution: {integrity: sha512-duzweyup5WELhcXx5H1jokpr13i3BV9b48FMiikYAwk/MT1LrMYYk2TzenBd0jj4ivQIt58JWSxc19y4SvLP4g==} cpu: [ia32] os: [win32] @@ -1219,13 +1319,13 @@ packages: cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.28.0': - resolution: {integrity: sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==} + '@rollup/rollup-win32-x64-msvc@4.30.0': + resolution: {integrity: sha512-DYvxS0M07PvgvavMIybCOBYheyrqlui6ZQBHJs6GqduVzHSZ06TPPvlfvnYstjODHQ8UUXFwt5YE+h0jFI8kwg==} cpu: [x64] os: [win32] - '@rushstack/node-core-library@5.10.0': - resolution: {integrity: sha512-2pPLCuS/3x7DCd7liZkqOewGM0OzLyCacdvOe8j6Yrx9LkETGnxul1t7603bIaB8nUAooORcct9fFDOQMbWAgw==} + '@rushstack/node-core-library@5.10.1': + resolution: {integrity: sha512-BSb/KcyBHmUQwINrgtzo6jiH0HlGFmrUy33vO6unmceuVKTEyL2q+P0fQq2oB5hvXVWOEUhxB2QvlkZluvUEmg==} peerDependencies: '@types/node': '*' peerDependenciesMeta: @@ -1235,16 +1335,19 @@ packages: '@rushstack/rig-package@0.5.3': resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} - '@rushstack/terminal@0.14.3': - resolution: {integrity: sha512-csXbZsAdab/v8DbU1sz7WC2aNaKArcdS/FPmXMOXEj/JBBZMvDK0+1b4Qao0kkG0ciB1Qe86/Mb68GjH6/TnMw==} + '@rushstack/terminal@0.14.4': + resolution: {integrity: sha512-NxACqERW0PHq8Rpq1V6v5iTHEwkRGxenjEW+VWqRYQ8T9puUzgmGHmEZUaUEDHAe9Qyvp0/Ew04sAiQw9XjhJg==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/ts-command-line@4.23.1': - resolution: {integrity: sha512-40jTmYoiu/xlIpkkRsVfENtBq4CW3R4azbL0Vmda+fMwHWqss6wwf/Cy/UJmMqIzpfYc2OTnjYP1ZLD3CmyeCA==} + '@rushstack/ts-command-line@4.23.2': + resolution: {integrity: sha512-JJ7XZX5K3ThBBva38aomgsPv1L7FV6XmSOcR6HtM7HDFZJkepqT65imw26h9ggGqMjsY0R9jcl30tzKcVj9aOQ==} + + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} '@shikijs/core@1.24.0': resolution: {integrity: sha512-6pvdH0KoahMzr6689yh0QJ3rCgF4j1XsXRHNEeEN6M4xJTfQ6QPWrmHzIddotg+xPJUPEPzYzYCKzpYyhTI6Gw==} @@ -1268,6 +1371,10 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@stylistic/eslint-plugin@2.8.0': resolution: {integrity: sha512-Ufvk7hP+bf+pD35R/QfunF793XlSRIC7USr3/EdgduK9j13i2JjmsM0LUz3/foS+jDYp2fzyWZA9N44CPur0Ow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1283,6 +1390,12 @@ packages: three: '>=0.133' vue: '>=3.4' + '@tresjs/core@4.3.2': + resolution: {integrity: sha512-d6SJzt7jh2EPBFwIDhR7beutcedrJTfZ7uv4/o+mVGu4ORsWRsTFTdPHrdG+jLwgd4P5jjQXahyx0G4AqsoTMQ==} + peerDependencies: + three: '>=0.133' + vue: '>=3.4' + '@tresjs/eslint-config@1.4.0': resolution: {integrity: sha512-2SMN5mDoENkMyo7OGkxTfD79GDyd64RoDe3XXPjgmkXGwhzsgJJRUFAKbCpEQuzRKqXlFP4n41T71QaID6gHvA==} peerDependencies: @@ -1306,8 +1419,8 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/draco3d@1.4.7': - resolution: {integrity: sha512-sjx6hQ8UArRZf+2ZhpPkjJW8iCkyxar69/IElc9NHuGE40n0U9SuvxX59CHvF4xUH7qfJDQ2lIbANZ0HHJg+BQ==} + '@types/draco3d@1.4.10': + resolution: {integrity: sha512-AX22jp8Y7wwaBgAixaSvkoG4M/+PlAcm3Qs4OW8yT9DM4xUpWKeFhLueTAyZF39pviAdcDdeJoACapiAceqNcw==} '@types/estree@1.0.4': resolution: {integrity: sha512-2JwWnHK9H+wUZNorf2Zr6ves96WHoWDJIftkcxPKsS7Djta6Zu519LarhRNljPXkpsZR2ZMwNCPeW7omW07BJw==} @@ -1336,14 +1449,17 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@22.10.1': - resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} + '@types/node@22.10.5': + resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/offscreencanvas@2019.7.2': - resolution: {integrity: sha512-ujCjOxeA07IbEBQYAkoOI+XFw5sT3nhWJ/xZfPR6reJppDG7iPQPZacQiLTtWH1b3a2NYXWlxvYqa40y/LAixQ==} + '@types/offscreencanvas@2019.7.3': + resolution: {integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==} + + '@types/parse-path@7.0.3': + resolution: {integrity: sha512-LriObC2+KYZD3FzCrgWGv/qufdUy4eXrxcLgQMfYXgPbLIecKIsVBaQgUPmxSSLcjmYbDTQbMgr6qr6l/eb7Bg==} '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -1351,8 +1467,8 @@ packages: '@types/stats.js@0.17.3': resolution: {integrity: sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==} - '@types/three@0.170.0': - resolution: {integrity: sha512-CUm2uckq+zkCY7ZbFpviRttY+6f9fvwm6YqSqPfA5K22s9w7R4VnA3rzJse8kHVvuzLcTx+CjNCs2NYe0QFAyg==} + '@types/three@0.171.0': + resolution: {integrity: sha512-oLuT1SAsT+CUg/wxUTFHo0K3NtJLnx9sJhZWQJp/0uXqFpzSk1hRHmvWvpaAWSfvx2db0lVKZ5/wV0I0isD2mQ==} '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} @@ -1363,69 +1479,51 @@ packages: '@types/webxr@0.5.20': resolution: {integrity: sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==} - '@types/webxr@0.5.7': - resolution: {integrity: sha512-Rcgs5c2eNFnHp53YOjgtKfl/zWX1Y+uFGUwlSXrWcZWu3yhANRezmph4MninmqybUYT6g9ZE0aQ9QIdPkLR3Kg==} - - '@typescript-eslint/eslint-plugin@8.17.0': - resolution: {integrity: sha512-HU1KAdW3Tt8zQkdvNoIijfWDMvdSweFYm4hWh+KwhPstv+sCmWb89hCIP8msFm9N1R/ooh9honpSuvqKWlYy3w==} + '@typescript-eslint/eslint-plugin@8.19.0': + resolution: {integrity: sha512-NggSaEZCdSrFddbctrVjkVZvFC6KGfKfNK0CU7mNK/iKHGKbzT4Wmgm08dKpcZECBu9f5FypndoMyRHkdqfT1Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@8.17.0': - resolution: {integrity: sha512-Drp39TXuUlD49F7ilHHCG7TTg8IkA+hxCuULdmzWYICxGXvDXmDmWEjJYZQYgf6l/TFfYNE167m7isnc3xlIEg==} + '@typescript-eslint/parser@8.19.0': + resolution: {integrity: sha512-6M8taKyOETY1TKHp0x8ndycipTVgmp4xtg5QpEZzXxDhNvvHOJi5rLRkLr8SK3jTgD5l4fTlvBiRdfsuWydxBw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@8.17.0': - resolution: {integrity: sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==} + '@typescript-eslint/scope-manager@8.19.0': + resolution: {integrity: sha512-hkoJiKQS3GQ13TSMEiuNmSCvhz7ujyqD1x3ShbaETATHrck+9RaDdUbt+osXaUuns9OFwrDTTrjtwsU8gJyyRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.17.0': - resolution: {integrity: sha512-q38llWJYPd63rRnJ6wY/ZQqIzPrBCkPdpIsaCfkR3Q4t3p6sb422zougfad4TFW9+ElIFLVDzWGiGAfbb/v2qw==} + '@typescript-eslint/type-utils@8.19.0': + resolution: {integrity: sha512-TZs0I0OSbd5Aza4qAMpp1cdCYVnER94IziudE3JU328YUHgWu9gwiwhag+fuLeJ2LkWLXI+F/182TbG+JaBdTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/types@8.17.0': - resolution: {integrity: sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==} + '@typescript-eslint/types@8.19.0': + resolution: {integrity: sha512-8XQ4Ss7G9WX8oaYvD4OOLCjIQYgRQxO+qCiR2V2s2GxI9AUpo7riNwo6jDhKtTcaJjT8PY54j2Yb33kWtSJsmA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.17.0': - resolution: {integrity: sha512-JqkOopc1nRKZpX+opvKqnM3XUlM7LpFMD0lYxTqOTKQfCWAmxw45e3qlOCsEqEB2yuacujivudOFpCnqkBDNMw==} + '@typescript-eslint/typescript-estree@8.19.0': + resolution: {integrity: sha512-WW9PpDaLIFW9LCbucMSdYUuGeFUz1OkWYS/5fwZwTA+l2RwlWFdJvReQqMUMBw4yJWJOfqd7An9uwut2Oj8sLw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.17.0': - resolution: {integrity: sha512-bQC8BnEkxqG8HBGKwG9wXlZqg37RKSMY7v/X8VEWD8JG2JuTHuNK0VFvMPMUKQcbk6B+tf05k+4AShAEtCtJ/w==} + '@typescript-eslint/utils@8.19.0': + resolution: {integrity: sha512-PTBG+0oEMPH9jCZlfg07LCB2nYI0I317yyvXGfxnvGvw4SHIOuRnQ3kadyyXY6tGdChusIHIbM5zfIbp4M6tCg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/visitor-keys@8.17.0': - resolution: {integrity: sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==} + '@typescript-eslint/visitor-keys@8.19.0': + resolution: {integrity: sha512-mCFtBbFBJDCNCWUl5y6sZSCHXw1DEFEk3c/M3nRK2a4XUB8StGFtmcEMizdjKuBzB6e/smJAAWYug3VrdLMr1w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': @@ -1439,81 +1537,161 @@ packages: vite: optional: true + '@unocss/astro@0.65.3': + resolution: {integrity: sha512-shEKzsYOz1KMO36jzoNzTltzaUkQOe+UHgiRpsGE28ldSymGfOfiJQzG9T4+Q3Ckk0C86UyVP3Uerxx1qoYwAA==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 + peerDependenciesMeta: + vite: + optional: true + '@unocss/cli@0.65.1': resolution: {integrity: sha512-yV0n7+7hfxHtO+lXSElp8Zy2R5KM1ZVj9UWCemxQTJtKO+2KWk9HvGFR84Hs9+dno06GaOyQgpK1pBfmID0W0w==} engines: {node: '>=14'} hasBin: true + '@unocss/cli@0.65.3': + resolution: {integrity: sha512-VIV6/aLJ0mWOJ8/iK7nWVCR6G/hM/6W7EGSO1gpLHWn4Rj+T6NtCmk/U4nao9pTYg/nVBBBCL3ydRguF3DA0ow==} + engines: {node: '>=14'} + hasBin: true + '@unocss/config@0.65.1': resolution: {integrity: sha512-Akf5Vm2bGrUK/a10QBF3GLETFJnwW1G8ThPevrOCj0lBVWKlN5eMQnodyNdoCw+JMPfCPZdg+4lU8cJJIRAAbQ==} engines: {node: '>=14'} + '@unocss/config@0.65.3': + resolution: {integrity: sha512-H+UpEPo47DeEsLbjHMby42MJ+lx7vXltFOdpgXFKutLkT034VoXmN1lgrAh9lZ4ow3iuUfEatHyuWffpOQf9gA==} + engines: {node: '>=14'} + '@unocss/core@0.57.7': resolution: {integrity: sha512-1d36M0CV3yC80J0pqOa5rH1BX6g2iZdtKmIb3oSBN4AWnMCSrrJEPBrUikyMq2TEQTrYWJIVDzv5A9hBUat3TA==} '@unocss/core@0.65.1': resolution: {integrity: sha512-Ke0WNZjfSCE6pniJb8PjiwhO6/McxVb1EQYrkkz8aJuR83xu+AEcTog9D4N9EUkRfHS5tZYXQtTj4Uh90T6CEg==} + '@unocss/core@0.65.3': + resolution: {integrity: sha512-xYkJ63lIadL6KqvGcaE2fFeLvo6rC1F+e+R9EFn0Aj0ArMRhiltZk8vvLFHP7iYjjdTdqDkAr/7IdrTosTo8Pg==} + '@unocss/extractor-arbitrary-variants@0.65.1': resolution: {integrity: sha512-VpF7j29TlmVjNolkIjhQ/cwYkuPUoXLv+ko62YRMibE5632QepbNob69pNYGOZustrZt3LvgHD/GcriKwJO4BA==} + '@unocss/extractor-arbitrary-variants@0.65.3': + resolution: {integrity: sha512-ZVGCjOZuU8daGxY7MUJQrI7aVKzZi1llRk53QgEUTU1q60X/fi8M2+A9mwEgG9MBVHBdsuvxqZ9Dp79IktSyLw==} + '@unocss/inspector@0.65.1': resolution: {integrity: sha512-RtONVp7rPpfSarr48qVEEsm201JyQSv6M21lqu1IzQZ62LQB5Gmi59Y+XR6cYDtwSn5ZUGxowR7nIRTPBMcxkw==} + '@unocss/inspector@0.65.3': + resolution: {integrity: sha512-medDlG0FsCvKBBprC5FZxYrWTLV+iNSnc8S84VI4J/iKZQ43X34Edy+Rudy+YsPXQ8qZcuYQ7RDSHsPnP6X+Bg==} + '@unocss/postcss@0.65.1': resolution: {integrity: sha512-k7mKObxE4o1gApICri20TpI0lT/dtEQv+uYEOrFz267jgPVo3VD6umHsTOLA+OoQ5Bf7VEYQXSeV0oA96j0o1w==} engines: {node: '>=14'} peerDependencies: postcss: ^8.4.21 + '@unocss/postcss@0.65.3': + resolution: {integrity: sha512-WCAycMhigioWn8IV3w3ptsstvRvEW86vHpELOMSXKcbminaOJ7RkfpoCKwfSzL73CBSYwovVCWS/y4LFP85NQQ==} + engines: {node: '>=14'} + peerDependencies: + postcss: ^8.4.21 + '@unocss/preset-attributify@0.65.1': resolution: {integrity: sha512-bmu9JELcpwgrXA5RonvFeWb38RcUz82wpWfyDwKdQRJHD3MnYQ5lN03W4B7nMsAflc4ls7XQZLzhn9iYhbYYqg==} + '@unocss/preset-attributify@0.65.3': + resolution: {integrity: sha512-0nDKoR8x32ul1Ne7BbJqzAq5D1RM0C7+DTiLxhWonjCcZwCQpas/npTU6wvwQhc5ksuON0xtoQyl4a6zLNA5Vg==} + '@unocss/preset-icons@0.65.1': resolution: {integrity: sha512-lFGy4PpfClhiRV6Wwn4w79qd53B7QCkEmsP4YF2Px274X0t2av0QjMH+bvo6TrFIsHGKzq0Lxg836SoaPg5YJA==} + '@unocss/preset-icons@0.65.3': + resolution: {integrity: sha512-3V4d5M+a2mTGnLjSsXyNL+/+nzjasdsJEJdXarLnj9Ez0KaBCvi32OjyoYrZUSMC5GCSreVNUOVBZKcxfdtitA==} + '@unocss/preset-mini@0.65.1': resolution: {integrity: sha512-dKIxi+ChWSZvXG8I7yVBjw4FLHdAvKrrCN9bjKpR4/4epKD6jRtEcR6S1wL6XSBWabh7V7D/VbVk+XZ6WsGuXA==} + '@unocss/preset-mini@0.65.3': + resolution: {integrity: sha512-HG7mRfq0S2VKkw40duumoyIYaMBQGW1Uxb+Kw8HLGvoamnDmOZKb+TOXxys17Z5Z0vloi2CN1qqyJhYC0G6MSg==} + '@unocss/preset-tagify@0.65.1': resolution: {integrity: sha512-u0yWFXyyBumglFvn87MT7kasa3KPAWTiIHkTCVu8tNEFNfJzR9BZLEXGAtwrhqMm0pSCnDdqupwBLBQoVX8zEA==} + '@unocss/preset-tagify@0.65.3': + resolution: {integrity: sha512-IWRQ/CO+KmspIBPq6pNfYQmUzZkMqTa/Cr7fB4R+ZQFIe9OO3Cpj18R5VL3qujVC+dePiAFiP/tVLt6/mCQzuw==} + '@unocss/preset-typography@0.65.1': resolution: {integrity: sha512-/fcgKU+uQ/RISRdJHTuSQh41Td/tAngSUzr+7Ry8f1UqI5NTjtGOixgfByPC+ZZ/V8f1DdjigaVy7Q3c+meUMg==} + '@unocss/preset-typography@0.65.3': + resolution: {integrity: sha512-PYcVU1uYGJRuj8FqHVUaRYS15X/+m58v2uUXW+qoqv9jh3KGabu3yPac1UILHTtdE3Y6PSflf3Hf9M9MqxAgog==} + '@unocss/preset-uno@0.65.1': resolution: {integrity: sha512-OSEkphrlR9/RM5un9t9AqVQXOGBLJgjcEweZSm2ng9AK7BsxBXuVP1FelmRqeXVYT5uFtBoD4dfgCgBjGFIW9Q==} + '@unocss/preset-uno@0.65.3': + resolution: {integrity: sha512-1O9qVAG/W7t4X9VExuUPGGy+4n8yxfpuQ3NeFgXlEkT1Mi3cokS0Eb0quvttgLGbjQ2waoS4MWbGyMmDGHWnYQ==} + '@unocss/preset-web-fonts@0.65.1': resolution: {integrity: sha512-29TO8kCfvOaHj5O3a3SZIXuOwvg7raPcdmuFKB9KFM3J2pYv4PB1cLBrw6h9DWwAAnJUSQpGx9QmKIBEPnDhlw==} + '@unocss/preset-web-fonts@0.65.3': + resolution: {integrity: sha512-hDuDbZawPc7ebtNoYI5zKpqURjAH5lLKqVRwdQXQiJ2T8IfT246HkL6+pcpdjAkHy3oJDUxGwrD/tYFcu9fcdA==} + '@unocss/preset-wind@0.65.1': resolution: {integrity: sha512-7rw3hAWOkWMSjoprWKcQidqJRFQm8qM0IdLjFLQa2ROSzPSnIlNisXGEwAphf4/VYdP7+URUnu5eySQsIRWRzg==} + '@unocss/preset-wind@0.65.3': + resolution: {integrity: sha512-esptoeJEN1QZEXwMIU3OXumSi3TEbIXZg1SuuUYqOWXzldxANsfXSMdHtsiXUSMNwNsfmQl4XfBlGNYYK/7eyg==} + '@unocss/reset@0.65.1': resolution: {integrity: sha512-qyxF7rKGX+Cu3FpV8KCRQbtCvFcBpmzvx5A2wal77tIhrFR5VSH7NzCVmgs2+V9FXvU3aWVNZ79i1KMnLZ5Mjg==} + '@unocss/reset@0.65.3': + resolution: {integrity: sha512-elwdQJ6tF4IpVUv7euK8MOKXTcQMeImsimaCViqe0yL0onPChgK16qs5xgVbBGrj9B57bmWgoUp0af/J03oNYA==} + '@unocss/rule-utils@0.65.1': resolution: {integrity: sha512-XGXdXsRmIuMDQk/3Fd3g5JMhsyDGWsTfs6aN4vFQ1rfdSgY4UwbslqUNbIH9xxoTfmzUOJ2lhNrFw78RygCNSA==} engines: {node: '>=14'} + '@unocss/rule-utils@0.65.3': + resolution: {integrity: sha512-jndyth0X11FbvIDForYq90b+N5xsR31FRsmvp7AC7dcW71clemUEDHCwqzSJn8cVFwahgvlwWbEoYHPEgQrtIQ==} + engines: {node: '>=14'} + '@unocss/transformer-attributify-jsx@0.65.1': resolution: {integrity: sha512-FR6pAnsHgflIumSl6Y5J+cWUtt2wNPANFWdGd1jNLpcBXDummEd0U+U9VGOfB8AOT263DW0U0JE7vH5xiwVaog==} + '@unocss/transformer-attributify-jsx@0.65.3': + resolution: {integrity: sha512-mfPpsqdpig2Jgd9BDL79XP1VpDslndSLVEr/xzV1LQOL4FVLe8IIiO6hqeeUNVuV99wxCa8QAigbI2vbUi5p+Q==} + '@unocss/transformer-compile-class@0.65.1': resolution: {integrity: sha512-yTs2u8bxGlTXEQ+XYFuS+kapLuLJr7yvNRRTg1hS+2OFdpT8E/PfxAgdGEzMfmrjommjF4BnJ8AAtK+Wsg5s4w==} + '@unocss/transformer-compile-class@0.65.3': + resolution: {integrity: sha512-cndbJUYqOACeFvldCAVd8edD56XcufFCAwbCm4uio1DjwpqJmtoaJHnLlrE2Pytleej1IAhDuoyaJAnSU9hIDA==} + '@unocss/transformer-directives@0.65.1': resolution: {integrity: sha512-6D3QSeSWXCA+Jc+BQGwat0RfcNtYZdyFFpP+zr1cFpK7nwNZqwqZU+mcY8nywu/u+hYuEQMWPMzEYDAssMfUQQ==} + '@unocss/transformer-directives@0.65.3': + resolution: {integrity: sha512-Jn2b9NSzbp+X5YLY1MWJzXY6dMUYhAuE+xjdiwFNACdbSvnjV+WLX1rOFeeNZx0rP2e5sPeDsv7MTF71uZeohg==} + '@unocss/transformer-variant-group@0.65.1': resolution: {integrity: sha512-LdSPDVpVCrMfgTKtGyWz0KkBXiJqFO8FRhiL4/9Hyaf+ECoWQ7RODgO6dKWyFIZEBjkLFK2toeZZvM+KYQlBlw==} + '@unocss/transformer-variant-group@0.65.3': + resolution: {integrity: sha512-l18P2lyELe6AiRYr9cPbctRn+ITUgncPqhetH46ZoGHKrVR7MSFYHSo0gUJBusBYJisNHTjhaQvNQcDGD3BPWQ==} + '@unocss/vite@0.65.1': resolution: {integrity: sha512-5242hAlgTVUA+tJ9mwo/cpLqD9f4dn5V/prTmtIci0Y7zMsVeBlnQwfsV4MhyTVaF3eFxDy5AUEFiOuXo12rbQ==} peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 + '@unocss/vite@0.65.3': + resolution: {integrity: sha512-GMJ9Aj3M1L/m5CiHbMpOJ9WEfF+c+13Q6zW22n+iz5CYhqXAwyDrtV2afpFBF3w5PLUHC4aW3C4nNQTUTUuPeA==} + peerDependencies: + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 + '@vitejs/plugin-vue@5.2.1': resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -1539,21 +1717,24 @@ packages: '@volar/language-core@2.4.10': resolution: {integrity: sha512-hG3Z13+nJmGaT+fnQzAkS0hjJRa2FCeqZt6Bd+oGNhUkQ+mTFsDETg5rqUTxyzIh5pSOGY7FHCWUS8G82AzLCA==} + '@volar/language-core@2.4.11': + resolution: {integrity: sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==} + '@volar/source-map@2.4.10': resolution: {integrity: sha512-OCV+b5ihV0RF3A7vEvNyHPi4G4kFa6ukPmyVocmqm5QzOd8r5yAtiNvaPEjl8dNvgC/lj4JPryeeHLdXd62rWA==} + '@volar/source-map@2.4.11': + resolution: {integrity: sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==} + '@volar/typescript@2.4.10': resolution: {integrity: sha512-F8ZtBMhSXyYKuBfGpYwqA5rsONnOwAVvjyE7KPYJ7wgZqo2roASqNWUnianOomJX5u1cxeRooHV59N0PhvEOgw==} - '@vue/compiler-core@3.5.12': - resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==} + '@volar/typescript@2.4.11': + resolution: {integrity: sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==} '@vue/compiler-core@3.5.13': resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} - '@vue/compiler-dom@3.5.12': - resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==} - '@vue/compiler-dom@3.5.13': resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} @@ -1586,14 +1767,6 @@ packages: typescript: optional: true - '@vue/language-core@2.1.6': - resolution: {integrity: sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@vue/reactivity@3.5.13': resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} @@ -1608,9 +1781,6 @@ packages: peerDependencies: vue: 3.5.13 - '@vue/shared@3.5.12': - resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} - '@vue/shared@3.5.13': resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} @@ -1623,8 +1793,8 @@ packages: '@vueuse/core@11.3.0': resolution: {integrity: sha512-7OC4Rl1f9G8IT6rUfi9JrKiXy4bfmHhZ5x2Ceojy0jnd3mHNEvV4JaRygH362ror6/NZ+Nl+n13LPzGiPN8cKA==} - '@vueuse/core@12.0.0': - resolution: {integrity: sha512-C12RukhXiJCbx4MGhjmd/gH52TjJsc3G0E0kQj/kb19H3Nt6n1CA4DRWuTdWWcaFRdlTe0npWDS942mvacvNBw==} + '@vueuse/core@12.3.0': + resolution: {integrity: sha512-cnV8QDKZrsyKC7tWjPbeEUz2cD9sa9faxF2YkR8QqNwfofgbOhmfIgvSYmkp+ttSvfOw4E6hLcQx15mRPr0yBA==} '@vueuse/integrations@11.3.0': resolution: {integrity: sha512-5fzRl0apQWrDezmobchoiGTkGw238VWESxZHazfhP3RM7pDSiyXy18QbfYkILoYNTd23HPAfQTJpkUc5QbkwTw==} @@ -1673,8 +1843,8 @@ packages: '@vueuse/metadata@11.3.0': resolution: {integrity: sha512-pwDnDspTqtTo2HwfLw4Rp6yywuuBdYnPYDq+mO38ZYKGebCUQC/nVj/PXSiK9HX5otxLz8Fn7ECPbjiRz2CC3g==} - '@vueuse/metadata@12.0.0': - resolution: {integrity: sha512-Yzimd1D3sjxTDOlF05HekU5aSGdKjxhuhRFHA7gDWLn57PRbBIh+SF5NmjhJ0WRgF3my7T8LBucyxdFJjIfRJQ==} + '@vueuse/metadata@12.3.0': + resolution: {integrity: sha512-M/iQHHjMffOv2npsw2ihlUx1CTiBwPEgb7DzByLq7zpg1+Ke8r7s9p5ybUWc5OIeGewtpY4Xy0R2cKqFqM8hFg==} '@vueuse/shared@10.11.1': resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} @@ -1682,11 +1852,11 @@ packages: '@vueuse/shared@11.3.0': resolution: {integrity: sha512-P8gSSWQeucH5821ek2mn/ciCk+MS/zoRKqdQIM3bHq6p7GXDAJLmnRRKmF5F65sAVJIfzQlwR3aDzwCn10s8hA==} - '@vueuse/shared@12.0.0': - resolution: {integrity: sha512-3i6qtcq2PIio5i/vVYidkkcgvmTjCqrf26u+Fd4LhnbBmIT6FN8y6q/GJERp8lfcB9zVEfjdV0Br0443qZuJpw==} + '@vueuse/shared@12.3.0': + resolution: {integrity: sha512-X3YD35GUeW0d5Gajcwv9jdLAJTV2Jdb/Ll6Ii2JIYcKLYZqv5wxyLeKtiQkqWmHg3v0J0ZWjDUMVOw2E7RCXfA==} - '@webgpu/types@0.1.51': - resolution: {integrity: sha512-ktR3u64NPjwIViNCck+z9QeyN0iPkQCUOQ07ZCV1RzlkfP+olLTeEZ95O1QHS+v4w9vJeY9xj/uJuSphsHy5rQ==} + '@webgpu/types@0.1.52': + resolution: {integrity: sha512-eI883Nlag2hGIkhXxAnq8s4APpqXWuPL3Gbn2ghiU12UjLvfCbVqHK4XfXl3eLRTatqcMmeK7jws7IwWsGfbzw==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -1706,8 +1876,8 @@ packages: add-stream@1.0.0: resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} - agent-base@7.1.1: - resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} ajv-draft-04@1.0.0: @@ -1795,15 +1965,12 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - basic-ftp@5.0.3: - resolution: {integrity: sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==} + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} engines: {node: '>=10.0.0'} - before-after-hook@2.2.3: - resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + before-after-hook@3.0.2: + resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} @@ -1812,9 +1979,6 @@ packages: birpc@0.2.19: resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -1840,9 +2004,6 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -1857,6 +2018,12 @@ packages: peerDependencies: esbuild: '>=0.18' + bundle-require@5.1.0: + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.18' + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -1884,8 +2051,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} character-entities-html4@2.1.0: @@ -1916,10 +2083,6 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -1936,10 +2099,6 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -1967,9 +2126,6 @@ packages: compare-versions@6.1.1: resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} - computeds@0.0.1: - resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1994,6 +2150,10 @@ packages: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} + consola@3.3.3: + resolution: {integrity: sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg==} + engines: {node: ^14.18.0 || >=16.10.0} + conventional-changelog-angular@8.0.0: resolution: {integrity: sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==} engines: {node: '>=18'} @@ -2099,6 +2259,10 @@ packages: resolution: {integrity: sha512-8Fxxv+tGhORlshCdCwnNJytvlvq46sOLSYEx2ZIGurahWvMucSRnyjPA3AmrMq4VPRYbHVpWj5VkiVasrM2H4Q==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-tree@3.1.0: + resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} @@ -2148,6 +2312,15 @@ packages: supports-color: optional: true + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} @@ -2166,9 +2339,6 @@ packages: resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} engines: {node: '>=18'} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} @@ -2184,9 +2354,6 @@ packages: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} - deprecation@2.3.1: - resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -2222,8 +2389,8 @@ packages: resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} engines: {node: '>=18'} - draco3d@1.5.6: - resolution: {integrity: sha512-+3NaRjWktb5r61ZFoDejlykPEFKT5N/LkbXsaddlw6xNSXBanUYpFc2AXXpbJDilPHazcSreU/DpQIaxfX0NfQ==} + draco3d@1.5.7: + resolution: {integrity: sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==} duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -2268,8 +2435,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.24.0: - resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} engines: {node: '>=18'} hasBin: true @@ -2461,8 +2628,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.16.0: - resolution: {integrity: sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==} + eslint@9.17.0: + resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2510,18 +2677,21 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - execa@8.0.0: - resolution: {integrity: sha512-CTNS0BcKBcoOsawKBlpcKNmK4Kjuyz5jVLhf+PUsHGMqiKMVTa4cN3U7r7bRY8KTpfOGpXMo27fdy0dYVg2pqA==} + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + execa@9.5.2: + resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} + engines: {node: ^18.19.0 || >=20.5.0} + external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} + fast-content-type-parse@2.0.1: + resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2532,6 +2702,10 @@ packages: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -2555,6 +2729,10 @@ packages: fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -2608,14 +2786,14 @@ packages: resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + get-tsconfig@4.8.0: resolution: {integrity: sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==} @@ -2636,11 +2814,11 @@ packages: engines: {node: '>=18'} hasBin: true - git-up@7.0.0: - resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} + git-up@8.0.0: + resolution: {integrity: sha512-uBI8Zdt1OZlrYfGcSVroLJKgyNNXlgusYFzHk614lTasz35yg2PVpL1RMy0LOO2dcvF9msYW3pRfUSmafZNrjg==} - git-url-parse@14.0.0: - resolution: {integrity: sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==} + git-url-parse@16.0.0: + resolution: {integrity: sha512-Y8iAF0AmCaqXc6a5GYgPQW9ESbncNLOL+CeQAJRhmWUOmnPkKpBYeWYp4mFd3LA5j53CdGDdslzX12yEBVHQQg==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -2670,6 +2848,10 @@ packages: resolution: {integrity: sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==} engines: {node: '>=18'} + globals@15.14.0: + resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} + engines: {node: '>=18'} + globals@15.9.0: resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==} engines: {node: '>=18'} @@ -2712,10 +2894,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -2736,10 +2914,6 @@ packages: hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - hosted-git-info@7.0.1: - resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} - engines: {node: ^16.14.0 || >=18.0.0} - hosted-git-info@7.0.2: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} @@ -2751,29 +2925,22 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} - https-proxy-agent@7.0.5: - resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + human-signals@8.0.0: + resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} + engines: {node: '>=18.18.0'} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -2789,6 +2956,9 @@ packages: importx@0.4.4: resolution: {integrity: sha512-Lo1pukzAREqrBnnHC+tj+lreMTAvyxtkKsMxLY8H15M/bvLl54p3YuoTI70Tz7Il0AsgSlD7Lrk/FaApRcBL7w==} + importx@0.5.1: + resolution: {integrity: sha512-YrRaigAec1sC2CdIJjf/hCH1Wp9Ii8Cq5ROw4k5nJ19FVl2FcJUHZ5gGIb1vs8+JNYIyOJpc2fcufS2330bxDw==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -2815,9 +2985,11 @@ packages: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - inquirer@9.3.2: - resolution: {integrity: sha512-+ynEbhWKhyomnaX0n2aLIMSkgSlGB5RrWbNXnEqj6mdaIydu6y40MdBjL38SAB0JcdmOaIaMua1azdjLEr3sdw==} + inquirer@12.3.0: + resolution: {integrity: sha512-3NixUXq+hM8ezj2wc7wC37b32/rHq1MwNZDYdvx+d6jokOD+r+i8Q4Pkylh9tISYP114A128LCX8RKhopC5RfQ==} engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} @@ -2838,13 +3010,14 @@ packages: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - is-core-module@2.15.1: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} @@ -2881,10 +3054,6 @@ packages: resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} engines: {node: '>=18'} - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - is-interactive@2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} @@ -2905,20 +3074,20 @@ packages: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-ssh@1.4.0: resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} is-unicode-supported@1.3.0: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} @@ -2950,16 +3119,16 @@ packages: resolution: {integrity: sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==} engines: {node: ^18.17 || >=20.6.1} - jiti@1.21.6: - resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true jiti@2.0.0-beta.3: resolution: {integrity: sha512-pmfRbVRs/7khFrSAYnSiJ8C0D5GvzkE4Ey2pAvUcJsw1ly/p+7ut27jbJrjY79BpAJQJ4gXYFtK6d1Aub+9baQ==} hasBin: true - jiti@2.4.1: - resolution: {integrity: sha512-yPBThwecp1wS9DmoA4x4KR2h3QoslacnDR8ypuFM962kI4/456Iy1oHx2RAgh4jfZNdn0bctsdadceiBUgpU1g==} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true jju@1.4.0: @@ -3019,8 +3188,8 @@ packages: kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - ky@1.7.2: - resolution: {integrity: sha512-OzIvbHKKDpi60TnF9t7UUVAF1B4mcqc02z5PIvrm08Wyb+yOcz63GRvEuVxNT18a9E1SrNouhB4W2NNLeD7Ykg==} + ky@1.7.4: + resolution: {integrity: sha512-zYEr/gh7uLW2l4su11bmQ2M9xLgQLjyvx58UyNM/6nuqyWFHPX5ktMjvpev3F8QWdjSsHUpnWew4PBCswBNuMQ==} engines: {node: '>=18'} latest-version@9.0.0: @@ -3078,10 +3247,6 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - log-symbols@6.0.0: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} @@ -3089,10 +3254,6 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - lru-cache@10.0.1: - resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} - engines: {node: 14 || >=16.14} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -3108,12 +3269,12 @@ packages: resolution: {integrity: sha512-tPJQ1HeyiU2vRruNGhZ+VleWuMQRro8iFtJxYgnS4NQe+EukKF6aGiIT+7flZhISAt2iaXBCfFGvAyif7/f8nQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - magic-string@0.30.12: - resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} - magic-string@0.30.14: resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + mark.js@8.11.1: resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} @@ -3172,6 +3333,9 @@ packages: mdn-data@2.12.1: resolution: {integrity: sha512-rsfnCbOHjqrhWxwt5/wtSLzpoKTzW7OXdT5lLOIH1OTYhWu9rRJveGq0sKvDZODABH7RX+uoR+DYcpFnq4Tf6Q==} + mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} @@ -3348,10 +3512,6 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} @@ -3370,10 +3530,6 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -3406,12 +3562,12 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} - mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -3441,10 +3597,6 @@ packages: normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - normalize-package-data@6.0.0: - resolution: {integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==} - engines: {node: ^16.14.0 || >=18.0.0} - normalize-package-data@6.0.2: resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} engines: {node: ^16.14.0 || >=18.0.0} @@ -3453,14 +3605,14 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - npm-run-path@5.3.0: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -3474,10 +3626,6 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} @@ -3497,21 +3645,17 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - - ora@8.1.0: - resolution: {integrity: sha512-GQEkNkH/GHOhPFXcqZs3IDahXEQcQxsSjEkK4KvEEST4t7eNzoMjxTzef+EZ+JluDEV+Raoi3WQ2CflnRdSVnQ==} + ora@8.1.1: + resolution: {integrity: sha512-YWielGi1XzG1UTvOaCFaNgEnuhZVMSHYkW/FQ7UX8O26PtlpdM84c0f7wLPlkvx2RfiQmnzd61d/MGxmpQeJPw==} engines: {node: '>=18'} - os-name@5.1.0: - resolution: {integrity: sha512-YEIoAnM6zFmzw3PQ201gCVCIWbXNyKObGlVvpAVvraAeOHnlYVKFssbA/riRX5R40WA6kKrZ7Dr7dWzO3nKSeQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + os-name@6.0.0: + resolution: {integrity: sha512-bv608E0UX86atYi2GMGjDe0vF/X1TJjemNS8oEW6z22YW1Rc3QykSYoGfkQbX0zZX9H0ZB6CQP/3GTf1I5hURg==} + engines: {node: '>=18'} os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} @@ -3537,8 +3681,8 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - pac-proxy-agent@7.0.2: - resolution: {integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==} + pac-proxy-agent@7.1.0: + resolution: {integrity: sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==} engines: {node: '>= 14'} pac-resolver@7.0.1: @@ -3572,11 +3716,16 @@ packages: resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} engines: {node: '>=18'} + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + parse-path@7.0.0: resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==} - parse-url@8.1.0: - resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} + parse-url@9.2.0: + resolution: {integrity: sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==} + engines: {node: '>=14.13.0'} path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -3607,6 +3756,9 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathe@2.0.0: + resolution: {integrity: sha512-G7n4uhtk9qJt2hlD+UFfsIGY854wpF+zs2bUbQ3CQEUTcn7v25LRsrmurOxTo4bJgjE4qkyshd9ldsEuY9M6xg==} + perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} @@ -3661,6 +3813,10 @@ packages: engines: {node: '>=14'} hasBin: true + pretty-ms@9.2.0: + resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + engines: {node: '>=18'} + property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} @@ -3670,8 +3826,8 @@ packages: protocols@2.0.1: resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} - proxy-agent@6.4.0: - resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} engines: {node: '>= 14'} proxy-from-env@1.1.0: @@ -3764,9 +3920,9 @@ packages: resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} hasBin: true - release-it@17.10.0: - resolution: {integrity: sha512-00cXYEl7RFD5NnjXpwaH9JFjpwe8w3NcfUd4XPxrKQkszp1xppPo42zK9eSbxStKyPA5CVk2KmKPDPDiAKVJTA==} - engines: {node: ^18.18.0 || ^20.9.0 || ^22.0.0} + release-it@18.0.0: + resolution: {integrity: sha512-aO7sGBwv+0m8FXVNT+RyL1yky9Nhg0IxkqJIdofTma0Dz4w9z0+u5DddzesOoYQL2fawib3Kwn30DaLxqiz5ng==} + engines: {node: ^20.9.0 || >=22.0.0} hasBin: true require-directory@2.1.1: @@ -3784,14 +3940,11 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} hasBin: true - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -3811,13 +3964,16 @@ packages: resolution: {integrity: sha512-LL9GEt3bkXp6Wa19SNR5MWcvHNMvuTFYg+eYBZN2OIFhSWN+pEJUQXEKu5BsOeABob3x9PDaLKW7w5iOJnsESQ==} engines: {node: '>=8.0.0'} - rollup-plugin-visualizer@5.12.0: - resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==} - engines: {node: '>=14'} + rollup-plugin-visualizer@5.13.1: + resolution: {integrity: sha512-vMg8i6BprL8aFm9DKvL2c8AwS8324EgymYQo9o6E26wgVvwMhsJxS37aNL6ZsU7X9iAcMYwdME7gItLfG5fwJg==} + engines: {node: '>=18'} hasBin: true peerDependencies: + rolldown: 1.x rollup: 2.x || 3.x || 4.x peerDependenciesMeta: + rolldown: + optional: true rollup: optional: true @@ -3826,8 +3982,8 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rollup@4.28.0: - resolution: {integrity: sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==} + rollup@4.30.0: + resolution: {integrity: sha512-sDnr1pcjTgUT69qBksNF1N1anwfbyYG6TBQ22b03bII8EdiUQ7J0TlozVaTMjT/eEJAO49e1ndV7t+UZfL1+vA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3891,9 +4047,6 @@ packages: shiki@1.24.0: resolution: {integrity: sha512-qIneep7QRwxRd5oiHb8jaRzH15V/S8F3saCXOdjwRLgozZJr5x2yeBhQtqkO3FSzQDwYEFAYuifg4oHjpDghrg==} - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -3902,6 +4055,10 @@ packages: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} + sirv@3.0.0: + resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} + engines: {node: '>=18'} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -3916,8 +4073,8 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - socks-proxy-agent@8.0.4: - resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} socks@2.8.3: @@ -4013,14 +4170,14 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -4091,13 +4248,13 @@ packages: react: optional: true - three-stdlib@2.34.0: - resolution: {integrity: sha512-U5qJYWgUKBFJqr1coMSbczA964uvouzBjQbtJlaI9LfMwy7hr+kc1Mfh0gqi/2872KmGu9utgff6lj8Oti8+VQ==} + three-stdlib@2.35.2: + resolution: {integrity: sha512-Ns9ZdiFEAsiv8JvHS28Qgxg4YRTq13Ixa4EDUQZhUovZ3j/GLTou4zE887SLSqsuRZwuy3gklttn2ha5JaJpTQ==} peerDependencies: three: '>=0.128.0' - three@0.171.0: - resolution: {integrity: sha512-Y/lAXPaKZPcEdkKjh0JOAHVv8OOnv/NDJqm0wjfCzyQmfKxV7zvkwsnBgPBKTzJHToSOhRGQAGbPJObT59B/PQ==} + three@0.172.0: + resolution: {integrity: sha512-6HMgMlzU97MsV7D/tY8Va38b83kz8YJX+BefKjspMNAv0Vx6dxMogHOrnRl/sbMIs3BPUKijPqDqJ/+UwJbIow==} through2@0.6.5: resolution: {integrity: sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==} @@ -4128,12 +4285,6 @@ packages: trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - ts-api-utils@1.4.0: - resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - ts-api-utils@1.4.3: resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} engines: {node: '>=16'} @@ -4175,8 +4326,8 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.30.0: - resolution: {integrity: sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==} + type-fest@4.31.0: + resolution: {integrity: sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ==} engines: {node: '>=16'} typedarray@0.0.6: @@ -4206,13 +4357,24 @@ packages: unconfig@0.5.5: resolution: {integrity: sha512-VQZ5PT9HDX+qag0XdgQi8tJepPhXiR/yVOkn707gJDKo31lGjRilPREiQJ9Z6zd/Ugpv6ZvO5VxVIcatldYcNQ==} + unconfig@0.6.0: + resolution: {integrity: sha512-4C67J0nIF2QwSXty2kW3zZx1pMZ3iXabylvJWWgHybWVUcMf9pxwsngoQt0gC+AVstRywFqrRBp3qOXJayhpOw==} + undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici@6.21.0: + resolution: {integrity: sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==} + engines: {node: '>=18.17'} + unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + unimport@3.14.3: resolution: {integrity: sha512-yEJps4GW7jBdoQlxEV0ElBCJsJmH8FdZtk4oog0y++8hgLh0dGnDpE4oaTc0Lfx4N5rRJiGFUWHrBqC8CyUBmQ==} @@ -4231,8 +4393,8 @@ packages: unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - universal-user-agent@6.0.1: - resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + universal-user-agent@7.0.2: + resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} @@ -4250,11 +4412,23 @@ packages: vite: optional: true - unplugin-auto-import@0.18.6: - resolution: {integrity: sha512-LMFzX5DtkTj/3wZuyG5bgKBoJ7WSgzqSGJ8ppDRdlvPh45mx6t6w3OcbExQi53n3xF5MYkNGPNR/HYOL95KL2A==} + unocss@0.65.3: + resolution: {integrity: sha512-v/nQ7BVIeW9UlEPElOu6xwqp0TTF2dZeIOfzos52b/N0cwWB9dBOjZM5hTn//ePQVzXm/M/n+Lm8E7gRP4TUfg==} engines: {node: '>=14'} peerDependencies: - '@nuxt/kit': ^3.2.2 + '@unocss/webpack': 0.65.3 + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 + peerDependenciesMeta: + '@unocss/webpack': + optional: true + vite: + optional: true + + unplugin-auto-import@0.18.6: + resolution: {integrity: sha512-LMFzX5DtkTj/3wZuyG5bgKBoJ7WSgzqSGJ8ppDRdlvPh45mx6t6w3OcbExQi53n3xF5MYkNGPNR/HYOL95KL2A==} + engines: {node: '>=14'} + peerDependencies: + '@nuxt/kit': ^3.2.2 '@vueuse/core': '*' peerDependenciesMeta: '@nuxt/kit': @@ -4316,8 +4490,8 @@ packages: peerDependencies: vite: '>2.0.0-0' - vite-plugin-dts@4.3.0: - resolution: {integrity: sha512-LkBJh9IbLwL6/rxh0C1/bOurDrIEmRE7joC+jFdOEEciAFPbpEKOLSAr5nNh5R7CJ45cMbksTrFfy52szzC5eA==} + vite-plugin-dts@4.4.0: + resolution: {integrity: sha512-CJ6phvnnPLF+aFk8Jz2ZcMBLleJ4gKJOXb9We5Kzmsp5bPuD+uMDeVefjFNYSXZ+wdcqnf+Yp2P7oA5hBKQTlQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -4374,8 +4548,8 @@ packages: terser: optional: true - vite@6.0.3: - resolution: {integrity: sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==} + vite@6.0.7: + resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -4470,9 +4644,6 @@ packages: typescript: optional: true - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} @@ -4488,12 +4659,16 @@ packages: resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} engines: {node: '>=18'} - wildcard-match@5.1.3: - resolution: {integrity: sha512-a95hPUk+BNzSGLntNXYxsjz2Hooi5oL7xOfJR6CKwSsSALh7vUNuTlzsrZowtYy38JNduYFRVhFv19ocqNOZlg==} + wildcard-match@5.1.4: + resolution: {integrity: sha512-wldeCaczs8XXq7hj+5d/F38JE2r7EXgb6WQDM84RVwxy81T/sxB5e9+uZLK9Q9oNz1mlvjut+QtvgaOQFPVq/g==} - windows-release@5.1.1: - resolution: {integrity: sha512-NMD00arvqcq2nwqc5Q6KtrSRHK+fVD31erE5FEMahAw5PmVCgD7MUXodq3pdZSUkqA9Cda2iWx6s1XYwiJWRmw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + windows-release@6.0.1: + resolution: {integrity: sha512-MS3BzG8QK33dAyqwxfYJCJ03arkwKaddUOvvnnlFdXLudflsQF6I8yAxrLBeQk4yO8wjdH/+ax0YzxJEDrOftg==} + engines: {node: '>=18'} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -4540,8 +4715,8 @@ packages: resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} engines: {node: '>= 14'} - yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} engines: {node: '>= 14'} hasBin: true @@ -4561,39 +4736,41 @@ packages: resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} engines: {node: '>=18'} + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: - '@aashutoshrathi/word-wrap@1.2.6': {} - - '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.15.0)(algoliasearch@5.13.0)(search-insights@2.17.3)': + '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.18.0)(algoliasearch@5.13.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.15.0)(algoliasearch@5.13.0)(search-insights@2.17.3) - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.15.0)(algoliasearch@5.13.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.18.0)(algoliasearch@5.13.0)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.18.0)(algoliasearch@5.13.0) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.15.0)(algoliasearch@5.13.0)(search-insights@2.17.3)': + '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.18.0)(algoliasearch@5.13.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.15.0)(algoliasearch@5.13.0) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.18.0)(algoliasearch@5.13.0) search-insights: 2.17.3 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.15.0)(algoliasearch@5.13.0)': + '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.18.0)(algoliasearch@5.13.0)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.15.0)(algoliasearch@5.13.0) - '@algolia/client-search': 5.15.0 + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.18.0)(algoliasearch@5.13.0) + '@algolia/client-search': 5.18.0 algoliasearch: 5.13.0 - '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.15.0)(algoliasearch@5.13.0)': + '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.18.0)(algoliasearch@5.13.0)': dependencies: - '@algolia/client-search': 5.15.0 + '@algolia/client-search': 5.18.0 algoliasearch: 5.13.0 '@algolia/client-abtesting@5.13.0': @@ -4612,7 +4789,7 @@ snapshots: '@algolia/client-common@5.13.0': {} - '@algolia/client-common@5.15.0': {} + '@algolia/client-common@5.18.0': {} '@algolia/client-insights@5.13.0': dependencies: @@ -4642,12 +4819,12 @@ snapshots: '@algolia/requester-fetch': 5.13.0 '@algolia/requester-node-http': 5.13.0 - '@algolia/client-search@5.15.0': + '@algolia/client-search@5.18.0': dependencies: - '@algolia/client-common': 5.15.0 - '@algolia/requester-browser-xhr': 5.15.0 - '@algolia/requester-fetch': 5.15.0 - '@algolia/requester-node-http': 5.15.0 + '@algolia/client-common': 5.18.0 + '@algolia/requester-browser-xhr': 5.18.0 + '@algolia/requester-fetch': 5.18.0 + '@algolia/requester-node-http': 5.18.0 '@algolia/ingestion@1.13.0': dependencies: @@ -4674,25 +4851,25 @@ snapshots: dependencies: '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr@5.15.0': + '@algolia/requester-browser-xhr@5.18.0': dependencies: - '@algolia/client-common': 5.15.0 + '@algolia/client-common': 5.18.0 '@algolia/requester-fetch@5.13.0': dependencies: '@algolia/client-common': 5.13.0 - '@algolia/requester-fetch@5.15.0': + '@algolia/requester-fetch@5.18.0': dependencies: - '@algolia/client-common': 5.15.0 + '@algolia/client-common': 5.18.0 '@algolia/requester-node-http@5.13.0': dependencies: '@algolia/client-common': 5.13.0 - '@algolia/requester-node-http@5.15.0': + '@algolia/requester-node-http@5.18.0': dependencies: - '@algolia/client-common': 5.15.0 + '@algolia/client-common': 5.18.0 '@alvarosabu/utils@3.2.0': {} @@ -4701,46 +4878,46 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/eslint-config@3.6.2(@typescript-eslint/utils@8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2))(@vue/compiler-sfc@3.5.13)(eslint-plugin-format@0.1.2(eslint@9.16.0(jiti@2.4.1)))(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2)': + '@antfu/eslint-config@3.6.2(@typescript-eslint/utils@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(@vue/compiler-sfc@3.5.13)(eslint-plugin-format@0.1.2(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: '@antfu/install-pkg': 0.4.1 '@clack/prompts': 0.7.0 - '@eslint-community/eslint-plugin-eslint-comments': 4.4.0(eslint@9.16.0(jiti@2.4.1)) + '@eslint-community/eslint-plugin-eslint-comments': 4.4.0(eslint@9.17.0(jiti@2.4.2)) '@eslint/markdown': 6.1.1 - '@stylistic/eslint-plugin': 2.8.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) - '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) - '@typescript-eslint/parser': 8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) - '@vitest/eslint-plugin': 1.1.4(@typescript-eslint/utils@8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) - eslint: 9.16.0(jiti@2.4.1) - eslint-config-flat-gitignore: 0.3.0(eslint@9.16.0(jiti@2.4.1)) + '@stylistic/eslint-plugin': 2.8.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@vitest/eslint-plugin': 1.1.4(@typescript-eslint/utils@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) + eslint-config-flat-gitignore: 0.3.0(eslint@9.17.0(jiti@2.4.2)) eslint-flat-config-utils: 0.4.0 - eslint-merge-processors: 0.1.0(eslint@9.16.0(jiti@2.4.1)) - eslint-plugin-antfu: 2.7.0(eslint@9.16.0(jiti@2.4.1)) - eslint-plugin-command: 0.2.6(eslint@9.16.0(jiti@2.4.1)) - eslint-plugin-import-x: 4.2.1(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) - eslint-plugin-jsdoc: 50.3.1(eslint@9.16.0(jiti@2.4.1)) - eslint-plugin-jsonc: 2.16.0(eslint@9.16.0(jiti@2.4.1)) - eslint-plugin-n: 17.10.2(eslint@9.16.0(jiti@2.4.1)) + eslint-merge-processors: 0.1.0(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-antfu: 2.7.0(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-command: 0.2.6(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.2.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint-plugin-jsdoc: 50.3.1(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-jsonc: 2.16.0(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-n: 17.10.2(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-no-only-tests: 3.3.0 - eslint-plugin-perfectionist: 3.8.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2)(vue-eslint-parser@9.4.3(eslint@9.16.0(jiti@2.4.1))) - eslint-plugin-regexp: 2.6.0(eslint@9.16.0(jiti@2.4.1)) - eslint-plugin-toml: 0.11.1(eslint@9.16.0(jiti@2.4.1)) - eslint-plugin-unicorn: 55.0.0(eslint@9.16.0(jiti@2.4.1)) - eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.16.0(jiti@2.4.1)) - eslint-plugin-vue: 9.32.0(eslint@9.16.0(jiti@2.4.1)) - eslint-plugin-yml: 1.14.0(eslint@9.16.0(jiti@2.4.1)) - eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.5.13)(eslint@9.16.0(jiti@2.4.1)) + eslint-plugin-perfectionist: 3.8.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)(vue-eslint-parser@9.4.3(eslint@9.17.0(jiti@2.4.2))) + eslint-plugin-regexp: 2.6.0(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-toml: 0.11.1(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-unicorn: 55.0.0(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-vue: 9.32.0(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-yml: 1.14.0(eslint@9.17.0(jiti@2.4.2)) + eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.2)) globals: 15.9.0 jsonc-eslint-parser: 2.4.0 local-pkg: 0.5.0 parse-gitignore: 2.0.0 picocolors: 1.1.0 toml-eslint-parser: 0.10.0 - vue-eslint-parser: 9.4.3(eslint@9.16.0(jiti@2.4.1)) + vue-eslint-parser: 9.4.3(eslint@9.17.0(jiti@2.4.2)) yaml-eslint-parser: 1.2.3 yargs: 17.7.2 optionalDependencies: - eslint-plugin-format: 0.1.2(eslint@9.16.0(jiti@2.4.1)) + eslint-plugin-format: 0.1.2(eslint@9.17.0(jiti@2.4.2)) transitivePeerDependencies: - '@typescript-eslint/utils' - '@vue/compiler-sfc' @@ -4772,11 +4949,22 @@ snapshots: dependencies: '@babel/types': 7.26.0 + '@babel/parser@7.26.3': + dependencies: + '@babel/types': 7.26.3 + optional: true + '@babel/types@7.26.0': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@babel/types@7.26.3': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + optional: true + '@clack/core@0.3.4': dependencies: picocolors: 1.1.1 @@ -4798,9 +4986,9 @@ snapshots: '@docsearch/css@3.8.0': {} - '@docsearch/js@3.8.0(@algolia/client-search@5.15.0)(search-insights@2.17.3)': + '@docsearch/js@3.8.0(@algolia/client-search@5.18.0)(search-insights@2.17.3)': dependencies: - '@docsearch/react': 3.8.0(@algolia/client-search@5.15.0)(search-insights@2.17.3) + '@docsearch/react': 3.8.0(@algolia/client-search@5.18.0)(search-insights@2.17.3) preact: 10.25.1 transitivePeerDependencies: - '@algolia/client-search' @@ -4809,10 +4997,10 @@ snapshots: - react-dom - search-insights - '@docsearch/react@3.8.0(@algolia/client-search@5.15.0)(search-insights@2.17.3)': + '@docsearch/react@3.8.0(@algolia/client-search@5.18.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.15.0)(algoliasearch@5.13.0)(search-insights@2.17.3) - '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.15.0)(algoliasearch@5.13.0) + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.18.0)(algoliasearch@5.13.0)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.18.0)(algoliasearch@5.13.0) '@docsearch/css': 3.8.0 algoliasearch: 5.13.0 optionalDependencies: @@ -4838,7 +5026,7 @@ snapshots: '@esbuild/aix-ppc64@0.23.1': optional: true - '@esbuild/aix-ppc64@0.24.0': + '@esbuild/aix-ppc64@0.24.2': optional: true '@esbuild/android-arm64@0.21.5': @@ -4847,7 +5035,7 @@ snapshots: '@esbuild/android-arm64@0.23.1': optional: true - '@esbuild/android-arm64@0.24.0': + '@esbuild/android-arm64@0.24.2': optional: true '@esbuild/android-arm@0.21.5': @@ -4856,7 +5044,7 @@ snapshots: '@esbuild/android-arm@0.23.1': optional: true - '@esbuild/android-arm@0.24.0': + '@esbuild/android-arm@0.24.2': optional: true '@esbuild/android-x64@0.21.5': @@ -4865,7 +5053,7 @@ snapshots: '@esbuild/android-x64@0.23.1': optional: true - '@esbuild/android-x64@0.24.0': + '@esbuild/android-x64@0.24.2': optional: true '@esbuild/darwin-arm64@0.21.5': @@ -4874,7 +5062,7 @@ snapshots: '@esbuild/darwin-arm64@0.23.1': optional: true - '@esbuild/darwin-arm64@0.24.0': + '@esbuild/darwin-arm64@0.24.2': optional: true '@esbuild/darwin-x64@0.21.5': @@ -4883,7 +5071,7 @@ snapshots: '@esbuild/darwin-x64@0.23.1': optional: true - '@esbuild/darwin-x64@0.24.0': + '@esbuild/darwin-x64@0.24.2': optional: true '@esbuild/freebsd-arm64@0.21.5': @@ -4892,7 +5080,7 @@ snapshots: '@esbuild/freebsd-arm64@0.23.1': optional: true - '@esbuild/freebsd-arm64@0.24.0': + '@esbuild/freebsd-arm64@0.24.2': optional: true '@esbuild/freebsd-x64@0.21.5': @@ -4901,7 +5089,7 @@ snapshots: '@esbuild/freebsd-x64@0.23.1': optional: true - '@esbuild/freebsd-x64@0.24.0': + '@esbuild/freebsd-x64@0.24.2': optional: true '@esbuild/linux-arm64@0.21.5': @@ -4910,7 +5098,7 @@ snapshots: '@esbuild/linux-arm64@0.23.1': optional: true - '@esbuild/linux-arm64@0.24.0': + '@esbuild/linux-arm64@0.24.2': optional: true '@esbuild/linux-arm@0.21.5': @@ -4919,7 +5107,7 @@ snapshots: '@esbuild/linux-arm@0.23.1': optional: true - '@esbuild/linux-arm@0.24.0': + '@esbuild/linux-arm@0.24.2': optional: true '@esbuild/linux-ia32@0.21.5': @@ -4928,7 +5116,7 @@ snapshots: '@esbuild/linux-ia32@0.23.1': optional: true - '@esbuild/linux-ia32@0.24.0': + '@esbuild/linux-ia32@0.24.2': optional: true '@esbuild/linux-loong64@0.21.5': @@ -4937,7 +5125,7 @@ snapshots: '@esbuild/linux-loong64@0.23.1': optional: true - '@esbuild/linux-loong64@0.24.0': + '@esbuild/linux-loong64@0.24.2': optional: true '@esbuild/linux-mips64el@0.21.5': @@ -4946,7 +5134,7 @@ snapshots: '@esbuild/linux-mips64el@0.23.1': optional: true - '@esbuild/linux-mips64el@0.24.0': + '@esbuild/linux-mips64el@0.24.2': optional: true '@esbuild/linux-ppc64@0.21.5': @@ -4955,7 +5143,7 @@ snapshots: '@esbuild/linux-ppc64@0.23.1': optional: true - '@esbuild/linux-ppc64@0.24.0': + '@esbuild/linux-ppc64@0.24.2': optional: true '@esbuild/linux-riscv64@0.21.5': @@ -4964,7 +5152,7 @@ snapshots: '@esbuild/linux-riscv64@0.23.1': optional: true - '@esbuild/linux-riscv64@0.24.0': + '@esbuild/linux-riscv64@0.24.2': optional: true '@esbuild/linux-s390x@0.21.5': @@ -4973,7 +5161,7 @@ snapshots: '@esbuild/linux-s390x@0.23.1': optional: true - '@esbuild/linux-s390x@0.24.0': + '@esbuild/linux-s390x@0.24.2': optional: true '@esbuild/linux-x64@0.21.5': @@ -4982,7 +5170,10 @@ snapshots: '@esbuild/linux-x64@0.23.1': optional: true - '@esbuild/linux-x64@0.24.0': + '@esbuild/linux-x64@0.24.2': + optional: true + + '@esbuild/netbsd-arm64@0.24.2': optional: true '@esbuild/netbsd-x64@0.21.5': @@ -4991,13 +5182,13 @@ snapshots: '@esbuild/netbsd-x64@0.23.1': optional: true - '@esbuild/netbsd-x64@0.24.0': + '@esbuild/netbsd-x64@0.24.2': optional: true '@esbuild/openbsd-arm64@0.23.1': optional: true - '@esbuild/openbsd-arm64@0.24.0': + '@esbuild/openbsd-arm64@0.24.2': optional: true '@esbuild/openbsd-x64@0.21.5': @@ -5006,7 +5197,7 @@ snapshots: '@esbuild/openbsd-x64@0.23.1': optional: true - '@esbuild/openbsd-x64@0.24.0': + '@esbuild/openbsd-x64@0.24.2': optional: true '@esbuild/sunos-x64@0.21.5': @@ -5015,7 +5206,7 @@ snapshots: '@esbuild/sunos-x64@0.23.1': optional: true - '@esbuild/sunos-x64@0.24.0': + '@esbuild/sunos-x64@0.24.2': optional: true '@esbuild/win32-arm64@0.21.5': @@ -5024,7 +5215,7 @@ snapshots: '@esbuild/win32-arm64@0.23.1': optional: true - '@esbuild/win32-arm64@0.24.0': + '@esbuild/win32-arm64@0.24.2': optional: true '@esbuild/win32-ia32@0.21.5': @@ -5033,7 +5224,7 @@ snapshots: '@esbuild/win32-ia32@0.23.1': optional: true - '@esbuild/win32-ia32@0.24.0': + '@esbuild/win32-ia32@0.24.2': optional: true '@esbuild/win32-x64@0.21.5': @@ -5042,45 +5233,45 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@esbuild/win32-x64@0.24.0': + '@esbuild/win32-x64@0.24.2': optional: true - '@eslint-community/eslint-plugin-eslint-comments@4.4.0(eslint@9.16.0(jiti@2.4.1))': + '@eslint-community/eslint-plugin-eslint-comments@4.4.0(eslint@9.17.0(jiti@2.4.2))': dependencies: escape-string-regexp: 4.0.0 - eslint: 9.16.0(jiti@2.4.1) - ignore: 5.2.4 + eslint: 9.17.0(jiti@2.4.2) + ignore: 5.3.2 - '@eslint-community/eslint-utils@4.4.0(eslint@9.16.0(jiti@2.4.1))': + '@eslint-community/eslint-utils@4.4.0(eslint@9.17.0(jiti@2.4.2))': dependencies: - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.1(eslint@9.16.0(jiti@2.4.1))': + '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0(jiti@2.4.2))': dependencies: - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.0': {} - '@eslint-community/regexpp@4.12.1': {} '@eslint/compat@1.1.1': {} - '@eslint/config-array@0.19.0': + '@eslint/config-array@0.19.1': dependencies: - '@eslint/object-schema': 2.1.4 - debug: 4.3.7 + '@eslint/object-schema': 2.1.5 + debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/core@0.9.0': {} + '@eslint/core@0.9.1': + dependencies: + '@types/json-schema': 7.0.15 '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 - debug: 4.3.7 + debug: 4.4.0 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 @@ -5091,20 +5282,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.16.0': {} + '@eslint/js@9.17.0': {} '@eslint/markdown@6.1.1': dependencies: - '@eslint/plugin-kit': 0.2.3 + '@eslint/plugin-kit': 0.2.4 mdast-util-from-markdown: 2.0.1 mdast-util-gfm: 3.0.0 micromark-extension-gfm: 3.0.0 transitivePeerDependencies: - supports-color - '@eslint/object-schema@2.1.4': {} + '@eslint/object-schema@2.1.5': {} - '@eslint/plugin-kit@0.2.3': + '@eslint/plugin-kit@0.2.4': dependencies: levn: 0.4.1 @@ -5143,7 +5334,124 @@ snapshots: transitivePeerDependencies: - supports-color - '@inquirer/figures@1.0.8': {} + '@iconify/utils@2.2.1': + dependencies: + '@antfu/install-pkg': 0.4.1 + '@antfu/utils': 0.7.10 + '@iconify/types': 2.0.0 + debug: 4.4.0 + globals: 15.14.0 + kolorist: 1.8.0 + local-pkg: 0.5.1 + mlly: 1.7.3 + transitivePeerDependencies: + - supports-color + + '@inquirer/checkbox@4.0.4(@types/node@22.10.5)': + dependencies: + '@inquirer/core': 10.1.2(@types/node@22.10.5) + '@inquirer/figures': 1.0.9 + '@inquirer/type': 3.0.2(@types/node@22.10.5) + '@types/node': 22.10.5 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/confirm@5.1.1(@types/node@22.10.5)': + dependencies: + '@inquirer/core': 10.1.2(@types/node@22.10.5) + '@inquirer/type': 3.0.2(@types/node@22.10.5) + '@types/node': 22.10.5 + + '@inquirer/core@10.1.2(@types/node@22.10.5)': + dependencies: + '@inquirer/figures': 1.0.9 + '@inquirer/type': 3.0.2(@types/node@22.10.5) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + transitivePeerDependencies: + - '@types/node' + + '@inquirer/editor@4.2.1(@types/node@22.10.5)': + dependencies: + '@inquirer/core': 10.1.2(@types/node@22.10.5) + '@inquirer/type': 3.0.2(@types/node@22.10.5) + '@types/node': 22.10.5 + external-editor: 3.1.0 + + '@inquirer/expand@4.0.4(@types/node@22.10.5)': + dependencies: + '@inquirer/core': 10.1.2(@types/node@22.10.5) + '@inquirer/type': 3.0.2(@types/node@22.10.5) + '@types/node': 22.10.5 + yoctocolors-cjs: 2.1.2 + + '@inquirer/figures@1.0.9': {} + + '@inquirer/input@4.1.1(@types/node@22.10.5)': + dependencies: + '@inquirer/core': 10.1.2(@types/node@22.10.5) + '@inquirer/type': 3.0.2(@types/node@22.10.5) + '@types/node': 22.10.5 + + '@inquirer/number@3.0.4(@types/node@22.10.5)': + dependencies: + '@inquirer/core': 10.1.2(@types/node@22.10.5) + '@inquirer/type': 3.0.2(@types/node@22.10.5) + '@types/node': 22.10.5 + + '@inquirer/password@4.0.4(@types/node@22.10.5)': + dependencies: + '@inquirer/core': 10.1.2(@types/node@22.10.5) + '@inquirer/type': 3.0.2(@types/node@22.10.5) + '@types/node': 22.10.5 + ansi-escapes: 4.3.2 + + '@inquirer/prompts@7.2.1(@types/node@22.10.5)': + dependencies: + '@inquirer/checkbox': 4.0.4(@types/node@22.10.5) + '@inquirer/confirm': 5.1.1(@types/node@22.10.5) + '@inquirer/editor': 4.2.1(@types/node@22.10.5) + '@inquirer/expand': 4.0.4(@types/node@22.10.5) + '@inquirer/input': 4.1.1(@types/node@22.10.5) + '@inquirer/number': 3.0.4(@types/node@22.10.5) + '@inquirer/password': 4.0.4(@types/node@22.10.5) + '@inquirer/rawlist': 4.0.4(@types/node@22.10.5) + '@inquirer/search': 3.0.4(@types/node@22.10.5) + '@inquirer/select': 4.0.4(@types/node@22.10.5) + '@types/node': 22.10.5 + + '@inquirer/rawlist@4.0.4(@types/node@22.10.5)': + dependencies: + '@inquirer/core': 10.1.2(@types/node@22.10.5) + '@inquirer/type': 3.0.2(@types/node@22.10.5) + '@types/node': 22.10.5 + yoctocolors-cjs: 2.1.2 + + '@inquirer/search@3.0.4(@types/node@22.10.5)': + dependencies: + '@inquirer/core': 10.1.2(@types/node@22.10.5) + '@inquirer/figures': 1.0.9 + '@inquirer/type': 3.0.2(@types/node@22.10.5) + '@types/node': 22.10.5 + yoctocolors-cjs: 2.1.2 + + '@inquirer/select@4.0.4(@types/node@22.10.5)': + dependencies: + '@inquirer/core': 10.1.2(@types/node@22.10.5) + '@inquirer/figures': 1.0.9 + '@inquirer/type': 3.0.2(@types/node@22.10.5) + '@types/node': 22.10.5 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/type@3.0.2(@types/node@22.10.5)': + dependencies: + '@types/node': 22.10.5 '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -5162,26 +5470,26 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@microsoft/api-extractor-model@7.30.0(@types/node@22.10.1)': + '@microsoft/api-extractor-model@7.30.1(@types/node@22.10.5)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.10.0(@types/node@22.10.1) + '@rushstack/node-core-library': 5.10.1(@types/node@22.10.5) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.48.0(@types/node@22.10.1)': + '@microsoft/api-extractor@7.48.1(@types/node@22.10.5)': dependencies: - '@microsoft/api-extractor-model': 7.30.0(@types/node@22.10.1) + '@microsoft/api-extractor-model': 7.30.1(@types/node@22.10.5) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.10.0(@types/node@22.10.1) + '@rushstack/node-core-library': 5.10.1(@types/node@22.10.5) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.14.3(@types/node@22.10.1) - '@rushstack/ts-command-line': 4.23.1(@types/node@22.10.1) + '@rushstack/terminal': 0.14.4(@types/node@22.10.5) + '@rushstack/ts-command-line': 4.23.2(@types/node@22.10.5) lodash: 4.17.21 minimatch: 3.0.8 - resolve: 1.22.8 + resolve: 1.22.10 semver: 7.5.4 source-map: 0.6.1 typescript: 5.4.2 @@ -5193,7 +5501,7 @@ snapshots: '@microsoft/tsdoc': 0.15.1 ajv: 8.12.0 jju: 1.4.0 - resolve: 1.22.8 + resolve: 1.22.10 '@microsoft/tsdoc@0.15.1': {} @@ -5209,64 +5517,63 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@octokit/auth-token@4.0.0': {} + '@octokit/auth-token@5.1.1': {} - '@octokit/core@5.2.0': + '@octokit/core@6.1.3': dependencies: - '@octokit/auth-token': 4.0.0 - '@octokit/graphql': 7.1.0 - '@octokit/request': 8.4.0 - '@octokit/request-error': 5.1.0 + '@octokit/auth-token': 5.1.1 + '@octokit/graphql': 8.1.2 + '@octokit/request': 9.1.4 + '@octokit/request-error': 6.1.6 '@octokit/types': 13.6.2 - before-after-hook: 2.2.3 - universal-user-agent: 6.0.1 + before-after-hook: 3.0.2 + universal-user-agent: 7.0.2 - '@octokit/endpoint@9.0.5': + '@octokit/endpoint@10.1.2': dependencies: '@octokit/types': 13.6.2 - universal-user-agent: 6.0.1 + universal-user-agent: 7.0.2 - '@octokit/graphql@7.1.0': + '@octokit/graphql@8.1.2': dependencies: - '@octokit/request': 8.4.0 + '@octokit/request': 9.1.4 '@octokit/types': 13.6.2 - universal-user-agent: 6.0.1 + universal-user-agent: 7.0.2 '@octokit/openapi-types@22.2.0': {} - '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@5.2.0)': + '@octokit/plugin-paginate-rest@11.3.6(@octokit/core@6.1.3)': dependencies: - '@octokit/core': 5.2.0 + '@octokit/core': 6.1.3 '@octokit/types': 13.6.2 - '@octokit/plugin-request-log@4.0.1(@octokit/core@5.2.0)': + '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.3)': dependencies: - '@octokit/core': 5.2.0 + '@octokit/core': 6.1.3 - '@octokit/plugin-rest-endpoint-methods@13.2.2(@octokit/core@5.2.0)': + '@octokit/plugin-rest-endpoint-methods@13.2.6(@octokit/core@6.1.3)': dependencies: - '@octokit/core': 5.2.0 + '@octokit/core': 6.1.3 '@octokit/types': 13.6.2 - '@octokit/request-error@5.1.0': + '@octokit/request-error@6.1.6': dependencies: '@octokit/types': 13.6.2 - deprecation: 2.3.1 - once: 1.4.0 - '@octokit/request@8.4.0': + '@octokit/request@9.1.4': dependencies: - '@octokit/endpoint': 9.0.5 - '@octokit/request-error': 5.1.0 + '@octokit/endpoint': 10.1.2 + '@octokit/request-error': 6.1.6 '@octokit/types': 13.6.2 - universal-user-agent: 6.0.1 + fast-content-type-parse: 2.0.1 + universal-user-agent: 7.0.2 - '@octokit/rest@20.1.1': + '@octokit/rest@21.0.2': dependencies: - '@octokit/core': 5.2.0 - '@octokit/plugin-paginate-rest': 11.3.1(@octokit/core@5.2.0) - '@octokit/plugin-request-log': 4.0.1(@octokit/core@5.2.0) - '@octokit/plugin-rest-endpoint-methods': 13.2.2(@octokit/core@5.2.0) + '@octokit/core': 6.1.3 + '@octokit/plugin-paginate-rest': 11.3.6(@octokit/core@6.1.3) + '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.3) + '@octokit/plugin-rest-endpoint-methods': 13.2.6(@octokit/core@6.1.3) '@octokit/types@13.6.2': dependencies: @@ -5280,7 +5587,7 @@ snapshots: dependencies: graceful-fs: 4.2.10 - '@pnpm/npm-conf@2.2.2': + '@pnpm/npm-conf@2.3.1': dependencies: '@pnpm/config.env-replace': 1.1.0 '@pnpm/network.ca-file': 1.0.2 @@ -5288,135 +5595,146 @@ snapshots: '@polka/url@1.0.0-next.28': {} - '@release-it/conventional-changelog@9.0.3(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)(release-it@17.10.0(typescript@5.7.2))': + '@release-it/conventional-changelog@9.0.4(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)(release-it@18.0.0(@types/node@22.10.5)(typescript@5.7.2))': dependencies: concat-stream: 2.0.0 conventional-changelog: 6.0.0(conventional-commits-filter@5.0.0) conventional-recommended-bump: 10.0.0 git-semver-tags: 8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) - release-it: 17.10.0(typescript@5.7.2) + release-it: 18.0.0(@types/node@22.10.5)(typescript@5.7.2) semver: 7.6.3 transitivePeerDependencies: - conventional-commits-filter - conventional-commits-parser - '@rollup/pluginutils@5.1.3(rollup@4.28.0)': + '@rollup/pluginutils@5.1.3(rollup@4.30.0)': dependencies: '@types/estree': 1.0.4 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.28.0 + rollup: 4.30.0 + + '@rollup/pluginutils@5.1.4(rollup@4.30.0)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.30.0 '@rollup/rollup-android-arm-eabi@4.26.0': optional: true - '@rollup/rollup-android-arm-eabi@4.28.0': + '@rollup/rollup-android-arm-eabi@4.30.0': optional: true '@rollup/rollup-android-arm64@4.26.0': optional: true - '@rollup/rollup-android-arm64@4.28.0': + '@rollup/rollup-android-arm64@4.30.0': optional: true '@rollup/rollup-darwin-arm64@4.26.0': optional: true - '@rollup/rollup-darwin-arm64@4.28.0': + '@rollup/rollup-darwin-arm64@4.30.0': optional: true '@rollup/rollup-darwin-x64@4.26.0': optional: true - '@rollup/rollup-darwin-x64@4.28.0': + '@rollup/rollup-darwin-x64@4.30.0': optional: true '@rollup/rollup-freebsd-arm64@4.26.0': optional: true - '@rollup/rollup-freebsd-arm64@4.28.0': + '@rollup/rollup-freebsd-arm64@4.30.0': optional: true '@rollup/rollup-freebsd-x64@4.26.0': optional: true - '@rollup/rollup-freebsd-x64@4.28.0': + '@rollup/rollup-freebsd-x64@4.30.0': optional: true '@rollup/rollup-linux-arm-gnueabihf@4.26.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.28.0': + '@rollup/rollup-linux-arm-gnueabihf@4.30.0': optional: true '@rollup/rollup-linux-arm-musleabihf@4.26.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.28.0': + '@rollup/rollup-linux-arm-musleabihf@4.30.0': optional: true '@rollup/rollup-linux-arm64-gnu@4.26.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.28.0': + '@rollup/rollup-linux-arm64-gnu@4.30.0': optional: true '@rollup/rollup-linux-arm64-musl@4.26.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.28.0': + '@rollup/rollup-linux-arm64-musl@4.30.0': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.30.0': optional: true '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.30.0': optional: true '@rollup/rollup-linux-riscv64-gnu@4.26.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.28.0': + '@rollup/rollup-linux-riscv64-gnu@4.30.0': optional: true '@rollup/rollup-linux-s390x-gnu@4.26.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.28.0': + '@rollup/rollup-linux-s390x-gnu@4.30.0': optional: true '@rollup/rollup-linux-x64-gnu@4.26.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.28.0': + '@rollup/rollup-linux-x64-gnu@4.30.0': optional: true '@rollup/rollup-linux-x64-musl@4.26.0': optional: true - '@rollup/rollup-linux-x64-musl@4.28.0': + '@rollup/rollup-linux-x64-musl@4.30.0': optional: true '@rollup/rollup-win32-arm64-msvc@4.26.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.28.0': + '@rollup/rollup-win32-arm64-msvc@4.30.0': optional: true '@rollup/rollup-win32-ia32-msvc@4.26.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.28.0': + '@rollup/rollup-win32-ia32-msvc@4.30.0': optional: true '@rollup/rollup-win32-x64-msvc@4.26.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.28.0': + '@rollup/rollup-win32-x64-msvc@4.30.0': optional: true - '@rushstack/node-core-library@5.10.0(@types/node@22.10.1)': + '@rushstack/node-core-library@5.10.1(@types/node@22.10.5)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -5424,32 +5742,34 @@ snapshots: fs-extra: 7.0.1 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.8 + resolve: 1.22.10 semver: 7.5.4 optionalDependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.5 '@rushstack/rig-package@0.5.3': dependencies: - resolve: 1.22.8 + resolve: 1.22.10 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.14.3(@types/node@22.10.1)': + '@rushstack/terminal@0.14.4(@types/node@22.10.5)': dependencies: - '@rushstack/node-core-library': 5.10.0(@types/node@22.10.1) + '@rushstack/node-core-library': 5.10.1(@types/node@22.10.5) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.5 - '@rushstack/ts-command-line@4.23.1(@types/node@22.10.1)': + '@rushstack/ts-command-line@4.23.2(@types/node@22.10.5)': dependencies: - '@rushstack/terminal': 0.14.3(@types/node@22.10.1) + '@rushstack/terminal': 0.14.4(@types/node@22.10.5) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 transitivePeerDependencies: - '@types/node' + '@sec-ant/readable-stream@0.4.1': {} + '@shikijs/core@1.24.0': dependencies: '@shikijs/engine-javascript': 1.24.0 @@ -5483,10 +5803,12 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} - '@stylistic/eslint-plugin@2.8.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2)': + '@sindresorhus/merge-streams@4.0.0': {} + + '@stylistic/eslint-plugin@2.8.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) - eslint: 9.16.0(jiti@2.4.1) + '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) eslint-visitor-keys: 4.2.0 espree: 10.3.0 estraverse: 5.3.0 @@ -5497,21 +5819,31 @@ snapshots: '@tootallnate/quickjs-emscripten@0.23.0': {} - '@tresjs/core@4.3.1(three@0.171.0)(vue@3.5.13(typescript@5.7.2))': + '@tresjs/core@4.3.1(three@0.172.0)(vue@3.5.13(typescript@5.7.2))': dependencies: '@alvarosabu/utils': 3.2.0 '@vue/devtools-api': 6.6.4 '@vueuse/core': 11.3.0(vue@3.5.13(typescript@5.7.2)) - three: 0.171.0 + three: 0.172.0 vue: 3.5.13(typescript@5.7.2) transitivePeerDependencies: - '@vue/composition-api' - '@tresjs/eslint-config@1.4.0(@typescript-eslint/utils@8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2))(@vue/compiler-sfc@3.5.13)(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2)': + '@tresjs/core@4.3.2(three@0.172.0)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2))': dependencies: - '@antfu/eslint-config': 3.6.2(@typescript-eslint/utils@8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2))(@vue/compiler-sfc@3.5.13)(eslint-plugin-format@0.1.2(eslint@9.16.0(jiti@2.4.1)))(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) - eslint: 9.16.0(jiti@2.4.1) - eslint-plugin-format: 0.1.2(eslint@9.16.0(jiti@2.4.1)) + '@alvarosabu/utils': 3.2.0 + '@vue/devtools-api': 6.6.4 + '@vueuse/core': 12.3.0(typescript@5.7.2) + three: 0.172.0 + vue: 3.5.13(typescript@5.7.2) + transitivePeerDependencies: + - typescript + + '@tresjs/eslint-config@1.4.0(@typescript-eslint/utils@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': + dependencies: + '@antfu/eslint-config': 3.6.2(@typescript-eslint/utils@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(@vue/compiler-sfc@3.5.13)(eslint-plugin-format@0.1.2(eslint@9.17.0(jiti@2.4.2)))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) + eslint-plugin-format: 0.1.2(eslint@9.17.0(jiti@2.4.2)) transitivePeerDependencies: - '@eslint-react/eslint-plugin' - '@prettier/plugin-xml' @@ -5532,11 +5864,11 @@ snapshots: - typescript - vitest - '@tresjs/leches@0.14.0(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2))': + '@tresjs/leches@0.14.0(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': dependencies: '@unocss/core': 0.57.7 '@vueuse/components': 10.11.1(vue@3.5.13(typescript@5.7.2)) - vite-plugin-css-injected-by-js: 3.5.1(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1)) + vite-plugin-css-injected-by-js: 3.5.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0)) vue: 3.5.13(typescript@5.7.2) transitivePeerDependencies: - '@vue/composition-api' @@ -5552,7 +5884,7 @@ snapshots: dependencies: '@types/ms': 0.7.34 - '@types/draco3d@1.4.7': {} + '@types/draco3d@1.4.10': {} '@types/estree@1.0.4': {} @@ -5579,24 +5911,26 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@22.10.1': + '@types/node@22.10.5': dependencies: undici-types: 6.20.0 '@types/normalize-package-data@2.4.4': {} - '@types/offscreencanvas@2019.7.2': {} + '@types/offscreencanvas@2019.7.3': {} + + '@types/parse-path@7.0.3': {} '@types/semver@7.5.8': {} '@types/stats.js@0.17.3': {} - '@types/three@0.170.0': + '@types/three@0.171.0': dependencies: '@tweenjs/tween.js': 23.1.3 '@types/stats.js': 0.17.3 '@types/webxr': 0.5.20 - '@webgpu/types': 0.1.51 + '@webgpu/types': 0.1.52 fflate: 0.8.2 meshoptimizer: 0.18.1 @@ -5606,108 +5940,113 @@ snapshots: '@types/webxr@0.5.20': {} - '@types/webxr@0.5.7': {} - - '@typescript-eslint/eslint-plugin@8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2)': + '@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) - '@typescript-eslint/scope-manager': 8.17.0 - '@typescript-eslint/type-utils': 8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.17.0 - eslint: 9.16.0(jiti@2.4.1) + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.19.0 + '@typescript-eslint/type-utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.19.0 + eslint: 9.17.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.4.0(typescript@5.7.2) - optionalDependencies: + ts-api-utils: 1.4.3(typescript@5.7.2) typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2)': + '@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@typescript-eslint/scope-manager': 8.17.0 - '@typescript-eslint/types': 8.17.0 - '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.17.0 - debug: 4.3.4 - eslint: 9.16.0(jiti@2.4.1) - optionalDependencies: + '@typescript-eslint/scope-manager': 8.19.0 + '@typescript-eslint/types': 8.19.0 + '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.19.0 + debug: 4.4.0 + eslint: 9.17.0(jiti@2.4.2) typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.17.0': + '@typescript-eslint/scope-manager@8.19.0': dependencies: - '@typescript-eslint/types': 8.17.0 - '@typescript-eslint/visitor-keys': 8.17.0 + '@typescript-eslint/types': 8.19.0 + '@typescript-eslint/visitor-keys': 8.19.0 - '@typescript-eslint/type-utils@8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2)': + '@typescript-eslint/type-utils@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.7.2) - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) - debug: 4.3.7 - eslint: 9.16.0(jiti@2.4.1) + '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2) + '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + debug: 4.4.0 + eslint: 9.17.0(jiti@2.4.2) ts-api-utils: 1.4.3(typescript@5.7.2) - optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.17.0': {} + '@typescript-eslint/types@8.19.0': {} - '@typescript-eslint/typescript-estree@8.17.0(typescript@5.7.2)': + '@typescript-eslint/typescript-estree@8.19.0(typescript@5.7.2)': dependencies: - '@typescript-eslint/types': 8.17.0 - '@typescript-eslint/visitor-keys': 8.17.0 - debug: 4.3.7 - fast-glob: 3.3.2 + '@typescript-eslint/types': 8.19.0 + '@typescript-eslint/visitor-keys': 8.19.0 + debug: 4.4.0 + fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 ts-api-utils: 1.4.3(typescript@5.7.2) - optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2)': + '@typescript-eslint/utils@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.1)) - '@typescript-eslint/scope-manager': 8.17.0 - '@typescript-eslint/types': 8.17.0 - '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.7.2) - eslint: 9.16.0(jiti@2.4.1) - optionalDependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.19.0 + '@typescript-eslint/types': 8.19.0 + '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.17.0': + '@typescript-eslint/visitor-keys@8.19.0': dependencies: - '@typescript-eslint/types': 8.17.0 + '@typescript-eslint/types': 8.19.0 eslint-visitor-keys: 4.2.0 '@ungap/structured-clone@1.2.0': {} - '@unocss/astro@0.65.1(rollup@4.28.0)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2))': + '@unocss/astro@0.65.1(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': dependencies: '@unocss/core': 0.65.1 '@unocss/reset': 0.65.1 - '@unocss/vite': 0.65.1(rollup@4.28.0)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2)) + '@unocss/vite': 0.65.1(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) optionalDependencies: - vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - rollup - supports-color - vue - '@unocss/cli@0.65.1(rollup@4.28.0)': + '@unocss/astro@0.65.3(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': + dependencies: + '@unocss/core': 0.65.3 + '@unocss/reset': 0.65.3 + '@unocss/vite': 0.65.3(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) + optionalDependencies: + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0) + transitivePeerDependencies: + - rollup + - supports-color + - vue + + '@unocss/cli@0.65.1(rollup@4.30.0)': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.3(rollup@4.28.0) + '@rollup/pluginutils': 5.1.3(rollup@4.30.0) '@unocss/config': 0.65.1 '@unocss/core': 0.65.1 '@unocss/preset-uno': 0.65.1 @@ -5723,6 +6062,25 @@ snapshots: - rollup - supports-color + '@unocss/cli@0.65.3(rollup@4.30.0)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@rollup/pluginutils': 5.1.4(rollup@4.30.0) + '@unocss/config': 0.65.3 + '@unocss/core': 0.65.3 + '@unocss/preset-uno': 0.65.3 + cac: 6.7.14 + chokidar: 3.6.0 + colorette: 2.0.20 + consola: 3.3.3 + magic-string: 0.30.17 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + tinyglobby: 0.2.10 + transitivePeerDependencies: + - rollup + - supports-color + '@unocss/config@0.65.1': dependencies: '@unocss/core': 0.65.1 @@ -5730,14 +6088,27 @@ snapshots: transitivePeerDependencies: - supports-color + '@unocss/config@0.65.3': + dependencies: + '@unocss/core': 0.65.3 + unconfig: 0.6.0 + transitivePeerDependencies: + - supports-color + '@unocss/core@0.57.7': {} '@unocss/core@0.65.1': {} + '@unocss/core@0.65.3': {} + '@unocss/extractor-arbitrary-variants@0.65.1': dependencies: '@unocss/core': 0.65.1 + '@unocss/extractor-arbitrary-variants@0.65.3': + dependencies: + '@unocss/core': 0.65.3 + '@unocss/inspector@0.65.1(vue@3.5.13(typescript@5.7.2))': dependencies: '@unocss/core': 0.65.1 @@ -5748,6 +6119,16 @@ snapshots: transitivePeerDependencies: - vue + '@unocss/inspector@0.65.3(vue@3.5.13(typescript@5.7.2))': + dependencies: + '@unocss/core': 0.65.3 + '@unocss/rule-utils': 0.65.3 + gzip-size: 6.0.0 + sirv: 3.0.0 + vue-flow-layout: 0.1.1(vue@3.5.13(typescript@5.7.2)) + transitivePeerDependencies: + - vue + '@unocss/postcss@0.65.1(postcss@8.4.49)': dependencies: '@unocss/config': 0.65.1 @@ -5759,10 +6140,25 @@ snapshots: transitivePeerDependencies: - supports-color + '@unocss/postcss@0.65.3(postcss@8.4.49)': + dependencies: + '@unocss/config': 0.65.3 + '@unocss/core': 0.65.3 + '@unocss/rule-utils': 0.65.3 + css-tree: 3.1.0 + postcss: 8.4.49 + tinyglobby: 0.2.10 + transitivePeerDependencies: + - supports-color + '@unocss/preset-attributify@0.65.1': dependencies: '@unocss/core': 0.65.1 + '@unocss/preset-attributify@0.65.3': + dependencies: + '@unocss/core': 0.65.3 + '@unocss/preset-icons@0.65.1': dependencies: '@iconify/utils': 2.1.33 @@ -5771,21 +6167,44 @@ snapshots: transitivePeerDependencies: - supports-color + '@unocss/preset-icons@0.65.3': + dependencies: + '@iconify/utils': 2.2.1 + '@unocss/core': 0.65.3 + ofetch: 1.4.1 + transitivePeerDependencies: + - supports-color + '@unocss/preset-mini@0.65.1': dependencies: '@unocss/core': 0.65.1 '@unocss/extractor-arbitrary-variants': 0.65.1 '@unocss/rule-utils': 0.65.1 + '@unocss/preset-mini@0.65.3': + dependencies: + '@unocss/core': 0.65.3 + '@unocss/extractor-arbitrary-variants': 0.65.3 + '@unocss/rule-utils': 0.65.3 + '@unocss/preset-tagify@0.65.1': dependencies: '@unocss/core': 0.65.1 + '@unocss/preset-tagify@0.65.3': + dependencies: + '@unocss/core': 0.65.3 + '@unocss/preset-typography@0.65.1': dependencies: '@unocss/core': 0.65.1 '@unocss/preset-mini': 0.65.1 + '@unocss/preset-typography@0.65.3': + dependencies: + '@unocss/core': 0.65.3 + '@unocss/preset-mini': 0.65.3 + '@unocss/preset-uno@0.65.1': dependencies: '@unocss/core': 0.65.1 @@ -5793,94 +6212,157 @@ snapshots: '@unocss/preset-wind': 0.65.1 '@unocss/rule-utils': 0.65.1 + '@unocss/preset-uno@0.65.3': + dependencies: + '@unocss/core': 0.65.3 + '@unocss/preset-mini': 0.65.3 + '@unocss/preset-wind': 0.65.3 + '@unocss/rule-utils': 0.65.3 + '@unocss/preset-web-fonts@0.65.1': dependencies: '@unocss/core': 0.65.1 ofetch: 1.4.1 + '@unocss/preset-web-fonts@0.65.3': + dependencies: + '@unocss/core': 0.65.3 + ofetch: 1.4.1 + '@unocss/preset-wind@0.65.1': dependencies: '@unocss/core': 0.65.1 '@unocss/preset-mini': 0.65.1 '@unocss/rule-utils': 0.65.1 + '@unocss/preset-wind@0.65.3': + dependencies: + '@unocss/core': 0.65.3 + '@unocss/preset-mini': 0.65.3 + '@unocss/rule-utils': 0.65.3 + '@unocss/reset@0.65.1': {} + '@unocss/reset@0.65.3': {} + '@unocss/rule-utils@0.65.1': dependencies: '@unocss/core': 0.65.1 magic-string: 0.30.14 + '@unocss/rule-utils@0.65.3': + dependencies: + '@unocss/core': 0.65.3 + magic-string: 0.30.17 + '@unocss/transformer-attributify-jsx@0.65.1': dependencies: '@unocss/core': 0.65.1 + '@unocss/transformer-attributify-jsx@0.65.3': + dependencies: + '@unocss/core': 0.65.3 + '@unocss/transformer-compile-class@0.65.1': dependencies: '@unocss/core': 0.65.1 + '@unocss/transformer-compile-class@0.65.3': + dependencies: + '@unocss/core': 0.65.3 + '@unocss/transformer-directives@0.65.1': dependencies: '@unocss/core': 0.65.1 '@unocss/rule-utils': 0.65.1 css-tree: 3.0.1 + '@unocss/transformer-directives@0.65.3': + dependencies: + '@unocss/core': 0.65.3 + '@unocss/rule-utils': 0.65.3 + css-tree: 3.1.0 + '@unocss/transformer-variant-group@0.65.1': dependencies: '@unocss/core': 0.65.1 - '@unocss/vite@0.65.1(rollup@4.28.0)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2))': + '@unocss/transformer-variant-group@0.65.3': + dependencies: + '@unocss/core': 0.65.3 + + '@unocss/vite@0.65.1(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.3(rollup@4.28.0) + '@rollup/pluginutils': 5.1.3(rollup@4.30.0) '@unocss/config': 0.65.1 '@unocss/core': 0.65.1 '@unocss/inspector': 0.65.1(vue@3.5.13(typescript@5.7.2)) chokidar: 3.6.0 magic-string: 0.30.14 tinyglobby: 0.2.10 - vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - rollup - supports-color - vue - '@vitejs/plugin-vue@5.2.1(vite@5.4.11(@types/node@22.10.1))(vue@3.5.13(typescript@5.7.2))': + '@unocss/vite@0.65.3(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': dependencies: - vite: 5.4.11(@types/node@22.10.1) + '@ampproject/remapping': 2.3.0 + '@rollup/pluginutils': 5.1.4(rollup@4.30.0) + '@unocss/config': 0.65.3 + '@unocss/core': 0.65.3 + '@unocss/inspector': 0.65.3(vue@3.5.13(typescript@5.7.2)) + chokidar: 3.6.0 + magic-string: 0.30.17 + tinyglobby: 0.2.10 + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0) + transitivePeerDependencies: + - rollup + - supports-color + - vue + + '@vitejs/plugin-vue@5.2.1(vite@5.4.11(@types/node@22.10.5))(vue@3.5.13(typescript@5.7.2))': + dependencies: + vite: 5.4.11(@types/node@22.10.5) vue: 3.5.13(typescript@5.7.2) - '@vitejs/plugin-vue@5.2.1(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2))': + '@vitejs/plugin-vue@5.2.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': dependencies: - vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0) vue: 3.5.13(typescript@5.7.2) - '@vitest/eslint-plugin@1.1.4(@typescript-eslint/utils@8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2)': + '@vitest/eslint-plugin@1.1.4(@typescript-eslint/utils@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) optionalDependencies: - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) typescript: 5.7.2 '@volar/language-core@2.4.10': dependencies: '@volar/source-map': 2.4.10 + '@volar/language-core@2.4.11': + dependencies: + '@volar/source-map': 2.4.11 + '@volar/source-map@2.4.10': {} + '@volar/source-map@2.4.11': {} + '@volar/typescript@2.4.10': dependencies: '@volar/language-core': 2.4.10 path-browserify: 1.0.1 vscode-uri: 3.0.8 - '@vue/compiler-core@3.5.12': + '@volar/typescript@2.4.11': dependencies: - '@babel/parser': 7.26.2 - '@vue/shared': 3.5.12 - entities: 4.5.0 - estree-walker: 2.0.2 - source-map-js: 1.2.1 + '@volar/language-core': 2.4.11 + path-browserify: 1.0.1 + vscode-uri: 3.0.8 '@vue/compiler-core@3.5.13': dependencies: @@ -5890,11 +6372,6 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.12': - dependencies: - '@vue/compiler-core': 3.5.12 - '@vue/shared': 3.5.12 - '@vue/compiler-dom@3.5.13': dependencies: '@vue/compiler-core': 3.5.13 @@ -5955,19 +6432,6 @@ snapshots: optionalDependencies: typescript: 5.7.2 - '@vue/language-core@2.1.6(typescript@5.7.2)': - dependencies: - '@volar/language-core': 2.4.10 - '@vue/compiler-dom': 3.5.12 - '@vue/compiler-vue2': 2.7.16 - '@vue/shared': 3.5.12 - computeds: 0.0.1 - minimatch: 9.0.3 - muggle-string: 0.4.1 - path-browserify: 1.0.1 - optionalDependencies: - typescript: 5.7.2 - '@vue/reactivity@3.5.13': dependencies: '@vue/shared': 3.5.13 @@ -5990,8 +6454,6 @@ snapshots: '@vue/shared': 3.5.13 vue: 3.5.13(typescript@5.7.2) - '@vue/shared@3.5.12': {} - '@vue/shared@3.5.13': {} '@vueuse/components@10.11.1(vue@3.5.13(typescript@5.7.2))': @@ -6023,11 +6485,11 @@ snapshots: - '@vue/composition-api' - vue - '@vueuse/core@12.0.0(typescript@5.7.2)': + '@vueuse/core@12.3.0(typescript@5.7.2)': dependencies: '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 12.0.0 - '@vueuse/shared': 12.0.0(typescript@5.7.2) + '@vueuse/metadata': 12.3.0 + '@vueuse/shared': 12.3.0(typescript@5.7.2) vue: 3.5.13(typescript@5.7.2) transitivePeerDependencies: - typescript @@ -6047,7 +6509,7 @@ snapshots: '@vueuse/metadata@11.3.0': {} - '@vueuse/metadata@12.0.0': {} + '@vueuse/metadata@12.3.0': {} '@vueuse/shared@10.11.1(vue@3.5.13(typescript@5.7.2))': dependencies: @@ -6063,13 +6525,13 @@ snapshots: - '@vue/composition-api' - vue - '@vueuse/shared@12.0.0(typescript@5.7.2)': + '@vueuse/shared@12.3.0(typescript@5.7.2)': dependencies: vue: 3.5.13(typescript@5.7.2) transitivePeerDependencies: - typescript - '@webgpu/types@0.1.51': {} + '@webgpu/types@0.1.52': {} acorn-jsx@5.3.2(acorn@8.14.0): dependencies: @@ -6081,11 +6543,7 @@ snapshots: add-stream@1.0.0: {} - agent-base@7.1.1: - dependencies: - debug: 4.3.7 - transitivePeerDependencies: - - supports-color + agent-base@7.1.3: {} ajv-draft-04@1.0.0(ajv@8.13.0): optionalDependencies: @@ -6182,32 +6640,24 @@ snapshots: balanced-match@1.0.2: {} - base64-js@1.5.1: {} + basic-ftp@5.0.5: {} - basic-ftp@5.0.3: {} - - before-after-hook@2.2.3: {} + before-after-hook@3.0.2: {} binary-extensions@2.3.0: {} birpc@0.2.19: {} - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - boolbase@1.0.0: {} boxen@8.0.1: dependencies: ansi-align: 3.0.1 camelcase: 8.0.0 - chalk: 5.3.0 + chalk: 5.4.1 cli-boxes: 3.0.0 string-width: 7.2.0 - type-fest: 4.30.0 + type-fest: 4.31.0 widest-line: 5.0.0 wrap-ansi: 9.0.0 @@ -6233,11 +6683,6 @@ snapshots: buffer-from@1.1.2: {} - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - builtin-modules@3.3.0: {} bundle-name@4.1.0: @@ -6249,15 +6694,20 @@ snapshots: esbuild: 0.23.1 load-tsconfig: 0.2.5 + bundle-require@5.1.0(esbuild@0.24.2): + dependencies: + esbuild: 0.24.2 + load-tsconfig: 0.2.5 + cac@6.7.14: {} callsites@3.1.0: {} camelcase@8.0.0: {} - camera-controls@2.9.0(three@0.171.0): + camera-controls@2.9.0(three@0.172.0): dependencies: - three: 0.171.0 + three: 0.172.0 caniuse-lite@1.0.30001658: {} @@ -6268,7 +6718,7 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.3.0: {} + chalk@5.4.1: {} character-entities-html4@2.1.0: {} @@ -6298,10 +6748,6 @@ snapshots: cli-boxes@3.0.0: {} - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -6316,8 +6762,6 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone@1.0.4: {} - color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -6339,8 +6783,6 @@ snapshots: compare-versions@6.1.1: {} - computeds@0.0.1: {} - concat-map@0.0.1: {} concat-stream@2.0.0: @@ -6368,6 +6810,8 @@ snapshots: consola@3.2.3: {} + consola@3.3.3: {} + conventional-changelog-angular@8.0.0: dependencies: compare-func: 2.0.0 @@ -6388,8 +6832,8 @@ snapshots: conventional-commits-parser: 6.0.0 git-raw-commits: 5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) git-semver-tags: 8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) - hosted-git-info: 7.0.1 - normalize-package-data: 6.0.0 + hosted-git-info: 7.0.2 + normalize-package-data: 6.0.2 read-package-up: 11.0.0 read-pkg: 9.0.1 transitivePeerDependencies: @@ -6495,6 +6939,11 @@ snapshots: mdn-data: 2.12.1 source-map-js: 1.2.1 + css-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + css-what@6.1.0: {} cssesc@3.0.0: {} @@ -6521,6 +6970,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.0: + dependencies: + ms: 2.1.3 + decode-named-character-reference@1.0.2: dependencies: character-entities: 2.0.2 @@ -6536,10 +6989,6 @@ snapshots: bundle-name: 4.1.0 default-browser-id: 5.0.0 - defaults@1.0.4: - dependencies: - clone: 1.0.4 - define-lazy-prop@2.0.0: {} define-lazy-prop@3.0.0: {} @@ -6552,8 +7001,6 @@ snapshots: escodegen: 2.1.0 esprima: 4.0.1 - deprecation@2.3.1: {} - dequal@2.0.3: {} destr@2.0.3: {} @@ -6590,9 +7037,9 @@ snapshots: dot-prop@9.0.0: dependencies: - type-fest: 4.30.0 + type-fest: 4.31.0 - draco3d@1.5.6: {} + draco3d@1.5.7: {} duplexer@0.1.2: {} @@ -6672,32 +7119,33 @@ snapshots: '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 - esbuild@0.24.0: + esbuild@0.24.2: optionalDependencies: - '@esbuild/aix-ppc64': 0.24.0 - '@esbuild/android-arm': 0.24.0 - '@esbuild/android-arm64': 0.24.0 - '@esbuild/android-x64': 0.24.0 - '@esbuild/darwin-arm64': 0.24.0 - '@esbuild/darwin-x64': 0.24.0 - '@esbuild/freebsd-arm64': 0.24.0 - '@esbuild/freebsd-x64': 0.24.0 - '@esbuild/linux-arm': 0.24.0 - '@esbuild/linux-arm64': 0.24.0 - '@esbuild/linux-ia32': 0.24.0 - '@esbuild/linux-loong64': 0.24.0 - '@esbuild/linux-mips64el': 0.24.0 - '@esbuild/linux-ppc64': 0.24.0 - '@esbuild/linux-riscv64': 0.24.0 - '@esbuild/linux-s390x': 0.24.0 - '@esbuild/linux-x64': 0.24.0 - '@esbuild/netbsd-x64': 0.24.0 - '@esbuild/openbsd-arm64': 0.24.0 - '@esbuild/openbsd-x64': 0.24.0 - '@esbuild/sunos-x64': 0.24.0 - '@esbuild/win32-arm64': 0.24.0 - '@esbuild/win32-ia32': 0.24.0 - '@esbuild/win32-x64': 0.24.0 + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 escalade@3.1.1: {} @@ -6719,74 +7167,74 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-compat-utils@0.5.1(eslint@9.16.0(jiti@2.4.1)): + eslint-compat-utils@0.5.1(eslint@9.17.0(jiti@2.4.2)): dependencies: - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) semver: 7.6.3 - eslint-config-flat-gitignore@0.3.0(eslint@9.16.0(jiti@2.4.1)): + eslint-config-flat-gitignore@0.3.0(eslint@9.17.0(jiti@2.4.2)): dependencies: '@eslint/compat': 1.1.1 - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) find-up-simple: 1.0.0 eslint-flat-config-utils@0.4.0: dependencies: pathe: 1.1.2 - eslint-formatting-reporter@0.0.0(eslint@9.16.0(jiti@2.4.1)): + eslint-formatting-reporter@0.0.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) prettier-linter-helpers: 1.0.0 eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 is-core-module: 2.15.1 - resolve: 1.22.8 + resolve: 1.22.10 transitivePeerDependencies: - supports-color - eslint-merge-processors@0.1.0(eslint@9.16.0(jiti@2.4.1)): + eslint-merge-processors@0.1.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) eslint-parser-plain@0.1.0: {} - eslint-plugin-antfu@2.7.0(eslint@9.16.0(jiti@2.4.1)): + eslint-plugin-antfu@2.7.0(eslint@9.17.0(jiti@2.4.2)): dependencies: '@antfu/utils': 0.7.10 - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) - eslint-plugin-command@0.2.6(eslint@9.16.0(jiti@2.4.1)): + eslint-plugin-command@0.2.6(eslint@9.17.0(jiti@2.4.2)): dependencies: '@es-joy/jsdoccomment': 0.48.0 - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) - eslint-plugin-es-x@7.8.0(eslint@9.16.0(jiti@2.4.1)): + eslint-plugin-es-x@7.8.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.1)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.16.0(jiti@2.4.1) - eslint-compat-utils: 0.5.1(eslint@9.16.0(jiti@2.4.1)) + eslint: 9.17.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.17.0(jiti@2.4.2)) - eslint-plugin-format@0.1.2(eslint@9.16.0(jiti@2.4.1)): + eslint-plugin-format@0.1.2(eslint@9.17.0(jiti@2.4.2)): dependencies: '@dprint/formatter': 0.3.0 '@dprint/markdown': 0.17.8 '@dprint/toml': 0.6.2 - eslint: 9.16.0(jiti@2.4.1) - eslint-formatting-reporter: 0.0.0(eslint@9.16.0(jiti@2.4.1)) + eslint: 9.17.0(jiti@2.4.2) + eslint-formatting-reporter: 0.0.0(eslint@9.17.0(jiti@2.4.2)) eslint-parser-plain: 0.1.0 prettier: 3.3.3 synckit: 0.9.1 - eslint-plugin-import-x@4.2.1(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2): + eslint-plugin-import-x@4.2.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) - debug: 4.3.7 + '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + debug: 4.4.0 doctrine: 3.0.0 - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 get-tsconfig: 4.8.0 is-glob: 4.0.3 @@ -6798,14 +7246,14 @@ snapshots: - supports-color - typescript - eslint-plugin-jsdoc@50.3.1(eslint@9.16.0(jiti@2.4.1)): + eslint-plugin-jsdoc@50.3.1(eslint@9.17.0(jiti@2.4.2)): dependencies: '@es-joy/jsdoccomment': 0.48.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.3.7 + debug: 4.4.0 escape-string-regexp: 4.0.0 - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) espree: 10.3.0 esquery: 1.6.0 parse-imports: 2.1.1 @@ -6815,23 +7263,23 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.16.0(eslint@9.16.0(jiti@2.4.1)): + eslint-plugin-jsonc@2.16.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.1)) - eslint: 9.16.0(jiti@2.4.1) - eslint-compat-utils: 0.5.1(eslint@9.16.0(jiti@2.4.1)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) + eslint: 9.17.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.17.0(jiti@2.4.2)) espree: 9.6.1 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 natural-compare: 1.4.0 synckit: 0.6.2 - eslint-plugin-n@17.10.2(eslint@9.16.0(jiti@2.4.1)): + eslint-plugin-n@17.10.2(eslint@9.17.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.1)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) enhanced-resolve: 5.17.1 - eslint: 9.16.0(jiti@2.4.1) - eslint-plugin-es-x: 7.8.0(eslint@9.16.0(jiti@2.4.1)) + eslint: 9.17.0(jiti@2.4.2) + eslint-plugin-es-x: 7.8.0(eslint@9.17.0(jiti@2.4.2)) get-tsconfig: 4.8.0 globals: 15.12.0 ignore: 5.3.2 @@ -6840,48 +7288,48 @@ snapshots: eslint-plugin-no-only-tests@3.3.0: {} - eslint-plugin-perfectionist@3.8.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2)(vue-eslint-parser@9.4.3(eslint@9.16.0(jiti@2.4.1))): + eslint-plugin-perfectionist@3.8.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)(vue-eslint-parser@9.4.3(eslint@9.17.0(jiti@2.4.2))): dependencies: - '@typescript-eslint/types': 8.17.0 - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) - eslint: 9.16.0(jiti@2.4.1) + '@typescript-eslint/types': 8.19.0 + '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) minimatch: 9.0.5 natural-compare-lite: 1.4.0 optionalDependencies: - vue-eslint-parser: 9.4.3(eslint@9.16.0(jiti@2.4.1)) + vue-eslint-parser: 9.4.3(eslint@9.17.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-regexp@2.6.0(eslint@9.16.0(jiti@2.4.1)): + eslint-plugin-regexp@2.6.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.1)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 comment-parser: 1.4.1 - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) jsdoc-type-pratt-parser: 4.1.0 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-toml@0.11.1(eslint@9.16.0(jiti@2.4.1)): + eslint-plugin-toml@0.11.1(eslint@9.17.0(jiti@2.4.2)): dependencies: - debug: 4.3.7 - eslint: 9.16.0(jiti@2.4.1) - eslint-compat-utils: 0.5.1(eslint@9.16.0(jiti@2.4.1)) + debug: 4.4.0 + eslint: 9.17.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.17.0(jiti@2.4.2)) lodash: 4.17.21 toml-eslint-parser: 0.10.0 transitivePeerDependencies: - supports-color - eslint-plugin-unicorn@55.0.0(eslint@9.16.0(jiti@2.4.1)): + eslint-plugin-unicorn@55.0.0(eslint@9.17.0(jiti@2.4.2)): dependencies: '@babel/helper-validator-identifier': 7.24.7 - '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.1)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) ci-info: 4.1.0 clean-regexp: 1.0.0 core-js-compat: 3.38.1 - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) esquery: 1.6.0 globals: 15.12.0 indent-string: 4.0.0 @@ -6894,41 +7342,41 @@ snapshots: semver: 7.6.3 strip-indent: 3.0.0 - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.16.0(jiti@2.4.1)): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)): dependencies: - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2))(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2) + '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) - eslint-plugin-vue@9.32.0(eslint@9.16.0(jiti@2.4.1)): + eslint-plugin-vue@9.32.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.16.0(jiti@2.4.1)) - eslint: 9.16.0(jiti@2.4.1) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.17.0(jiti@2.4.2)) + eslint: 9.17.0(jiti@2.4.2) globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.6.3 - vue-eslint-parser: 9.4.3(eslint@9.16.0(jiti@2.4.1)) + vue-eslint-parser: 9.4.3(eslint@9.17.0(jiti@2.4.2)) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color - eslint-plugin-yml@1.14.0(eslint@9.16.0(jiti@2.4.1)): + eslint-plugin-yml@1.14.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - debug: 4.3.7 - eslint: 9.16.0(jiti@2.4.1) - eslint-compat-utils: 0.5.1(eslint@9.16.0(jiti@2.4.1)) + debug: 4.4.0 + eslint: 9.17.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.17.0(jiti@2.4.2)) lodash: 4.17.21 natural-compare: 1.4.0 yaml-eslint-parser: 1.2.3 transitivePeerDependencies: - supports-color - eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.5.13)(eslint@9.16.0(jiti@2.4.1)): + eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.5.13)(eslint@9.17.0(jiti@2.4.2)): dependencies: '@vue/compiler-sfc': 3.5.13 - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) eslint-scope@7.2.2: dependencies: @@ -6944,15 +7392,15 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.16.0(jiti@2.4.1): + eslint@9.17.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.16.0(jiti@2.4.1)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.0 - '@eslint/core': 0.9.0 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.9.1 '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.16.0 - '@eslint/plugin-kit': 0.2.3 + '@eslint/js': 9.17.0 + '@eslint/plugin-kit': 0.2.4 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.1 @@ -6961,27 +7409,27 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.3.4 + debug: 4.4.0 escape-string-regexp: 4.0.0 eslint-scope: 8.2.0 eslint-visitor-keys: 4.2.0 espree: 10.3.0 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - ignore: 5.2.4 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 optionalDependencies: - jiti: 2.4.1 + jiti: 2.4.2 transitivePeerDependencies: - supports-color @@ -7021,19 +7469,7 @@ snapshots: esutils@2.0.3: {} - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - - execa@8.0.0: + execa@8.0.1: dependencies: cross-spawn: 7.0.6 get-stream: 8.0.1 @@ -7045,12 +7481,29 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 + execa@9.5.2: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.0 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.2.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.1 + external-editor@3.1.0: dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 + fast-content-type-parse@2.0.1: {} + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -7063,6 +7516,14 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} @@ -7079,6 +7540,10 @@ snapshots: fflate@0.8.2: {} + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -7127,10 +7592,13 @@ snapshots: get-east-asian-width@1.3.0: {} - get-stream@6.0.1: {} - get-stream@8.0.1: {} + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + get-tsconfig@4.8.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -7141,9 +7609,9 @@ snapshots: get-uri@6.0.4: dependencies: - basic-ftp: 5.0.3 + basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.3.7 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -7163,14 +7631,14 @@ snapshots: - conventional-commits-filter - conventional-commits-parser - git-up@7.0.0: + git-up@8.0.0: dependencies: is-ssh: 1.4.0 - parse-url: 8.1.0 + parse-url: 9.2.0 - git-url-parse@14.0.0: + git-url-parse@16.0.0: dependencies: - git-up: 7.0.0 + git-up: 8.0.0 glob-parent@5.1.2: dependencies: @@ -7201,12 +7669,14 @@ snapshots: globals@15.12.0: {} + globals@15.14.0: {} + globals@15.9.0: {} globby@14.0.2: dependencies: '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.2 + fast-glob: 3.3.3 ignore: 5.3.2 path-type: 5.0.0 slash: 5.1.0 @@ -7243,10 +7713,6 @@ snapshots: has-flag@4.0.0: {} - hasown@2.0.0: - dependencies: - function-bind: 1.1.2 - hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -7275,10 +7741,6 @@ snapshots: hosted-git-info@2.8.9: {} - hosted-git-info@7.0.1: - dependencies: - lru-cache: 10.0.1 - hosted-git-info@7.0.2: dependencies: lru-cache: 10.4.3 @@ -7287,30 +7749,26 @@ snapshots: http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.1 - debug: 4.3.7 + agent-base: 7.1.3 + debug: 4.4.0 transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.5: + https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.1 - debug: 4.3.7 + agent-base: 7.1.3 + debug: 4.4.0 transitivePeerDependencies: - supports-color - human-signals@2.1.0: {} - human-signals@5.0.0: {} + human-signals@8.0.0: {} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - ieee754@1.2.1: {} - - ignore@5.2.4: {} - ignore@5.3.2: {} import-fresh@3.3.0: @@ -7323,10 +7781,21 @@ snapshots: importx@0.4.4: dependencies: bundle-require: 5.0.0(esbuild@0.23.1) - debug: 4.3.7 + debug: 4.4.0 esbuild: 0.23.1 jiti: 2.0.0-beta.3 - jiti-v1: jiti@1.21.6 + jiti-v1: jiti@1.21.7 + pathe: 1.1.2 + tsx: 4.19.2 + transitivePeerDependencies: + - supports-color + + importx@0.5.1: + dependencies: + bundle-require: 5.1.0(esbuild@0.24.2) + debug: 4.4.0 + esbuild: 0.24.2 + jiti: 2.4.2 pathe: 1.1.2 tsx: 4.19.2 transitivePeerDependencies: @@ -7349,20 +7818,16 @@ snapshots: ini@4.1.1: {} - inquirer@9.3.2: + inquirer@12.3.0(@types/node@22.10.5): dependencies: - '@inquirer/figures': 1.0.8 + '@inquirer/core': 10.1.2(@types/node@22.10.5) + '@inquirer/prompts': 7.2.1(@types/node@22.10.5) + '@inquirer/type': 3.0.2(@types/node@22.10.5) + '@types/node': 22.10.5 ansi-escapes: 4.3.2 - cli-width: 4.1.0 - external-editor: 3.1.0 - mute-stream: 1.0.0 - ora: 5.4.1 + mute-stream: 2.0.0 run-async: 3.0.0 rxjs: 7.8.1 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 interpret@1.4.0: {} @@ -7381,11 +7846,11 @@ snapshots: dependencies: builtin-modules: 3.3.0 - is-core-module@2.13.1: + is-core-module@2.15.1: dependencies: - hasown: 2.0.0 + hasown: 2.0.2 - is-core-module@2.15.1: + is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -7412,8 +7877,6 @@ snapshots: global-directory: 4.0.1 is-path-inside: 4.0.0 - is-interactive@1.0.0: {} - is-interactive@2.0.0: {} is-npm@6.0.0: {} @@ -7424,15 +7887,15 @@ snapshots: is-path-inside@4.0.0: {} + is-plain-obj@4.1.0: {} + is-ssh@1.4.0: dependencies: protocols: 2.0.1 - is-stream@2.0.1: {} - is-stream@3.0.0: {} - is-unicode-supported@0.1.0: {} + is-stream@4.0.1: {} is-unicode-supported@1.3.0: {} @@ -7460,12 +7923,11 @@ snapshots: lodash.isstring: 4.0.1 lodash.uniqby: 4.7.0 - jiti@1.21.6: {} + jiti@1.21.7: {} jiti@2.0.0-beta.3: {} - jiti@2.4.1: - optional: true + jiti@2.4.2: {} jju@1.4.0: {} @@ -7512,7 +7974,7 @@ snapshots: kolorist@1.8.0: {} - ky@1.7.2: {} + ky@1.7.4: {} latest-version@9.0.0: dependencies: @@ -7563,20 +8025,13 @@ snapshots: lodash@4.17.21: {} - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - log-symbols@6.0.0: dependencies: - chalk: 5.3.0 + chalk: 5.4.1 is-unicode-supported: 1.3.0 longest-streak@3.1.0: {} - lru-cache@10.0.1: {} - lru-cache@10.4.3: {} lru-cache@6.0.0: @@ -7587,11 +8042,11 @@ snapshots: macos-release@3.3.0: {} - magic-string@0.30.12: + magic-string@0.30.14: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - magic-string@0.30.14: + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -7745,6 +8200,8 @@ snapshots: mdn-data@2.12.1: {} + mdn-data@2.12.2: {} + mdurl@2.0.0: {} meow@13.2.0: {} @@ -8038,7 +8495,7 @@ snapshots: micromark@4.0.0: dependencies: '@types/debug': 4.1.12 - debug: 4.3.7 + debug: 4.4.0 decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.1 @@ -8060,7 +8517,7 @@ snapshots: micromark@4.0.1: dependencies: '@types/debug': 4.1.12 - debug: 4.3.7 + debug: 4.4.0 decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.2 @@ -8090,8 +8547,6 @@ snapshots: dependencies: mime-db: 1.52.0 - mimic-fn@2.1.0: {} - mimic-fn@4.0.0: {} mimic-function@5.0.1: {} @@ -8106,10 +8561,6 @@ snapshots: dependencies: brace-expansion: 1.1.11 - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -8142,9 +8593,9 @@ snapshots: muggle-string@0.4.1: {} - mute-stream@1.0.0: {} + mute-stream@2.0.0: {} - nanoid@3.3.7: {} + nanoid@3.3.8: {} natural-compare-lite@1.4.0: {} @@ -8165,17 +8616,10 @@ snapshots: normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.8 + resolve: 1.22.10 semver: 5.7.2 validate-npm-package-license: 3.0.4 - normalize-package-data@6.0.0: - dependencies: - hosted-git-info: 7.0.1 - is-core-module: 2.13.1 - semver: 7.6.3 - validate-npm-package-license: 3.0.4 - normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 @@ -8184,13 +8628,14 @@ snapshots: normalize-path@3.0.0: {} - npm-run-path@4.0.1: + npm-run-path@5.3.0: dependencies: - path-key: 3.1.1 + path-key: 4.0.0 - npm-run-path@5.3.0: + npm-run-path@6.0.0: dependencies: path-key: 4.0.0 + unicorn-magic: 0.3.0 nth-check@2.1.1: dependencies: @@ -8208,10 +8653,6 @@ snapshots: dependencies: wrappy: 1.0.2 - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - onetime@6.0.0: dependencies: mimic-fn: 4.0.0 @@ -8239,30 +8680,18 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - optionator@0.9.3: + optionator@0.9.4: dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - - ora@8.1.0: + ora@8.1.1: dependencies: - chalk: 5.3.0 + chalk: 5.4.1 cli-cursor: 5.0.0 cli-spinners: 2.9.2 is-interactive: 2.0.0 @@ -8272,10 +8701,10 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.1.0 - os-name@5.1.0: + os-name@6.0.0: dependencies: macos-release: 3.3.0 - windows-release: 5.1.1 + windows-release: 6.0.1 os-tmpdir@1.0.2: {} @@ -8297,16 +8726,16 @@ snapshots: p-try@2.2.0: {} - pac-proxy-agent@7.0.2: + pac-proxy-agent@7.1.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.1 - debug: 4.3.7 + agent-base: 7.1.3 + debug: 4.4.0 get-uri: 6.0.4 http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 + https-proxy-agent: 7.0.6 pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.4 + socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color @@ -8317,7 +8746,7 @@ snapshots: package-json@10.0.1: dependencies: - ky: 1.7.2 + ky: 1.7.4 registry-auth-token: 5.0.3 registry-url: 6.0.1 semver: 7.6.3 @@ -8346,14 +8775,17 @@ snapshots: dependencies: '@babel/code-frame': 7.26.2 index-to-position: 0.1.2 - type-fest: 4.30.0 + type-fest: 4.31.0 + + parse-ms@4.0.0: {} parse-path@7.0.0: dependencies: protocols: 2.0.1 - parse-url@8.1.0: + parse-url@9.2.0: dependencies: + '@types/parse-path': 7.0.3 parse-path: 7.0.0 path-browserify@1.0.1: {} @@ -8372,6 +8804,8 @@ snapshots: pathe@1.1.2: {} + pathe@2.0.0: {} + perfect-debounce@1.0.0: {} picocolors@1.1.0: {} @@ -8403,7 +8837,7 @@ snapshots: postcss@8.4.49: dependencies: - nanoid: 3.3.7 + nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -8419,22 +8853,26 @@ snapshots: prettier@3.3.3: {} + pretty-ms@9.2.0: + dependencies: + parse-ms: 4.0.0 + property-information@6.5.0: {} proto-list@1.2.4: {} protocols@2.0.1: {} - proxy-agent@6.4.0: + proxy-agent@6.5.0: dependencies: - agent-base: 7.1.1 - debug: 4.3.7 + agent-base: 7.1.3 + debug: 4.4.0 http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 + https-proxy-agent: 7.0.6 lru-cache: 7.18.3 - pac-proxy-agent: 7.0.2 + pac-proxy-agent: 7.1.0 proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.4 + socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color @@ -8463,7 +8901,7 @@ snapshots: dependencies: find-up-simple: 1.0.0 read-pkg: 9.0.1 - type-fest: 4.30.0 + type-fest: 4.31.0 read-pkg-up@7.0.1: dependencies: @@ -8483,7 +8921,7 @@ snapshots: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.2 parse-json: 8.1.0 - type-fest: 4.30.0 + type-fest: 4.31.0 unicorn-magic: 0.1.0 readable-stream@1.0.34: @@ -8505,7 +8943,7 @@ snapshots: rechoir@0.6.2: dependencies: - resolve: 1.22.8 + resolve: 1.22.10 refa@0.12.1: dependencies: @@ -8530,7 +8968,7 @@ snapshots: registry-auth-token@5.0.3: dependencies: - '@pnpm/npm-conf': 2.2.2 + '@pnpm/npm-conf': 2.3.1 registry-url@6.0.1: dependencies: @@ -8540,33 +8978,35 @@ snapshots: dependencies: jsesc: 0.5.0 - release-it@17.10.0(typescript@5.7.2): + release-it@18.0.0(@types/node@22.10.5)(typescript@5.7.2): dependencies: '@iarna/toml': 2.2.5 - '@octokit/rest': 20.1.1 + '@octokit/rest': 21.0.2 async-retry: 1.3.3 - chalk: 5.3.0 + chalk: 5.4.1 ci-info: 4.1.0 cosmiconfig: 9.0.0(typescript@5.7.2) - execa: 8.0.0 - git-url-parse: 14.0.0 + execa: 9.5.2 + git-url-parse: 16.0.0 globby: 14.0.2 - inquirer: 9.3.2 + inquirer: 12.3.0(@types/node@22.10.5) issue-parser: 7.0.1 lodash: 4.17.21 mime-types: 2.1.35 new-github-release-url: 2.0.0 open: 10.1.0 - ora: 8.1.0 - os-name: 5.1.0 - proxy-agent: 6.4.0 + ora: 8.1.1 + os-name: 6.0.0 + proxy-agent: 6.5.0 semver: 7.6.3 shelljs: 0.8.5 + undici: 6.21.0 update-notifier: 7.3.1 url-join: 5.0.0 - wildcard-match: 5.1.3 + wildcard-match: 5.1.4 yargs-parser: 21.1.1 transitivePeerDependencies: + - '@types/node' - supports-color - typescript @@ -8578,17 +9018,12 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.8: + resolve@1.22.10: dependencies: - is-core-module: 2.15.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -8602,14 +9037,14 @@ snapshots: rollup-plugin-analyzer@4.0.0: {} - rollup-plugin-visualizer@5.12.0(rollup@4.28.0): + rollup-plugin-visualizer@5.13.1(rollup@4.30.0): dependencies: open: 8.4.2 - picomatch: 2.3.1 + picomatch: 4.0.2 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: - rollup: 4.28.0 + rollup: 4.30.0 rollup@4.26.0: dependencies: @@ -8635,28 +9070,29 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.26.0 fsevents: 2.3.3 - rollup@4.28.0: + rollup@4.30.0: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.28.0 - '@rollup/rollup-android-arm64': 4.28.0 - '@rollup/rollup-darwin-arm64': 4.28.0 - '@rollup/rollup-darwin-x64': 4.28.0 - '@rollup/rollup-freebsd-arm64': 4.28.0 - '@rollup/rollup-freebsd-x64': 4.28.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.28.0 - '@rollup/rollup-linux-arm-musleabihf': 4.28.0 - '@rollup/rollup-linux-arm64-gnu': 4.28.0 - '@rollup/rollup-linux-arm64-musl': 4.28.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.28.0 - '@rollup/rollup-linux-riscv64-gnu': 4.28.0 - '@rollup/rollup-linux-s390x-gnu': 4.28.0 - '@rollup/rollup-linux-x64-gnu': 4.28.0 - '@rollup/rollup-linux-x64-musl': 4.28.0 - '@rollup/rollup-win32-arm64-msvc': 4.28.0 - '@rollup/rollup-win32-ia32-msvc': 4.28.0 - '@rollup/rollup-win32-x64-msvc': 4.28.0 + '@rollup/rollup-android-arm-eabi': 4.30.0 + '@rollup/rollup-android-arm64': 4.30.0 + '@rollup/rollup-darwin-arm64': 4.30.0 + '@rollup/rollup-darwin-x64': 4.30.0 + '@rollup/rollup-freebsd-arm64': 4.30.0 + '@rollup/rollup-freebsd-x64': 4.30.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.30.0 + '@rollup/rollup-linux-arm-musleabihf': 4.30.0 + '@rollup/rollup-linux-arm64-gnu': 4.30.0 + '@rollup/rollup-linux-arm64-musl': 4.30.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.30.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.30.0 + '@rollup/rollup-linux-riscv64-gnu': 4.30.0 + '@rollup/rollup-linux-s390x-gnu': 4.30.0 + '@rollup/rollup-linux-x64-gnu': 4.30.0 + '@rollup/rollup-linux-x64-musl': 4.30.0 + '@rollup/rollup-win32-arm64-msvc': 4.30.0 + '@rollup/rollup-win32-ia32-msvc': 4.30.0 + '@rollup/rollup-win32-x64-msvc': 4.30.0 fsevents: 2.3.3 run-applescript@7.0.0: {} @@ -8714,8 +9150,6 @@ snapshots: '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 - signal-exit@3.0.7: {} - signal-exit@4.1.0: {} sirv@2.0.4: @@ -8724,6 +9158,12 @@ snapshots: mrmime: 2.0.0 totalist: 3.0.1 + sirv@3.0.0: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 + totalist: 3.0.1 + sisteransi@1.0.5: {} slash@5.1.0: {} @@ -8732,10 +9172,10 @@ snapshots: smart-buffer@4.2.0: {} - socks-proxy-agent@8.0.4: + socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.1 - debug: 4.3.7 + agent-base: 7.1.3 + debug: 4.4.0 socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -8782,10 +9222,10 @@ snapshots: stable-hash@0.0.4: {} - stats-gl@2.4.2(@types/three@0.170.0)(three@0.171.0): + stats-gl@2.4.2(@types/three@0.171.0)(three@0.172.0): dependencies: - '@types/three': 0.170.0 - three: 0.171.0 + '@types/three': 0.171.0 + three: 0.172.0 stats.js@0.17.0: {} @@ -8824,10 +9264,10 @@ snapshots: dependencies: ansi-regex: 6.1.0 - strip-final-newline@2.0.0: {} - strip-final-newline@3.0.0: {} + strip-final-newline@4.0.0: {} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 @@ -8884,25 +9324,25 @@ snapshots: tapable@2.2.1: {} - three-custom-shader-material@5.4.0(three@0.171.0): + three-custom-shader-material@5.4.0(three@0.172.0): dependencies: glsl-token-functions: 1.0.1 glsl-token-string: 1.0.1 glsl-tokenizer: 2.1.5 object-hash: 3.0.0 - three: 0.171.0 + three: 0.172.0 - three-stdlib@2.34.0(three@0.171.0): + three-stdlib@2.35.2(three@0.172.0): dependencies: - '@types/draco3d': 1.4.7 - '@types/offscreencanvas': 2019.7.2 - '@types/webxr': 0.5.7 - draco3d: 1.5.6 + '@types/draco3d': 1.4.10 + '@types/offscreencanvas': 2019.7.3 + '@types/webxr': 0.5.20 + draco3d: 1.5.7 fflate: 0.6.10 potpack: 1.0.2 - three: 0.171.0 + three: 0.172.0 - three@0.171.0: {} + three@0.172.0: {} through2@0.6.5: dependencies: @@ -8932,10 +9372,6 @@ snapshots: trim-lines@3.0.1: {} - ts-api-utils@1.4.0(typescript@5.7.2): - dependencies: - typescript: 5.7.2 - ts-api-utils@1.4.3(typescript@5.7.2): dependencies: typescript: 5.7.2 @@ -8965,7 +9401,7 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.30.0: {} + type-fest@4.31.0: {} typedarray@0.0.6: {} @@ -8988,13 +9424,25 @@ snapshots: transitivePeerDependencies: - supports-color + unconfig@0.6.0: + dependencies: + '@antfu/utils': 0.7.10 + defu: 6.1.4 + importx: 0.5.1 + transitivePeerDependencies: + - supports-color + undici-types@6.20.0: {} + undici@6.21.0: {} + unicorn-magic@0.1.0: {} - unimport@3.14.3(rollup@4.28.0): + unicorn-magic@0.3.0: {} + + unimport@3.14.3(rollup@4.30.0): dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.28.0) + '@rollup/pluginutils': 5.1.3(rollup@4.30.0) acorn: 8.14.0 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 @@ -9034,14 +9482,14 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - universal-user-agent@6.0.1: {} + universal-user-agent@7.0.2: {} universalify@0.1.2: {} - unocss@0.65.1(postcss@8.4.49)(rollup@4.28.0)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2)): + unocss@0.65.1(postcss@8.4.49)(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)): dependencies: - '@unocss/astro': 0.65.1(rollup@4.28.0)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2)) - '@unocss/cli': 0.65.1(rollup@4.28.0) + '@unocss/astro': 0.65.1(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) + '@unocss/cli': 0.65.1(rollup@4.30.0) '@unocss/core': 0.65.1 '@unocss/postcss': 0.65.1(postcss@8.4.49) '@unocss/preset-attributify': 0.65.1 @@ -9056,34 +9504,61 @@ snapshots: '@unocss/transformer-compile-class': 0.65.1 '@unocss/transformer-directives': 0.65.1 '@unocss/transformer-variant-group': 0.65.1 - '@unocss/vite': 0.65.1(rollup@4.28.0)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.7.2)) + '@unocss/vite': 0.65.1(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) + optionalDependencies: + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0) + transitivePeerDependencies: + - postcss + - rollup + - supports-color + - vue + + unocss@0.65.3(postcss@8.4.49)(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)): + dependencies: + '@unocss/astro': 0.65.3(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) + '@unocss/cli': 0.65.3(rollup@4.30.0) + '@unocss/core': 0.65.3 + '@unocss/postcss': 0.65.3(postcss@8.4.49) + '@unocss/preset-attributify': 0.65.3 + '@unocss/preset-icons': 0.65.3 + '@unocss/preset-mini': 0.65.3 + '@unocss/preset-tagify': 0.65.3 + '@unocss/preset-typography': 0.65.3 + '@unocss/preset-uno': 0.65.3 + '@unocss/preset-web-fonts': 0.65.3 + '@unocss/preset-wind': 0.65.3 + '@unocss/transformer-attributify-jsx': 0.65.3 + '@unocss/transformer-compile-class': 0.65.3 + '@unocss/transformer-directives': 0.65.3 + '@unocss/transformer-variant-group': 0.65.3 + '@unocss/vite': 0.65.3(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) optionalDependencies: - vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - postcss - rollup - supports-color - vue - unplugin-auto-import@0.18.6(@vueuse/core@12.0.0(typescript@5.7.2))(rollup@4.28.0): + unplugin-auto-import@0.18.6(@vueuse/core@12.3.0(typescript@5.7.2))(rollup@4.30.0): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.1.3(rollup@4.28.0) + '@rollup/pluginutils': 5.1.3(rollup@4.30.0) fast-glob: 3.3.2 local-pkg: 0.5.1 magic-string: 0.30.14 minimatch: 9.0.5 - unimport: 3.14.3(rollup@4.28.0) + unimport: 3.14.3(rollup@4.30.0) unplugin: 1.16.0 optionalDependencies: - '@vueuse/core': 12.0.0(typescript@5.7.2) + '@vueuse/core': 12.3.0(typescript@5.7.2) transitivePeerDependencies: - rollup - unplugin-vue-components@0.27.5(@babel/parser@7.26.2)(rollup@4.28.0)(vue@3.5.13(typescript@5.7.2)): + unplugin-vue-components@0.27.5(@babel/parser@7.26.3)(rollup@4.30.0)(vue@3.5.13(typescript@5.7.2)): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.1.3(rollup@4.28.0) + '@rollup/pluginutils': 5.1.3(rollup@4.30.0) chokidar: 3.6.0 debug: 4.3.7 fast-glob: 3.3.2 @@ -9094,7 +9569,7 @@ snapshots: unplugin: 1.16.0 vue: 3.5.13(typescript@5.7.2) optionalDependencies: - '@babel/parser': 7.26.2 + '@babel/parser': 7.26.3 transitivePeerDependencies: - rollup - supports-color @@ -9113,7 +9588,7 @@ snapshots: update-notifier@7.3.1: dependencies: boxen: 8.0.1 - chalk: 5.3.0 + chalk: 5.4.1 configstore: 7.0.0 is-in-ci: 1.0.0 is-installed-globally: 1.0.0 @@ -9148,77 +9623,77 @@ snapshots: vite-plugin-banner@0.8.0: {} - vite-plugin-css-injected-by-js@3.5.1(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1)): + vite-plugin-css-injected-by-js@3.5.1(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0)): dependencies: - vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0) - vite-plugin-dts@4.3.0(@types/node@22.10.1)(rollup@4.28.0)(typescript@5.7.2)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1)): + vite-plugin-dts@4.4.0(@types/node@22.10.5)(rollup@4.30.0)(typescript@5.7.2)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0)): dependencies: - '@microsoft/api-extractor': 7.48.0(@types/node@22.10.1) - '@rollup/pluginutils': 5.1.3(rollup@4.28.0) - '@volar/typescript': 2.4.10 - '@vue/language-core': 2.1.6(typescript@5.7.2) + '@microsoft/api-extractor': 7.48.1(@types/node@22.10.5) + '@rollup/pluginutils': 5.1.4(rollup@4.30.0) + '@volar/typescript': 2.4.11 + '@vue/language-core': 2.1.10(typescript@5.7.2) compare-versions: 6.1.1 - debug: 4.3.7 + debug: 4.4.0 kolorist: 1.8.0 - local-pkg: 0.5.0 - magic-string: 0.30.12 + local-pkg: 0.5.1 + magic-string: 0.30.17 typescript: 5.7.2 optionalDependencies: - vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-glsl@1.3.1(rollup@4.28.0)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1)): + vite-plugin-glsl@1.3.1(rollup@4.30.0)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0)): dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.28.0) - vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1) + '@rollup/pluginutils': 5.1.3(rollup@4.30.0) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0) transitivePeerDependencies: - rollup - vite-plugin-qrcode@0.2.3(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1)): + vite-plugin-qrcode@0.2.3(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0)): dependencies: qrcode-terminal: 0.12.0 - vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1) + vite: 6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0) vite-svg-loader@5.1.0(vue@3.5.13(typescript@5.7.2)): dependencies: svgo: 3.3.2 vue: 3.5.13(typescript@5.7.2) - vite@5.4.11(@types/node@22.10.1): + vite@5.4.11(@types/node@22.10.5): dependencies: esbuild: 0.21.5 postcss: 8.4.49 rollup: 4.26.0 optionalDependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.5 fsevents: 2.3.3 - vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(tsx@4.19.2)(yaml@2.6.1): + vite@6.0.7(@types/node@22.10.5)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.7.0): dependencies: - esbuild: 0.24.0 + esbuild: 0.24.2 postcss: 8.4.49 - rollup: 4.28.0 + rollup: 4.30.0 optionalDependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.5 fsevents: 2.3.3 - jiti: 2.4.1 + jiti: 2.4.2 tsx: 4.19.2 - yaml: 2.6.1 + yaml: 2.7.0 - vitepress@1.5.0(@algolia/client-search@5.15.0)(@types/node@22.10.1)(postcss@8.4.49)(search-insights@2.17.3)(typescript@5.7.2): + vitepress@1.5.0(@algolia/client-search@5.18.0)(@types/node@22.10.5)(postcss@8.4.49)(search-insights@2.17.3)(typescript@5.7.2): dependencies: '@docsearch/css': 3.8.0 - '@docsearch/js': 3.8.0(@algolia/client-search@5.15.0)(search-insights@2.17.3) + '@docsearch/js': 3.8.0(@algolia/client-search@5.18.0)(search-insights@2.17.3) '@iconify-json/simple-icons': 1.2.14 '@shikijs/core': 1.24.0 '@shikijs/transformers': 1.24.0 '@shikijs/types': 1.24.0 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.2.1(vite@5.4.11(@types/node@22.10.1))(vue@3.5.13(typescript@5.7.2)) + '@vitejs/plugin-vue': 5.2.1(vite@5.4.11(@types/node@22.10.5))(vue@3.5.13(typescript@5.7.2)) '@vue/devtools-api': 7.6.7 '@vue/shared': 3.5.13 '@vueuse/core': 11.3.0(vue@3.5.13(typescript@5.7.2)) @@ -9227,7 +9702,7 @@ snapshots: mark.js: 8.11.1 minisearch: 7.1.1 shiki: 1.24.0 - vite: 5.4.11(@types/node@22.10.1) + vite: 5.4.11(@types/node@22.10.5) vue: 3.5.13(typescript@5.7.2) optionalDependencies: postcss: 8.4.49 @@ -9265,10 +9740,10 @@ snapshots: dependencies: vue: 3.5.13(typescript@5.7.2) - vue-eslint-parser@9.4.3(eslint@9.16.0(jiti@2.4.1)): + vue-eslint-parser@9.4.3(eslint@9.17.0(jiti@2.4.2)): dependencies: debug: 4.3.4 - eslint: 9.16.0(jiti@2.4.1) + eslint: 9.17.0(jiti@2.4.2) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 @@ -9304,10 +9779,6 @@ snapshots: optionalDependencies: typescript: 5.7.2 - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - webpack-virtual-modules@0.6.2: {} when-exit@2.1.3: {} @@ -9320,11 +9791,13 @@ snapshots: dependencies: string-width: 7.2.0 - wildcard-match@5.1.3: {} + wildcard-match@5.1.4: {} - windows-release@5.1.1: + windows-release@6.0.1: dependencies: - execa: 5.1.1 + execa: 8.0.1 + + word-wrap@1.2.5: {} wordwrap@1.0.0: {} @@ -9366,7 +9839,7 @@ snapshots: yaml@2.3.2: {} - yaml@2.6.1: + yaml@2.7.0: optional: true yargs-parser@21.1.1: {} @@ -9385,4 +9858,6 @@ snapshots: yoctocolors-cjs@2.1.2: {} + yoctocolors@2.1.1: {} + zwitch@2.0.4: {} From bc54a1da5aa8e0f7c9852713c01d405b9f5eff29 Mon Sep 17 00:00:00 2001 From: andretchen0 Date: Fri, 17 Jan 2025 11:19:28 +0100 Subject: [PATCH 18/65] fix: fixes to next components and docs (#586) * docs(Environment): remove demo - page contained multiple instances of useProgress - useProgress instances interfere with one another * docs(sidebar): use data from component-list * docs: add unlisted components * docs(Environment): fix code snippet formatting * docs: remove non-existant directives from component list * docs(Backdrop): fix demo errors - TS errors - traverse and cast-shadows on null * fix(Lensflare): add THREE src * three-stdlib Lensflare is not working * use THREE examples/jsm src in the meantime * chore(Lensflare): add TODO --- docs/.vitepress/config.ts | 130 +----- .../theme/components/BackdropDemo.vue | 17 +- docs/component-list/components.ts | 17 +- docs/guide/staging/environment.md | 12 +- .../abstractions/Lensflare/LensflareImpl.ts | 407 ++++++++++++++++++ src/core/abstractions/Lensflare/component.vue | 7 +- 6 files changed, 429 insertions(+), 161 deletions(-) create mode 100644 src/core/abstractions/Lensflare/LensflareImpl.ts diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index feca1a8de..2b60d429c 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -1,5 +1,6 @@ import { resolve } from 'pathe' import { defineConfig } from 'vitepress' +import components from '../component-list/components' const whitelist = ['TresCanvas', 'TresLeches', 'TresScene'] @@ -61,134 +62,7 @@ export default defineConfig({ { text: 'Migration from v3', link: '/guide/migrating-from-v3' }, ], }, - { - text: 'Abstractions', - items: [ - { text: 'Text3D', link: '/guide/abstractions/text-3d' }, - { text: 'Levioso (Float)', link: '/guide/abstractions/levioso' }, - { text: 'useAnimations', link: '/guide/abstractions/use-animations' }, - { text: 'MouseParallax', link: '/guide/abstractions/mouse-parallax' }, - { text: 'Lensflare', link: '/guide/abstractions/lensflare' }, - { text: 'Reflector', link: '/guide/abstractions/reflector' }, - { text: 'GlobalAudio', link: '/guide/abstractions/global-audio' }, - { text: 'Fbo', link: '/guide/abstractions/fbo' }, - { text: 'useFBO', link: '/guide/abstractions/use-fbo' }, - { text: 'useSurfaceSampler', link: '/guide/abstractions/use-surface-sampler' }, - { text: 'Sampler', link: '/guide/abstractions/sampler' }, - { text: 'Edges', link: '/guide/abstractions/edges' }, - { text: 'PositionalAudio', link: '/guide/abstractions/positional-audio' }, - { text: 'AnimatedSprite', link: '/guide/abstractions/animated-sprite' }, - { text: 'MarchingCubes', link: '/guide/abstractions/marching-cubes' }, - { text: 'Mask', link: '/guide/abstractions/mask' }, - { text: 'CubeCamera', link: '/guide/abstractions/cube-camera' }, - { text: 'ScreenSizer', link: '/guide/abstractions/screen-sizer' }, - { text: 'ScreenSpace', link: '/guide/abstractions/screen-space' }, - { text: 'Outline', link: '/guide/abstractions/outline' }, - { text: 'Image', link: '/guide/abstractions/image' }, - { text: 'Billboard', link: '/guide/abstractions/billboard' }, - ], - }, - { - text: 'Controls', - items: [ - { text: 'OrbitControls', link: '/guide/controls/orbit-controls' }, - { text: 'CameraControls', link: '/guide/controls/camera-controls' }, - { text: 'TransformControls', link: '/guide/controls/transform-controls' }, - { text: 'PointerLockControls', link: '/guide/controls/pointer-lock-controls' }, - { text: 'KeyboardControls', link: '/guide/controls/keyboard-controls' }, - { text: 'ScrollControls', link: '/guide/controls/scroll-controls' }, - { text: 'MapControls', link: '/guide/controls/map-controls' }, - { text: 'Helper', link: '/guide/controls/helper' }, - ], - }, - { - text: 'Loaders', - items: [ - { text: 'useProgress', link: '/guide/loaders/use-progress' }, - { text: 'useGLTF', link: '/guide/loaders/use-gltf' }, - { text: 'GLTFModel', link: '/guide/loaders/gltf-model' }, - { text: 'useFBX', link: '/guide/loaders/use-fbx' }, - { text: 'FBXModel', link: '/guide/loaders/fbx-model' }, - { text: 'useVideoTexture', link: '/guide/loaders/use-video-texture' }, - { text: 'SVG', link: '/guide/loaders/svg' }, - ], - }, - { - text: 'Materials', - collapsed: true, - items: [ - { text: 'WobbleMaterial', link: '/guide/materials/wobble-material' }, - { text: 'MeshGlassMaterial', link: '/guide/materials/glass-material' }, - { text: 'CustomShaderMaterial', link: '/guide/materials/custom-shader-material' }, - { text: 'MeshReflectionMaterial', link: '/guide/materials/mesh-reflection-material' }, - { text: 'PointMaterial', link: '/guide/materials/point-material' }, - { text: 'MeshDiscardMaterial', link: '/guide/materials/mesh-discard-material' }, - ], - }, - { - text: 'Shapes', - collapsed: true, - items: [ - { text: 'Box', link: '/guide/shapes/box' }, - { text: 'CatmullRomCurve3', link: '/guide/shapes/catmullromcurve3' }, - { text: 'Circle', link: '/guide/shapes/circle' }, - { text: 'Cone', link: '/guide/shapes/cone' }, - { text: 'CubicBezierLine', link: '/guide/shapes/cubic-bezier-line' }, - { text: 'Cylinder', link: '/guide/shapes/cylinder' }, - { text: 'Dodecahedron', link: '/guide/shapes/dodecahedron' }, - { text: 'Icosahedron', link: '/guide/shapes/icosahedron' }, - { text: 'Line2', link: '/guide/shapes/line2' }, - { text: 'Octahedron', link: '/guide/shapes/octahedron' }, - { text: 'Plane', link: '/guide/shapes/plane' }, - { text: 'QuadraticBezierLine', link: '/guide/shapes/quadratic-bezier-line' }, - { text: 'Ring', link: '/guide/shapes/ring' }, - { text: 'RoundedBox', link: '/guide/shapes/rounded-box' }, - { text: 'ScreenQuad', link: '/guide/shapes/screen-quad' }, - { text: 'Sphere', link: '/guide/shapes/sphere' }, - { text: 'Superformula', link: '/guide/shapes/superformula' }, - { text: 'Tetrahedron', link: '/guide/shapes/tetrahedron' }, - { text: 'Torus', link: '/guide/shapes/torus' }, - { text: 'TorusKnot', link: '/guide/shapes/torus-knot' }, - { text: 'Tube', link: '/guide/shapes/tube' }, - ], - }, - { - text: 'Staging', - items: [ - { text: 'Backdrop', link: '/guide/staging/backdrop' }, - { text: 'Environment', link: '/guide/staging/environment' }, - { text: 'useEnvironment', link: '/guide/staging/use-environment' }, - { text: 'Sky', link: '/guide/staging/sky' }, - { text: 'Stars', link: '/guide/staging/stars' }, - { text: 'Smoke', link: '/guide/staging/smoke' }, - { text: 'AccumulativeShadows', link: '/guide/staging/accumulative-shadows' }, - { text: 'ContactShadows', link: '/guide/staging/contact-shadows' }, - { text: 'Precipitation', link: '/guide/staging/precipitation' }, - { text: 'Sparkles', link: '/guide/staging/sparkles' }, - { text: 'Ocean', link: '/guide/staging/ocean' }, - { text: 'Align', link: '/guide/staging/align' }, - { text: 'SoftShadows', link: '/guide/staging/soft-shadows' }, - { text: 'Grid', link: '/guide/staging/grid' }, - { text: 'CircleShadow', link: '/guide/staging/circle-shadow' }, - { text: 'Bounds', link: '/guide/staging/bounds' }, - { text: 'RandomizedLights', link: '/guide/staging/randomized-lights' }, - { text: 'Bounds', link: '/guide/staging/bounds' }, - { text: 'Stage', link: '/guide/staging/stage' }, - ], - }, - { - text: 'Misc', - collapsed: true, - items: [ - { text: 'Stats', link: '/guide/misc/stats' }, - { text: 'Html', link: '/guide/misc/html-component' }, - { text: 'StatsGl', link: '/guide/misc/stats-gl' }, - { text: 'useGLTFExporter', link: '/guide/misc/use-gltf-exporter' }, - { text: 'BakeShadows', link: '/guide/misc/bake-shadows' }, - { text: 'useIntersect', link: '/guide/misc/use-intersect' }, - { text: 'LOD', link: '/guide/misc/lod' }, - ], - }, + ...components, ], socialLinks: [ diff --git a/docs/.vitepress/theme/components/BackdropDemo.vue b/docs/.vitepress/theme/components/BackdropDemo.vue index 4c2bc3114..f1e414754 100644 --- a/docs/.vitepress/theme/components/BackdropDemo.vue +++ b/docs/.vitepress/theme/components/BackdropDemo.vue @@ -1,9 +1,9 @@ + ``` ### Props for Lightformer diff --git a/src/core/abstractions/Lensflare/LensflareImpl.ts b/src/core/abstractions/Lensflare/LensflareImpl.ts new file mode 100644 index 000000000..3927443c0 --- /dev/null +++ b/src/core/abstractions/Lensflare/LensflareImpl.ts @@ -0,0 +1,407 @@ +/* eslint-disable style/no-tabs */ +import type { + Texture, + TextureDataType, +} from 'three' +import { + AdditiveBlending, + Box2, + BufferGeometry, + Color, + FramebufferTexture, + InterleavedBuffer, + InterleavedBufferAttribute, + Mesh, + MeshBasicMaterial, + RawShaderMaterial, + UnsignedByteType, + Vector2, + Vector3, + Vector4, +} from 'three' + +class Lensflare extends Mesh { + static Geometry: BufferGeometry + isLensflare = true + type = 'Lensflare' + + addElement(_: LensflareElement) {} + dispose() {} + + constructor() { + super(Lensflare.Geometry, new MeshBasicMaterial({ opacity: 0, transparent: true })) + + this.frustumCulled = false + this.renderOrder = Infinity + + // + + const positionScreen = new Vector3() + const positionView = new Vector3() + + // textures + + const tempMap = new FramebufferTexture(16, 16) + const occlusionMap = new FramebufferTexture(16, 16) + + let currentType: TextureDataType = UnsignedByteType + + // material + + const geometry = Lensflare.Geometry + + const material1a = new RawShaderMaterial({ + uniforms: { + scale: { value: null }, + screenPosition: { value: null }, + }, + vertexShader: /* glsl */` + + precision highp float; + + uniform vec3 screenPosition; + uniform vec2 scale; + + attribute vec3 position; + + void main() { + + gl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 ); + + }`, + + fragmentShader: /* glsl */` + + precision highp float; + + void main() { + + gl_FragColor = vec4( 1.0, 0.0, 1.0, 1.0 ); + + }`, + depthTest: true, + depthWrite: false, + transparent: false, + }) + + const material1b = new RawShaderMaterial({ + uniforms: { + map: { value: tempMap }, + scale: { value: null }, + screenPosition: { value: null }, + }, + vertexShader: /* glsl */` + + precision highp float; + + uniform vec3 screenPosition; + uniform vec2 scale; + + attribute vec3 position; + attribute vec2 uv; + + varying vec2 vUV; + + void main() { + + vUV = uv; + + gl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 ); + + }`, + + fragmentShader: /* glsl */` + + precision highp float; + + uniform sampler2D map; + + varying vec2 vUV; + + void main() { + + gl_FragColor = texture2D( map, vUV ); + + }`, + depthTest: false, + depthWrite: false, + transparent: false, + }) + + // the following object is used for occlusionMap generation + + const mesh1 = new Mesh(geometry, material1a) + + // + + const elements: LensflareElement[] = [] + + const shader = LensflareElement.Shader + + const material2 = new RawShaderMaterial({ + name: shader.name, + uniforms: { + map: { value: null }, + occlusionMap: { value: occlusionMap }, + color: { value: new Color(0xFFFFFF) }, + scale: { value: new Vector2() }, + screenPosition: { value: new Vector3() }, + }, + vertexShader: shader.vertexShader, + fragmentShader: shader.fragmentShader, + blending: AdditiveBlending, + transparent: true, + depthWrite: false, + }) + + const mesh2 = new Mesh(geometry, material2) + + this.addElement = function (element) { + elements.push(element) + } + + // + + const scale = new Vector2() + const screenPositionPixels = new Vector2() + const validArea = new Box2() + const viewport = new Vector4() + + this.onBeforeRender = function (renderer, scene, camera) { + renderer.getCurrentViewport(viewport) + + const renderTarget = renderer.getRenderTarget() + const type: TextureDataType = ((renderTarget !== null) ? renderTarget.texture.type : UnsignedByteType) + + if (currentType !== type) { + tempMap.dispose() + occlusionMap.dispose() + + tempMap.type = occlusionMap.type = type + + currentType = type + } + + const invAspect = viewport.w / viewport.z + const halfViewportWidth = viewport.z / 2.0 + const halfViewportHeight = viewport.w / 2.0 + + let size = 16 / viewport.w + scale.set(size * invAspect, size) + + validArea.min.set(viewport.x, viewport.y) + validArea.max.set(viewport.x + (viewport.z - 16), viewport.y + (viewport.w - 16)) + + // calculate position in screen space + + positionView.setFromMatrixPosition(this.matrixWorld) + positionView.applyMatrix4(camera.matrixWorldInverse) + + if (positionView.z > 0) { return } // lensflare is behind the camera + + positionScreen.copy(positionView).applyMatrix4(camera.projectionMatrix) + + // horizontal and vertical coordinate of the lower left corner of the pixels to copy + + screenPositionPixels.x = viewport.x + (positionScreen.x * halfViewportWidth) + halfViewportWidth - 8 + screenPositionPixels.y = viewport.y + (positionScreen.y * halfViewportHeight) + halfViewportHeight - 8 + + // screen cull + + if (validArea.containsPoint(screenPositionPixels)) { + // save current RGB to temp texture + + renderer.copyFramebufferToTexture(tempMap, screenPositionPixels) + + // render pink quad + + let uniforms = material1a.uniforms + uniforms.scale.value = scale + uniforms.screenPosition.value = positionScreen + + // @ts-expect-error - allow null, `scene` is not needed + renderer.renderBufferDirect(camera, null, geometry, material1a, mesh1, null) + + // copy result to occlusionMap + + renderer.copyFramebufferToTexture(occlusionMap, screenPositionPixels) + + // restore graphics + + uniforms = material1b.uniforms + uniforms.scale.value = scale + uniforms.screenPosition.value = positionScreen + + // @ts-expect-error - allow null, `scene` is not needed + renderer.renderBufferDirect(camera, null, geometry, material1b, mesh1, null) + + // render elements + + const vecX = -positionScreen.x * 2 + const vecY = -positionScreen.y * 2 + + for (let i = 0, l = elements.length; i < l; i++) { + const element = elements[i] + + const uniforms = material2.uniforms + + uniforms.color.value.copy(element.color) + uniforms.map.value = element.texture + uniforms.screenPosition.value.x = positionScreen.x + vecX * element.distance + uniforms.screenPosition.value.y = positionScreen.y + vecY * element.distance + + size = element.size / viewport.w + const invAspect = viewport.w / viewport.z + + uniforms.scale.value.set(size * invAspect, size) + + material2.uniformsNeedUpdate = true + + // @ts-expect-error - allow null, `scene` is not needed + renderer.renderBufferDirect(camera, null, geometry, material2, mesh2, null) + } + } + } + + this.dispose = function () { + material1a.dispose() + material1b.dispose() + material2.dispose() + + tempMap.dispose() + occlusionMap.dispose() + + for (let i = 0, l = elements.length; i < l; i++) { + elements[i].texture.dispose() + } + } + } +} + +// + +class LensflareElement { + texture: Texture + size: number + distance: number + color: Color + static Shader: { name: string, vertexShader: string, fragmentShader: string, uniforms: Record } + + constructor(texture: Texture, size = 1, distance = 0, color = new Color(0xFFFFFF)) { + this.texture = texture + this.size = size + this.distance = distance + this.color = color + } +} + +LensflareElement.Shader = { + + name: 'LensflareElementShader', + + uniforms: { + + map: { value: null }, + occlusionMap: { value: null }, + color: { value: null }, + scale: { value: null }, + screenPosition: { value: null }, + + }, + + vertexShader: /* glsl */` + + precision highp float; + + uniform vec3 screenPosition; + uniform vec2 scale; + + uniform sampler2D occlusionMap; + + attribute vec3 position; + attribute vec2 uv; + + varying vec2 vUV; + varying float vVisibility; + + void main() { + + vUV = uv; + + vec2 pos = position.xy; + + vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) ); + visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) ); + visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) ); + visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) ); + visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) ); + visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) ); + visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) ); + visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) ); + visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) ); + + vVisibility = visibility.r / 9.0; + vVisibility *= 1.0 - visibility.g / 9.0; + vVisibility *= visibility.b / 9.0; + + gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 ); + + }`, + + fragmentShader: /* glsl */` + + precision highp float; + + uniform sampler2D map; + uniform vec3 color; + + varying vec2 vUV; + varying float vVisibility; + + void main() { + + vec4 texture = texture2D( map, vUV ); + texture.a *= vVisibility; + gl_FragColor = texture; + gl_FragColor.rgb *= color; + + }`, + +} + +Lensflare.Geometry = (function () { + const geometry = new BufferGeometry() + + const float32Array = new Float32Array([ + -1, + -1, + 0, + 0, + 0, + 1, + -1, + 0, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + -1, + 1, + 0, + 0, + 1, + ]) + + const interleavedBuffer = new InterleavedBuffer(float32Array, 5) + + geometry.setIndex([0, 1, 2, 0, 2, 3]) + geometry.setAttribute('position', new InterleavedBufferAttribute(interleavedBuffer, 3, 0, false)) + geometry.setAttribute('uv', new InterleavedBufferAttribute(interleavedBuffer, 2, 3, false)) + + return geometry +})() + +export { Lensflare, LensflareElement } diff --git a/src/core/abstractions/Lensflare/component.vue b/src/core/abstractions/Lensflare/component.vue index 9668e32ac..af84d5fd2 100644 --- a/src/core/abstractions/Lensflare/component.vue +++ b/src/core/abstractions/Lensflare/component.vue @@ -1,7 +1,12 @@ @@ -26,10 +19,10 @@ watchEffect(() => { :speed="4" > - diff --git a/docs/.vitepress/theme/components/GLTFModelDemo.vue b/docs/.vitepress/theme/components/GLTFModelDemo.vue index bb8917711..5d1a73b46 100644 --- a/docs/.vitepress/theme/components/GLTFModelDemo.vue +++ b/docs/.vitepress/theme/components/GLTFModelDemo.vue @@ -7,9 +7,7 @@ import { TresCanvas } from '@tresjs/core' - - - + import { HolographicMaterial, Levioso, OrbitControls, useGLTF } from '@tresjs/cientos' +import type { TresObject } from '@tresjs/core' import { TresCanvas } from '@tresjs/core' import { shallowRef, watch } from 'vue' const path = 'https://raw.githubusercontent.com/' + 'Tresjs/assets/main/models/gltf/aku-aku/AkuAku.gltf' -const { scene } = await useGLTF(path) +const { state } = useGLTF(path) const holographicMaterialRef = shallowRef() watch(holographicMaterialRef, (value) => { - scene.traverse((child) => { + state.value?.scene?.traverse((child: TresObject) => { if (child.isMesh) { child.material.dispose() child.material = value.root @@ -24,7 +25,8 @@ watch(holographicMaterialRef, (value) => { diff --git a/docs/.vitepress/theme/components/HtmlDemo.vue b/docs/.vitepress/theme/components/HtmlDemo.vue index ffb9766e5..fccaee61a 100644 --- a/docs/.vitepress/theme/components/HtmlDemo.vue +++ b/docs/.vitepress/theme/components/HtmlDemo.vue @@ -2,15 +2,9 @@ import { Html, OrbitControls } from '@tresjs/cientos' import { TresCanvas } from '@tresjs/core' -import { BasicShadowMap, NoToneMapping, SRGBColorSpace } from 'three' - const gl = { clearColor: '#82DBC5', shadows: true, - alpha: false, - shadowMapType: BasicShadowMap, - outputColorSpace: SRGBColorSpace, - toneMapping: NoToneMapping, } diff --git a/docs/.vitepress/theme/components/HtmlLaptopDemo.vue b/docs/.vitepress/theme/components/HtmlLaptopDemo.vue index a73da6402..c4987b2ed 100644 --- a/docs/.vitepress/theme/components/HtmlLaptopDemo.vue +++ b/docs/.vitepress/theme/components/HtmlLaptopDemo.vue @@ -2,19 +2,13 @@ import { ContactShadows, Html, OrbitControls, useGLTF } from '@tresjs/cientos' import { TresCanvas } from '@tresjs/core' -import { BasicShadowMap, NoToneMapping, SRGBColorSpace } from 'three' - const gl = { clearColor: '#241a1a', shadows: true, - alpha: false, - shadowMapType: BasicShadowMap, - outputColorSpace: SRGBColorSpace, - toneMapping: NoToneMapping, } -const { nodes } - = await useGLTF('https://vazxmixjsiawhamofees.supabase.co/storage/v1/object/public/models/macbook/model.gltf', { draco: true }) +const { state } + = useGLTF('https://vazxmixjsiawhamofees.supabase.co/storage/v1/object/public/models/macbook/model.gltf', { draco: true })