diff --git a/docs/app/components/Header/HeaderSidePanel.tsx b/docs/app/components/Header/HeaderSidePanel.tsx index c1b2fc224..a60f42345 100644 --- a/docs/app/components/Header/HeaderSidePanel.tsx +++ b/docs/app/components/Header/HeaderSidePanel.tsx @@ -10,7 +10,6 @@ import { MenuDocs } from '../Menu/MenuDocs' import { NavigationSchema } from '../../../scripts/docs/navigation' import { SiteThemePicker } from '../Site/SiteThemePicker' -import { forwardRef } from 'react' import { mainNavigation, mobileDialogHeader, @@ -21,6 +20,7 @@ import { subNavContainer, } from './HeaderSidePanel.css' import { visuallyHidden } from '../../styles/utilities.css' +import { forwardRef } from 'react' interface HeaderSidePanelProps { isOpen: boolean diff --git a/docs/app/components/Text/Copy.tsx b/docs/app/components/Text/Copy.tsx index 44c697fe9..24dbebf83 100644 --- a/docs/app/components/Text/Copy.tsx +++ b/docs/app/components/Text/Copy.tsx @@ -11,23 +11,17 @@ export interface CopyProps { tag?: keyof Pick } -export const Copy = forwardRef< - | HTMLHeadingElement - | HTMLQuoteElement - | HTMLDivElement - | HTMLLabelElement - | HTMLParagraphElement, - CopyProps ->(({ fontStyle = 'XS', className, children, tag = 'p' }, ref) => { - const Element = tag +export const Copy = forwardRef( + ({ fontStyle = 'XS', className, children, tag = 'p' }, ref) => { + const Element = tag - return ( - - {children} - - ) -}) + return ( + + {children} + + ) + } +) diff --git a/docs/app/components/Text/Heading.tsx b/docs/app/components/Text/Heading.tsx index 1527dc7fa..743642975 100644 --- a/docs/app/components/Text/Heading.tsx +++ b/docs/app/components/Text/Heading.tsx @@ -19,7 +19,7 @@ export interface HeadingProps { style?: CSSProperties } -export const Heading = forwardRef( +export const Heading = forwardRef( ( { tag = 'h1', diff --git a/docs/app/components/Text/List.tsx b/docs/app/components/Text/List.tsx index ecef793db..33c8a4284 100644 --- a/docs/app/components/Text/List.tsx +++ b/docs/app/components/Text/List.tsx @@ -10,14 +10,13 @@ export interface ListProps { children?: ReactNode } -export const List = forwardRef( +export const List = forwardRef( ({ tag = 'ul', fontStyle = 'XS', className, children }, ref) => { const Element = tag return ( {children} diff --git a/docs/package.json b/docs/package.json index 032793171..3ced67a02 100644 --- a/docs/package.json +++ b/docs/package.json @@ -32,6 +32,7 @@ "@remix-run/serve": "2.15.2", "@remix-run/server-runtime": "2.15.2", "@supabase/supabase-js": "2.47.10", + "@use-gesture/react": "^10.3.1", "@vanilla-extract/css": "1.17.0", "@vanilla-extract/dynamic": "2.1.2", "@vanilla-extract/recipes": "0.5.5", @@ -44,6 +45,7 @@ "react": "18.3.1", "react-dom": "18.3.1", "react-select": "5.9.0", + "react-use-measure": "^2.1.1", "zod": "3.24.1" }, "devDependencies": { diff --git a/package.json b/package.json index 6429c5e7f..c1826114c 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "@changesets/cli": "2.27.11", "@commitlint/cli": "19.6.1", "@commitlint/config-conventional": "19.6.0", - "@react-three/fiber": "8.17.10", + "@react-three/fiber": "^9.1.0", "@remix-run/dev": "2.15.2", "@simonsmith/cypress-image-snapshot": "9.1.0", "@swc/core": "1.10.4", @@ -79,8 +79,8 @@ "@types/jest": "29.5.14", "@types/lodash.clamp": "4.0.9", "@types/lodash.shuffle": "4.2.9", - "@types/react": "18.3.18", - "@types/react-dom": "18.3.5", + "@types/react": "19.0.0", + "@types/react-dom": "19.0.0", "@types/react-lazyload": "3.2.3", "@types/react-native": "0.73.0", "@types/styled-components": "5.1.34", @@ -95,8 +95,8 @@ "mock-raf": "npm:@react-spring/mock-raf@1.1.1", "prettier": "3.4.2", "pretty-quick": "4.0.0", - "react": "18.3.1", - "react-dom": "18.3.1", + "react": "19.0.0", + "react-dom": "19.0.0", "react-konva": "18.2.10", "react-native": "0.76.5", "react-zdog": "1.2.2", diff --git a/packages/animated/package.json b/packages/animated/package.json index 4e925457a..d433c0c7c 100644 --- a/packages/animated/package.json +++ b/packages/animated/package.json @@ -53,6 +53,6 @@ "@react-spring/types": "~9.7.5" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } } diff --git a/packages/animated/src/withAnimated.tsx b/packages/animated/src/withAnimated.tsx index ba715d8dd..6ed68132d 100644 --- a/packages/animated/src/withAnimated.tsx +++ b/packages/animated/src/withAnimated.tsx @@ -1,5 +1,5 @@ import * as React from 'react' -import { forwardRef, useRef, Ref, useCallback, useEffect } from 'react' +import { useRef, Ref, useCallback, useEffect, forwardRef } from 'react' import { is, each, @@ -27,7 +27,7 @@ export const withAnimated = (Component: any, host: HostConfig) => { !is.fun(Component) || (Component.prototype && Component.prototype.isReactComponent) - return forwardRef((givenProps: any, givenRef: Ref) => { + return forwardRef((givenProps: any, givenRef) => { const instanceRef = useRef(null) // The `hasInstance` value is constant, so we can safely avoid @@ -66,7 +66,7 @@ export const withAnimated = (Component: any, host: HostConfig) => { const observer = new PropsObserver(callback, deps) - const observerRef = useRef() + const observerRef = useRef(null) useIsomorphicLayoutEffect(() => { observerRef.current = observer diff --git a/packages/core/package.json b/packages/core/package.json index fb1c2f430..a14a9de34 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -57,6 +57,6 @@ "@react-spring/types": "~9.7.5" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } } diff --git a/packages/core/src/SpringContext.test.tsx b/packages/core/src/SpringContext.test.tsx index 5b1f3f47a..7f9de3add 100644 --- a/packages/core/src/SpringContext.test.tsx +++ b/packages/core/src/SpringContext.test.tsx @@ -1,6 +1,6 @@ import * as React from 'react' import { render, RenderResult } from '@testing-library/react' -import { SpringContext } from './SpringContext' +import { SpringContextProvider, SpringContext } from './SpringContext' import { SpringValue } from './SpringValue' import { useSpring } from './hooks' @@ -13,9 +13,9 @@ describe('SpringContext', () => { } const update = createUpdater(props => ( - + - + )) it('only merges when changed', () => { @@ -27,9 +27,9 @@ describe('SpringContext', () => { } const getRoot = () => ( - + - + ) const expectUpdates = (updates: any[]) => { diff --git a/packages/core/src/SpringContext.tsx b/packages/core/src/SpringContext.tsx index 8e0a48d6f..c01fdf23d 100644 --- a/packages/core/src/SpringContext.tsx +++ b/packages/core/src/SpringContext.tsx @@ -1,6 +1,5 @@ import * as React from 'react' import { useContext, PropsWithChildren } from 'react' -import { useMemoOne } from '@react-spring/shared' /** * This context affects all new and existing `SpringValue` objects @@ -13,33 +12,29 @@ export interface SpringContext { immediate?: boolean } -export const SpringContext = ({ +export const SpringContext = React.createContext({ + pause: false, + immediate: false, +}) + +export const SpringContextProvider = ({ children, ...props }: PropsWithChildren) => { - const inherited = useContext(ctx) + const inherited = useContext(SpringContext) // Inherited values are dominant when truthy. - const pause = props.pause || !!inherited.pause, - immediate = props.immediate || !!inherited.immediate + const pause = props.pause ?? inherited.pause ?? false + const immediate = props.immediate ?? inherited.immediate ?? false // Memoize the context to avoid unwanted renders. - props = useMemoOne(() => ({ pause, immediate }), [pause, immediate]) - - const { Provider } = ctx - return {children} -} - -const ctx = makeContext(SpringContext, {} as SpringContext) - -// Allow `useContext(SpringContext)` in TypeScript. -SpringContext.Provider = ctx.Provider -SpringContext.Consumer = ctx.Consumer - -/** Make the `target` compatible with `useContext` */ -function makeContext(target: any, init: T): React.Context { - Object.assign(target, React.createContext(init)) - target.Provider._context = target - target.Consumer._context = target - return target + const contextValue = React.useMemo( + () => ({ pause, immediate }), + [pause, immediate] + ) + return ( + + {children} + + ) } diff --git a/packages/core/src/hooks/useInView.ts b/packages/core/src/hooks/useInView.ts index 7d26d2c3d..90dc6c906 100644 --- a/packages/core/src/hooks/useInView.ts +++ b/packages/core/src/hooks/useInView.ts @@ -35,7 +35,7 @@ export function useInView( args?: IntersectionArgs ) { const [isInView, setIsInView] = useState(false) - const ref = useRef() + const ref = useRef(null) const propsFn = is.fun(props) && props diff --git a/packages/core/src/hooks/useSpring.test.tsx b/packages/core/src/hooks/useSpring.test.tsx index c5bd8892c..dbbd19e11 100644 --- a/packages/core/src/hooks/useSpring.test.tsx +++ b/packages/core/src/hooks/useSpring.test.tsx @@ -2,7 +2,7 @@ import * as React from 'react' import { render, RenderResult } from '@testing-library/react' import { is } from '@react-spring/shared' import { Lookup } from '@react-spring/types' -import { SpringContext } from '../SpringContext' +import { SpringContextProvider, SpringContext } from '../SpringContext' import { SpringValue } from '../SpringValue' import { SpringRef } from '../SpringRef' import { useSpring } from './useSpring' @@ -140,7 +140,9 @@ function createUpdater(Component: React.ComponentType<{ args: [any, any?] }>) { }) function renderWithContext(elem: JSX.Element) { - const wrapped = {elem} + const wrapped = ( + {elem} + ) if (result) result.rerender(wrapped) else result = render(wrapped) return result diff --git a/packages/core/src/hooks/useSprings.ts b/packages/core/src/hooks/useSprings.ts index a1729fda9..ddb8d2f3e 100644 --- a/packages/core/src/hooks/useSprings.ts +++ b/packages/core/src/hooks/useSprings.ts @@ -128,7 +128,8 @@ export function useSprings( ) const ctrls = useRef([...state.ctrls]) - const updates: any[] = [] + const updates = useRef(null!) + updates.current ??= [] // Cache old controllers to dispose in the commit phase. const prevLength = usePrev(length) || 0 @@ -164,7 +165,7 @@ export function useSprings( : (props as any)[i] if (update) { - updates[i] = declareUpdate(update) + updates.current[i] = declareUpdate(update) } } } @@ -172,7 +173,9 @@ export function useSprings( // New springs are created during render so users can pass them to // their animated components, but new springs aren't cached until the // commit phase (see the `useIsomorphicLayoutEffect` callback below). - const springs = ctrls.current.map((ctrl, i) => getSprings(ctrl, updates[i])) + const springs = ctrls.current.map((ctrl, i) => + getSprings(ctrl, updates.current[i]) + ) const context = useContext(SpringContext) const prevContext = usePrev(context) @@ -202,7 +205,7 @@ export function useSprings( } // Apply updates created during render. - const update = updates[i] + const update = updates.current[i] if (update) { // Update the injected ref if needed. replaceRef(ctrl, update.ref) @@ -214,6 +217,8 @@ export function useSprings( } else { ctrl.start(update) } + + updates.current[i] = null } }) }) diff --git a/packages/core/test/setup.ts b/packages/core/test/setup.ts index 3b9af122f..9a5ca59e8 100644 --- a/packages/core/test/setup.ts +++ b/packages/core/test/setup.ts @@ -60,9 +60,6 @@ beforeEach(() => { requestAnimationFrame: global.mockRaf.raf, colors, skipAnimation: false, - // This lets our useTransition hook force its component - // to update from within an "onRest" handler. - batchedUpdates: act, }) }) @@ -138,7 +135,7 @@ global.advanceUntil = async test => { willAdvance: observe, }) - jest.advanceTimersByTime(1000 / 60) + await act(() => jest.advanceTimersByTimeAsync(1000 / 60)) global.mockRaf.step() // Stop observing after the frame is processed. @@ -147,7 +144,7 @@ global.advanceUntil = async test => { } // Ensure pending effects are flushed. - await flushMicroTasks() + await act(() => flushMicroTasks()) // Prevent infinite recursion. if (++steps > 1e3) { diff --git a/packages/parallax/package.json b/packages/parallax/package.json index 3e7ef6484..5b3437f53 100644 --- a/packages/parallax/package.json +++ b/packages/parallax/package.json @@ -53,7 +53,7 @@ "@react-spring/web": "~9.7.5" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } } diff --git a/packages/parallax/src/index.tsx b/packages/parallax/src/index.tsx index 74e05932a..9594c852b 100644 --- a/packages/parallax/src/index.tsx +++ b/packages/parallax/src/index.tsx @@ -143,7 +143,7 @@ export const ParallaxLayer = React.memo( React.useImperativeHandle(ref, () => layer) - const layerRef = useRef() + const layerRef = useRef(null) const setSticky = (height: number, scrollTop: number) => { const start = layer.sticky!.start! * height @@ -229,8 +229,8 @@ export const Parallax = React.memo( ...rest } = props - const containerRef = useRef() - const contentRef = useRef() + const containerRef = useRef(null) + const contentRef = useRef(null) const state: IParallax = useMemoOne( () => ({ diff --git a/packages/react-spring/package.json b/packages/react-spring/package.json index 69614b18a..f5c724f5c 100644 --- a/packages/react-spring/package.json +++ b/packages/react-spring/package.json @@ -49,8 +49,8 @@ "@react-spring/zdog": "~9.7.4" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "scripts": { "build": "tsup", diff --git a/packages/shared/package.json b/packages/shared/package.json index 635e79254..c24acc83f 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -46,7 +46,7 @@ "@react-spring/types": "~9.7.5" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "scripts": { "build": "tsup", diff --git a/packages/shared/src/hooks/useMemoOne.ts b/packages/shared/src/hooks/useMemoOne.ts index 4d0274384..a06b84d05 100644 --- a/packages/shared/src/hooks/useMemoOne.ts +++ b/packages/shared/src/hooks/useMemoOne.ts @@ -14,7 +14,7 @@ export function useMemoOne(getResult: () => T, inputs?: any[]): T { }) ) - const committed = useRef>() + const committed = useRef>(null) const prevCache = committed.current let cache = prevCache diff --git a/packages/shared/src/hooks/usePrev.ts b/packages/shared/src/hooks/usePrev.ts index 9c97e064c..bf44a12d3 100644 --- a/packages/shared/src/hooks/usePrev.ts +++ b/packages/shared/src/hooks/usePrev.ts @@ -2,7 +2,7 @@ import { useEffect, useRef } from 'react' /** Use a value from the previous render */ export function usePrev(value: T): T | undefined { - const prevRef = useRef() + const prevRef = useRef(null) useEffect(() => { prevRef.current = value }) diff --git a/targets/konva/package.json b/targets/konva/package.json index 02553fcd1..901782d34 100644 --- a/targets/konva/package.json +++ b/targets/konva/package.json @@ -48,7 +48,7 @@ }, "peerDependencies": { "konva": ">=2.6", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-konva": "^16.8.0 || ^16.8.7-0 || ^16.9.0-0 || ^16.10.1-0 || ^16.12.0-0 || ^16.13.0-0 || ^17.0.0-0 || ^17.0.1-0 || ^17.0.2-0 || ^18.0.0-0" }, "scripts": { diff --git a/targets/three/package.json b/targets/three/package.json index ca8812cfa..117d9be2e 100644 --- a/targets/three/package.json +++ b/targets/three/package.json @@ -48,7 +48,7 @@ }, "peerDependencies": { "@react-three/fiber": ">=6.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "three": ">=0.126" }, "scripts": { diff --git a/targets/three/src/index.ts b/targets/three/src/index.ts index 7840ae51a..450a68c96 100644 --- a/targets/three/src/index.ts +++ b/targets/three/src/index.ts @@ -19,7 +19,6 @@ addEffect(() => { }) const host = createHost(primitives, { - // @ts-expect-error r3f related applyAnimatedValues: applyProps, }) diff --git a/targets/web/package.json b/targets/web/package.json index db8174850..18298a867 100644 --- a/targets/web/package.json +++ b/targets/web/package.json @@ -47,8 +47,8 @@ "@react-spring/types": "~9.7.5" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "scripts": { "build": "tsup", diff --git a/targets/web/src/animated.test.tsx b/targets/web/src/animated.test.tsx index 6c7cf2c5d..922c923f5 100644 --- a/targets/web/src/animated.test.tsx +++ b/targets/web/src/animated.test.tsx @@ -1,5 +1,4 @@ import * as React from 'react' -import { forwardRef } from 'react' import { render } from '@testing-library/react' import createMockRaf, { MockRaf } from 'mock-raf' import { Globals } from '@react-spring/shared' @@ -27,9 +26,13 @@ describe('animated component', () => { expect(queryByTitle('Foo')).toBeTruthy() }) it('wraps a component', () => { - const Name = forwardRef< + const Name = React.forwardRef< HTMLHeadingElement, - { name: string; other: string; children: React.ReactNode } + { + name: string + other: string + children: React.ReactNode + } >((props, ref) => (

{props.children} @@ -60,9 +63,12 @@ describe('animated component', () => { expect(div.style.opacity).toBe('1') }) it('accepts Animated values in custom style prop', () => { - const Name = forwardRef< + const Name = React.forwardRef< HTMLHeadingElement, - { style: { color: string; opacity?: number }; children: React.ReactNode } + { + style: { color: string; opacity?: number } + children: React.ReactNode + } >((props, ref) => (

{props.children} diff --git a/targets/zdog/package.json b/targets/zdog/package.json index 17bb53051..454d003e4 100644 --- a/targets/zdog/package.json +++ b/targets/zdog/package.json @@ -47,8 +47,8 @@ "@react-spring/types": "~9.7.5" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-zdog": ">=1.0", "zdog": ">=1.0" }, diff --git a/yarn.lock b/yarn.lock index c0fdc04aa..d42d4538b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4613,7 +4613,7 @@ __metadata: "@react-spring/shared": ~9.7.5 "@react-spring/types": ~9.7.5 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 languageName: unknown linkType: soft @@ -4625,7 +4625,7 @@ __metadata: "@react-spring/shared": ~9.7.5 "@react-spring/types": ~9.7.5 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 languageName: unknown linkType: soft @@ -4682,6 +4682,7 @@ __metadata: "@remix-run/serve": 2.15.2 "@remix-run/server-runtime": 2.15.2 "@supabase/supabase-js": 2.47.10 + "@use-gesture/react": ^10.3.1 "@vanilla-extract/css": 1.17.0 "@vanilla-extract/dynamic": 2.1.2 "@vanilla-extract/recipes": 0.5.5 @@ -4702,6 +4703,7 @@ __metadata: react: 18.3.1 react-dom: 18.3.1 react-select: 5.9.0 + react-use-measure: ^2.1.1 refractor: 4.8.1 rehype-autolink-headings: 7.1.0 rehype-parse: 9.0.1 @@ -4728,7 +4730,7 @@ __metadata: "@react-spring/types": ~9.7.5 peerDependencies: konva: ">=2.6" - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-konva: ^16.8.0 || ^16.8.7-0 || ^16.9.0-0 || ^16.10.1-0 || ^16.12.0-0 || ^16.13.0-0 || ^17.0.0-0 || ^17.0.1-0 || ^17.0.2-0 || ^18.0.0-0 languageName: unknown linkType: soft @@ -4754,8 +4756,8 @@ __metadata: "@react-spring/shared": ~9.7.5 "@react-spring/web": ~9.7.5 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 languageName: unknown linkType: soft @@ -4772,7 +4774,7 @@ __metadata: "@react-spring/rafz": ~9.7.5 "@react-spring/types": ~9.7.5 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 languageName: unknown linkType: soft @@ -4786,7 +4788,7 @@ __metadata: "@react-spring/types": ~9.7.5 peerDependencies: "@react-three/fiber": ">=6.0" - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 three: ">=0.126" languageName: unknown linkType: soft @@ -4806,8 +4808,8 @@ __metadata: "@react-spring/shared": ~9.7.5 "@react-spring/types": ~9.7.5 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 languageName: unknown linkType: soft @@ -4820,8 +4822,8 @@ __metadata: "@react-spring/shared": ~9.7.5 "@react-spring/types": ~9.7.5 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-zdog: ">=1.0" zdog: ">=1.0" languageName: unknown @@ -4908,6 +4910,48 @@ __metadata: languageName: node linkType: hard +"@react-three/fiber@npm:^9.1.0": + version: 9.1.0 + resolution: "@react-three/fiber@npm:9.1.0" + dependencies: + "@babel/runtime": ^7.17.8 + "@types/react-reconciler": ^0.28.9 + "@types/webxr": "*" + base64-js: ^1.5.1 + buffer: ^6.0.3 + its-fine: ^2.0.0 + react-reconciler: ^0.31.0 + react-use-measure: ^2.1.7 + scheduler: ^0.25.0 + suspend-react: ^0.1.3 + use-sync-external-store: ^1.4.0 + zustand: ^5.0.3 + peerDependencies: + expo: ">=43.0" + expo-asset: ">=8.4" + expo-file-system: ">=11.0" + expo-gl: ">=11.0" + react: ^19.0.0 + react-dom: ^19.0.0 + react-native: ">=0.78" + three: ">=0.156" + peerDependenciesMeta: + expo: + optional: true + expo-asset: + optional: true + expo-file-system: + optional: true + expo-gl: + optional: true + react-dom: + optional: true + react-native: + optional: true + checksum: b1ace61e7002a3d73213be94f5dcd2ecbfd486c1e84dd051dfd851b3fcaa7cbe1d55c8b8bc7f7c6fb9f1cd733f608f57343e10fa3bc683e4aced566026791775 + languageName: node + linkType: hard + "@remix-run/dev@npm:2.15.2": version: 2.15.2 resolution: "@remix-run/dev@npm:2.15.2" @@ -6047,12 +6091,12 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:18.3.5": - version: 18.3.5 - resolution: "@types/react-dom@npm:18.3.5" - peerDependencies: - "@types/react": ^18.0.0 - checksum: 95c757684f71e761515c5a11299e5feec550c72bb52975487f360e6f0d359b26454c26eaf2ce45dd22748205aa9b2c2fe0abe7005ebcbd233a7615283ac39a7d +"@types/react-dom@npm:19.0.0": + version: 19.0.0 + resolution: "@types/react-dom@npm:19.0.0" + dependencies: + "@types/react": "*" + checksum: 86945c4d4c4cd82e993acdd380c3d9d8e8ca297228aa72c0fa6af4620abb145e7b12235c9165d569f1b25b5f72d1dbe4b4e3f2419432248de9838b22e94295a2 languageName: node linkType: hard @@ -6092,6 +6136,15 @@ __metadata: languageName: node linkType: hard +"@types/react-reconciler@npm:^0.28.9": + version: 0.28.9 + resolution: "@types/react-reconciler@npm:0.28.9" + peerDependencies: + "@types/react": "*" + checksum: 06257f693c7b148a4258c0d0a958288116100014e7b3c21ceaea2d55a668c71718f79b4105a9a0f35b480f3729e46960b40026d685719f9386b4ed63108dda09 + languageName: node + linkType: hard + "@types/react-transition-group@npm:^4.4.0": version: 4.4.10 resolution: "@types/react-transition-group@npm:4.4.10" @@ -6101,7 +6154,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:18.3.18": +"@types/react@npm:*": version: 18.3.18 resolution: "@types/react@npm:18.3.18" dependencies: @@ -6111,6 +6164,15 @@ __metadata: languageName: node linkType: hard +"@types/react@npm:19.0.0": + version: 19.0.0 + resolution: "@types/react@npm:19.0.0" + dependencies: + csstype: ^3.0.2 + checksum: dd7d7388b28fdf78cdf28c88490fe99413a0e1fab33e92afdf862620edc77dfe605ffe48dd3aeffb1de29107ea958a12f6d667236b2ead1affdf609db7152fad + languageName: node + linkType: hard + "@types/semver@npm:^7.5.0": version: 7.5.6 resolution: "@types/semver@npm:7.5.6" @@ -12519,6 +12581,17 @@ __metadata: languageName: node linkType: hard +"its-fine@npm:^2.0.0": + version: 2.0.0 + resolution: "its-fine@npm:2.0.0" + dependencies: + "@types/react-reconciler": ^0.28.9 + peerDependencies: + react: ^19.0.0 + checksum: 887ff10d8dfe8558683d5f68ad963c72a28c6df027c5039de7ec57978e5071c564ef4b00b14ef41e7706e5839a5584cbd480a79a3880f78d7ff826931e5dc22a + languageName: node + linkType: hard + "jackspeak@npm:^3.1.2": version: 3.4.3 resolution: "jackspeak@npm:3.4.3" @@ -16886,6 +16959,17 @@ __metadata: languageName: node linkType: hard +"react-dom@npm:19.0.0": + version: 19.0.0 + resolution: "react-dom@npm:19.0.0" + dependencies: + scheduler: ^0.25.0 + peerDependencies: + react: ^19.0.0 + checksum: 009cc6e575263a0d1906f9dd4aa6532d2d3d0d71e4c2b7777c8fe4de585fa06b5b77cdc2e0fbaa2f3a4a5e5d3305c189ba152153f358ee7da4d9d9ba5d3a8975 + languageName: node + linkType: hard + "react-dropzone@npm:^12.0.0": version: 12.1.0 resolution: "react-dropzone@npm:12.1.0" @@ -17013,6 +17097,17 @@ __metadata: languageName: node linkType: hard +"react-reconciler@npm:^0.31.0": + version: 0.31.0 + resolution: "react-reconciler@npm:0.31.0" + dependencies: + scheduler: ^0.25.0 + peerDependencies: + react: ^19.0.0 + checksum: 820c4e4003c5615849bf0cda97d8a55b99af2bb59cc0825882b727f0ad0c4bf4581bb3d25e00beca1164203dbc172f0a8c4725e7aa2fb85e025938722384a84e + languageName: node + linkType: hard + "react-reconciler@npm:~0.29.0": version: 0.29.0 resolution: "react-reconciler@npm:0.29.0" @@ -17125,7 +17220,7 @@ __metadata: "@changesets/cli": 2.27.11 "@commitlint/cli": 19.6.1 "@commitlint/config-conventional": 19.6.0 - "@react-three/fiber": 8.17.10 + "@react-three/fiber": ^9.1.0 "@remix-run/dev": 2.15.2 "@simonsmith/cypress-image-snapshot": 9.1.0 "@swc/core": 1.10.4 @@ -17138,8 +17233,8 @@ __metadata: "@types/jest": 29.5.14 "@types/lodash.clamp": 4.0.9 "@types/lodash.shuffle": 4.2.9 - "@types/react": 18.3.18 - "@types/react-dom": 18.3.5 + "@types/react": 19.0.0 + "@types/react-dom": 19.0.0 "@types/react-lazyload": 3.2.3 "@types/react-native": 0.73.0 "@types/styled-components": 5.1.34 @@ -17154,8 +17249,8 @@ __metadata: mock-raf: "npm:@react-spring/mock-raf@1.1.1" prettier: 3.4.2 pretty-quick: 4.0.0 - react: 18.3.1 - react-dom: 18.3.1 + react: 19.0.0 + react-dom: 19.0.0 react-konva: 18.2.10 react-native: 0.76.5 react-zdog: 1.2.2 @@ -17181,8 +17276,8 @@ __metadata: "@react-spring/web": ~9.7.4 "@react-spring/zdog": ~9.7.4 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 languageName: unknown linkType: soft @@ -17238,6 +17333,19 @@ __metadata: languageName: node linkType: hard +"react-use-measure@npm:^2.1.1, react-use-measure@npm:^2.1.7": + version: 2.1.7 + resolution: "react-use-measure@npm:2.1.7" + peerDependencies: + react: ">=16.13" + react-dom: ">=16.13" + peerDependenciesMeta: + react-dom: + optional: true + checksum: 5f00c14cf50b0710cdbd27b63a005be20283099d2fa2723a97f3a1cf0b2daedddd67249520c21e49e95348f56428689f3229c343dcb9ed37da58f9c227d29bee + languageName: node + linkType: hard + "react-zdog@npm:1.2.2": version: 1.2.2 resolution: "react-zdog@npm:1.2.2" @@ -17269,6 +17377,13 @@ __metadata: languageName: node linkType: hard +"react@npm:19.0.0": + version: 19.0.0 + resolution: "react@npm:19.0.0" + checksum: 86de15d85b2465feb40297a90319c325cb07cf27191a361d47bcfe8c6126c973d660125aa67b8f4cbbe39f15a2f32efd0c814e98196d8e5b68c567ba40a399c6 + languageName: node + linkType: hard + "read-yaml-file@npm:^1.1.0": version: 1.1.0 resolution: "read-yaml-file@npm:1.1.0" @@ -18053,6 +18168,13 @@ __metadata: languageName: node linkType: hard +"scheduler@npm:^0.25.0": + version: 0.25.0 + resolution: "scheduler@npm:0.25.0" + checksum: b7bb9fddbf743e521e9aaa5198a03ae823f5e104ebee0cb9ec625392bb7da0baa1c28ab29cee4b1e407a94e76acc6eee91eeb749614f91f853efda2613531566 + languageName: node + linkType: hard + "section-matter@npm:^1.0.0": version: 1.0.0 resolution: "section-matter@npm:1.0.0" @@ -20138,6 +20260,15 @@ __metadata: languageName: node linkType: hard +"use-sync-external-store@npm:^1.4.0": + version: 1.4.0 + resolution: "use-sync-external-store@npm:1.4.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: dc3843a1b59ac8bd01417bd79498d4c688d5df8bf4801be50008ef4bfaacb349058c0b1605b5b43c828e0a2d62722d7e861573b3f31cea77a7f23e8b0fc2f7e3 + languageName: node + linkType: hard + "util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -21075,6 +21206,27 @@ __metadata: languageName: node linkType: hard +"zustand@npm:^5.0.3": + version: 5.0.3 + resolution: "zustand@npm:5.0.3" + peerDependencies: + "@types/react": ">=18.0.0" + immer: ">=9.0.6" + react: ">=18.0.0" + use-sync-external-store: ">=1.2.0" + peerDependenciesMeta: + "@types/react": + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + checksum: 72da39ac3017726c3562c615a0f76cee0c9ea678d664f82ee7669f8cb5e153ee81059363473094e4154d73a2935ee3459f6792d1ec9d08d2e72ebe641a16a6ba + languageName: node + linkType: hard + "zwitch@npm:^2.0.0, zwitch@npm:^2.0.4": version: 2.0.4 resolution: "zwitch@npm:2.0.4"