diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts
index f332b3292..af6d9b50e 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' },
],
},
{
@@ -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' },
],
},
{
@@ -119,7 +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: 'MeshDiscardMaterial', link: '/guide/materials/mesh-discard-material' }, */
+ { text: 'MeshDiscardMaterial', link: '/guide/materials/mesh-discard-material' },
],
},
{
@@ -159,9 +160,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/.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 bc0f235f7..02f72ca98 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' },
],
},
{
@@ -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' },
],
},
{
@@ -66,10 +67,10 @@ export default [
text: 'HolographicMaterial',
link: '/guide/materials/holographic-material',
},
- /* {
+ {
text: 'MeshDiscardMaterial',
link: '/guide/materials/mesh-discard-material',
- }, */
+ },
],
},
{
@@ -109,9 +110,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' },
],
},
{
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/pages/shapes/Line2Demo.vue b/playground/vue/src/pages/shapes/Line2Demo.vue
index 53799a133..2d03c4e2a 100644
--- a/playground/vue/src/pages/shapes/Line2Demo.vue
+++ b/playground/vue/src/pages/shapes/Line2Demo.vue
@@ -1,10 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
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/pnpm-lock.yaml b/pnpm-lock.yaml
index 8d20a8ebd..43166a7a4 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -318,8 +318,8 @@ packages:
resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.24.7':
- resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==}
+ '@babel/helper-validator-identifier@7.22.20':
+ resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.25.9':
@@ -384,13 +384,17 @@ packages:
'@dprint/markdown@0.17.8':
resolution: {integrity: sha512-ukHFOg+RpG284aPdIg7iPrCYmMs3Dqy43S1ejybnwlJoFiW02b+6Bbr5cfZKFRYNP3dKGM86BqHEnMzBOyLvvA==}
- '@dprint/toml@0.6.2':
- resolution: {integrity: sha512-Mk5unEANsL/L+WHYU3NpDXt1ARU5bNU5k5OZELxaJodDycKG6RoRnSlZXpW6+7UN2PSnETAFVUdKrh937ZwtHA==}
+ '@dprint/toml@0.6.3':
+ resolution: {integrity: sha512-zQ42I53sb4WVHA+5yoY1t59Zk++Ot02AvUgtNKLzTT8mPyVqVChFcePa3on/xIoKEgH+RoepgPHzqfk9837YFw==}
'@es-joy/jsdoccomment@0.48.0':
resolution: {integrity: sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==}
engines: {node: '>=16'}
+ '@es-joy/jsdoccomment@0.49.0':
+ resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==}
+ engines: {node: '>=16'}
+
'@esbuild/aix-ppc64@0.21.5':
resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
engines: {node: '>=12'}
@@ -843,9 +847,18 @@ packages:
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/compat@1.1.1':
- resolution: {integrity: sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==}
+ '@eslint-community/regexpp@4.12.1':
+ resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/compat@1.2.2':
+ resolution: {integrity: sha512-jhgiIrsw+tRfcBQ4BFl2C3vCrIUw2trCY0cnDvGZpwTtKCEDmZhAtMfrEUP/KpnwM6PrO0T+Ltm+ccW74olG3Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^9.10.0
+ peerDependenciesMeta:
+ eslint:
+ optional: true
'@eslint/config-array@0.19.0':
resolution: {integrity: sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==}
@@ -863,8 +876,8 @@ packages:
resolution: {integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/markdown@6.1.1':
- resolution: {integrity: sha512-Z+1js5AeqidwhNBbnIPM6Fn4eY9D5i1NleamS0UBW6BG0J4lpvhIVOKVIi22kmH5gvxDmHUp5MHkkkjda0TehA==}
+ '@eslint/markdown@6.2.1':
+ resolution: {integrity: sha512-cKVd110hG4ICHmWhIwZJfKmmJBvbiDWyrHODJknAtudKgZtlROGoLX9UEOA0o746zC0hCY4UV4vR+aOGW9S6JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.4':
@@ -919,14 +932,17 @@ packages:
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
- '@jridgewell/resolve-uri@3.1.2':
- resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ '@jridgewell/resolve-uri@3.1.1':
+ resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
engines: {node: '>=6.0.0'}
'@jridgewell/set-array@1.2.1':
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
engines: {node: '>=6.0.0'}
+ '@jridgewell/sourcemap-codec@1.4.15':
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+
'@jridgewell/sourcemap-codec@1.5.0':
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
@@ -1268,8 +1284,8 @@ packages:
resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==}
engines: {node: '>=18'}
- '@stylistic/eslint-plugin@2.8.0':
- resolution: {integrity: sha512-Ufvk7hP+bf+pD35R/QfunF793XlSRIC7USr3/EdgduK9j13i2JjmsM0LUz3/foS+jDYp2fzyWZA9N44CPur0Ow==}
+ '@stylistic/eslint-plugin@2.10.1':
+ resolution: {integrity: sha512-U+4yzNXElTf9q0kEfnloI9XbOyD4cnEQCxjUI94q0+W++0GAEQvJ/slwEj9lwjDHfGADRSr+Tco/z0XJvmDfCQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: '>=8.40.0'
@@ -1354,14 +1370,17 @@ packages:
'@types/three@0.170.0':
resolution: {integrity: sha512-CUm2uckq+zkCY7ZbFpviRttY+6f9fvwm6YqSqPfA5K22s9w7R4VnA3rzJse8kHVvuzLcTx+CjNCs2NYe0QFAyg==}
+ '@types/unist@2.0.8':
+ resolution: {integrity: sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==}
+
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
'@types/web-bluetooth@0.0.20':
resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
- '@types/webxr@0.5.20':
- resolution: {integrity: sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==}
+ '@types/webxr@0.5.7':
+ resolution: {integrity: sha512-Rcgs5c2eNFnHp53YOjgtKfl/zWX1Y+uFGUwlSXrWcZWu3yhANRezmph4MninmqybUYT6g9ZE0aQ9QIdPkLR3Kg==}
'@types/webxr@0.5.7':
resolution: {integrity: sha512-Rcgs5c2eNFnHp53YOjgtKfl/zWX1Y+uFGUwlSXrWcZWu3yhANRezmph4MninmqybUYT6g9ZE0aQ9QIdPkLR3Kg==}
@@ -1521,16 +1540,14 @@ packages:
vite: ^5.0.0 || ^6.0.0
vue: ^3.2.25
- '@vitest/eslint-plugin@1.1.4':
- resolution: {integrity: sha512-kudjgefmJJ7xQ2WfbUU6pZbm7Ou4gLYRaao/8Ynide3G0QhVKHd978sDyWX4KOH0CCMH9cyrGAkFd55eGzJ48Q==}
+ '@vitest/eslint-plugin@1.1.10':
+ resolution: {integrity: sha512-uScH5Kz5v32vvtQYB2iodpoPg2mGASK+VKpjlc2IUgE0+16uZKqVKi2vQxjxJ6sMCQLBs4xhBFZlmZBszsmfKQ==}
peerDependencies:
'@typescript-eslint/utils': '>= 8.0'
eslint: '>= 8.57.0'
typescript: '>= 5.0.0'
vitest: '*'
peerDependenciesMeta:
- '@typescript-eslint/utils':
- optional: true
typescript:
optional: true
vitest:
@@ -1706,8 +1723,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.0:
+ resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==}
engines: {node: '>= 14'}
ajv-draft-04@1.0.0:
@@ -1753,8 +1770,8 @@ packages:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
- ansi-regex@6.1.0:
- resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ ansi-regex@6.0.1:
+ resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
engines: {node: '>=12'}
ansi-styles@4.3.0:
@@ -1805,8 +1822,8 @@ packages:
before-after-hook@2.2.3:
resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
- binary-extensions@2.3.0:
- resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ binary-extensions@2.2.0:
+ resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
engines: {node: '>=8'}
birpc@0.2.19:
@@ -1828,12 +1845,12 @@ packages:
brace-expansion@2.0.1:
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
- braces@3.0.3:
- resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
engines: {node: '>=8'}
- browserslist@4.23.3:
- resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==}
+ browserslist@4.24.2:
+ resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
@@ -1874,8 +1891,8 @@ packages:
peerDependencies:
three: '>=0.126.1'
- caniuse-lite@1.0.30001658:
- resolution: {integrity: sha512-N2YVqWbJELVdrnsW5p+apoQyYt51aBMSsBZki1XZEfeBCexcM/sf4xiAHcXQBkuOwJBXtWF7aW1sYX6tKebPHw==}
+ caniuse-lite@1.0.30001680:
+ resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -1924,6 +1941,10 @@ packages:
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
engines: {node: '>=18'}
+ cli-spinners@2.9.1:
+ resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==}
+ engines: {node: '>=6'}
+
cli-spinners@2.9.2:
resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
@@ -1977,9 +1998,6 @@ packages:
resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==}
engines: {'0': node >= 6.0}
- confbox@0.1.7:
- resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==}
-
confbox@0.1.8:
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
@@ -2065,8 +2083,8 @@ packages:
resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
engines: {node: '>=12.13'}
- core-js-compat@3.38.1:
- resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==}
+ core-js-compat@3.39.0:
+ resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==}
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
@@ -2112,11 +2130,14 @@ packages:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+ csstype@3.1.2:
+ resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
+
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
- data-uri-to-buffer@6.0.2:
- resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==}
+ data-uri-to-buffer@6.0.1:
+ resolution: {integrity: sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==}
engines: {node: '>= 14'}
de-indent@1.0.2:
@@ -2228,8 +2249,8 @@ packages:
duplexer@0.1.2:
resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
- electron-to-chromium@1.5.17:
- resolution: {integrity: sha512-Q6Q+04tjC2KJ8qsSOSgovvhWcv5t+SmpH6/YfAWmhpE5/r+zw6KQy1/yWVFFNyEBvy68twTTXr2d5eLfCq7QIw==}
+ electron-to-chromium@1.5.57:
+ resolution: {integrity: sha512-xS65H/tqgOwUBa5UmOuNSLuslDo7zho0y/lgQw35pnrqiZh7UOWHCeL/Bt6noJATbA6tpQJGCifsFsIRZj1Fqg==}
emoji-regex-xs@1.0.0:
resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==}
@@ -2308,6 +2329,12 @@ packages:
peerDependencies:
eslint: '>=6.0.0'
+ eslint-compat-utils@0.6.0:
+ resolution: {integrity: sha512-1vVBdI/HLS6HTHVQCJGlN+LOF0w1Rs/WB9se23mQr84cRM0iMM8PulMFFhQdQ1BvS0cGwjpis4xziI91Rk0l6g==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ eslint: '>=6.0.0'
+
eslint-config-flat-gitignore@0.3.0:
resolution: {integrity: sha512-0Ndxo4qGhcewjTzw52TK06Mc00aDtHNTdeeW2JfONgDcLkRO/n/BteMRzNVpLQYxdCC/dFEilfM9fjjpGIJ9Og==}
peerDependencies:
@@ -2324,6 +2351,17 @@ packages:
eslint-import-resolver-node@0.3.9:
resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
+ eslint-json-compat-utils@0.2.1:
+ resolution: {integrity: sha512-YzEodbDyW8DX8bImKhAcCeu/L31Dd/70Bidx2Qex9OFUtgzXLqtfWL4Hr5fM/aCCB8QUZLuJur0S9k6UfgFkfg==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ '@eslint/json': '*'
+ eslint: '*'
+ jsonc-eslint-parser: ^2.4.0
+ peerDependenciesMeta:
+ '@eslint/json':
+ optional: true
+
eslint-merge-processors@0.1.0:
resolution: {integrity: sha512-IvRXXtEajLeyssvW4wJcZ2etxkR9mUf4zpNwgI+m/Uac9RfXHskuJefkHUcawVzePnd6xp24enp5jfgdHzjRdQ==}
peerDependencies:
@@ -2353,26 +2391,26 @@ packages:
peerDependencies:
eslint: ^8.40.0 || ^9.0.0
- eslint-plugin-import-x@4.2.1:
- resolution: {integrity: sha512-WWi2GedccIJa0zXxx3WDnTgouGQTtdYK1nhXMwywbqqAgB0Ov+p1pYBsWh3VaB0bvBOwLse6OfVII7jZD9xo5Q==}
+ eslint-plugin-import-x@4.4.2:
+ resolution: {integrity: sha512-mDRXPSLQ0UQZQw91QdG4/qZT6hgeW2MJTczAbgPseUZuPEtIjjdPOolXroRkulnOn3fzj6gNgvk+wchMJiHElg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
- eslint-plugin-jsdoc@50.3.1:
- resolution: {integrity: sha512-SY9oUuTMr6aWoJggUS40LtMjsRzJPB5ZT7F432xZIHK3EfHF+8i48GbUBpwanrtlL9l1gILNTHK9o8gEhYLcKA==}
+ eslint-plugin-jsdoc@50.5.0:
+ resolution: {integrity: sha512-xTkshfZrUbiSHXBwZ/9d5ulZ2OcHXxSvm/NPo494H/hadLRJwOq5PMV0EUpMqsb9V+kQo+9BAgi6Z7aJtdBp2A==}
engines: {node: '>=18'}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
- eslint-plugin-jsonc@2.16.0:
- resolution: {integrity: sha512-Af/ZL5mgfb8FFNleH6KlO4/VdmDuTqmM+SPnWcdoWywTetv7kq+vQe99UyQb9XO3b0OWLVuTH7H0d/PXYCMdSg==}
+ eslint-plugin-jsonc@2.18.1:
+ resolution: {integrity: sha512-6qY8zDpxOwPQNcr8eZ+RxwGX6IPHws5/Qef7aBEjER8rB9+UMB6zQWVIVcbP7xzFmEMHAesNFPe/sIlU4c78dg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: '>=6.0.0'
- eslint-plugin-n@17.10.2:
- resolution: {integrity: sha512-e+s4eAf5NtJaxPhTNu3qMO0Iz40WANS93w9LQgYcvuljgvDmWi/a3rh+OrNyMHeng6aOWGJO0rCg5lH4zi8yTw==}
+ eslint-plugin-n@17.13.1:
+ resolution: {integrity: sha512-97qzhk1z3DdSJNCqT45EslwCu5+LB9GDadSyBItgKUfGsXAmN/aa7LRQ0ZxHffUxUzvgbTPJL27/pE9ZQWHy7A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: '>=8.23.0'
@@ -2381,8 +2419,8 @@ packages:
resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==}
engines: {node: '>=5.0.0'}
- eslint-plugin-perfectionist@3.8.0:
- resolution: {integrity: sha512-BYJWbQVOjvIGK9V1xUfn790HuvkePjxti8epOi1H6sdzo0N4RehBmQ8coHPbgA/f12BUG1NIoDtQhI9mUm+o2A==}
+ eslint-plugin-perfectionist@3.9.1:
+ resolution: {integrity: sha512-9WRzf6XaAxF4Oi5t/3TqKP5zUjERhasHmLFHin2Yw6ZAp/EP/EVA2dr3BhQrrHWCm5SzTMZf0FcjDnBkO2xFkA==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
astro-eslint-parser: ^1.0.2
@@ -2433,8 +2471,8 @@ packages:
peerDependencies:
eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
- eslint-plugin-yml@1.14.0:
- resolution: {integrity: sha512-ESUpgYPOcAYQO9czugcX5OqRvn/ydDVwGCPXY4YjPqc09rHaUVUA6IE6HLQys4rXk/S+qx3EwTd1wHCwam/OWQ==}
+ eslint-plugin-yml@1.15.0:
+ resolution: {integrity: sha512-leC8APYVOsKyWUlvRwVhewytK5wS70BfMqIaUplFstRfzCoVp0YoEroV4cUEvQrBj93tQ3M9LcjO/ewr6D4kjA==}
engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: '>=6.0.0'
@@ -2538,8 +2576,8 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- fastq@1.17.1:
- resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
+ fastq@1.15.0:
+ resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
fdir@6.4.2:
resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==}
@@ -2559,8 +2597,8 @@ packages:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
- fill-range@7.1.1:
- resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
engines: {node: '>=8'}
find-up-simple@1.0.0:
@@ -2589,6 +2627,10 @@ packages:
resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
engines: {node: '>=6 <7 || >=8'}
+ fs-extra@8.1.0:
+ resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
+ engines: {node: '>=6 <7 || >=8'}
+
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@@ -2616,8 +2658,8 @@ packages:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
- get-tsconfig@4.8.0:
- resolution: {integrity: sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==}
+ get-tsconfig@4.8.1:
+ resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==}
get-tsconfig@4.8.1:
resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==}
@@ -2823,9 +2865,11 @@ packages:
resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==}
engines: {node: '>= 0.10'}
- ip-address@9.0.5:
- resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==}
- engines: {node: '>= 12'}
+ ip@1.1.8:
+ resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==}
+
+ ip@2.0.0:
+ resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==}
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
@@ -2975,9 +3019,6 @@ packages:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
- jsbn@1.1.0:
- resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
-
jsdoc-type-pratt-parser@4.1.0:
resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==}
engines: {node: '>=12.0.0'}
@@ -3010,6 +3051,9 @@ packages:
resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ jsonc-parser@3.2.0:
+ resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
+
jsonfile@4.0.0:
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
@@ -3104,8 +3148,8 @@ packages:
resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
engines: {node: '>=12'}
- macos-release@3.3.0:
- resolution: {integrity: sha512-tPJQ1HeyiU2vRruNGhZ+VleWuMQRro8iFtJxYgnS4NQe+EukKF6aGiIT+7flZhISAt2iaXBCfFGvAyif7/f8nQ==}
+ macos-release@3.2.0:
+ resolution: {integrity: sha512-fSErXALFNsnowREYZ49XCdOHF8wOPWuFOGQrAhP7x5J/BqQv+B02cNsTykGpDgRVx43EKg++6ANmTaGTtW+hUA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
magic-string@0.30.12:
@@ -3216,8 +3260,8 @@ packages:
micromark-extension-gfm@3.0.0:
resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
- micromark-factory-destination@2.0.0:
- resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==}
+ micromark-factory-destination@2.0.1:
+ resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
micromark-factory-destination@2.0.1:
resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
@@ -3387,8 +3431,8 @@ packages:
mitt@3.0.1:
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
- mlly@1.7.1:
- resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==}
+ mlly@1.4.2:
+ resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==}
mlly@1.7.3:
resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==}
@@ -3410,6 +3454,11 @@ packages:
resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ nanoid@3.3.6:
+ resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -3457,8 +3506,8 @@ packages:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
- npm-run-path@5.3.0:
- resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
+ npm-run-path@5.1.0:
+ resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
nth-check@2.1.1:
@@ -3537,12 +3586,12 @@ 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.0.1:
+ resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==}
engines: {node: '>= 14'}
- pac-resolver@7.0.1:
- resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==}
+ pac-resolver@7.0.0:
+ resolution: {integrity: sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==}
engines: {node: '>= 14'}
package-json@10.0.1:
@@ -3560,8 +3609,8 @@ packages:
resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==}
engines: {node: '>=14'}
- parse-imports@2.1.1:
- resolution: {integrity: sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==}
+ parse-imports@2.2.1:
+ resolution: {integrity: sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==}
engines: {node: '>= 18'}
parse-json@5.2.0:
@@ -3624,8 +3673,8 @@ packages:
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
engines: {node: '>=12'}
- pkg-types@1.2.0:
- resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==}
+ pkg-types@1.0.3:
+ resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
pkg-types@1.2.1:
resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==}
@@ -3916,16 +3965,16 @@ 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.2:
+ resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==}
engines: {node: '>= 14'}
- socks@2.8.3:
- resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==}
- engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
+ socks@2.7.1:
+ resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==}
+ engines: {node: '>= 10.13.0', npm: '>= 3.0.0'}
- source-map-js@1.2.0:
- resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
+ source-map-js@1.0.2:
+ resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
source-map-js@1.2.1:
@@ -3946,8 +3995,8 @@ packages:
spdx-correct@3.2.0:
resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
- spdx-exceptions@2.5.0:
- resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
+ spdx-exceptions@2.3.0:
+ resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
spdx-expression-parse@3.0.1:
resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
@@ -3955,8 +4004,8 @@ packages:
spdx-expression-parse@4.0.0:
resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==}
- spdx-license-ids@3.0.20:
- resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==}
+ spdx-license-ids@3.0.16:
+ resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==}
speakingurl@14.0.1:
resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
@@ -3965,9 +4014,6 @@ packages:
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
- sprintf-js@1.1.3:
- resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
-
stable-hash@0.0.4:
resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==}
@@ -4055,8 +4101,8 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- svgo@3.3.2:
- resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==}
+ svgo@3.0.2:
+ resolution: {integrity: sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==}
engines: {node: '>=14.0.0'}
hasBin: true
@@ -4140,8 +4186,11 @@ packages:
peerDependencies:
typescript: '>=4.2.0'
- tslib@2.7.0:
- resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==}
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
@@ -4195,11 +4244,14 @@ packages:
uc.micro@2.1.0:
resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
+ ufo@1.3.1:
+ resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==}
+
ufo@1.5.4:
resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
- uglify-js@3.19.3:
- resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
+ uglify-js@3.17.4:
+ resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
engines: {node: '>=0.8.0'}
hasBin: true
@@ -4231,8 +4283,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@6.0.0:
+ resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==}
universalify@0.1.2:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
@@ -4311,8 +4363,8 @@ packages:
vite-plugin-banner@0.8.0:
resolution: {integrity: sha512-JpDWDYxtrsytuvUOJCgJcTkBb6XM8yPOidjRtB6F5SW1JSzDd/Y+PD/44wR6ovWKXhSUiyDRqPvx7mMf8+8ELg==}
- vite-plugin-css-injected-by-js@3.5.1:
- resolution: {integrity: sha512-9ioqwDuEBxW55gNoWFEDhfLTrVKXEEZgl5adhWmmqa88EQGKfTmexy4v1Rh0pAS6RhKQs2bUYQArprB32JpUZQ==}
+ vite-plugin-css-injected-by-js@3.5.2:
+ resolution: {integrity: sha512-2MpU/Y+SCZyWUB6ua3HbJCrgnF0KACAsmzOQt1UvRVJCGF6S8xdA3ZUhWcWdM9ivG4I5az8PnQmwwrkC2CAQrQ==}
peerDependencies:
vite: '>2.0.0-0'
@@ -4543,7 +4595,6 @@ packages:
yaml@2.6.1:
resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==}
engines: {node: '>= 14'}
- hasBin: true
yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
@@ -4734,7 +4785,7 @@ snapshots:
jsonc-eslint-parser: 2.4.0
local-pkg: 0.5.0
parse-gitignore: 2.0.0
- picocolors: 1.1.0
+ picocolors: 1.1.1
toml-eslint-parser: 0.10.0
vue-eslint-parser: 9.4.3(eslint@9.16.0(jiti@2.4.1))
yaml-eslint-parser: 1.2.3
@@ -4742,6 +4793,7 @@ snapshots:
optionalDependencies:
eslint-plugin-format: 0.1.2(eslint@9.16.0(jiti@2.4.1))
transitivePeerDependencies:
+ - '@eslint/json'
- '@typescript-eslint/utils'
- '@vue/compiler-sfc'
- supports-color
@@ -4764,7 +4816,7 @@ snapshots:
'@babel/helper-string-parser@7.25.9': {}
- '@babel/helper-validator-identifier@7.24.7': {}
+ '@babel/helper-validator-identifier@7.22.20': {}
'@babel/helper-validator-identifier@7.25.9': {}
@@ -4791,10 +4843,9 @@ snapshots:
'@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)':
dependencies:
'@types/semver': 7.5.8
- semver: 7.6.3
- optionalDependencies:
conventional-commits-filter: 5.0.0
conventional-commits-parser: 6.0.0
+ semver: 7.6.3
'@docsearch/css@3.8.0': {}
@@ -4824,7 +4875,7 @@ snapshots:
'@dprint/markdown@0.17.8': {}
- '@dprint/toml@0.6.2': {}
+ '@dprint/toml@0.6.3': {}
'@es-joy/jsdoccomment@0.48.0':
dependencies:
@@ -4832,6 +4883,12 @@ snapshots:
esquery: 1.6.0
jsdoc-type-pratt-parser: 4.1.0
+ '@es-joy/jsdoccomment@0.49.0':
+ dependencies:
+ comment-parser: 1.4.1
+ esquery: 1.6.0
+ jsdoc-type-pratt-parser: 4.1.0
+
'@esbuild/aix-ppc64@0.21.5':
optional: true
@@ -5065,12 +5122,14 @@ snapshots:
'@eslint-community/regexpp@4.12.1': {}
- '@eslint/compat@1.1.1': {}
+ '@eslint/compat@1.2.2(eslint@9.14.0)':
+ dependencies:
+ eslint: 9.14.0
'@eslint/config-array@0.19.0':
dependencies:
'@eslint/object-schema': 2.1.4
- debug: 4.3.7
+ debug: 4.3.4
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
@@ -5083,7 +5142,7 @@ snapshots:
debug: 4.3.7
espree: 10.3.0
globals: 14.0.0
- ignore: 5.3.2
+ ignore: 5.2.4
import-fresh: 3.3.0
js-yaml: 4.1.0
minimatch: 3.1.2
@@ -5093,7 +5152,7 @@ snapshots:
'@eslint/js@9.16.0': {}
- '@eslint/markdown@6.1.1':
+ '@eslint/markdown@6.2.1':
dependencies:
'@eslint/plugin-kit': 0.2.3
mdast-util-from-markdown: 2.0.1
@@ -5148,19 +5207,21 @@ snapshots:
'@jridgewell/gen-mapping@0.3.5':
dependencies:
'@jridgewell/set-array': 1.2.1
- '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/sourcemap-codec': 1.4.15
'@jridgewell/trace-mapping': 0.3.25
- '@jridgewell/resolve-uri@3.1.2': {}
+ '@jridgewell/resolve-uri@3.1.1': {}
'@jridgewell/set-array@1.2.1': {}
+ '@jridgewell/sourcemap-codec@1.4.15': {}
+
'@jridgewell/sourcemap-codec@1.5.0': {}
'@jridgewell/trace-mapping@0.3.25':
dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/resolve-uri': 3.1.1
+ '@jridgewell/sourcemap-codec': 1.4.15
'@microsoft/api-extractor-model@7.30.0(@types/node@22.10.1)':
dependencies:
@@ -5207,7 +5268,7 @@ snapshots:
'@nodelib/fs.walk@1.2.8':
dependencies:
'@nodelib/fs.scandir': 2.1.5
- fastq: 1.17.1
+ fastq: 1.15.0
'@octokit/auth-token@4.0.0': {}
@@ -5219,7 +5280,7 @@ snapshots:
'@octokit/request-error': 5.1.0
'@octokit/types': 13.6.2
before-after-hook: 2.2.3
- universal-user-agent: 6.0.1
+ universal-user-agent: 6.0.0
'@octokit/endpoint@9.0.5':
dependencies:
@@ -5291,7 +5352,7 @@ snapshots:
'@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))':
dependencies:
concat-stream: 2.0.0
- conventional-changelog: 6.0.0(conventional-commits-filter@5.0.0)
+ conventional-changelog: 6.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)
@@ -5418,6 +5479,7 @@ snapshots:
'@rushstack/node-core-library@5.10.0(@types/node@22.10.1)':
dependencies:
+ '@types/node': 22.9.0
ajv: 8.13.0
ajv-draft-04: 1.0.0(ajv@8.13.0)
ajv-formats: 3.0.1(ajv@8.13.0)
@@ -5514,6 +5576,7 @@ snapshots:
eslint-plugin-format: 0.1.2(eslint@9.16.0(jiti@2.4.1))
transitivePeerDependencies:
- '@eslint-react/eslint-plugin'
+ - '@eslint/json'
- '@prettier/plugin-xml'
- '@typescript-eslint/utils'
- '@unocss/eslint-plugin'
@@ -5560,7 +5623,7 @@ snapshots:
'@types/hast@3.0.4':
dependencies:
- '@types/unist': 3.0.3
+ '@types/unist': 2.0.8
'@types/json-schema@7.0.15': {}
@@ -5600,11 +5663,13 @@ snapshots:
fflate: 0.8.2
meshoptimizer: 0.18.1
+ '@types/unist@2.0.8': {}
+
'@types/unist@3.0.3': {}
'@types/web-bluetooth@0.0.20': {}
- '@types/webxr@0.5.20': {}
+ '@types/webxr@0.5.7': {}
'@types/webxr@0.5.7': {}
@@ -6081,18 +6146,18 @@ snapshots:
add-stream@1.0.0: {}
- agent-base@7.1.1:
+ agent-base@7.1.0:
dependencies:
- debug: 4.3.7
+ debug: 4.3.4
transitivePeerDependencies:
- supports-color
ajv-draft-04@1.0.0(ajv@8.13.0):
- optionalDependencies:
+ dependencies:
ajv: 8.13.0
ajv-formats@3.0.1(ajv@8.13.0):
- optionalDependencies:
+ dependencies:
ajv: 8.13.0
ajv@6.12.6:
@@ -6144,7 +6209,7 @@ snapshots:
ansi-regex@5.0.1: {}
- ansi-regex@6.1.0: {}
+ ansi-regex@6.0.1: {}
ansi-styles@4.3.0:
dependencies:
@@ -6188,7 +6253,7 @@ snapshots:
before-after-hook@2.2.3: {}
- binary-extensions@2.3.0: {}
+ binary-extensions@2.2.0: {}
birpc@0.2.19: {}
@@ -6220,16 +6285,16 @@ snapshots:
dependencies:
balanced-match: 1.0.2
- braces@3.0.3:
+ braces@3.0.2:
dependencies:
- fill-range: 7.1.1
+ fill-range: 7.0.1
- browserslist@4.23.3:
+ browserslist@4.24.2:
dependencies:
- caniuse-lite: 1.0.30001658
- electron-to-chromium: 1.5.17
+ caniuse-lite: 1.0.30001680
+ electron-to-chromium: 1.5.57
node-releases: 2.0.18
- update-browserslist-db: 1.1.0(browserslist@4.23.3)
+ update-browserslist-db: 1.1.1(browserslist@4.24.2)
buffer-from@1.1.2: {}
@@ -6259,7 +6324,7 @@ snapshots:
dependencies:
three: 0.171.0
- caniuse-lite@1.0.30001658: {}
+ caniuse-lite@1.0.30001680: {}
ccount@2.0.1: {}
@@ -6281,7 +6346,7 @@ snapshots:
chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
- braces: 3.0.3
+ braces: 3.0.2
glob-parent: 5.1.2
is-binary-path: 2.1.0
is-glob: 4.0.3
@@ -6306,6 +6371,8 @@ snapshots:
dependencies:
restore-cursor: 5.1.0
+ cli-spinners@2.9.1: {}
+
cli-spinners@2.9.2: {}
cli-width@4.1.0: {}
@@ -6350,8 +6417,6 @@ snapshots:
readable-stream: 3.6.2
typedarray: 0.0.6
- confbox@0.1.7: {}
-
confbox@0.1.8: {}
config-chain@1.1.13:
@@ -6380,7 +6445,7 @@ snapshots:
dependencies:
compare-func: 2.0.0
- conventional-changelog-core@8.0.0(conventional-commits-filter@5.0.0):
+ conventional-changelog-core@8.0.0:
dependencies:
'@hutson/parse-repository-url': 5.0.0
add-stream: 1.0.0
@@ -6417,13 +6482,13 @@ snapshots:
meow: 13.2.0
semver: 7.6.3
- conventional-changelog@6.0.0(conventional-commits-filter@5.0.0):
+ conventional-changelog@6.0.0:
dependencies:
conventional-changelog-angular: 8.0.0
conventional-changelog-atom: 5.0.0
conventional-changelog-codemirror: 5.0.0
conventional-changelog-conventionalcommits: 8.0.0
- conventional-changelog-core: 8.0.0(conventional-commits-filter@5.0.0)
+ conventional-changelog-core: 8.0.0
conventional-changelog-ember: 5.0.0
conventional-changelog-eslint: 6.0.0
conventional-changelog-express: 5.0.0
@@ -6451,9 +6516,9 @@ snapshots:
dependencies:
is-what: 4.1.16
- core-js-compat@3.38.1:
+ core-js-compat@3.39.0:
dependencies:
- browserslist: 4.23.3
+ browserslist: 4.24.2
core-util-is@1.0.3: {}
@@ -6483,17 +6548,17 @@ snapshots:
css-tree@2.2.1:
dependencies:
mdn-data: 2.0.28
- source-map-js: 1.2.1
+ source-map-js: 1.0.2
css-tree@2.3.1:
dependencies:
mdn-data: 2.0.30
- source-map-js: 1.2.0
+ source-map-js: 1.0.2
css-tree@3.0.1:
dependencies:
mdn-data: 2.12.1
- source-map-js: 1.2.1
+ source-map-js: 1.0.2
css-what@6.1.0: {}
@@ -6503,9 +6568,11 @@ snapshots:
dependencies:
css-tree: 2.2.1
+ csstype@3.1.2: {}
+
csstype@3.1.3: {}
- data-uri-to-buffer@6.0.2: {}
+ data-uri-to-buffer@6.0.1: {}
de-indent@1.0.2: {}
@@ -6600,7 +6667,7 @@ snapshots:
emoji-regex-xs@1.0.0: {}
- emoji-regex@10.4.0: {}
+ emoji-regex@10.3.0: {}
emoji-regex@8.0.0: {}
@@ -6742,7 +6809,7 @@ snapshots:
eslint-import-resolver-node@0.3.9:
dependencies:
debug: 3.2.7
- is-core-module: 2.15.1
+ is-core-module: 2.13.1
resolve: 1.22.8
transitivePeerDependencies:
- supports-color
@@ -6779,7 +6846,7 @@ snapshots:
eslint-formatting-reporter: 0.0.0(eslint@9.16.0(jiti@2.4.1))
eslint-parser-plain: 0.1.0
prettier: 3.3.3
- synckit: 0.9.1
+ synckit: 0.9.2
eslint-plugin-import-x@4.2.1(eslint@9.16.0(jiti@2.4.1))(typescript@5.7.2):
dependencies:
@@ -6788,19 +6855,19 @@ snapshots:
doctrine: 3.0.0
eslint: 9.16.0(jiti@2.4.1)
eslint-import-resolver-node: 0.3.9
- get-tsconfig: 4.8.0
+ get-tsconfig: 4.8.1
is-glob: 4.0.3
- minimatch: 9.0.5
+ minimatch: 9.0.3
semver: 7.6.3
stable-hash: 0.0.4
- tslib: 2.7.0
+ tslib: 2.8.1
transitivePeerDependencies:
- supports-color
- typescript
eslint-plugin-jsdoc@50.3.1(eslint@9.16.0(jiti@2.4.1)):
dependencies:
- '@es-joy/jsdoccomment': 0.48.0
+ '@es-joy/jsdoccomment': 0.49.0
are-docs-informative: 0.0.2
comment-parser: 1.4.1
debug: 4.3.7
@@ -6808,7 +6875,7 @@ snapshots:
eslint: 9.16.0(jiti@2.4.1)
espree: 10.3.0
esquery: 1.6.0
- parse-imports: 2.1.1
+ parse-imports: 2.2.1
semver: 7.6.3
spdx-expression-parse: 4.0.0
synckit: 0.9.2
@@ -6825,6 +6892,8 @@ snapshots:
jsonc-eslint-parser: 2.4.0
natural-compare: 1.4.0
synckit: 0.6.2
+ transitivePeerDependencies:
+ - '@eslint/json'
eslint-plugin-n@17.10.2(eslint@9.16.0(jiti@2.4.1)):
dependencies:
@@ -7017,7 +7086,7 @@ snapshots:
estree-walker@3.0.3:
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.4
esutils@2.0.3: {}
@@ -7040,7 +7109,7 @@ snapshots:
human-signals: 5.0.0
is-stream: 3.0.0
merge-stream: 2.0.0
- npm-run-path: 5.3.0
+ npm-run-path: 5.1.0
onetime: 6.0.0
signal-exit: 4.1.0
strip-final-newline: 3.0.0
@@ -7061,18 +7130,18 @@ snapshots:
'@nodelib/fs.walk': 1.2.8
glob-parent: 5.1.2
merge2: 1.4.1
- micromatch: 4.0.8
+ micromatch: 4.0.5
fast-json-stable-stringify@2.1.0: {}
fast-levenshtein@2.0.6: {}
- fastq@1.17.1:
+ fastq@1.15.0:
dependencies:
reusify: 1.0.4
fdir@6.4.2(picomatch@4.0.2):
- optionalDependencies:
+ dependencies:
picomatch: 4.0.2
fflate@0.6.10: {}
@@ -7083,7 +7152,7 @@ snapshots:
dependencies:
flat-cache: 4.0.1
- fill-range@7.1.1:
+ fill-range@7.0.1:
dependencies:
to-regex-range: 5.0.1
@@ -7131,7 +7200,7 @@ snapshots:
get-stream@8.0.1: {}
- get-tsconfig@4.8.0:
+ get-tsconfig@4.8.1:
dependencies:
resolve-pkg-maps: 1.0.0
@@ -7147,7 +7216,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- git-raw-commits@5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0):
+ git-raw-commits@5.0.0(conventional-commits-parser@6.0.0):
dependencies:
'@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)
meow: 13.2.0
@@ -7155,7 +7224,7 @@ snapshots:
- conventional-commits-filter
- conventional-commits-parser
- git-semver-tags@8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0):
+ git-semver-tags@8.0.0(conventional-commits-parser@6.0.0):
dependencies:
'@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)
meow: 13.2.0
@@ -7207,7 +7276,7 @@ snapshots:
dependencies:
'@sindresorhus/merge-streams': 2.3.0
fast-glob: 3.3.2
- ignore: 5.3.2
+ ignore: 5.2.4
path-type: 5.0.0
slash: 5.1.0
unicorn-magic: 0.1.0
@@ -7239,7 +7308,7 @@ snapshots:
source-map: 0.6.1
wordwrap: 1.0.0
optionalDependencies:
- uglify-js: 3.19.3
+ uglify-js: 3.17.4
has-flag@4.0.0: {}
@@ -7281,21 +7350,21 @@ snapshots:
hosted-git-info@7.0.2:
dependencies:
- lru-cache: 10.4.3
+ lru-cache: 10.0.1
html-void-elements@3.0.0: {}
http-proxy-agent@7.0.2:
dependencies:
- agent-base: 7.1.1
- debug: 4.3.7
+ agent-base: 7.1.0
+ debug: 4.3.4
transitivePeerDependencies:
- supports-color
https-proxy-agent@7.0.5:
dependencies:
- agent-base: 7.1.1
- debug: 4.3.7
+ agent-base: 7.1.0
+ debug: 4.3.4
transitivePeerDependencies:
- supports-color
@@ -7366,16 +7435,15 @@ snapshots:
interpret@1.4.0: {}
- ip-address@9.0.5:
- dependencies:
- jsbn: 1.1.0
- sprintf-js: 1.1.3
+ ip@1.1.8: {}
+
+ ip@2.0.0: {}
is-arrayish@0.2.1: {}
is-binary-path@2.1.0:
dependencies:
- binary-extensions: 2.3.0
+ binary-extensions: 2.2.0
is-builtin-module@3.2.1:
dependencies:
@@ -7387,7 +7455,7 @@ snapshots:
is-core-module@2.15.1:
dependencies:
- hasown: 2.0.2
+ hasown: 2.0.0
is-docker@2.2.1: {}
@@ -7477,8 +7545,6 @@ snapshots:
dependencies:
argparse: 2.0.1
- jsbn@1.1.0: {}
-
jsdoc-type-pratt-parser@4.1.0: {}
jsesc@0.5.0: {}
@@ -7497,10 +7563,12 @@ snapshots:
jsonc-eslint-parser@2.4.0:
dependencies:
- acorn: 8.12.1
+ acorn: 8.11.2
eslint-visitor-keys: 3.4.3
espree: 9.6.1
- semver: 7.6.3
+ semver: 7.5.4
+
+ jsonc-parser@3.2.0: {}
jsonfile@4.0.0:
optionalDependencies:
@@ -7585,7 +7653,7 @@ snapshots:
lru-cache@7.18.3: {}
- macos-release@3.3.0: {}
+ macos-release@3.2.0: {}
magic-string@0.30.12:
dependencies:
@@ -7593,7 +7661,7 @@ snapshots:
magic-string@0.30.14:
dependencies:
- '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/sourcemap-codec': 1.4.15
mark.js@8.11.1: {}
@@ -7615,7 +7683,7 @@ snapshots:
unist-util-is: 6.0.0
unist-util-visit-parents: 6.0.1
- mdast-util-from-markdown@2.0.1:
+ mdast-util-from-markdown@2.0.2:
dependencies:
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
@@ -7755,7 +7823,7 @@ snapshots:
meshoptimizer@0.18.1: {}
- micromark-core-commonmark@2.0.1:
+ micromark-core-commonmark@2.0.2:
dependencies:
decode-named-character-reference: 1.0.2
devlop: 1.1.0
@@ -7851,7 +7919,7 @@ snapshots:
micromark-util-combine-extensions: 2.0.1
micromark-util-types: 2.0.1
- micromark-factory-destination@2.0.0:
+ micromark-factory-destination@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
@@ -7933,7 +8001,7 @@ snapshots:
dependencies:
micromark-util-symbol: 2.0.1
- micromark-util-classify-character@2.0.0:
+ micromark-util-classify-character@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
@@ -7947,8 +8015,8 @@ snapshots:
micromark-util-combine-extensions@2.0.0:
dependencies:
- micromark-util-chunked: 2.0.0
- micromark-util-types: 2.0.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-types: 2.0.1
micromark-util-combine-extensions@2.0.1:
dependencies:
@@ -7963,7 +8031,7 @@ snapshots:
dependencies:
micromark-util-symbol: 2.0.1
- micromark-util-decode-string@2.0.0:
+ micromark-util-decode-string@2.0.1:
dependencies:
decode-named-character-reference: 1.0.2
micromark-util-character: 2.1.0
@@ -7985,7 +8053,7 @@ snapshots:
micromark-util-html-tag-name@2.0.1: {}
- micromark-util-normalize-identifier@2.0.0:
+ micromark-util-normalize-identifier@2.0.1:
dependencies:
micromark-util-symbol: 2.0.1
@@ -7993,9 +8061,9 @@ snapshots:
dependencies:
micromark-util-symbol: 2.0.1
- micromark-util-resolve-all@2.0.0:
+ micromark-util-resolve-all@2.0.1:
dependencies:
- micromark-util-types: 2.0.0
+ micromark-util-types: 2.0.1
micromark-util-resolve-all@2.0.1:
dependencies:
@@ -8013,7 +8081,7 @@ snapshots:
micromark-util-encode: 2.0.1
micromark-util-symbol: 2.0.1
- micromark-util-subtokenize@2.0.1:
+ micromark-util-subtokenize@2.0.2:
dependencies:
devlop: 1.1.0
micromark-util-chunked: 2.0.0
@@ -8035,10 +8103,10 @@ snapshots:
micromark-util-types@2.0.1: {}
- micromark@4.0.0:
+ micromark@4.0.1:
dependencies:
'@types/debug': 4.1.12
- debug: 4.3.7
+ debug: 4.3.4
decode-named-character-reference: 1.0.2
devlop: 1.1.0
micromark-core-commonmark: 2.0.1
@@ -8081,7 +8149,7 @@ snapshots:
micromatch@4.0.8:
dependencies:
- braces: 3.0.3
+ braces: 3.0.2
picomatch: 2.3.1
mime-db@1.52.0: {}
@@ -8120,9 +8188,9 @@ snapshots:
mitt@3.0.1: {}
- mlly@1.7.1:
+ mlly@1.4.2:
dependencies:
- acorn: 8.12.1
+ acorn: 8.11.2
pathe: 1.1.2
pkg-types: 1.2.1
ufo: 1.5.4
@@ -8144,6 +8212,8 @@ snapshots:
mute-stream@1.0.0: {}
+ nanoid@3.3.6: {}
+
nanoid@3.3.7: {}
natural-compare-lite@1.4.0: {}
@@ -8178,7 +8248,8 @@ snapshots:
normalize-package-data@6.0.2:
dependencies:
- hosted-git-info: 7.0.2
+ hosted-git-info: 7.0.1
+ is-core-module: 2.13.1
semver: 7.6.3
validate-npm-package-license: 3.0.4
@@ -8188,7 +8259,7 @@ snapshots:
dependencies:
path-key: 3.1.1
- npm-run-path@5.3.0:
+ npm-run-path@5.1.0:
dependencies:
path-key: 4.0.0
@@ -8253,7 +8324,7 @@ snapshots:
bl: 4.1.0
chalk: 4.1.2
cli-cursor: 3.1.0
- cli-spinners: 2.9.2
+ cli-spinners: 2.9.1
is-interactive: 1.0.0
is-unicode-supported: 0.1.0
log-symbols: 4.1.0
@@ -8274,7 +8345,7 @@ snapshots:
os-name@5.1.0:
dependencies:
- macos-release: 3.3.0
+ macos-release: 3.2.0
windows-release: 5.1.1
os-tmpdir@1.0.2: {}
@@ -8297,7 +8368,7 @@ snapshots:
p-try@2.2.0: {}
- pac-proxy-agent@7.0.2:
+ pac-proxy-agent@7.0.1:
dependencies:
'@tootallnate/quickjs-emscripten': 0.23.0
agent-base: 7.1.1
@@ -8305,14 +8376,15 @@ snapshots:
get-uri: 6.0.4
http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.5
- pac-resolver: 7.0.1
- socks-proxy-agent: 8.0.4
+ pac-resolver: 7.0.0
+ socks-proxy-agent: 8.0.2
transitivePeerDependencies:
- supports-color
- pac-resolver@7.0.1:
+ pac-resolver@7.0.0:
dependencies:
degenerator: 5.0.1
+ ip: 1.1.8
netmask: 2.0.2
package-json@10.0.1:
@@ -8330,7 +8402,7 @@ snapshots:
parse-gitignore@2.0.0: {}
- parse-imports@2.1.1:
+ parse-imports@2.2.1:
dependencies:
es-module-lexer: 1.5.4
slashes: 3.0.12
@@ -8382,7 +8454,7 @@ snapshots:
picomatch@4.0.2: {}
- pkg-types@1.2.0:
+ pkg-types@1.0.3:
dependencies:
confbox: 0.1.7
mlly: 1.7.3
@@ -8427,14 +8499,14 @@ snapshots:
proxy-agent@6.4.0:
dependencies:
- agent-base: 7.1.1
- debug: 4.3.7
+ agent-base: 7.1.0
+ debug: 4.3.4
http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.5
lru-cache: 7.18.3
- pac-proxy-agent: 7.0.2
+ pac-proxy-agent: 7.0.1
proxy-from-env: 1.1.0
- socks-proxy-agent: 8.0.4
+ socks-proxy-agent: 8.0.2
transitivePeerDependencies:
- supports-color
@@ -8473,7 +8545,7 @@ snapshots:
read-pkg@5.2.0:
dependencies:
- '@types/normalize-package-data': 2.4.4
+ '@types/normalize-package-data': 2.4.2
normalize-package-data: 2.5.0
parse-json: 5.2.0
type-fest: 0.6.0
@@ -8481,7 +8553,7 @@ snapshots:
read-pkg@9.0.1:
dependencies:
'@types/normalize-package-data': 2.4.4
- normalize-package-data: 6.0.2
+ normalize-package-data: 6.0.0
parse-json: 8.1.0
type-fest: 4.30.0
unicorn-magic: 0.1.0
@@ -8580,7 +8652,7 @@ snapshots:
resolve@1.22.8:
dependencies:
- is-core-module: 2.15.1
+ is-core-module: 2.13.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
@@ -8732,20 +8804,20 @@ snapshots:
smart-buffer@4.2.0: {}
- socks-proxy-agent@8.0.4:
+ socks-proxy-agent@8.0.2:
dependencies:
- agent-base: 7.1.1
- debug: 4.3.7
- socks: 2.8.3
+ agent-base: 7.1.0
+ debug: 4.3.4
+ socks: 2.7.1
transitivePeerDependencies:
- supports-color
- socks@2.8.3:
+ socks@2.7.1:
dependencies:
- ip-address: 9.0.5
+ ip: 2.0.0
smart-buffer: 4.2.0
- source-map-js@1.2.0: {}
+ source-map-js@1.0.2: {}
source-map-js@1.2.1: {}
@@ -8758,28 +8830,26 @@ snapshots:
spdx-correct@3.2.0:
dependencies:
spdx-expression-parse: 3.0.1
- spdx-license-ids: 3.0.20
+ spdx-license-ids: 3.0.16
- spdx-exceptions@2.5.0: {}
+ spdx-exceptions@2.3.0: {}
spdx-expression-parse@3.0.1:
dependencies:
- spdx-exceptions: 2.5.0
- spdx-license-ids: 3.0.20
+ spdx-exceptions: 2.3.0
+ spdx-license-ids: 3.0.16
spdx-expression-parse@4.0.0:
dependencies:
- spdx-exceptions: 2.5.0
- spdx-license-ids: 3.0.20
+ spdx-exceptions: 2.3.0
+ spdx-license-ids: 3.0.16
- spdx-license-ids@3.0.20: {}
+ spdx-license-ids@3.0.16: {}
speakingurl@14.0.1: {}
sprintf-js@1.0.3: {}
- sprintf-js@1.1.3: {}
-
stable-hash@0.0.4: {}
stats-gl@2.4.2(@types/three@0.170.0)(three@0.171.0):
@@ -8822,7 +8892,7 @@ snapshots:
strip-ansi@7.1.0:
dependencies:
- ansi-regex: 6.1.0
+ ansi-regex: 6.0.1
strip-final-newline@2.0.0: {}
@@ -8856,21 +8926,20 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
- svgo@3.3.2:
+ svgo@3.0.2:
dependencies:
'@trysound/sax': 0.2.0
commander: 7.2.0
css-select: 5.1.0
css-tree: 2.3.1
- css-what: 6.1.0
csso: 5.0.5
- picocolors: 1.1.0
+ picocolors: 1.0.0
synckit@0.6.2:
dependencies:
tslib: 2.8.1
- synckit@0.9.1:
+ synckit@0.9.2:
dependencies:
'@pkgr/core': 0.1.1
tslib: 2.7.0
@@ -8975,9 +9044,11 @@ snapshots:
uc.micro@2.1.0: {}
+ ufo@1.3.1: {}
+
ufo@1.5.4: {}
- uglify-js@3.19.3:
+ uglify-js@3.17.4:
optional: true
unconfig@0.5.5:
@@ -9034,7 +9105,7 @@ snapshots:
unist-util-is: 6.0.0
unist-util-visit-parents: 6.0.1
- universal-user-agent@6.0.1: {}
+ universal-user-agent@6.0.0: {}
universalify@0.1.2: {}
@@ -9190,6 +9261,7 @@ snapshots:
vite@5.4.11(@types/node@22.10.1):
dependencies:
+ '@types/node': 22.9.0
esbuild: 0.21.5
postcss: 8.4.49
rollup: 4.26.0
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,
diff --git a/src/core/shapes/Line2.vue b/src/core/shapes/Line2.vue
index bbc303f6c..406cae41d 100644
--- a/src/core/shapes/Line2.vue
+++ b/src/core/shapes/Line2.vue
@@ -4,15 +4,17 @@ import { Vector2, Vector3 } from 'three'
import { Line2 } from 'three/examples/jsm/lines/Line2'
import { LineGeometry } from 'three/examples/jsm/lines/LineGeometry'
import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial'
-import { computed, onUnmounted, shallowRef, watch } from 'vue'
+import { isReactive, onUnmounted, shallowRef, watch } from 'vue'
import type { TresColor } from '@tresjs/core'
import type { Color } from 'three'
-type Points = (Vector3 | Vector2 | [number, number, number] | [number, number] | number)[]
+type Point = Vector3 | Vector2 | [number, number, number] | [number, number]
+type Points = (Point | number)[]
type VertexColors = Array
+
export interface LineProps {
points: Points
- vertexColors?: VertexColors | null
+ vertexColors?: VertexColors
color?: TresColor
lineWidth?: number
worldUnits?: boolean
@@ -25,7 +27,7 @@ export interface LineProps {
}
const props = withDefaults(defineProps(), {
- vertexColors: null,
+ vertexColors: () => [],
color: 'white',
lineWidth: 1,
worldUnits: false,
@@ -39,7 +41,7 @@ const props = withDefaults(defineProps(), {
type PropsType = typeof props
-function getInterpolatedVertexColors(vertexColors: VertexColors | null, numPoints: number): Color[] {
+function getInterpolatedVertexColors(vertexColors: VertexColors, numPoints: number): Color[] {
if (!vertexColors || vertexColors.length === 0) {
return Array.from({ length: numPoints }).fill(normalizeColor(props.color)) as Color[]
}
@@ -66,18 +68,16 @@ function getInterpolatedVertexColors(vertexColors: VertexColors | null, numPoint
return iColors
}
-const lineMaterial = new LineMaterial()
-const lineGeometry = new LineGeometry()
-const line = new Line2(lineGeometry, lineMaterial)
+const line = new Line2(new LineGeometry(), new LineMaterial())
const { sizes, invalidate } = useTresContext()
-const hasVertexColors = computed(() => Array.isArray(props.vertexColors))
-function updateLineMaterial(material: LineMaterial, props: PropsType) {
+function updateLineMaterial(line: Line2, props: PropsType) {
+ const material = line.material
material.color = normalizeColor(props.color)
material.linewidth = props.lineWidth
material.alphaToCoverage = props.alphaToCoverage
material.worldUnits = props.worldUnits
- material.vertexColors = Array.isArray(props.vertexColors)
+ material.vertexColors = props.vertexColors.length > 0
material.dashed = props.dashed
material.dashScale = props.dashScale
material.dashSize = props.dashSize
@@ -86,7 +86,9 @@ function updateLineMaterial(material: LineMaterial, props: PropsType) {
material.needsUpdate = true
}
-function updateLineGeometry(geometry: LineGeometry, points: Points, vertexColors: VertexColors | null) {
+function updateLineGeometry(line: Line2, props: PropsType) {
+ const points = props.points
+ const vertexColors = props.vertexColors
const pValues = points.map((p) => {
if (p instanceof Vector3) {
return [p.x, p.y, p.z]
@@ -101,16 +103,30 @@ function updateLineGeometry(geometry: LineGeometry, points: Points, vertexColors
return p
}
}).flat()
- geometry.setPositions(pValues.flat())
- const colors = getInterpolatedVertexColors(vertexColors, points.length).map(c => c.toArray()).flat()
- geometry.setColors(colors)
+ if (pValues.length > line.geometry.getAttribute('position').array.length) {
+ // NOTE:
+ // https://threejs.org/docs/?q=linegeom#examples/en/lines/LineGeometry
+ // LineGeometry docs currently (11/2024) say that `setPositions` will
+ // replace points, but the implementation does not appear to allow points
+ // to be added. Points outside of the current `array.length` are not
+ // drawn to screen. So ...
+ const geo = line.geometry
+ // Create a new Geometry.
+ line.geometry = new LineGeometry()
+ // Dispose old geometry.
+ geo.dispose()
+ }
+ line.geometry.setPositions(pValues.flat())
+
+ const colors = getInterpolatedVertexColors(vertexColors, pValues.length / 3).map(c => c.toArray()).flat()
+ line.geometry.setColors(colors)
line.computeLineDistances()
}
-updateLineMaterial(lineMaterial, props)
-updateLineGeometry(lineGeometry, props.points, props.vertexColors)
+updateLineMaterial(line, props)
+updateLineGeometry(line, props)
line.computeLineDistances()
watch(() => [
@@ -118,27 +134,38 @@ watch(() => [
props.lineWidth,
props.alphaToCoverage,
props.worldUnits,
- hasVertexColors,
props.dashed,
props.dashScale,
props.dashSize,
props.dashOffset,
], () => {
- updateLineMaterial(lineMaterial, props)
- invalidate()
-})
-watch(() => [props.points, props.vertexColors], () => {
- updateLineGeometry(lineGeometry, props.points, props.vertexColors)
+ updateLineMaterial(line, props)
invalidate()
})
-watch(() => [sizes.height, sizes.width], () => {
- lineMaterial.resolution = new Vector2(sizes.width.value, sizes.height.value)
+
+watch(() => [sizes.width.value, sizes.height.value], () => {
+ line.material.resolution = new Vector2(sizes.width.value, sizes.height.value)
invalidate()
})
+if (isReactive(props.vertexColors)) {
+ watch(props.vertexColors, () => {
+ updateLineMaterial(line, props)
+ updateLineGeometry(line, props)
+ invalidate()
+ })
+}
+
+if (isReactive(props.points)) {
+ watch(props.points, () => {
+ updateLineGeometry(line, props)
+ invalidate()
+ })
+}
+
onUnmounted(() => {
- lineGeometry.dispose()
- lineMaterial.dispose()
+ line.geometry.dispose()
+ line.material.dispose()
})
const lineRef = shallowRef()
@@ -147,7 +174,7 @@ defineExpose({ instance: lineRef })