diff --git a/README.md b/README.md index c2626ff..f5d7800 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ From > the screen diagonal. This is especially beneficial for GPGPU passes and > effects that use complex fragment shaders. -Postprocessing also supports srgb-encoding out of the box, as well as WebGL2 +Postprocessing also supports gamma correction out of the box, as well as WebGL2 MSAA (multi sample anti aliasing), which is react-postprocessing's default, you get high performance crisp results w/o jagged edges. diff --git a/docs/introduction.mdx b/docs/introduction.mdx index ebd5850..f19ef33 100644 --- a/docs/introduction.mdx +++ b/docs/introduction.mdx @@ -36,7 +36,7 @@ From > the screen diagonal. This is especially beneficial for GPGPU passes and > effects that use complex fragment shaders. -Postprocessing also supports srgb-encoding out of the box, as well as WebGL2 +Postprocessing also supports gamma correction out of the box, as well as WebGL2 MSAA (multi sample anti aliasing), which is react-postprocessing's default, you get high performance crisp results w/o jagged edges. diff --git a/package.json b/package.json index 40e15d8..1b29c12 100644 --- a/package.json +++ b/package.json @@ -50,11 +50,11 @@ "maath": "^0.6.0", "n8ao": "^1.6.6", "postprocessing": "^6.32.1", - "three-stdlib": "^2.23.4" + "three-stdlib": "^2.35.7" }, "devDependencies": { "@react-three/drei": "^9.68.2", - "@react-three/fiber": "^8.13.0", + "@react-three/fiber": "9.0.0-rc.4", "@storybook/addon-essentials": "^7.0.10", "@storybook/addon-interactions": "^7.0.10", "@storybook/addon-links": "^7.0.10", @@ -62,9 +62,9 @@ "@storybook/react": "^7.0.10", "@storybook/react-vite": "^7.0.11", "@storybook/testing-library": "^0.0.14-next.2", - "@types/react": "^18.2.0", - "@types/react-dom": "^18.2.1", - "@types/three": "^0.150.2", + "@types/react": "^19.0.2", + "@types/react-dom": "^19.0.2", + "@types/three": "^0.156.0", "@typescript-eslint/eslint-plugin": "^5.59.1", "@typescript-eslint/parser": "^5.59.1", "eslint": "^8.39.0", @@ -78,19 +78,19 @@ "husky": "^8.0.3", "lint-staged": "^13.2.2", "prettier": "^2.8.8", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "react": "^19.0.0", + "react-dom": "^19.0.0", "rimraf": "^5.0.0", "semantic-release": "^21.0.2", "storybook": "^7.0.10", - "three": "^0.151.3", + "three": "^0.156.0", "typescript": "^5.0.4", "vite": "^4.3.5", "vitest": "^2.1.8" }, "peerDependencies": { - "@react-three/fiber": "^8.0", - "react": "^18.0", - "three": ">= 0.138.0" + "@react-three/fiber": "9.0.0-rc.4", + "react": ">=19.0", + "three": ">= 0.156.0" } } diff --git a/src/EffectComposer.test.tsx b/src/EffectComposer.test.tsx index 6053903..8cef8c5 100644 --- a/src/EffectComposer.test.tsx +++ b/src/EffectComposer.test.tsx @@ -15,7 +15,7 @@ global.IS_REACT_ACT_ENVIRONMENT = true vi.mock('scheduler', () => require('scheduler/unstable_mock')) // Create virtual R3F root for testing -extend(THREE) +extend(THREE as any) const root = createRoot({ style: {} as CSSStyleDeclaration, addEventListener: (() => {}) as any, diff --git a/src/EffectComposer.tsx b/src/EffectComposer.tsx index d3011a5..ecebf60 100644 --- a/src/EffectComposer.tsx +++ b/src/EffectComposer.tsx @@ -1,6 +1,8 @@ -import type { TextureDataType } from 'three' +import type { TextureDataType, Group } from 'three' import { HalfFloatType, NoToneMapping } from 'three' -import React, { +import { + type JSX, + memo, forwardRef, useMemo, useEffect, @@ -9,13 +11,12 @@ import React, { useRef, useImperativeHandle, } from 'react' -import { useThree, useFrame } from '@react-three/fiber' +import { useThree, useFrame, type Instance } from '@react-three/fiber' import { EffectComposer as EffectComposerImpl, RenderPass, EffectPass, NormalPass, - // @ts-ignore DepthDownsamplingPass, Effect, Pass, @@ -51,7 +52,7 @@ export type EffectComposerProps = { const isConvolution = (effect: Effect): boolean => (effect.getAttributes() & EffectAttribute.CONVOLUTION) === EffectAttribute.CONVOLUTION -export const EffectComposer = React.memo( +export const EffectComposer = memo( forwardRef( ( { @@ -128,25 +129,25 @@ export const EffectComposer = React.memo( enabled ? renderPriority : 0 ) - const group = useRef(null) + const group = useRef(null!) useLayoutEffect(() => { const passes: Pass[] = [] // TODO: rewrite all of this with R3F v9 - const groupInstance = (group.current as any)?.__r3f as { objects: unknown[] } + const groupInstance = (group.current as Group & { __r3f: Instance }).__r3f if (groupInstance && composer) { - const children = groupInstance.objects + const children = groupInstance.children for (let i = 0; i < children.length; i++) { - const child = children[i] + const child = children[i].object if (child instanceof Effect) { const effects: Effect[] = [child] if (!isConvolution(child)) { let next: unknown = null - while ((next = children[i + 1]) instanceof Effect) { + while ((next = children[i + 1]?.object) instanceof Effect) { if (isConvolution(next)) break effects.push(next) i++ diff --git a/src/Selection.tsx b/src/Selection.tsx index 54de97f..f6c57a6 100644 --- a/src/Selection.tsx +++ b/src/Selection.tsx @@ -1,12 +1,13 @@ import * as THREE from 'three' import React, { createContext, useState, useContext, useEffect, useRef, useMemo } from 'react' +import { type ThreeElements } from '@react-three/fiber' export type Api = { selected: THREE.Object3D[] select: React.Dispatch> enabled: boolean } -export type SelectApi = JSX.IntrinsicElements['group'] & { +export type SelectApi = Omit & { enabled?: boolean } @@ -24,7 +25,7 @@ export function Select({ enabled = false, children, ...props }: SelectApi) { useEffect(() => { if (api && enabled) { let changed = false - const current: THREE.Object3D[] = [] + const current: THREE.Object3D[] = [] group.current.traverse((o) => { o.type === 'Mesh' && current.push(o) if (api.selected.indexOf(o) === -1) changed = true diff --git a/src/effects/Autofocus.tsx b/src/effects/Autofocus.tsx index 2dac90f..dc0334d 100644 --- a/src/effects/Autofocus.tsx +++ b/src/effects/Autofocus.tsx @@ -30,7 +30,7 @@ export type AutofocusProps = React.ComponentProps & { } export type AutofocusApi = { - dofRef: RefObject + dofRef: RefObject hitpoint: THREE.Vector3 update: (delta: number, updateTarget: boolean) => void } diff --git a/src/effects/Bloom.tsx b/src/effects/Bloom.tsx index 5772bae..fe050ae 100644 --- a/src/effects/Bloom.tsx +++ b/src/effects/Bloom.tsx @@ -3,4 +3,5 @@ import { wrapEffect } from '../util' export const Bloom = wrapEffect(BloomEffect, { blendFunction: BlendFunction.ADD, + args: [], }) diff --git a/src/effects/GodRays.tsx b/src/effects/GodRays.tsx index 3d5ee52..c0cd3b8 100644 --- a/src/effects/GodRays.tsx +++ b/src/effects/GodRays.tsx @@ -5,13 +5,12 @@ import { EffectComposerContext } from '../EffectComposer' import { resolveRef } from '../util' type GodRaysProps = ConstructorParameters[2] & { - sun: Mesh | Points | React.MutableRefObject + sun: Mesh | Points | React.RefObject } export const GodRays = forwardRef(function GodRays(props: GodRaysProps, ref: Ref) { const { camera } = useContext(EffectComposerContext) const effect = useMemo(() => new GodRaysEffect(camera, resolveRef(props.sun), props), [camera, props]) - // @ts-ignore v6.30.2 https://github.com/pmndrs/postprocessing/pull/470/commits/091ef6f9516ca02efa7576305afbecf1ce8323ae useLayoutEffect(() => void (effect.lightSource = resolveRef(props.sun)), [effect, props.sun]) return }) diff --git a/src/effects/Noise.tsx b/src/effects/Noise.tsx index 5b3e267..82a7987 100644 --- a/src/effects/Noise.tsx +++ b/src/effects/Noise.tsx @@ -1,4 +1,4 @@ import { NoiseEffect, BlendFunction } from 'postprocessing' import { wrapEffect } from '../util' -export const Noise = wrapEffect(NoiseEffect, { blendFunction: BlendFunction.COLOR_DODGE }) +export const Noise = wrapEffect(NoiseEffect, { blendFunction: BlendFunction.COLOR_DODGE, args: [] }) diff --git a/src/effects/Outline.tsx b/src/effects/Outline.tsx index 658c078..62cd218 100644 --- a/src/effects/Outline.tsx +++ b/src/effects/Outline.tsx @@ -1,12 +1,12 @@ import { OutlineEffect } from 'postprocessing' -import { Ref, MutableRefObject, forwardRef, useMemo, useEffect, useContext, useRef } from 'react' +import { Ref, RefObject, forwardRef, useMemo, useEffect, useContext, useRef } from 'react' import { Object3D } from 'three' import { useThree } from '@react-three/fiber' import { EffectComposerContext } from '../EffectComposer' import { selectionContext } from '../Selection' import { resolveRef } from '../util' -type ObjectRef = MutableRefObject +type ObjectRef = RefObject export type OutlineProps = ConstructorParameters[2] & Partial<{ @@ -93,7 +93,7 @@ export const Outline = forwardRef(function Outline( invalidate() }, [effect, invalidate, selectionLayer]) - const ref = useRef() + const ref = useRef(undefined) useEffect(() => { if (api && api.enabled) { if (api.selected?.length) { diff --git a/src/effects/ScanlineEffect.tsx b/src/effects/ScanlineEffect.tsx index faaf2ed..b155019 100644 --- a/src/effects/ScanlineEffect.tsx +++ b/src/effects/ScanlineEffect.tsx @@ -1,4 +1,4 @@ import { ScanlineEffect, BlendFunction } from 'postprocessing' import { wrapEffect } from '../util' -export const Scanline = wrapEffect(ScanlineEffect, { blendFunction: BlendFunction.OVERLAY, density: 1.25 }) +export const Scanline = wrapEffect(ScanlineEffect, { blendFunction: BlendFunction.OVERLAY, density: 1.25, args: [] }) diff --git a/src/effects/SelectiveBloom.tsx b/src/effects/SelectiveBloom.tsx index ee1b1ec..6efe29a 100644 --- a/src/effects/SelectiveBloom.tsx +++ b/src/effects/SelectiveBloom.tsx @@ -1,13 +1,13 @@ import { SelectiveBloomEffect, BlendFunction } from 'postprocessing' import type { BloomEffectOptions } from 'postprocessing' -import React, { Ref, MutableRefObject, forwardRef, useMemo, useEffect, useContext, useRef } from 'react' +import React, { Ref, RefObject, forwardRef, useMemo, useEffect, useContext, useRef } from 'react' import { Object3D } from 'three' import { useThree } from '@react-three/fiber' import { EffectComposerContext } from '../EffectComposer' import { selectionContext } from '../Selection' import { resolveRef } from '../util' -type ObjectRef = MutableRefObject +type ObjectRef = RefObject export type SelectiveBloomProps = BloomEffectOptions & Partial<{ diff --git a/src/effects/Texture.tsx b/src/effects/Texture.tsx index e9e0666..a45688a 100644 --- a/src/effects/Texture.tsx +++ b/src/effects/Texture.tsx @@ -1,7 +1,7 @@ import { TextureEffect } from 'postprocessing' import { Ref, forwardRef, useMemo, useLayoutEffect } from 'react' import { useLoader } from '@react-three/fiber' -import { TextureLoader, RepeatWrapping } from 'three' +import { TextureLoader, SRGBColorSpace, RepeatWrapping } from 'three' type TextureProps = ConstructorParameters[0] & { textureSrc: string @@ -13,10 +13,7 @@ export const Texture = forwardRef(function Texture( ) { const t = useLoader(TextureLoader, textureSrc) useLayoutEffect(() => { - // @ts-ignore - if ('encoding' in t) t.encoding = 3001 // sRGBEncoding - // @ts-ignore - else t.colorSpace = 'srgb' + t.colorSpace = SRGBColorSpace t.wrapS = t.wrapT = RepeatWrapping }, [t]) const effect = useMemo(() => new TextureEffect({ ...props, texture: t || texture }), [props, t, texture]) diff --git a/src/effects/TiltShift.tsx b/src/effects/TiltShift.tsx index 2b0ba58..8a11aba 100644 --- a/src/effects/TiltShift.tsx +++ b/src/effects/TiltShift.tsx @@ -1,4 +1,4 @@ import { TiltShiftEffect, BlendFunction } from 'postprocessing' import { wrapEffect } from '../util' -export const TiltShift = wrapEffect(TiltShiftEffect, { blendFunction: BlendFunction.ADD }) +export const TiltShift = wrapEffect(TiltShiftEffect, { blendFunction: BlendFunction.ADD, args: [] }) diff --git a/src/effects/TiltShift2.tsx b/src/effects/TiltShift2.tsx index 02a595b..56406db 100644 --- a/src/effects/TiltShift2.tsx +++ b/src/effects/TiltShift2.tsx @@ -87,4 +87,4 @@ export class TiltShiftEffect extends Effect { } } -export const TiltShift2 = wrapEffect(TiltShiftEffect, { blendFunction: BlendFunction.NORMAL }) +export const TiltShift2 = wrapEffect(TiltShiftEffect, { blendFunction: BlendFunction.NORMAL, args: [] }) diff --git a/src/effects/Water.tsx b/src/effects/Water.tsx index 3c61f92..e400faa 100644 --- a/src/effects/Water.tsx +++ b/src/effects/Water.tsx @@ -30,4 +30,4 @@ export class WaterEffectImpl extends Effect { } } -export const WaterEffect = wrapEffect(WaterEffectImpl, { blendFunction: BlendFunction.NORMAL }) +export const WaterEffect = wrapEffect(WaterEffectImpl, { blendFunction: BlendFunction.NORMAL, args: [] }) diff --git a/src/util.tsx b/src/util.tsx index 198cd66..3c5cf2c 100644 --- a/src/util.tsx +++ b/src/util.tsx @@ -1,17 +1,16 @@ -import React, { MutableRefObject } from 'react' +import React, { RefObject } from 'react' import { Vector2 } from 'three' import * as THREE from 'three' -import { type ReactThreeFiber, extend, useThree } from '@react-three/fiber' +import { type ReactThreeFiber, type ThreeElement, extend, useThree } from '@react-three/fiber' import type { Effect, BlendFunction } from 'postprocessing' -export const resolveRef = (ref: T | React.MutableRefObject) => +export const resolveRef = (ref: T | React.RefObject) => typeof ref === 'object' && ref != null && 'current' in ref ? ref.current : ref export type EffectConstructor = new (...args: any[]) => Effect -export type EffectProps = ReactThreeFiber.Node< - T extends Function ? T['prototype'] : InstanceType, - T +export type EffectProps = ThreeElement< + T extends Function ? T['prototype'] : InstanceType > & ConstructorParameters[0] & { blendFunction?: BlendFunction diff --git a/yarn.lock b/yarn.lock index fdc29b8..22afd37 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1900,19 +1900,23 @@ utility-types "^3.10.0" zustand "^3.5.13" -"@react-three/fiber@^8.13.0": - version "8.13.0" - resolved "https://registry.yarnpkg.com/@react-three/fiber/-/fiber-8.13.0.tgz#c9eabe60f2276a66d7ce9a3b927083894f4202f9" - integrity sha512-hPFzFNgikEMyEbL+NpSA7q+UWZxInrrkJldWaCR2w34Fwf20x9p68bsyN0/yn9oM2VlWoJcJjR8hw1tN9AxHuA== +"@react-three/fiber@9.0.0-rc.4": + version "9.0.0-rc.4" + resolved "https://registry.yarnpkg.com/@react-three/fiber/-/fiber-9.0.0-rc.4.tgz#6abe769b7a4e2baa099381bd5a9494aa66118f24" + integrity sha512-J75gr7ZbBRjS1FaN3e0lLXk2Cw7NV8sURM2kKoJP8ZoO7pzi2hXMj5vrxrrgdKfnsEy8xXHQdbCe3xw7Tckk8A== dependencies: "@babel/runtime" "^7.17.8" - "@types/react-reconciler" "^0.26.7" - its-fine "^1.0.6" - react-reconciler "^0.27.0" - react-use-measure "^2.1.1" - scheduler "^0.21.0" - suspend-react "^0.0.8" - zustand "^3.7.1" + "@types/debounce" "^1.2.1" + "@types/react-reconciler" "^0.28.8" + "@types/webxr" "*" + base64-js "^1.5.1" + buffer "^6.0.3" + debounce "^1.2.1" + its-fine "^1.2.5" + react-reconciler "0.31.0" + scheduler "0.25.0" + suspend-react "^0.1.3" + zustand "^4.1.2" "@rollup/pluginutils@^4.2.0": version "4.2.1" @@ -3081,6 +3085,11 @@ dependencies: "@types/node" "*" +"@types/debounce@^1.2.1": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/debounce/-/debounce-1.2.4.tgz#cb7e85d9ad5ababfac2f27183e8ac8b576b2abb3" + integrity sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw== + "@types/detect-port@^1.3.0": version "1.3.2" resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.2.tgz#8c06a975e472803b931ee73740aeebd0a2eb27ae" @@ -3281,19 +3290,10 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/react-dom@^18.2.1": - version "18.2.1" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.1.tgz#663b2612feb5f6431a70207430d7c04881b87f29" - integrity sha512-8QZEV9+Kwy7tXFmjJrp3XUKQSs9LTnE0KnoUb0YCguWBiNW0Yfb2iBMYZ08WPg35IR6P3Z0s00B15SwZnO26+w== - dependencies: - "@types/react" "*" - -"@types/react-reconciler@^0.26.7": - version "0.26.7" - resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.26.7.tgz#0c4643f30821ae057e401b0d9037e03e8e9b2a36" - integrity sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ== - dependencies: - "@types/react" "*" +"@types/react-dom@^19.0.2": + version "19.0.2" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.0.2.tgz#ad21f9a1ee881817995fd3f7fd33659c87e7b1b7" + integrity sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg== "@types/react-reconciler@^0.28.0": version "0.28.2" @@ -3302,7 +3302,12 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^18.2.0": +"@types/react-reconciler@^0.28.8": + version "0.28.9" + resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.28.9.tgz#d24b4864c384e770c83275b3fe73fba00269c83b" + integrity sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg== + +"@types/react@*": version "18.2.0" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.0.tgz#15cda145354accfc09a18d2f2305f9fc099ada21" integrity sha512-0FLj93y5USLHdnhIhABk83rm8XEGA7kH3cr+YUlvxoUGp1xNt/DINUMvqPxLyOQMzLmZe8i4RTHbvb8MC7NmrA== @@ -3320,6 +3325,13 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/react@^19.0.2": + version "19.0.2" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.2.tgz#9363e6b3ef898c471cb182dd269decc4afc1b4f6" + integrity sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg== + dependencies: + csstype "^3.0.2" + "@types/retry@0.12.0": version "0.12.0" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" @@ -3361,15 +3373,15 @@ resolved "https://registry.yarnpkg.com/@types/stats.js/-/stats.js-0.17.0.tgz#0ed81d48e03b590c24da85540c1d952077a9fe20" integrity sha512-9w+a7bR8PeB0dCT/HBULU2fMqf6BAzvKbxFboYhmDtDkKPiyXYbjoe2auwsXlEFI7CFNMF1dCv3dFH5Poy9R1w== -"@types/three@^0.150.2": - version "0.150.2" - resolved "https://registry.yarnpkg.com/@types/three/-/three-0.150.2.tgz#6f36b299a3d21416cc07342cc87accffbde32db4" - integrity sha512-cvcz/81Mmj4oiAA+uxzwaRK3t8lYw8WxejXKqIBfu6PqvwSAEEiCi3VfCiVY18UflBqL0LDX/za85+sfqjMoIw== +"@types/three@^0.156.0": + version "0.156.0" + resolved "https://registry.yarnpkg.com/@types/three/-/three-0.156.0.tgz#cd49f2a12e858400962ea818d1e1c45e638141a8" + integrity sha512-733bXDSRdlrxqOmQuOmfC1UBRuJ2pREPk8sWnx9MtIJEVDQMx8U0NQO5MVVaOrjzDPyLI+cFPim2X/ss9v0+LQ== dependencies: "@types/stats.js" "*" "@types/webxr" "*" - fflate "~0.6.9" - lil-gui "~0.17.0" + fflate "~0.6.10" + meshoptimizer "~0.18.1" "@types/unist@^2.0.0": version "2.0.6" @@ -4043,7 +4055,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.3.1: +base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -5719,7 +5731,7 @@ fetch-retry@^5.0.2: resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.5.tgz#61079b816b6651d88a022ebd45d51d83aa72b521" integrity sha512-q9SvpKH5Ka6h7X2C6r1sP31pQoeDb3o6/R9cg21ahfPAqbIOkW9tus1dXfwYb6G6dOI4F7nVS4Q+LSssBGIz0A== -fflate@^0.6.9, fflate@~0.6.9: +fflate@^0.6.9, fflate@~0.6.10: version "0.6.10" resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.6.10.tgz#5f40f9659205936a2d18abf88b2e7781662b6d43" integrity sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg== @@ -6904,10 +6916,10 @@ istanbul-reports@^3.1.4: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -its-fine@^1.0.6: - version "1.1.1" - resolved "https://registry.yarnpkg.com/its-fine/-/its-fine-1.1.1.tgz#e74b93fddd487441f978a50f64f0f5af4d2fc38e" - integrity sha512-v1Ia1xl20KbuSGlwoaGsW0oxsw8Be+TrXweidxD9oT/1lAh6O3K3/GIM95Tt6WCiv6W+h2M7RB1TwdoAjQyyKw== +its-fine@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/its-fine/-/its-fine-1.2.5.tgz#5466c287f86a0a73e772c8d8d515626c97195dc9" + integrity sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA== dependencies: "@types/react-reconciler" "^0.28.0" @@ -7287,11 +7299,6 @@ libnpmversion@^4.0.2: proc-log "^3.0.0" semver "^7.3.7" -lil-gui@~0.17.0: - version "0.17.0" - resolved "https://registry.yarnpkg.com/lil-gui/-/lil-gui-0.17.0.tgz#b41ae55d0023fcd9185f7395a218db0f58189663" - integrity sha512-MVBHmgY+uEbmJNApAaPbtvNh1RCAeMnKym82SBjtp5rODTYKWtM+MXHCifLe2H2Ti1HuBGBtK/5SyG4ShQ3pUQ== - lilconfig@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" @@ -7462,7 +7469,7 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -7690,6 +7697,11 @@ meshline@^3.1.6: resolved "https://registry.yarnpkg.com/meshline/-/meshline-3.1.6.tgz#eee67d9b0fd9841652cc1dc2d3833093ae8e68ca" integrity sha512-8JZJOdaL5oz3PI/upG8JvP/5FfzYUOhrkJ8np/WKvXzl0/PZ2V9pqTvCIjSKv+w9ccg2xb+yyBhXAwt6ier3ug== +meshoptimizer@~0.18.1: + version "0.18.1" + resolved "https://registry.yarnpkg.com/meshoptimizer/-/meshoptimizer-0.18.1.tgz#cdb90907f30a7b5b1190facd3b7ee6b7087797d8" + integrity sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw== + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -9077,13 +9089,12 @@ react-docgen@6.0.0-alpha.3: resolve "^1.17.0" strip-indent "^3.0.0" -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== +react-dom@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0.tgz#43446f1f01c65a4cd7f7588083e686a6726cfb57" + integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ== dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "^0.25.0" react-element-to-jsx-string@^15.0.0: version "15.0.0" @@ -9119,32 +9130,22 @@ react-merge-refs@^1.1.0: resolved "https://registry.yarnpkg.com/react-merge-refs/-/react-merge-refs-1.1.0.tgz#73d88b892c6c68cbb7a66e0800faa374f4c38b06" integrity sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ== -react-reconciler@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.27.0.tgz#360124fdf2d76447c7491ee5f0e04503ed9acf5b" - integrity sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA== +react-reconciler@0.31.0: + version "0.31.0" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0.tgz#6b7390fe8fab59210daf523d7400943973de1458" + integrity sha512-7Ob7Z+URmesIsIVRjnLoDGwBEG/tVitidU0nMsqX/eeJaLY89RISO/10ERe0MqmzuKUUB1rmY+h1itMbUHg9BQ== dependencies: - loose-envify "^1.1.0" - scheduler "^0.21.0" + scheduler "^0.25.0" react-refresh@^0.14.0: version "0.14.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== -react-use-measure@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/react-use-measure/-/react-use-measure-2.1.1.tgz#5824537f4ee01c9469c45d5f7a8446177c6cc4ba" - integrity sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig== - dependencies: - debounce "^1.2.1" - -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" +react@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd" + integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ== read-cmd-shim@^4.0.0: version "4.0.0" @@ -9567,19 +9568,10 @@ safe-regex-test@^1.0.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -scheduler@^0.21.0: - version "0.21.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.21.0.tgz#6fd2532ff5a6d877b6edb12f00d8ab7e8f308820" - integrity sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ== - dependencies: - loose-envify "^1.1.0" - -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" +scheduler@0.25.0, scheduler@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015" + integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA== semantic-release@^21.0.2: version "21.0.2" @@ -10160,6 +10152,11 @@ suspend-react@^0.0.8: resolved "https://registry.yarnpkg.com/suspend-react/-/suspend-react-0.0.8.tgz#b0740c1386b4eb652f17affe4339915ee268bd31" integrity sha512-ZC3r8Hu1y0dIThzsGw0RLZplnX9yXwfItcvaIzJc2VQVi8TGyGDlu92syMB5ulybfvGLHAI5Ghzlk23UBPF8xg== +suspend-react@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/suspend-react/-/suspend-react-0.1.3.tgz#a52f49d21cfae9a2fb70bd0c68413d3f9d90768e" + integrity sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ== + synchronous-promise@^2.0.15: version "2.0.17" resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.17.tgz#38901319632f946c982152586f2caf8ddc25c032" @@ -10291,27 +10288,22 @@ three-stdlib@^2.21.8: potpack "^1.0.1" zstddec "^0.0.2" -three-stdlib@^2.23.4: - version "2.23.4" - resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.23.4.tgz#21e415573f9cddb8dbc2dea0495cc35d8d390b8b" - integrity sha512-bNtKL0UsE/TeSQ30tb9qDoGEuO6hqJfLFVqIiWlVpgAs2W/aZcpSISaLP3q+L4E9NSGmpRzI3dGufmDj0AnQ7Q== +three-stdlib@^2.35.7: + version "2.35.7" + resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.35.7.tgz#13d345722d33328e2ffa820afadbf35a7b241c5b" + integrity sha512-k1oDqa1GYT4smhsN204DtmcQLfDuzSD4bbGmErTvUH40dpcwgBUgbwMzYYVWYB5tT7u0KBvAQpwuAPEXuwJVpQ== dependencies: "@types/draco3d" "^1.4.0" "@types/offscreencanvas" "^2019.6.4" "@types/webxr" "^0.5.2" - chevrotain "^10.1.2" draco3d "^1.4.1" fflate "^0.6.9" - ktx-parse "^0.4.5" - mmd-parser "^1.0.4" - opentype.js "^1.3.3" potpack "^1.0.1" - zstddec "^0.0.2" -three@^0.151.3: - version "0.151.3" - resolved "https://registry.yarnpkg.com/three/-/three-0.151.3.tgz#0b3c7de4b070d5b66b15217f42465d67cbfa6004" - integrity sha512-+vbuqxFy8kzLeO5MgpBHUvP/EAiecaDwDuOPPDe6SbrZr96kccF0ktLngXc7xA7bzyd3N0t2f6mw3Z9y6JCojQ== +three@^0.156.0: + version "0.156.1" + resolved "https://registry.yarnpkg.com/three/-/three-0.156.1.tgz#bab4fec121a5b3975eb4f4d227d9c912171eb399" + integrity sha512-kP7H0FK9d/k6t/XvQ9FO6i+QrePoDcNhwl0I02+wmUJRNSLCUIDMcfObnzQvxb37/0Uc9TDT0T1HgsRRrO6SYQ== through2@^2.0.3, through2@~2.0.0: version "2.0.5" @@ -10721,6 +10713,11 @@ use-resize-observer@^9.1.0: dependencies: "@juggle/resize-observer" "^3.3.1" +use-sync-external-store@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" + integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -11123,7 +11120,14 @@ zstddec@^0.0.2: resolved "https://registry.yarnpkg.com/zstddec/-/zstddec-0.0.2.tgz#57e2f28dd1ff56b750e07d158a43f0611ad9eeb4" integrity sha512-DCo0oxvcvOTGP/f5FA6tz2Z6wF+FIcEApSTu0zV5sQgn9hoT5lZ9YRAKUraxt9oP7l4e8TnNdi8IZTCX6WCkwA== -zustand@^3.5.13, zustand@^3.7.1: +zustand@^3.5.13: version "3.7.2" resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.7.2.tgz#7b44c4f4a5bfd7a8296a3957b13e1c346f42514d" integrity sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA== + +zustand@^4.1.2: + version "4.5.5" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.5.tgz#f8c713041543715ec81a2adda0610e1dc82d4ad1" + integrity sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q== + dependencies: + use-sync-external-store "1.2.2"