From e8a06e02cfdb03e822e5b42dd211372d0c8ac3ae Mon Sep 17 00:00:00 2001 From: Abdelrahman Ashraf Date: Sat, 14 Dec 2024 17:37:56 +0700 Subject: [PATCH] =?UTF-8?q?fix(react):=20=F0=9F=90=9B=20cannot=20transfer?= =?UTF-8?q?=20control=20from=20a=20canvas=20more=20than=20once?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/early-donuts-wonder.md | 5 + .changeset/fresh-years-judge.md | 5 + .github/workflows/main.yml | 8 + .../src/pages/index.tsx | 66 +- package.json | 4 +- packages/react/package.json | 16 +- packages/react/setup-file.ts | 8 + packages/react/src/base-dotlottie-react.tsx | 248 ++ packages/react/src/dotlottie-worker.tsx | 69 +- packages/react/src/dotlottie.tsx | 67 +- packages/react/src/index.ts | 4 +- packages/react/src/use-dotlottie-worker.tsx | 264 -- packages/react/src/use-dotlottie.tsx | 263 -- packages/react/src/use-stable-callback.tsx | 20 - packages/react/tests/__fixtures__/test.json | 3263 +++++++++++++++++ packages/react/tests/__fixtures__/test.lottie | Bin 0 -> 1446 bytes .../dotlottie-react.spec.tsx.snap | 25 + packages/react/tests/dotlottie-react.spec.tsx | 687 ++++ packages/react/tsup.config.cjs | 8 +- packages/react/vitest.config.ts | 29 + pnpm-lock.yaml | 787 ++-- 21 files changed, 4694 insertions(+), 1152 deletions(-) create mode 100644 .changeset/early-donuts-wonder.md create mode 100644 .changeset/fresh-years-judge.md create mode 100644 packages/react/setup-file.ts create mode 100644 packages/react/src/base-dotlottie-react.tsx delete mode 100644 packages/react/src/use-dotlottie-worker.tsx delete mode 100644 packages/react/src/use-dotlottie.tsx delete mode 100644 packages/react/src/use-stable-callback.tsx create mode 100644 packages/react/tests/__fixtures__/test.json create mode 100644 packages/react/tests/__fixtures__/test.lottie create mode 100644 packages/react/tests/__snapshots__/dotlottie-react.spec.tsx.snap create mode 100644 packages/react/tests/dotlottie-react.spec.tsx create mode 100644 packages/react/vitest.config.ts diff --git a/.changeset/early-donuts-wonder.md b/.changeset/early-donuts-wonder.md new file mode 100644 index 00000000..31ec7046 --- /dev/null +++ b/.changeset/early-donuts-wonder.md @@ -0,0 +1,5 @@ +--- +'@lottiefiles/dotlottie-react': minor +--- + +refactor: abstract common functionality between `DotLottieReact` and `DotLottieReactWorker` to reduce bundle size diff --git a/.changeset/fresh-years-judge.md b/.changeset/fresh-years-judge.md new file mode 100644 index 00000000..03919a30 --- /dev/null +++ b/.changeset/fresh-years-judge.md @@ -0,0 +1,5 @@ +--- +'@lottiefiles/dotlottie-react': patch +--- + +fix: dotLottie instance instantiation and cleanup in React `StrictMode` for both `DotLottieReact` and `DotLottieReactWorker` components diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4bae3e1d..1e6a2b62 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -53,6 +53,14 @@ jobs: working-directory: packages/web name: '@lottiefiles/dotlottie-web' + - name: 📏 Report coverage (react) + if: always() && github.event_name == 'pull_request' + uses: davelosert/vitest-coverage-report-action@v2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + working-directory: packages/react + name: '@lottiefiles/dotlottie-react' + - name: 📏 Report coverage (wc) if: always() && github.event_name == 'pull_request' uses: davelosert/vitest-coverage-report-action@v2 diff --git a/apps/dotlottie-next-example/src/pages/index.tsx b/apps/dotlottie-next-example/src/pages/index.tsx index c787479d..2570781b 100644 --- a/apps/dotlottie-next-example/src/pages/index.tsx +++ b/apps/dotlottie-next-example/src/pages/index.tsx @@ -1,6 +1,8 @@ +import type { DotLottie, DotLottieWorker } from '@lottiefiles/dotlottie-react'; import { DotLottieReact } from '@lottiefiles/dotlottie-react'; import { Inter } from 'next/font/google'; import Head from 'next/head'; +import { useState } from 'react'; import styles from '@/styles/Home.module.css'; @@ -9,6 +11,9 @@ const inter = Inter({ subsets: ['latin'] }); const src = 'https://lottie.host/e641272e-039b-4612-96de-138acfbede6e/bc0sW78EeR.lottie'; export default function Home(): JSX.Element { + const [dotLottie, setDotLottie] = useState(null); + const [showDotLottie, setShowDotLottie] = useState(false); + return ( <> @@ -18,17 +23,56 @@ export default function Home(): JSX.Element {
- + {showDotLottie && ( + + )} +
+ + + + +
); diff --git a/package.json b/package.json index fe15dde5..ee0308f4 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "@lottiefiles/prettier-config": "3.0.0", "@lottiefiles/remark-preset": "1.0.0", "@lottiefiles/tsconfig": "2.0.0", - "@size-limit/preset-big-lib": "^11.1.4", + "@size-limit/preset-big-lib": "^11.1.6", "cross-env": "7.0.3", "eslint": "7.32.0", "husky": "8.0.3", @@ -46,7 +46,7 @@ "playwright": "^1.45.2", "prettier": "2.8.8", "remark-cli": "11.0.0", - "size-limit": "^11.1.4", + "size-limit": "^11.1.6", "svelte-loader": "^3.2.3", "syncpack": "9.8.6", "turbo": "2.0.4", diff --git a/packages/react/package.json b/packages/react/package.json index 393ff22f..19d2d474 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -38,6 +38,9 @@ "lint": "eslint --fix .", "stats:eslint": "cross-env TIMING=1 eslint .", "stats:ts": "tsc -p tsconfig.build.json --extendedDiagnostics", + "test": "vitest run --browser.headless", + "test:coverage": "vitest run --browser.headless --coverage", + "test:watch": "vitest", "type-check": "tsc --noEmit" }, "peerDependencies": { @@ -47,11 +50,18 @@ "@lottiefiles/dotlottie-web": "workspace:*" }, "devDependencies": { - "@types/react": "^19.0.1", + "@testing-library/user-event": "^14.5.2", + "@types/react": "^18", + "@vitejs/plugin-react": "^4.2.1", + "@vitest/browser": "2.1.0-beta.5", + "@vitest/coverage-istanbul": "2.1.0-beta.5", "cross-env": "7.0.3", - "react": "^19.0.0", + "playwright": "1.45.2", + "react": "^18", "tsup": "8.3.5", - "typescript": "5.0.4" + "typescript": "5.0.4", + "vitest": "2.1.0-beta.5", + "vitest-browser-react": "^0.0.4" }, "publishConfig": { "access": "public", diff --git a/packages/react/setup-file.ts b/packages/react/setup-file.ts new file mode 100644 index 00000000..edc53adf --- /dev/null +++ b/packages/react/setup-file.ts @@ -0,0 +1,8 @@ +// eslint-disable-next-line import/no-unassigned-import +import 'vitest-browser-react'; +import { setWasmUrl } from './src'; + +// eslint-disable-next-line node/no-unsupported-features/node-builtins +const wasmUrl = new URL('../web/src/core/dotlottie-player.wasm?url', import.meta.url).href; + +setWasmUrl(wasmUrl); diff --git a/packages/react/src/base-dotlottie-react.tsx b/packages/react/src/base-dotlottie-react.tsx new file mode 100644 index 00000000..e07a878f --- /dev/null +++ b/packages/react/src/base-dotlottie-react.tsx @@ -0,0 +1,248 @@ +/* eslint-disable no-warning-comments */ +'use client'; + +import type { Config, DotLottie, DotLottieWorker } from '@lottiefiles/dotlottie-web'; +import { useState, useEffect, useCallback, useRef, type ComponentProps, type RefCallback } from 'react'; +import type { JSX } from 'react'; + +export type BaseDotLottieProps = Omit & + ComponentProps<'canvas'> & { + animationId?: string; + /** + * A function that creates a `DotLottie` or `DotLottieWorker` instance. + */ + createDotLottie: (config: T extends DotLottieWorker ? Config & { workerId?: string } : Config) => T; + /** + * A callback function that receives the `DotLottie` or `DotLottieWorker` instance. + * + * @example + * ```tsx + * const [dotLottie, setDotLottie] = useState(null); + * + * + * ``` + */ + dotLottieRefCallback?: RefCallback; + /** + * @deprecated The `playOnHover` property is deprecated. + * Instead, use the `onMouseEnter` and `onMouseLeave` events to control animation playback. + * Utilize the `dotLottieRefCallback` to access the `DotLottie` instance and invoke the `play` and `pause` methods. + * + * Example usage: + * ```tsx + * const [dotLottie, setDotLottie] = useState(null); + * + * dotLottie?.play()} + * onMouseLeave={() => dotLottie?.pause()} + * /> + * ``` + */ + playOnHover?: boolean; + themeData?: string; + workerId?: T extends DotLottieWorker ? string : undefined; + }; + +export const BaseDotLottieReact = ({ + animationId, + autoplay, + backgroundColor, + className, + createDotLottie, + data, + dotLottieRefCallback, + loop, + mode, + playOnHover, + renderConfig, + segment, + speed, + src, + style, + themeData, + themeId, + useFrameInterpolation, + workerId, + ...props +}: BaseDotLottieProps & { + createDotLottie: (config: T extends DotLottieWorker ? Config & { workerId?: string } : Config) => T; +}): JSX.Element => { + const [dotLottie, setDotLottie] = useState(null); + const canvasRef = useRef(null); + const dotLottieRef = useRef(null); + const dotLottieRefCallbackRef = useRef | undefined>(dotLottieRefCallback); + + const config: Omit & { + workerId?: T extends DotLottieWorker ? string : undefined; + } = { + speed, + mode, + loop, + useFrameInterpolation, + segment, + backgroundColor, + autoplay, + themeId, + workerId, + src, + data, + renderConfig, + }; + + const configRef = useRef, 'createDotLottie' | 'dotLottieRefCallback'> | undefined>(config); + + dotLottieRefCallbackRef.current = dotLottieRefCallback; + dotLottieRef.current = dotLottie; + configRef.current = config; + + useEffect(() => { + if (typeof dotLottieRefCallbackRef.current === 'function' && dotLottie) { + dotLottieRefCallbackRef.current(dotLottie); + } + }, [dotLottie]); + + const setCanvasRef = useCallback((canvas: HTMLCanvasElement | null) => { + canvasRef.current = canvas; + + if (canvas) { + const dotLottieInstance = createDotLottie({ + ...configRef.current, + canvas, + }); + + setDotLottie(dotLottieInstance as T); + } else { + dotLottie?.destroy(); + setDotLottie(null); + } + }, []); + + useEffect(() => { + const handlePlayOnHover = (event: MouseEvent): void => { + if (!playOnHover) return; + + if (event.type === 'mouseenter') { + dotLottieRef.current?.play(); + } + + if (event.type === 'mouseleave') { + dotLottieRef.current?.pause(); + } + }; + + canvasRef.current?.addEventListener('mouseenter', handlePlayOnHover); + canvasRef.current?.addEventListener('mouseleave', handlePlayOnHover); + + return () => { + canvasRef.current?.removeEventListener('mouseenter', handlePlayOnHover); + canvasRef.current?.removeEventListener('mouseleave', handlePlayOnHover); + }; + }, [playOnHover]); + + useEffect(() => { + return () => { + if (dotLottie) { + dotLottie.destroy(); + setDotLottie(null); + } + }; + }, [dotLottie]); + + useEffect(() => { + dotLottieRef.current?.setSpeed(speed ?? 1); + }, [speed]); + + useEffect(() => { + dotLottieRef.current?.setMode(mode ?? 'forward'); + }, [mode]); + + useEffect(() => { + dotLottieRef.current?.setLoop(loop ?? false); + }, [loop]); + + useEffect(() => { + dotLottieRef.current?.setUseFrameInterpolation(useFrameInterpolation ?? true); + }, [useFrameInterpolation]); + + useEffect(() => { + if (typeof segment?.[0] === 'number' && typeof segment[1] === 'number') { + dotLottieRef.current?.setSegment(segment[0], segment[1]); + } else { + // TODO: implement it for worker + // dotLottieRef.current?.resetSegment(); + } + }, [segment]); + + useEffect(() => { + dotLottieRef.current?.setBackgroundColor(backgroundColor ?? ''); + }, [backgroundColor]); + + useEffect(() => { + dotLottieRef.current?.setRenderConfig(renderConfig ?? {}); + }, [JSON.stringify(renderConfig)]); + + useEffect(() => { + if (typeof data !== 'string' && typeof data !== 'object') return; + + dotLottieRef.current?.load({ + data, + ...configRef.current, + }); + }, [data]); + + useEffect(() => { + if (typeof src !== 'string') return; + + dotLottieRef.current?.load({ + src, + ...configRef.current, + }); + }, [src]); + + useEffect(() => { + dotLottieRef.current?.setMarker(props.marker ?? ''); + }, [props.marker]); + + useEffect(() => { + dotLottieRef.current?.loadAnimation(animationId ?? ''); + }, [animationId]); + + useEffect(() => { + if (typeof themeId === 'string') { + dotLottieRef.current?.setTheme(themeId); + } else { + // TODO: implement it for worker + // dotLottieRef.current?.resetTheme(); + } + }, [themeId]); + + useEffect(() => { + dotLottieRef.current?.setThemeData(themeData ?? ''); + }, [themeData]); + + return ( +
+ +
+ ); +}; diff --git a/packages/react/src/dotlottie-worker.tsx b/packages/react/src/dotlottie-worker.tsx index 6da83fbf..6a548547 100644 --- a/packages/react/src/dotlottie-worker.tsx +++ b/packages/react/src/dotlottie-worker.tsx @@ -1,68 +1,15 @@ 'use client'; -import type { DotLottieWorker, Config } from '@lottiefiles/dotlottie-web'; -import { useEffect, type ComponentProps, type RefCallback, type JSX } from 'react'; +import type { Config } from '@lottiefiles/dotlottie-web'; +import { DotLottieWorker } from '@lottiefiles/dotlottie-web'; -import { useDotLottieWorker } from './use-dotlottie-worker'; -import useStableCallback from './use-stable-callback'; +import { BaseDotLottieReact } from './base-dotlottie-react'; +import type { BaseDotLottieProps } from './base-dotlottie-react'; -export type DotLottieWorkerReactProps = Omit & - ComponentProps<'canvas'> & { - animationId?: string; - dotLottieRefCallback?: RefCallback; - playOnHover?: boolean; - themeData?: string; - themeId?: string; - workerId?: string; - }; +export type DotLottieWorkerReactProps = Omit, 'createDotLottie'>; -export const DotLottieWorkerReact = ({ - animationId, - autoplay, - backgroundColor, - data, - dotLottieRefCallback, - loop, - marker, - mode, - playOnHover, - renderConfig, - segment, - speed, - src, - themeData, - themeId, - useFrameInterpolation, - workerId, - ...props -}: DotLottieWorkerReactProps): JSX.Element => { - const { DotLottieComponent, dotLottie } = useDotLottieWorker({ - workerId, - data, - mode, - speed, - src, - autoplay, - loop, - segment, - renderConfig, - backgroundColor, - useFrameInterpolation, - playOnHover, - marker, - themeId, - animationId, - themeData, - }); +const createDotLottieWorker = (config: Config & { workerId?: string }): DotLottieWorker => new DotLottieWorker(config); - const stableDotLottieRefCallback = - typeof dotLottieRefCallback === 'function' ? useStableCallback(dotLottieRefCallback) : undefined; - - useEffect(() => { - if (typeof stableDotLottieRefCallback === 'function') { - stableDotLottieRefCallback(dotLottie); - } - }, [stableDotLottieRefCallback, dotLottie]); - - return ; +export const DotLottieWorkerReact = (props: DotLottieWorkerReactProps): JSX.Element => { + return ; }; diff --git a/packages/react/src/dotlottie.tsx b/packages/react/src/dotlottie.tsx index 0461e156..0fe0fe15 100644 --- a/packages/react/src/dotlottie.tsx +++ b/packages/react/src/dotlottie.tsx @@ -1,65 +1,16 @@ 'use client'; -import type { DotLottie, Config } from '@lottiefiles/dotlottie-web'; -import { useEffect, type ComponentProps, type RefCallback, type JSX } from 'react'; +import type { Config } from '@lottiefiles/dotlottie-web'; +import { DotLottie } from '@lottiefiles/dotlottie-web'; +import type { JSX } from 'react'; -import { useDotLottie } from './use-dotlottie'; -import useStableCallback from './use-stable-callback'; +import type { BaseDotLottieProps } from './base-dotlottie-react'; +import { BaseDotLottieReact } from './base-dotlottie-react'; -export type DotLottieReactProps = Omit & - ComponentProps<'canvas'> & { - animationId?: string; - dotLottieRefCallback?: RefCallback; - playOnHover?: boolean; - themeData?: string; - themeId?: string; - }; +export type DotLottieReactProps = Omit, 'createDotLottie'>; -export const DotLottieReact = ({ - animationId, - autoplay, - backgroundColor, - data, - dotLottieRefCallback, - loop, - marker, - mode, - playOnHover, - renderConfig, - segment, - speed, - src, - themeData, - themeId, - useFrameInterpolation, - ...props -}: DotLottieReactProps): JSX.Element => { - const { DotLottieComponent, dotLottie } = useDotLottie({ - data, - mode, - speed, - src, - autoplay, - loop, - segment, - renderConfig, - backgroundColor, - useFrameInterpolation, - playOnHover, - marker, - themeId, - animationId, - themeData, - }); +const createDotLottie = (config: Config): DotLottie => new DotLottie(config); - const stableDotLottieRefCallback = - typeof dotLottieRefCallback === 'function' ? useStableCallback(dotLottieRefCallback) : undefined; - - useEffect(() => { - if (typeof stableDotLottieRefCallback === 'function') { - stableDotLottieRefCallback(dotLottie); - } - }, [stableDotLottieRefCallback, dotLottie]); - - return ; +export const DotLottieReact = (props: DotLottieReactProps): JSX.Element => { + return ; }; diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index 33c50fb4..34e355d0 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -1,9 +1,9 @@ +'use client'; + import { DotLottie, DotLottieWorker } from '@lottiefiles/dotlottie-web'; export * from './dotlottie'; export type * from '@lottiefiles/dotlottie-web'; -export * from './use-dotlottie'; -export * from './use-dotlottie-worker'; export * from './dotlottie-worker'; export const setWasmUrl = (url: string): void => { diff --git a/packages/react/src/use-dotlottie-worker.tsx b/packages/react/src/use-dotlottie-worker.tsx deleted file mode 100644 index 4fa200cb..00000000 --- a/packages/react/src/use-dotlottie-worker.tsx +++ /dev/null @@ -1,264 +0,0 @@ -import type { Config } from '@lottiefiles/dotlottie-web'; -import { DotLottieWorker } from '@lottiefiles/dotlottie-web'; -import { useCallback, useState, useEffect, useRef, type JSX } from 'react'; -import type { ComponentProps, RefCallback } from 'react'; - -interface DotLottieWorkerComponentProps { - setCanvasRef: RefCallback; - setContainerRef: RefCallback; -} - -function DotLottieWorkerComponent({ - children, - className = '', - setCanvasRef, - setContainerRef, - style, - ...rest -}: DotLottieWorkerComponentProps & ComponentProps<'canvas'>): JSX.Element { - const containerStyle = { - width: '100%', - height: '100%', - lineHeight: 0, - ...style, - }; - - return ( -
- - {children} - -
- ); -} - -export type DotLottieWorkerConfig = Omit & { - animationId?: string; - playOnHover?: boolean; - themeData?: string; - themeId?: string; - workerId?: string; -}; - -export interface UseDotLottieWorkerResult { - DotLottieComponent: (props: ComponentProps<'canvas'>) => JSX.Element; - canvas: HTMLCanvasElement | null; - container: HTMLDivElement | null; - dotLottie: DotLottieWorker | null; - setCanvasRef: RefCallback; - setContainerRef: RefCallback; -} - -export const useDotLottieWorker = (config?: DotLottieWorkerConfig): UseDotLottieWorkerResult => { - const [dotLottie, setDotLottie] = useState(null); - - const dotLottieRef = useRef(null); - const configRef = useRef(config); - - const canvasRef = useRef(null); - const containerRef = useRef(null); - - dotLottieRef.current = dotLottie; - configRef.current = config; - - const hoverHandler = useCallback((event: MouseEvent) => { - if (!configRef.current?.playOnHover || !dotLottieRef.current?.isLoaded) return; - - if (event.type === 'mouseenter') { - dotLottieRef.current.play(); - } else if (event.type === 'mouseleave') { - dotLottieRef.current.pause(); - } - }, []); - - const setCanvasRef = useCallback((canvas: HTMLCanvasElement | null) => { - canvasRef.current = canvas; - }, []); - - const setContainerRef = useCallback((container: HTMLDivElement | null) => { - containerRef.current = container; - }, []); - - const Component = useCallback( - (props: ComponentProps<'canvas'>): JSX.Element => { - return ; - }, - [setCanvasRef, setContainerRef], - ); - - useEffect(() => { - const canvas = canvasRef.current; - - let dotLottieInstance: DotLottieWorker | null = null; - - if (canvas) { - dotLottieInstance = new DotLottieWorker({ - ...configRef.current, - canvas, - }); - - canvas.addEventListener('mouseenter', hoverHandler); - canvas.addEventListener('mouseleave', hoverHandler); - - setDotLottie(dotLottieInstance); - } - - return () => { - dotLottieInstance?.destroy(); - setDotLottie(null); - canvas?.removeEventListener('mouseenter', hoverHandler); - canvas?.removeEventListener('mouseleave', hoverHandler); - }; - }, [hoverHandler]); - - // speed reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (typeof config?.speed === 'number' && config.speed !== dotLottieRef.current.speed) { - dotLottieRef.current.setSpeed(config.speed); - } - }, [config?.speed]); - - // mode reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (typeof config?.mode === 'string' && config.mode !== dotLottieRef.current.mode) { - dotLottieRef.current.setMode(config.mode); - } - }, [config?.mode]); - - // loop reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (typeof config?.loop === 'boolean' && config.loop !== dotLottieRef.current.loop) { - dotLottieRef.current.setLoop(config.loop); - } - }, [config?.loop]); - - // useFrameInterpolation reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if ( - typeof config?.useFrameInterpolation === 'boolean' && - config.useFrameInterpolation !== dotLottieRef.current.useFrameInterpolation - ) { - dotLottieRef.current.setUseFrameInterpolation(config.useFrameInterpolation); - } - }, [config?.useFrameInterpolation]); - - // segment reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - const startFrame = config?.segment?.[0]; - const endFrame = config?.segment?.[1]; - - if (typeof startFrame === 'number' && typeof endFrame === 'number') { - dotLottieRef.current.setSegment(startFrame, endFrame); - } - }, [config?.segment]); - - // background color reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if ( - typeof config?.backgroundColor === 'string' && - config.backgroundColor !== dotLottieRef.current.backgroundColor - ) { - dotLottieRef.current.setBackgroundColor(config.backgroundColor); - } - }, [config?.backgroundColor]); - - // render config reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (typeof config?.renderConfig === 'object') { - dotLottieRef.current.setRenderConfig(config.renderConfig); - } - }, [JSON.stringify(config?.renderConfig)]); - - // data reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (typeof config?.data === 'string' || config?.data instanceof ArrayBuffer) { - dotLottieRef.current.load({ - data: config.data, - ...(configRef.current || {}), - }); - } - }, [config?.data]); - - // src reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (typeof config?.src === 'string') { - dotLottieRef.current.load({ - src: config.src, - ...(configRef.current || {}), - }); - } - }, [config?.src]); - - useEffect(() => { - if (!dotLottieRef.current) return; - - if (typeof config?.marker === 'string') { - dotLottieRef.current.setMarker(config.marker); - } - }, [config?.marker]); - - // animationId reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if ( - dotLottieRef.current.isLoaded && - config?.animationId && - dotLottieRef.current.activeAnimationId !== config.animationId - ) { - dotLottieRef.current.loadAnimation(config.animationId); - } - }, [config?.animationId]); - - // themeId reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (dotLottieRef.current.isLoaded && dotLottieRef.current.activeThemeId !== config?.themeId) { - dotLottieRef.current.setTheme(config?.themeId || ''); - } - }, [config?.themeId]); - - // themeData reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (dotLottieRef.current.isLoaded) { - dotLottieRef.current.setThemeData(config?.themeData || ''); - } - }, [config?.themeData]); - - return { - dotLottie, - setCanvasRef, - setContainerRef, - canvas: canvasRef.current, - container: containerRef.current, - DotLottieComponent: Component, - }; -}; diff --git a/packages/react/src/use-dotlottie.tsx b/packages/react/src/use-dotlottie.tsx deleted file mode 100644 index 9c3e5f67..00000000 --- a/packages/react/src/use-dotlottie.tsx +++ /dev/null @@ -1,263 +0,0 @@ -import type { Config } from '@lottiefiles/dotlottie-web'; -import { DotLottie } from '@lottiefiles/dotlottie-web'; -import { useCallback, useState, useEffect, useRef, type JSX } from 'react'; -import type { ComponentProps, RefCallback } from 'react'; - -interface DotLottieComponentProps { - setCanvasRef: RefCallback; - setContainerRef: RefCallback; -} - -function DotLottieComponent({ - children, - className = '', - setCanvasRef, - setContainerRef, - style, - ...rest -}: DotLottieComponentProps & ComponentProps<'canvas'>): JSX.Element { - const containerStyle = { - width: '100%', - height: '100%', - lineHeight: 0, - ...style, - }; - - return ( -
- - {children} - -
- ); -} - -export type DotLottieConfig = Omit & { - animationId?: string; - playOnHover?: boolean; - themeData?: string; - themeId?: string; -}; - -export interface UseDotLottieResult { - DotLottieComponent: (props: ComponentProps<'canvas'>) => JSX.Element; - canvas: HTMLCanvasElement | null; - container: HTMLDivElement | null; - dotLottie: DotLottie | null; - setCanvasRef: RefCallback; - setContainerRef: RefCallback; -} - -export const useDotLottie = (config?: DotLottieConfig): UseDotLottieResult => { - const [dotLottie, setDotLottie] = useState(null); - - const dotLottieRef = useRef(null); - const configRef = useRef(config); - - const canvasRef = useRef(null); - const containerRef = useRef(null); - - dotLottieRef.current = dotLottie; - configRef.current = config; - - const hoverHandler = useCallback((event: MouseEvent) => { - if (!configRef.current?.playOnHover || !dotLottieRef.current?.isLoaded) return; - - if (event.type === 'mouseenter') { - dotLottieRef.current.play(); - } else if (event.type === 'mouseleave') { - dotLottieRef.current.pause(); - } - }, []); - - const setCanvasRef = useCallback((canvas: HTMLCanvasElement | null) => { - canvasRef.current = canvas; - }, []); - - const setContainerRef = useCallback((container: HTMLDivElement | null) => { - containerRef.current = container; - }, []); - - const Component = useCallback( - (props: ComponentProps<'canvas'>): JSX.Element => { - return ; - }, - [setCanvasRef, setContainerRef], - ); - - useEffect(() => { - const canvas = canvasRef.current; - - let dotLottieInstance: DotLottie | null = null; - - if (canvas) { - dotLottieInstance = new DotLottie({ - ...configRef.current, - canvas, - }); - - canvas.addEventListener('mouseenter', hoverHandler); - canvas.addEventListener('mouseleave', hoverHandler); - - setDotLottie(dotLottieInstance); - } - - return () => { - dotLottieInstance?.destroy(); - setDotLottie(null); - canvas?.removeEventListener('mouseenter', hoverHandler); - canvas?.removeEventListener('mouseleave', hoverHandler); - }; - }, [hoverHandler]); - - // speed reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (typeof config?.speed === 'number' && config.speed !== dotLottieRef.current.speed) { - dotLottieRef.current.setSpeed(config.speed); - } - }, [config?.speed]); - - // mode reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (typeof config?.mode === 'string' && config.mode !== dotLottieRef.current.mode) { - dotLottieRef.current.setMode(config.mode); - } - }, [config?.mode]); - - // loop reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (typeof config?.loop === 'boolean' && config.loop !== dotLottieRef.current.loop) { - dotLottieRef.current.setLoop(config.loop); - } - }, [config?.loop]); - - // useFrameInterpolation reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if ( - typeof config?.useFrameInterpolation === 'boolean' && - config.useFrameInterpolation !== dotLottieRef.current.useFrameInterpolation - ) { - dotLottieRef.current.setUseFrameInterpolation(config.useFrameInterpolation); - } - }, [config?.useFrameInterpolation]); - - // segment reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - const startFrame = config?.segment?.[0]; - const endFrame = config?.segment?.[1]; - - if (typeof startFrame === 'number' && typeof endFrame === 'number') { - dotLottieRef.current.setSegment(startFrame, endFrame); - } - }, [config?.segment]); - - // background color reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if ( - typeof config?.backgroundColor === 'string' && - config.backgroundColor !== dotLottieRef.current.backgroundColor - ) { - dotLottieRef.current.setBackgroundColor(config.backgroundColor); - } - }, [config?.backgroundColor]); - - // render config reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (typeof config?.renderConfig === 'object') { - dotLottieRef.current.setRenderConfig(config.renderConfig); - } - }, [JSON.stringify(config?.renderConfig)]); - - // data reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (typeof config?.data === 'string' || config?.data instanceof ArrayBuffer) { - dotLottieRef.current.load({ - data: config.data, - ...(configRef.current || {}), - }); - } - }, [config?.data]); - - // src reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (typeof config?.src === 'string') { - dotLottieRef.current.load({ - src: config.src, - ...(configRef.current || {}), - }); - } - }, [config?.src]); - - useEffect(() => { - if (!dotLottieRef.current) return; - - if (typeof config?.marker === 'string') { - dotLottieRef.current.setMarker(config.marker); - } - }, [config?.marker]); - - // animationId reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if ( - dotLottieRef.current.isLoaded && - config?.animationId && - dotLottieRef.current.activeAnimationId !== config.animationId - ) { - dotLottieRef.current.loadAnimation(config.animationId); - } - }, [config?.animationId]); - - // themeId reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (dotLottieRef.current.isLoaded && dotLottieRef.current.activeThemeId !== config?.themeId) { - dotLottieRef.current.setTheme(config?.themeId || ''); - } - }, [config?.themeId]); - - // themeData reactivity - useEffect(() => { - if (!dotLottieRef.current) return; - - if (dotLottieRef.current.isLoaded) { - dotLottieRef.current.setThemeData(config?.themeData || ''); - } - }, [config?.themeData]); - - return { - dotLottie, - setCanvasRef, - setContainerRef, - canvas: canvasRef.current, - container: containerRef.current, - DotLottieComponent: Component, - }; -}; diff --git a/packages/react/src/use-stable-callback.tsx b/packages/react/src/use-stable-callback.tsx deleted file mode 100644 index b10ba5b4..00000000 --- a/packages/react/src/use-stable-callback.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { useCallback, useLayoutEffect, useRef, useEffect } from 'react'; - -// eslint-disable-next-line no-negated-condition -const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect; - -/** - * Returns a memoized version of your function that maintains a stable reference, but - * also can read the latest scope (props and state) of the component in which it is used. - */ -export default function useStableCallback( - callback: (...args: Args) => T, -): (...args: Args) => T { - const callbackContainer = useRef(callback); - - useIsomorphicLayoutEffect(() => { - callbackContainer.current = callback; - }); - - return useCallback((...args: Args) => callbackContainer.current(...args), [callbackContainer]); -} diff --git a/packages/react/tests/__fixtures__/test.json b/packages/react/tests/__fixtures__/test.json new file mode 100644 index 00000000..0a689cad --- /dev/null +++ b/packages/react/tests/__fixtures__/test.json @@ -0,0 +1,3263 @@ +{ + "v": "5.7.0", + "ip": 0, + "op": 42, + "fr": 30, + "w": 1500, + "h": 1500, + "nm": "B", + "assets": [], + "markers": [ + { + "cm": "Marker_1", + "tm": 0, + "dr": 10 + }, + { + "cm": "Marker_2", + "tm": 10, + "dr": 10 + }, + { + "cm": "Marker_3", + "tm": 20, + "dr": 10 + }, + { + "cm": "Marker_4", + "tm": 30, + "dr": 12 + } + ], + "layers": [ + { + "ind": 1, + "ty": 4, + "nm": "R", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + 100 + ] + }, + { + "t": 42, + "s": [ + 100 + ] + } + ] + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + 0 + ] + }, + { + "t": 42, + "s": [ + 0 + ] + } + ] + }, + "p": { + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + 750, + 953 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + 753, + 1057 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + 757, + 877 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + 757, + 1013 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + 743, + 913 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + 750, + 985 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + 750, + 945 + ] + }, + { + "t": 42, + "s": [ + 750, + 953 + ] + } + ], + "a": 1 + }, + "a": { + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + 190, + 169 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + 333, + 65 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + 117, + 245 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + 243, + 109 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + 155, + 209 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + 190, + 137 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + 190, + 177 + ] + }, + { + "t": 42, + "s": [ + 190, + 169 + ] + } + ], + "a": 1 + }, + "s": { + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + 100, + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + 100, + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + 100, + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + 100, + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + 100, + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + 100, + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + 100, + 100 + ] + }, + { + "t": 42, + "s": [ + 100, + 100 + ] + } + ], + "a": 1 + }, + "sk": { + "a": 0, + "k": 0 + }, + "sa": { + "a": 0, + "k": 0 + } + }, + "shapes": [ + { + "ty": "sh", + "nm": "", + "bm": 0, + "d": 1, + "ks": { + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -44.15 + ], + [ + 0, + 0 + ], + [ + 44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 44.15 + ] + ], + "o": [ + [ + 0, + -44.15 + ], + [ + 0, + 0 + ], + [ + 44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 44.15 + ], + [ + 0, + 0 + ], + [ + -44.15, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + 80 + ], + [ + 80, + 0 + ], + [ + 300, + 0 + ], + [ + 380, + 80 + ], + [ + 380, + 258 + ], + [ + 300, + 338 + ], + [ + 80, + 338 + ], + [ + 0, + 258 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -35.87, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -35.87 + ], + [ + 0, + 0 + ], + [ + 35.87, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 35.87 + ] + ], + "o": [ + [ + 0, + -35.87 + ], + [ + 0, + 0 + ], + [ + 35.87, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 35.87 + ], + [ + 0, + 0 + ], + [ + -35.87, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + 65 + ], + [ + 65, + 0 + ], + [ + 601, + 0 + ], + [ + 666, + 65 + ], + [ + 666, + 65 + ], + [ + 601, + 130 + ], + [ + 65, + 130 + ], + [ + 0, + 65 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -44.15 + ], + [ + 0, + 0 + ], + [ + 44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 44.15 + ] + ], + "o": [ + [ + 0, + -44.15 + ], + [ + 0, + 0 + ], + [ + 44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 44.15 + ], + [ + 0, + 0 + ], + [ + -44.15, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + 80 + ], + [ + 80, + 0 + ], + [ + 154, + 0 + ], + [ + 234, + 80 + ], + [ + 234, + 410 + ], + [ + 154, + 490 + ], + [ + 80, + 490 + ], + [ + 0, + 410 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -44.15 + ], + [ + 0, + 0 + ], + [ + 44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 44.15 + ] + ], + "o": [ + [ + 0, + -44.15 + ], + [ + 0, + 0 + ], + [ + 44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 44.15 + ], + [ + 0, + 0 + ], + [ + -44.15, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + 80 + ], + [ + 80, + 0 + ], + [ + 406, + 0 + ], + [ + 486, + 80 + ], + [ + 486, + 138 + ], + [ + 406, + 218 + ], + [ + 80, + 218 + ], + [ + 0, + 138 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -44.15 + ], + [ + 0, + 0 + ], + [ + 44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 44.15 + ] + ], + "o": [ + [ + 0, + -44.15 + ], + [ + 0, + 0 + ], + [ + 44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 44.15 + ], + [ + 0, + 0 + ], + [ + -44.15, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + 80 + ], + [ + 80, + 0 + ], + [ + 230, + 0 + ], + [ + 310, + 80 + ], + [ + 310, + 338 + ], + [ + 230, + 418 + ], + [ + 80, + 418 + ], + [ + 0, + 338 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -44.15 + ], + [ + 0, + 0 + ], + [ + 44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 44.15 + ] + ], + "o": [ + [ + 0, + -44.15 + ], + [ + 0, + 0 + ], + [ + 44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 44.15 + ], + [ + 0, + 0 + ], + [ + -44.15, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + 80 + ], + [ + 80, + 0 + ], + [ + 300, + 0 + ], + [ + 380, + 80 + ], + [ + 380, + 194 + ], + [ + 300, + 274 + ], + [ + 80, + 274 + ], + [ + 0, + 194 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -44.15 + ], + [ + 0, + 0 + ], + [ + 44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 44.15 + ] + ], + "o": [ + [ + 0, + -44.15 + ], + [ + 0, + 0 + ], + [ + 44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 44.15 + ], + [ + 0, + 0 + ], + [ + -44.15, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + 80 + ], + [ + 80, + 0 + ], + [ + 300, + 0 + ], + [ + 380, + 80 + ], + [ + 380, + 274 + ], + [ + 300, + 354 + ], + [ + 80, + 354 + ], + [ + 0, + 274 + ] + ], + "c": true + } + ] + }, + { + "t": 42, + "s": [ + { + "i": [ + [ + 0, + 0 + ], + [ + -44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + -44.15 + ], + [ + 0, + 0 + ], + [ + 44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 44.15 + ] + ], + "o": [ + [ + 0, + -44.15 + ], + [ + 0, + 0 + ], + [ + 44.15, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 44.15 + ], + [ + 0, + 0 + ], + [ + -44.15, + 0 + ], + [ + 0, + 0 + ] + ], + "v": [ + [ + 0, + 80 + ], + [ + 80, + 0 + ], + [ + 300, + 0 + ], + [ + 380, + 80 + ], + [ + 380, + 258 + ], + [ + 300, + 338 + ], + [ + 80, + 338 + ], + [ + 0, + 258 + ] + ], + "c": true + } + ] + } + ], + "a": 1 + } + }, + { + "ty": "fl", + "nm": "", + "bm": 0, + "c": { + "sid": "c1", + "a": 1, + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + 0.271, + 0.271, + 0.271 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + 0.271, + 0.271, + 0.271 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + 0.271, + 0.271, + 0.271 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + 0.271, + 0.271, + 0.271 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + 0.271, + 0.271, + 0.271 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + 0.271, + 0.271, + 0.271 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + 0.271, + 0.271, + 0.271 + ] + }, + { + "t": 42, + "s": [ + 0.271, + 0.271, + 0.271 + ] + } + ] + }, + "o": { + "a": 1, + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + 100 + ] + }, + { + "t": 42, + "s": [ + 100 + ] + } + ] + }, + "r": 1 + } + ], + "hasMask": false, + "ip": 0, + "op": 43, + "st": 0, + "hd": false + }, + { + "ind": 2, + "ty": 4, + "nm": "E", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + 100 + ] + }, + { + "t": 42, + "s": [ + 100 + ] + } + ] + }, + "r": { + "a": 1, + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + 0 + ] + }, + { + "t": 42, + "s": [ + 0 + ] + } + ] + }, + "p": { + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + 750, + 594 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + 750, + 802 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + 750, + 226 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + 750, + 664 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + 750, + 318 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + 750, + 612 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + 750, + 514 + ] + }, + { + "t": 42, + "s": [ + 750, + 594 + ] + } + ], + "a": 1 + }, + "a": { + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + 190, + 190 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + 190, + 190 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + 190, + 190 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + 190, + 190 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + 190, + 190 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + 190, + 190 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + 190, + 190 + ] + }, + { + "t": 42, + "s": [ + 190, + 190 + ] + } + ], + "a": 1 + }, + "s": { + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + 100, + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + 100, + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + 100, + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + 100, + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + 100, + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + 100, + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + 100, + 100 + ] + }, + { + "t": 42, + "s": [ + 100, + 100 + ] + } + ], + "a": 1 + }, + "sk": { + "a": 0, + "k": 0 + }, + "sa": { + "a": 0, + "k": 0 + } + }, + "shapes": [ + { + "ty": "sh", + "nm": "", + "bm": 0, + "d": 1, + "ks": { + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + { + "i": [ + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ], + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ] + ], + "o": [ + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ], + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ] + ], + "v": [ + [ + 190, + 0 + ], + [ + 380, + 190 + ], + [ + 190, + 380 + ], + [ + 0, + 190 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + { + "i": [ + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ], + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ] + ], + "o": [ + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ], + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ] + ], + "v": [ + [ + 190, + 0 + ], + [ + 380, + 190 + ], + [ + 190, + 380 + ], + [ + 0, + 190 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + { + "i": [ + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ], + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ] + ], + "o": [ + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ], + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ] + ], + "v": [ + [ + 190, + 0 + ], + [ + 380, + 190 + ], + [ + 190, + 380 + ], + [ + 0, + 190 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + { + "i": [ + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ], + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ] + ], + "o": [ + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ], + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ] + ], + "v": [ + [ + 190, + 0 + ], + [ + 380, + 190 + ], + [ + 190, + 380 + ], + [ + 0, + 190 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + { + "i": [ + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ], + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ] + ], + "o": [ + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ], + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ] + ], + "v": [ + [ + 190, + 0 + ], + [ + 380, + 190 + ], + [ + 190, + 380 + ], + [ + 0, + 190 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + { + "i": [ + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ], + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ] + ], + "o": [ + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ], + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ] + ], + "v": [ + [ + 190, + 0 + ], + [ + 380, + 190 + ], + [ + 190, + 380 + ], + [ + 0, + 190 + ] + ], + "c": true + } + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + { + "i": [ + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ], + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ] + ], + "o": [ + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ], + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ] + ], + "v": [ + [ + 190, + 0 + ], + [ + 380, + 190 + ], + [ + 190, + 380 + ], + [ + 0, + 190 + ] + ], + "c": true + } + ] + }, + { + "t": 42, + "s": [ + { + "i": [ + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ], + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ] + ], + "o": [ + [ + 104.86, + 0 + ], + [ + 0, + 104.86 + ], + [ + -104.86, + 0 + ], + [ + 0, + -104.86 + ] + ], + "v": [ + [ + 190, + 0 + ], + [ + 380, + 190 + ], + [ + 190, + 380 + ], + [ + 0, + 190 + ] + ], + "c": true + } + ] + } + ], + "a": 1 + } + }, + { + "ty": "fl", + "nm": "", + "bm": 0, + "c": { + "sid": "c0", + "a": 1, + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + 1, + 0.377, + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + 1, + 0.377, + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + 1, + 0.377, + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + 1, + 0.377, + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + 1, + 0.377, + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + 1, + 0.377, + 0 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + 1, + 0.377, + 0 + ] + }, + { + "t": 42, + "s": [ + 1, + 0.377, + 0 + ] + } + ] + }, + "o": { + "a": 1, + "k": [ + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 0, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 6, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 12, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 18, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 24, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 30, + "s": [ + 100 + ] + }, + { + "i": { + "x": 0.515, + "y": 0.955 + }, + "o": { + "x": 0.455, + "y": 0.03 + }, + "t": 36, + "s": [ + 100 + ] + }, + { + "t": 42, + "s": [ + 100 + ] + } + ] + }, + "r": 1 + } + ], + "hasMask": false, + "ip": 0, + "op": 43, + "st": 0, + "hd": false + }, + { + "ind": 3, + "ty": 1, + "nm": "B", + "sr": 1, + "ks": { + "o": { + "a": 0, + "k": 100 + }, + "r": { + "a": 0, + "k": 0 + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "a": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ] + }, + "sk": { + "a": 0, + "k": 0 + }, + "sa": { + "a": 0, + "k": 0 + } + }, + "hasMask": false, + "ip": 0, + "op": 43, + "st": 0, + "hd": false, + "sc": "#ffffff", + "sh": 1500, + "sw": 1500 + } + ] +} \ No newline at end of file diff --git a/packages/react/tests/__fixtures__/test.lottie b/packages/react/tests/__fixtures__/test.lottie new file mode 100644 index 0000000000000000000000000000000000000000..8ea125cad7f4242638048c69c023c76d808915db GIT binary patch literal 1446 zcmWIWW@Zs#U|`^2SRNG@`S7RJolqbz9*B8?I5#mbGcC2aL@%p2KhL(ukgLIfhvEOE z$m~LaH&^OAoR>N(-Et6)@%o>qwte@*bqBjcJGfb9BsK_hUt1D$HaTr?d|%3guNfy=k%x`tPEEMWw%&zxXO?J1us5 zRC&@qi^-4jewJ*mS~R=YLcKXy{l~Jz?Z<3?#WDo07PmB6(bQOX^$<(*|m1RiiS%zeo}xnH;7u;JUap+#xFKc8&B=CL;Cv;gzk+^1V~ zowz1CctpLN^zdjyMz(UgtB0Y^oYTvvDO$(`y`8v8z_YkZxa}Kz$)Q%&m@ht_ch8(U zd{jbtwvhai$Ob(GC$d;T!`s+v;;)d!0-E0DToX412Y!NKvyLV!v`(4rRetx~D{F+ZmWH~;Oj$>U?Y#49< zHzH6iV8^z$IHNM7-1fMlMJhK;Km0o5o&S2m9ut!nds_}W>Pfxd@0MAgJ4?ZzH)Bho zm9*44?f(8p+X@91F3EknZtBXtbELNRt*R2ssbvmdG2@QNwhET3KIpseVd(9=Q=cX<%YC-)`!*wG=fU7hC6&8p zn;fiB-j)5t@6ntNA3M8@psg0Azx~!l(aC$vL0wTl>~cyZds|Jpujc+wW#Y>^FSzSp5&z?CHh@{I01251yt@&`*|3 z;n}v4$7q_P-8P=2iL;HTIBMKp9kEK`1n26urCdyYOEe{8w3--BKIrXV&T;95ko{9v zfz^LsZ0l0UbF*K;!6dfy&jk%OFLrm!ARC*miI*6IdVtwtisIXkKgvW~jwFkwtZ9-- z7JcHfx{7I$@dxF9eKQ`$$Sj#Cc5^xN_l@G3K?++YR7ssFJU`)q-iG*?DW50&vD$Vq z_o{4PUd7?6gByACyPw-{dzkz2v%C2o=bKSwKR^8c5_$h@^5y-%K5ev4(Dd~defEi` zhf(Wkf=q-Vck%(RN(tt$Q%5W|eEVg0{#ez~6VClt6twwyWpg7smVRk&+H14L|KrE4 zlCn4Vb6WIidBz+ym?UT&#D3fRxA}za`;zt)ub7bVTy(zPUHM-9zio@S?N>Lb|7QsB uW@Hj!z+E~53n(OjQdXjCMK9P8`Wk>tq+%|>o0SbD$pnNYKw5?s!~+1HB6Z&Y literal 0 HcmV?d00001 diff --git a/packages/react/tests/__snapshots__/dotlottie-react.spec.tsx.snap b/packages/react/tests/__snapshots__/dotlottie-react.spec.tsx.snap new file mode 100644 index 00000000..314b8f0f --- /dev/null +++ b/packages/react/tests/__snapshots__/dotlottie-react.spec.tsx.snap @@ -0,0 +1,25 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`'DotLottieReact' > basic 1`] = ` +
+
+ +
+
+`; + +exports[`'DotLottieWorkerReact' > basic 1`] = ` +
+
+ +
+
+`; diff --git a/packages/react/tests/dotlottie-react.spec.tsx b/packages/react/tests/dotlottie-react.spec.tsx new file mode 100644 index 00000000..6e099e64 --- /dev/null +++ b/packages/react/tests/dotlottie-react.spec.tsx @@ -0,0 +1,687 @@ +import { DotLottie, DotLottieWorker } from '@lottiefiles/dotlottie-web'; +import { userEvent } from '@testing-library/user-event'; +import React from 'react'; +import { afterEach, describe, expect, test, vi } from 'vitest'; +import type { ComponentRenderOptions, RenderResult } from 'vitest-browser-react'; +import { cleanup, render as vitestRender } from 'vitest-browser-react'; + +import { DotLottieReact, DotLottieWorkerReact } from '../src'; + +// eslint-disable-next-line node/no-unsupported-features/node-builtins +const dotLottieSrc = new URL('./__fixtures__/test.lottie', import.meta.url).href; +// eslint-disable-next-line node/no-unsupported-features/node-builtins +const lottieSrc = new URL('./__fixtures__/test.json', import.meta.url).href; + +const Wrapper: React.FC<{ children: React.ReactNode }> = ({ children }) => { + return <>{children}; +}; + +const render = (ui: React.ReactNode, options?: ComponentRenderOptions): RenderResult => + vitestRender(ui, { wrapper: Wrapper, ...options }); + +describe.each([ + { component: DotLottieReact, instanceType: DotLottie }, + { component: DotLottieWorkerReact, instanceType: DotLottieWorker }, +])('$component.name', ({ component: Component, instanceType }) => { + afterEach(() => { + cleanup(); + }); + + test('basic', async () => { + const onLoad = vi.fn(); + const onDestroy = vi.fn(); + const onComplete = vi.fn(); + const dotLottieRefCallback = vi.fn(); + + const { container, unmount } = render( + , + ); + + expect(container).toMatchSnapshot(); + + await vi.waitFor(() => { + expect(dotLottieRefCallback).toHaveBeenCalledTimes(1); + }); + + const dotLottie = dotLottieRefCallback.mock.calls[0]?.[0]; + + expect(dotLottie).toBeInstanceOf(instanceType); + + dotLottie?.addEventListener('load', onLoad); + dotLottie?.addEventListener('destroy', onDestroy); + dotLottie?.addEventListener('complete', onComplete); + + await vi.waitFor(() => { + expect(onLoad).toHaveBeenCalledTimes(1); + }); + + await vi.waitFor( + () => { + expect(onComplete).toHaveBeenCalledTimes(1); + }, + { timeout: dotLottie?.duration * 1000 + 100 }, + ); + + unmount(); + + await vi.waitFor(() => { + expect(onDestroy).toHaveBeenCalledTimes(1); + }); + }); + + test('calls dotLottie.setLoop when loop prop changes', async () => { + const onLoad = vi.fn(); + const dotLottieRefCallback = vi.fn(); + + const { rerender } = render(); + + await vi.waitFor(() => { + expect(dotLottieRefCallback).toHaveBeenCalledTimes(1); + }); + + const dotLottie = dotLottieRefCallback.mock.calls[0]?.[0]; + + const setLoop = vi.spyOn(dotLottie, 'setLoop'); + + dotLottie?.addEventListener('load', onLoad); + + await vi.waitFor(() => { + expect(onLoad).toHaveBeenCalledTimes(1); + }); + + expect(dotLottie?.loop).toBe(false); + + rerender(); + + await vi.waitFor(() => { + expect(setLoop).toHaveBeenCalledTimes(1); + }); + + expect(setLoop).toHaveBeenCalledWith(true); + + await vi.waitFor(() => { + expect(dotLottie?.loop).toBe(true); + }); + + rerender(); + + await vi.waitFor(() => { + expect(setLoop).toHaveBeenCalledTimes(2); + }); + + expect(setLoop).toHaveBeenCalledWith(false); + + await vi.waitFor(() => { + expect(dotLottie?.loop).toBe(false); + }); + }); + + test('calls dotLottie.setSpeed when speed prop changes', async () => { + const onLoad = vi.fn(); + const dotLottieRefCallback = vi.fn(); + + const { rerender } = render(); + + await vi.waitFor(() => { + expect(dotLottieRefCallback).toHaveBeenCalledTimes(1); + }); + + const dotLottie = dotLottieRefCallback.mock.calls[0]?.[0]; + + dotLottie?.addEventListener('load', onLoad); + + await vi.waitFor(() => { + expect(onLoad).toHaveBeenCalledTimes(1); + }); + + const setSpeed = vi.spyOn(dotLottie, 'setSpeed'); + + expect(dotLottie?.speed).toBe(1); + + rerender(); + + await vi.waitFor(() => { + expect(setSpeed).toHaveBeenCalledTimes(1); + }); + + expect(setSpeed).toHaveBeenCalledWith(2); + + await vi.waitFor(() => { + expect(dotLottie?.speed).toBe(2); + }); + + rerender(); + + await vi.waitFor(() => { + expect(setSpeed).toHaveBeenCalledTimes(2); + }); + + expect(setSpeed).toHaveBeenCalledWith(1); + + await vi.waitFor(() => { + expect(dotLottie?.speed).toBe(1); + }); + }); + + test('calls dotLottie.setMode when mode prop changes', async () => { + const onLoad = vi.fn(); + const dotLottieRefCallback = vi.fn(); + + const { rerender } = render(); + + await vi.waitFor(() => { + expect(dotLottieRefCallback).toHaveBeenCalledTimes(1); + }); + + const dotLottie = dotLottieRefCallback.mock.calls[0]?.[0]; + + dotLottie?.addEventListener('load', onLoad); + + await vi.waitFor(() => { + expect(onLoad).toHaveBeenCalledTimes(1); + }); + + const setMode = vi.spyOn(dotLottie, 'setMode'); + + expect(dotLottie?.mode).toBe('forward'); + + rerender(); + + await vi.waitFor(() => { + expect(setMode).toHaveBeenCalledTimes(1); + }); + + expect(setMode).toHaveBeenCalledWith('reverse'); + + await vi.waitFor(() => { + expect(dotLottie?.mode).toBe('reverse'); + }); + + rerender(); + + await vi.waitFor(() => { + expect(setMode).toHaveBeenCalledTimes(2); + }); + + expect(setMode).toHaveBeenCalledWith('forward'); + + await vi.waitFor(() => { + expect(dotLottie?.mode).toBe('forward'); + }); + }); + + test('calls dotLottie.setUseFrameInterpolation when useFrameInterpolation prop changes', async () => { + const onLoad = vi.fn(); + const dotLottieRefCallback = vi.fn(); + + const { rerender } = render(); + + await vi.waitFor(() => { + expect(dotLottieRefCallback).toHaveBeenCalledTimes(1); + }); + + const dotLottie = dotLottieRefCallback.mock.calls[0]?.[0]; + + const setUseFrameInterpolation = vi.spyOn(dotLottie, 'setUseFrameInterpolation'); + + dotLottie?.addEventListener('load', onLoad); + + await vi.waitFor(() => { + expect(onLoad).toHaveBeenCalledTimes(1); + }); + + expect(dotLottie?.useFrameInterpolation).toBe(true); + + rerender( + , + ); + + await vi.waitFor(() => { + expect(setUseFrameInterpolation).toHaveBeenCalledTimes(1); + }); + + expect(setUseFrameInterpolation).toHaveBeenCalledWith(false); + + await vi.waitFor(() => { + expect(dotLottie?.useFrameInterpolation).toBe(false); + }); + + rerender(); + + await vi.waitFor(() => { + expect(setUseFrameInterpolation).toHaveBeenCalledTimes(2); + }); + + expect(setUseFrameInterpolation).toHaveBeenCalledWith(true); + + await vi.waitFor(() => { + expect(dotLottie?.useFrameInterpolation).toBe(true); + }); + }); + + test('calls dotLottie.setBackgroundColor when backgroundColor prop changes', async () => { + const onLoad = vi.fn(); + const dotLottieRefCallback = vi.fn(); + + const { rerender } = render(); + + await vi.waitFor(() => { + expect(dotLottieRefCallback).toHaveBeenCalledTimes(1); + }); + + const dotLottie = dotLottieRefCallback.mock.calls[0]?.[0]; + + const setBackgroundColor = vi.spyOn(dotLottie, 'setBackgroundColor'); + + dotLottie?.addEventListener('load', onLoad); + + await vi.waitFor(() => { + expect(onLoad).toHaveBeenCalledTimes(1); + }); + + expect(dotLottie?.backgroundColor).toBe(''); + + rerender( + , + ); + + await vi.waitFor(() => { + expect(setBackgroundColor).toHaveBeenCalledTimes(1); + }); + + expect(setBackgroundColor).toHaveBeenCalledWith('#00ff00ff'); + + rerender(); + + await vi.waitFor(() => { + expect(setBackgroundColor).toHaveBeenCalledTimes(2); + }); + + expect(dotLottie?.backgroundColor).toBe(''); + }); + + test('calls dotLottie.setMarker when marker prop changes', async () => { + const onLoad = vi.fn(); + const dotLottieRefCallback = vi.fn(); + + const { rerender } = render(); + + await vi.waitFor(() => { + expect(dotLottieRefCallback).toHaveBeenCalledTimes(1); + }); + + const dotLottie = dotLottieRefCallback.mock.calls[0]?.[0]; + + const setMarker = vi.spyOn(dotLottie, 'setMarker'); + + dotLottie?.addEventListener('load', onLoad); + + await vi.waitFor(() => { + expect(onLoad).toHaveBeenCalledTimes(1); + }); + + expect(dotLottie?.marker).toBe(''); + + rerender(); + + await vi.waitFor(() => { + expect(setMarker).toHaveBeenCalledTimes(1); + }); + + expect(setMarker).toHaveBeenCalledWith('Marker_1'); + + rerender(); + + await vi.waitFor(() => { + expect(setMarker).toHaveBeenCalledTimes(2); + }); + + expect(dotLottie?.marker).toBe(''); + }); + + test.todo('calls dotLottie.setSegment & dotLottie.resetSegment when segment prop changes', async () => { + const onLoad = vi.fn(); + const dotLottieRefCallback = vi.fn(); + + const { rerender } = render(); + + await vi.waitFor(() => { + expect(dotLottieRefCallback).toHaveBeenCalledTimes(1); + }); + + const dotLottie = dotLottieRefCallback.mock.calls[0]?.[0]; + + const setSegment = vi.spyOn(dotLottie, 'setSegment'); + const resetSegment = vi.spyOn(dotLottie, 'resetSegment'); + + dotLottie?.addEventListener('load', onLoad); + + await vi.waitFor(() => { + expect(onLoad).toHaveBeenCalledTimes(1); + }); + + expect(dotLottie?.segment).toBeUndefined(); + + rerender(); + + await vi.waitFor(() => { + expect(setSegment).toHaveBeenCalledTimes(1); + }); + + expect(setSegment).toHaveBeenCalledWith(0, 10); + + rerender(); + + await vi.waitFor(() => { + expect(resetSegment).toHaveBeenCalledTimes(1); + }); + + expect(dotLottie?.segment).toBeUndefined(); + }); + + test.todo('calls dotLottie.setTheme & dotLottie.resetTheme when themeId prop changes', async () => { + const onLoad = vi.fn(); + const dotLottieRefCallback = vi.fn(); + + const { rerender } = render(); + + await vi.waitFor(() => { + expect(dotLottieRefCallback).toHaveBeenCalledTimes(1); + }); + + const dotLottie = dotLottieRefCallback.mock.calls[0]?.[0]; + + const setTheme = vi.spyOn(dotLottie, 'setTheme'); + const resetTheme = vi.spyOn(dotLottie, 'resetTheme'); + + dotLottie?.addEventListener('load', onLoad); + + await vi.waitFor(() => { + expect(onLoad).toHaveBeenCalledTimes(1); + }); + + expect(dotLottie?.themeId).toBeUndefined(); + + rerender(); + + await vi.waitFor(() => { + expect(setTheme).toHaveBeenCalledTimes(1); + }); + + expect(setTheme).toHaveBeenCalledWith('Theme_1'); + + rerender(); + + await vi.waitFor(() => { + expect(resetTheme).toHaveBeenCalledTimes(1); + }); + + expect(dotLottie?.themeId).toBeUndefined(); + }); + + test('playOnHover', async () => { + const user = userEvent.setup(); + + const onLoad = vi.fn(); + const dotLottieRefCallback = vi.fn(); + + const screen = render( + , + ); + + const dotLottie = dotLottieRefCallback.mock.calls[0]?.[0]; + + dotLottie?.addEventListener('load', onLoad); + + await vi.waitFor(() => { + expect(onLoad).toHaveBeenCalledTimes(1); + }); + + const play = vi.spyOn(dotLottie, 'play'); + const pause = vi.spyOn(dotLottie, 'pause'); + + let canvasElement = screen.getByTestId('dotLottie-canvas').element(); + + await user.hover(canvasElement); + + await vi.waitFor(() => { + expect(play).toHaveBeenCalledTimes(1); + }); + + await user.unhover(canvasElement); + + await vi.waitFor(() => { + expect(pause).toHaveBeenCalledTimes(1); + }); + + play.mockClear(); + pause.mockClear(); + + // shouldn't call play/pause again as the playOnHover prop is undefined + screen.rerender( + , + ); + + canvasElement = screen.getByTestId('dotLottie-canvas').element(); + + let mouseEnterCount = 0; + let mouseLeaveCount = 0; + + canvasElement.addEventListener('mouseenter', () => { + mouseEnterCount += 1; + }); + canvasElement.addEventListener('mouseleave', () => { + mouseLeaveCount += 1; + }); + + await user.hover(canvasElement); + + await vi.waitFor(() => { + expect(mouseEnterCount).toBe(1); + expect(mouseLeaveCount).toBe(0); + }); + + expect(play).not.toHaveBeenCalled(); + + await user.unhover(canvasElement); + + await vi.waitFor(() => { + expect(mouseEnterCount).toBe(1); + expect(mouseLeaveCount).toBe(1); + }); + + expect(pause).not.toHaveBeenCalled(); + }); + + test('calls dotLottie.loadAnimation when animationId prop changes', async () => { + const onLoad = vi.fn(); + const dotLottieRefCallback = vi.fn(); + + const { rerender } = render(); + + await vi.waitFor(() => { + expect(dotLottieRefCallback).toHaveBeenCalledTimes(1); + }); + + const dotLottie = dotLottieRefCallback.mock.calls[0]?.[0]; + + dotLottie?.addEventListener('load', onLoad); + + await vi.waitFor(() => { + expect(onLoad).toHaveBeenCalledTimes(1); + }); + + const loadAnimation = vi.spyOn(dotLottie, 'loadAnimation'); + + rerender( + , + ); + + await vi.waitFor(() => { + expect(loadAnimation).toHaveBeenCalledTimes(1); + }); + + expect(loadAnimation).toHaveBeenCalledWith('Animation_1'); + + rerender(); + + await vi.waitFor(() => { + expect(loadAnimation).toHaveBeenCalledTimes(2); + }); + + expect(loadAnimation).toHaveBeenCalledWith(''); + + await vi.waitFor(() => { + expect(dotLottie?.activeAnimationId).toBe(''); + }); + }); + + test('calls dotLottie.setRenderConfig when renderConfig prop changes', async () => { + const onLoad = vi.fn(); + const dotLottieRefCallback = vi.fn(); + + const { rerender } = render(); + + await vi.waitFor(() => { + expect(dotLottieRefCallback).toHaveBeenCalledTimes(1); + }); + + const dotLottie = dotLottieRefCallback.mock.calls[0]?.[0]; + + dotLottie?.addEventListener('load', onLoad); + + await vi.waitFor(() => { + expect(onLoad).toHaveBeenCalledTimes(1); + }); + + const defaultRenderConfig = dotLottie?.renderConfig; + + const setRenderConfig = vi.spyOn(dotLottie, 'setRenderConfig'); + + rerender( + , + ); + + await vi.waitFor(() => { + expect(setRenderConfig).toHaveBeenCalledTimes(1); + }); + + expect(setRenderConfig).toHaveBeenCalledWith({ + devicePixelRatio: 0.5, + freezeOnOffscreen: false, + }); + + rerender(); + + await vi.waitFor(() => { + expect(setRenderConfig).toHaveBeenCalledTimes(2); + }); + + expect(setRenderConfig).toHaveBeenCalledWith({}); + + // Falls back to the default values + expect(dotLottie?.renderConfig).toEqual(defaultRenderConfig); + }); + + test('calls dotLottie.load when data prop changes', async () => { + const onLoad = vi.fn(); + const dotLottieRefCallback = vi.fn(); + + let response = await fetch(lottieSrc); + const animationData = await response.json(); + + const { rerender } = render( + , + ); + + await vi.waitFor(() => { + expect(dotLottieRefCallback).toHaveBeenCalledTimes(1); + }); + + const dotLottie = dotLottieRefCallback.mock.calls[0]?.[0]; + + dotLottie?.addEventListener('load', onLoad); + + await vi.waitFor(() => { + expect(onLoad).toHaveBeenCalledTimes(1); + }); + + const load = vi.spyOn(dotLottie, 'load'); + + response = await fetch(dotLottieSrc); + const dotLottieAnimationData = await response.arrayBuffer(); + + rerender( + , + ); + + await vi.waitFor(() => { + expect(load).toHaveBeenCalledTimes(1); + }); + + expect(load).toHaveBeenCalledWith({ + data: dotLottieAnimationData, + loop: true, + autoplay: true, + speed: 2, + }); + }); + + test('calls dotLottie.load when src prop changes', async () => { + const onLoad = vi.fn(); + const dotLottieRefCallback = vi.fn(); + + const { rerender } = render(); + + await vi.waitFor(() => { + expect(dotLottieRefCallback).toHaveBeenCalledTimes(1); + }); + + const dotLottie = dotLottieRefCallback.mock.calls[0]?.[0]; + + dotLottie?.addEventListener('load', onLoad); + + await vi.waitFor(() => { + expect(onLoad).toHaveBeenCalledTimes(1); + }); + + const load = vi.spyOn(dotLottie, 'load'); + + rerender(); + + await vi.waitFor(() => { + expect(load).toHaveBeenCalledTimes(1); + }); + + expect(load).toHaveBeenCalledWith({ + src: lottieSrc, + loop: true, + autoplay: true, + speed: 2, + }); + }); +}); diff --git a/packages/react/tsup.config.cjs b/packages/react/tsup.config.cjs index 22f8c4dc..76733ccd 100644 --- a/packages/react/tsup.config.cjs +++ b/packages/react/tsup.config.cjs @@ -7,14 +7,12 @@ module.exports = defineConfig({ treeshake: true, clean: true, dts: true, - minify: false, - sourcemap: false, + minify: true, + sourcemap: true, entry: ['./src/index.ts'], format: ['esm'], platform: 'browser', - target: ['es2015', 'node18'], + target: ['es2020'], tsconfig: 'tsconfig.build.json', - // To provide an esm build without any external dependencies - noExternal: Object.keys(require('./package.json').dependencies), external: ['react'], }); diff --git a/packages/react/vitest.config.ts b/packages/react/vitest.config.ts new file mode 100644 index 00000000..647ff9bc --- /dev/null +++ b/packages/react/vitest.config.ts @@ -0,0 +1,29 @@ +import react from '@vitejs/plugin-react'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + plugins: [react()], + test: { + browser: { + enabled: true, + name: 'chromium', + provider: 'playwright', + screenshotFailures: false, + }, + retry: 1, + coverage: { + provider: 'istanbul', + include: ['src/**/*.{ts,tsx}'], + reporter: ['json', 'json-summary', 'text-summary', 'lcov'], + thresholds: { + statements: 95, + branches: 89, + functions: 95, + lines: 95, + }, + }, + testTimeout: 10000, + cache: false, + setupFiles: ['./setup-file.ts'], + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a5188a19..e5b80a41 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,8 +30,8 @@ importers: specifier: 2.0.0 version: 2.0.0(typescript@5.0.4) '@size-limit/preset-big-lib': - specifier: ^11.1.4 - version: 11.1.4(@swc/core@1.3.107(@swc/helpers@0.5.5))(size-limit@11.1.4) + specifier: ^11.1.6 + version: 11.1.6(@swc/core@1.3.107(@swc/helpers@0.5.5))(size-limit@11.1.6) cross-env: specifier: 7.0.3 version: 7.0.3 @@ -57,8 +57,8 @@ importers: specifier: 11.0.0 version: 11.0.0 size-limit: - specifier: ^11.1.4 - version: 11.1.4 + specifier: ^11.1.6 + version: 11.1.6 svelte-loader: specifier: ^3.2.3 version: 3.2.3(svelte@5.0.0-next.55) @@ -393,21 +393,42 @@ importers: specifier: workspace:* version: link:../web devDependencies: + '@testing-library/user-event': + specifier: ^14.5.2 + version: 14.5.2(@testing-library/dom@10.4.0) '@types/react': - specifier: ^19.0.1 - version: 19.0.1 + specifier: ^18 + version: 18.2.74 + '@vitejs/plugin-react': + specifier: ^4.2.1 + version: 4.2.1(vite@5.3.4(@types/node@22.7.6)(lightningcss@1.26.0)(terser@5.31.1)) + '@vitest/browser': + specifier: 2.1.0-beta.5 + version: 2.1.0-beta.5(@types/node@22.7.6)(playwright@1.45.2)(typescript@5.0.4)(vitest@2.1.0-beta.5)(webdriverio@8.39.1(encoding@0.1.13)(typescript@5.0.4)) + '@vitest/coverage-istanbul': + specifier: 2.1.0-beta.5 + version: 2.1.0-beta.5(vitest@2.1.0-beta.5(@types/node@22.7.6)(@vitest/browser@2.1.0-beta.5)(lightningcss@1.26.0)(terser@5.31.1)) cross-env: specifier: 7.0.3 version: 7.0.3 + playwright: + specifier: 1.45.2 + version: 1.45.2 react: - specifier: ^19.0.0 - version: 19.0.0 + specifier: ^18 + version: 18.2.0 tsup: specifier: 8.3.5 - version: 8.3.5(@swc/core@1.3.107(@swc/helpers@0.5.5))(jiti@1.21.0)(postcss@8.4.39)(typescript@5.0.4)(yaml@2.4.5) + version: 8.3.5(@swc/core@1.3.107(@swc/helpers@0.5.5))(jiti@2.4.1)(postcss@8.4.39)(typescript@5.0.4)(yaml@2.4.5) typescript: specifier: 5.0.4 version: 5.0.4 + vitest: + specifier: 2.1.0-beta.5 + version: 2.1.0-beta.5(@types/node@22.7.6)(@vitest/browser@2.1.0-beta.5)(lightningcss@1.26.0)(terser@5.31.1) + vitest-browser-react: + specifier: ^0.0.4 + version: 0.0.4(@types/react-dom@18.2.24)(@types/react@18.2.74)(@vitest/browser@2.1.0-beta.5(@types/node@22.7.6)(playwright@1.45.2)(typescript@5.0.4)(vitest@2.1.0-beta.5)(webdriverio@8.39.1(encoding@0.1.13)(typescript@5.0.4)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vitest@2.1.0-beta.5(@types/node@22.7.6)(@vitest/browser@2.1.0-beta.5)(lightningcss@1.26.0)(terser@5.31.1)) packages/solid: dependencies: @@ -546,7 +567,7 @@ importers: version: 1.45.2 tsup: specifier: ^8.3.5 - version: 8.3.5(@swc/core@1.3.107(@swc/helpers@0.5.5))(jiti@1.21.0)(postcss@8.4.39)(typescript@5.0.4)(yaml@2.4.5) + version: 8.3.5(@swc/core@1.3.107(@swc/helpers@0.5.5))(jiti@2.4.1)(postcss@8.4.39)(typescript@5.0.4)(yaml@2.4.5) typescript: specifier: 5.0.4 version: 5.0.4 @@ -579,7 +600,7 @@ importers: version: 1.45.2 tsup: specifier: 8.2.0 - version: 8.2.0(@swc/core@1.3.107(@swc/helpers@0.5.5))(jiti@1.21.0)(postcss@8.4.39)(typescript@5.0.4)(yaml@2.4.5) + version: 8.2.0(@swc/core@1.3.107(@swc/helpers@0.5.5))(jiti@2.4.1)(postcss@8.4.39)(typescript@5.0.4)(yaml@2.4.5) typescript: specifier: 5.0.4 version: 5.0.4 @@ -644,10 +665,6 @@ packages: resolution: {integrity: sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.10': - resolution: {integrity: sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.24.7': resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} engines: {node: '>=6.9.0'} @@ -708,12 +725,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.24.9': - resolution: {integrity: sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-module-transforms@7.25.7': resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} engines: {node: '>=6.9.0'} @@ -724,10 +735,6 @@ packages: resolution: {integrity: sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.24.0': - resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} - engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.24.7': resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} engines: {node: '>=6.9.0'} @@ -778,10 +785,6 @@ packages: resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.7': resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} engines: {node: '>=6.9.0'} @@ -820,11 +823,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.24.8': - resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.25.8': resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==} engines: {node: '>=6.0.0'} @@ -904,10 +902,6 @@ packages: resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.8': - resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.7': resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} engines: {node: '>=6.9.0'} @@ -916,10 +910,6 @@ packages: resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.9': - resolution: {integrity: sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==} - engines: {node: '>=6.9.0'} - '@babel/types@7.25.8': resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==} engines: {node: '>=6.9.0'} @@ -3187,36 +3177,32 @@ packages: resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} - '@sindresorhus/merge-streams@2.2.1': - resolution: {integrity: sha512-255V7MMIKw6aQ43Wbqp9HZ+VHn6acddERTLiiLnlcPLU9PdTq9Aijl12oklAgUEblLWye+vHLzmqBx6f2TGcZw==} - engines: {node: '>=18'} - '@sitespeed.io/tracium@0.3.3': resolution: {integrity: sha512-dNZafjM93Y+F+sfwTO5gTpsGXlnc/0Q+c2+62ViqP3gkMWvHEMSKkaEHgVJLcLg3i/g19GSIPziiKpgyne07Bw==} engines: {node: '>=8'} - '@size-limit/file@11.1.4': - resolution: {integrity: sha512-QxnGj9cxhCEuqMAV01gqonXIKcc+caZqFHZpV51oL2ZJNGSPP9Q/yyf+7HbVe00faOFd1dZZwMwzZmX7HQ9LbA==} + '@size-limit/file@11.1.6': + resolution: {integrity: sha512-ojzzJMrTfcSECRnaTjGy0wNIolTCRdyqZTSWG9sG5XEoXG6PNgHXDDS6gf6YNxnqb+rWfCfVe93u6aKi3wEocQ==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - size-limit: 11.1.4 + size-limit: 11.1.6 - '@size-limit/preset-big-lib@11.1.4': - resolution: {integrity: sha512-bejHzQXW+RkWNmCRsny/MmmjshQsU0/vVKSYnZKiu8J2zWIpxZ2pFT79ud+pCQoXeH11rI/YObItcaPf+URAng==} + '@size-limit/preset-big-lib@11.1.6': + resolution: {integrity: sha512-GE93qIW9C3+8MXOsYgV0QcLfKv6B+Q8u/Jjb5rLfetDHBKoZV7HmedM/bv0vrbdcZlT8elk5P18Jo6L6yeV/8Q==} peerDependencies: - size-limit: 11.1.4 + size-limit: 11.1.6 - '@size-limit/time@11.1.4': - resolution: {integrity: sha512-TxEeDZrNWQ1uwFjQT0d4NHUG7MGGrjnKSn9CwuF+Wb4AeZWy1nb93HjPCfe8LbQedV7xRY6dV/oSiARYvReuYg==} + '@size-limit/time@11.1.6': + resolution: {integrity: sha512-NIlJEPvUIxw87gHjriHpPhvd9fIC94S9wq7OW25K7Ctn14FZ2NlOTezPCfVViPmdlXjBYdi8vjsbc7kLCF1EpA==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - size-limit: 11.1.4 + size-limit: 11.1.6 - '@size-limit/webpack@11.1.4': - resolution: {integrity: sha512-ikkvhPID8smxuBpO0VO2cgTutHcY3INPtVO4z9Qzb/ZdLV4zQ0MwtxWA9mZz92p+wLvTBKkMrewCdUYO2CIIaQ==} + '@size-limit/webpack@11.1.6': + resolution: {integrity: sha512-PTZCgwJsgdzdEj2wPFuLm0cCge8N2WbswMcKWNwMJibxQxPAmiF+sZ2F6GYBS7G7K3Fb4ovCliuN+wnnRACPNg==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - size-limit: 11.1.4 + size-limit: 11.1.6 '@solid-devtools/debugger@0.23.4': resolution: {integrity: sha512-EfTB1Eo313wztQYGJ4Ec/wE70Ay2d603VCXfT3RlyqO5QfLrQGRHX5NXC07hJpQTJJJ3tbNgzO7+ZKo76MM5uA==} @@ -3613,9 +3599,6 @@ packages: '@types/react@18.2.74': resolution: {integrity: sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==} - '@types/react@19.0.1': - resolution: {integrity: sha512-YW6614BDhqbpR5KtUYzTA+zlA7nayzJRA9ljz9CQoxthR0sDisYZLuvSMsil36t4EH/uAt8T52Xb4sVw17G+SQ==} - '@types/scheduler@0.16.8': resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} @@ -4052,50 +4035,50 @@ packages: resolution: {integrity: sha512-jY+n6jlGeK+9Tx8T659PKLwMQTGpLW5H78CSEWgZLbjbVSr2LfGR8Lx0CRktNXxAtqEVZPj16Pi74OtAhvhE6Q==} engines: {node: ^16.13 || >=18} - '@webassemblyjs/ast@1.12.1': - resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} - '@webassemblyjs/floating-point-hex-parser@1.11.6': - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - '@webassemblyjs/helper-api-error@1.11.6': - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - '@webassemblyjs/helper-buffer@1.12.1': - resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} - '@webassemblyjs/helper-numbers@1.11.6': - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} - '@webassemblyjs/helper-wasm-bytecode@1.11.6': - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} - '@webassemblyjs/helper-wasm-section@1.12.1': - resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} - '@webassemblyjs/ieee754@1.11.6': - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} - '@webassemblyjs/leb128@1.11.6': - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} - '@webassemblyjs/utf8@1.11.6': - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} - '@webassemblyjs/wasm-edit@1.12.1': - resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} - '@webassemblyjs/wasm-gen@1.12.1': - resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} - '@webassemblyjs/wasm-opt@1.12.1': - resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} - '@webassemblyjs/wasm-parser@1.12.1': - resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} - '@webassemblyjs/wast-printer@1.12.1': - resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} '@webgpu/types@0.1.21': resolution: {integrity: sha512-pUrWq3V5PiSGFLeLxoGqReTZmiiXwY3jRkIG5sLLKjyqNxrwm/04b4nw7LSmGWJcKk59XOM/YRTUwOzo4MMlow==} @@ -4141,11 +4124,6 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} - acorn-import-attributes@1.9.5: - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -4175,14 +4153,15 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} - agent-base@7.1.1: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} @@ -4376,9 +4355,6 @@ packages: axobject-query@4.0.0: resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} - b4a@1.6.4: - resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} - b4a@1.6.6: resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} @@ -4422,10 +4398,6 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - basic-ftp@5.0.3: - resolution: {integrity: sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==} - engines: {node: '>=10.0.0'} - basic-ftp@5.0.5: resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} engines: {node: '>=10.0.0'} @@ -4483,6 +4455,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.24.3: + resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + buffer-crc32@0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} @@ -4587,6 +4564,9 @@ packages: caniuse-lite@1.0.30001642: resolution: {integrity: sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==} + caniuse-lite@1.0.30001688: + resolution: {integrity: sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA==} + canvaskit-wasm@0.39.1: resolution: {integrity: sha512-Gy3lCmhUdKq+8bvDrs9t8+qf7RvcjuQn+we7vTVVyqgOVO1UVfHpsnBxkTZw+R4ApEJ3D5fKySl9TU11hmjl/A==} @@ -5227,10 +5207,6 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - data-uri-to-buffer@6.0.1: - resolution: {integrity: sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==} - engines: {node: '>= 14'} - data-uri-to-buffer@6.0.2: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} @@ -5494,6 +5470,9 @@ packages: electron-to-chromium@1.4.830: resolution: {integrity: sha512-TrPKKH20HeN0J1LHzsYLs2qwXrp8TF4nHdu4sq61ozGbzMpWhI7iIOPYPPkxeq1azMT9PZ8enPFcftbs/Npcjg==} + electron-to-chromium@1.5.73: + resolution: {integrity: sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -5514,8 +5493,8 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - enhanced-resolve@5.17.0: - resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -5612,6 +5591,10 @@ packages: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-goat@4.0.0: resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} engines: {node: '>=12'} @@ -6294,10 +6277,6 @@ packages: get-tsconfig@4.7.2: resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} - get-uri@6.0.2: - resolution: {integrity: sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==} - engines: {node: '>= 14'} - get-uri@6.0.3: resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} engines: {node: '>= 14'} @@ -6384,10 +6363,6 @@ packages: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - globby@14.0.1: - resolution: {integrity: sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==} - engines: {node: '>=18'} - globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} @@ -6575,10 +6550,6 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} - https-proxy-agent@7.0.4: - resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} - engines: {node: '>= 14'} - https-proxy-agent@7.0.5: resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} engines: {node: '>= 14'} @@ -6701,9 +6672,6 @@ packages: 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==} @@ -6957,6 +6925,10 @@ packages: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true + jiti@2.4.1: + resolution: {integrity: sha512-yPBThwecp1wS9DmoA4x4KR2h3QoslacnDR8ypuFM962kI4/456Iy1oHx2RAgh4jfZNdn0bctsdadceiBUgpU1g==} + hasBin: true + jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -7362,9 +7334,6 @@ packages: magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.10: - resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} - magic-string@0.30.14: resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==} @@ -7806,10 +7775,6 @@ packages: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} - minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} @@ -7986,6 +7951,9 @@ packages: node-releases@2.0.17: resolution: {integrity: sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + nopt@6.0.0: resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -8206,18 +8174,10 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - pac-proxy-agent@7.0.1: - resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} - engines: {node: '>= 14'} - pac-proxy-agent@7.0.2: resolution: {integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==} engines: {node: '>= 14'} - pac-resolver@7.0.0: - resolution: {integrity: sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==} - engines: {node: '>= 14'} - pac-resolver@7.0.1: resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} engines: {node: '>= 14'} @@ -8302,10 +8262,6 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} - path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} @@ -8320,10 +8276,6 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - path-type@5.0.0: - resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} - engines: {node: '>=12'} - pathe@1.1.1: resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} @@ -8834,10 +8786,6 @@ packages: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} - react@19.0.0: - resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} - engines: {node: '>=0.10.0'} - read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -9382,8 +9330,8 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - size-limit@11.1.4: - resolution: {integrity: sha512-V2JAI/Z7h8sEuxU3V+Ig3XKA5FcYbI4CZ7sh6s7wvuy+TUwDZYqw7sAqrHhQ4cgcNfPKIAHAaH8VaqOdbcwJDA==} + size-limit@11.1.6: + resolution: {integrity: sha512-S5ux2IB8rU26xwVgMskmknGMFkieaIAqDLuwgKiypk6oa4lFsie8yFPrzRFV+yrLDY2GddjXuCaVk5PveVOHiQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -9395,10 +9343,6 @@ packages: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} - slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - slice-ansi@3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} @@ -9424,10 +9368,6 @@ packages: resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} engines: {node: '>= 10'} - socks-proxy-agent@8.0.2: - resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==} - engines: {node: '>= 14'} - socks-proxy-agent@8.0.4: resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} engines: {node: '>= 14'} @@ -10280,10 +10220,6 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - unified-args@10.0.0: resolution: {integrity: sha512-PqsqxwkXpGSLiMkbjNnKU33Ffm6gso6rAvz1TlBGzMBx3gpx7ewIhViBX8HEWmy0v7pebA5PM6RkRWWaYmtfYw==} @@ -10423,6 +10359,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + update-notifier@6.0.2: resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==} engines: {node: '>=14.16'} @@ -10677,6 +10619,22 @@ packages: vite: optional: true + vitest-browser-react@0.0.4: + resolution: {integrity: sha512-4uK8zgo5eHlhrBVEPX8ejRt8Bn4gzV6OZFTPdb1en3FtgjEhhst400XkIQHUC875Q90rOO5Tc4zPpCl8YXvoxg==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + '@types/react': '>18.0.0' + '@types/react-dom': '>18.0.0' + '@vitest/browser': '>=2.1.0' + react: '>18.0.0' + react-dom: '>18.0.0' + vitest: '>=2.1.0' + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + vitest@1.2.2: resolution: {integrity: sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==} engines: {node: ^18.0.0 || >=20.0.0} @@ -10804,8 +10762,8 @@ packages: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} - webpack@5.92.1: - resolution: {integrity: sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==} + webpack@5.97.1: + resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -11102,12 +11060,12 @@ snapshots: '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-module-transforms': 7.24.7(@babel/core@7.23.2) '@babel/helpers': 7.24.4 - '@babel/parser': 7.24.7 + '@babel/parser': 7.25.8 '@babel/template': 7.24.7 '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.25.8 convert-source-map: 2.0.0 - debug: 4.3.5 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -11127,7 +11085,7 @@ snapshots: '@babel/traverse': 7.24.7 '@babel/types': 7.24.7 convert-source-map: 2.0.0 - debug: 4.3.5 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -11137,30 +11095,23 @@ snapshots: '@babel/core@7.24.9': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.10 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.24.9) '@babel/helpers': 7.24.8 - '@babel/parser': 7.24.8 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.9 + '@babel/parser': 7.25.8 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 convert-source-map: 2.0.0 - debug: 4.3.5 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.24.10': - dependencies: - '@babel/types': 7.25.8 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - '@babel/generator@7.24.7': dependencies: '@babel/types': 7.25.8 @@ -11190,7 +11141,7 @@ snapshots: '@babel/helper-compilation-targets@7.24.8': dependencies: '@babel/compat-data': 7.24.9 - '@babel/helper-validator-option': 7.24.8 + '@babel/helper-validator-option': 7.25.7 browserslist: 4.23.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -11214,7 +11165,7 @@ snapshots: '@babel/helper-function-name@7.24.7': dependencies: - '@babel/template': 7.24.7 + '@babel/template': 7.25.7 '@babel/types': 7.25.8 '@babel/helper-hoist-variables@7.24.7': @@ -11253,7 +11204,7 @@ snapshots: '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.25.7 transitivePeerDependencies: - supports-color @@ -11264,17 +11215,6 @@ snapshots: '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.24.9(@babel/core@7.24.9)': - dependencies: - '@babel/core': 7.24.9 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 '@babel/helper-validator-identifier': 7.25.7 transitivePeerDependencies: - supports-color @@ -11293,8 +11233,6 @@ snapshots: dependencies: '@babel/types': 7.25.8 - '@babel/helper-plugin-utils@7.24.0': {} - '@babel/helper-plugin-utils@7.24.7': {} '@babel/helper-plugin-utils@7.25.7': {} @@ -11310,7 +11248,7 @@ snapshots: '@babel/helper-simple-access@7.24.7': dependencies: - '@babel/traverse': 7.24.8 + '@babel/traverse': 7.25.7 '@babel/types': 7.25.8 transitivePeerDependencies: - supports-color @@ -11343,8 +11281,6 @@ snapshots: '@babel/helper-validator-option@7.24.7': {} - '@babel/helper-validator-option@7.24.8': {} - '@babel/helper-validator-option@7.25.7': {} '@babel/helpers@7.24.4': @@ -11357,12 +11293,12 @@ snapshots: '@babel/helpers@7.24.8': dependencies: - '@babel/template': 7.24.7 + '@babel/template': 7.25.7 '@babel/types': 7.25.8 '@babel/highlight@7.22.20': dependencies: - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.25.7 chalk: 2.4.2 js-tokens: 4.0.0 @@ -11395,10 +11331,6 @@ snapshots: dependencies: '@babel/types': 7.25.8 - '@babel/parser@7.24.8': - dependencies: - '@babel/types': 7.25.8 - '@babel/parser@7.25.8': dependencies: '@babel/types': 7.25.8 @@ -11406,12 +11338,12 @@ snapshots: '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.4)': dependencies: '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.9)': dependencies: '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.24.9)': dependencies: @@ -11437,15 +11369,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-react-jsx-self@7.24.1(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-react-jsx-source@7.24.1(@babel/core@7.24.4)': + '@babel/plugin-transform-react-jsx-source@7.24.1(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.9 + '@babel/helper-plugin-utils': 7.25.7 '@babel/plugin-transform-typescript@7.25.7(@babel/core@7.24.9)': dependencies: @@ -11500,22 +11432,7 @@ snapshots: '@babel/helper-split-export-declaration': 7.24.7 '@babel/parser': 7.25.8 '@babel/types': 7.25.8 - debug: 4.3.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/traverse@7.24.8': - dependencies: - '@babel/code-frame': 7.25.7 - '@babel/generator': 7.24.10 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.25.8 - '@babel/types': 7.25.8 - debug: 4.3.5 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -11538,12 +11455,6 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 - '@babel/types@7.24.9': - dependencies: - '@babel/helper-string-parser': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 - to-fast-properties: 2.0.0 - '@babel/types@7.25.8': dependencies: '@babel/helper-string-parser': 7.25.7 @@ -12266,7 +12177,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.5 + debug: 4.3.7 espree: 9.6.1 globals: 13.23.0 ignore: 5.2.4 @@ -12390,9 +12301,9 @@ snapshots: '@graphql-tools/graphql-tag-pluck@7.1.5(graphql@16.8.1)': dependencies: - '@babel/parser': 7.24.7 + '@babel/parser': 7.25.8 '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/types': 7.25.8 '@graphql-tools/utils': 8.6.1(graphql@16.8.1) graphql: 16.8.1 tslib: 2.3.1 @@ -12489,7 +12400,7 @@ snapshots: '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.5 + debug: 4.3.7 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -13981,24 +13892,22 @@ snapshots: '@sindresorhus/is@5.6.0': {} - '@sindresorhus/merge-streams@2.2.1': {} - '@sitespeed.io/tracium@0.3.3': dependencies: debug: 4.3.7 transitivePeerDependencies: - supports-color - '@size-limit/file@11.1.4(size-limit@11.1.4)': + '@size-limit/file@11.1.6(size-limit@11.1.6)': dependencies: - size-limit: 11.1.4 + size-limit: 11.1.6 - '@size-limit/preset-big-lib@11.1.4(@swc/core@1.3.107(@swc/helpers@0.5.5))(size-limit@11.1.4)': + '@size-limit/preset-big-lib@11.1.6(@swc/core@1.3.107(@swc/helpers@0.5.5))(size-limit@11.1.6)': dependencies: - '@size-limit/file': 11.1.4(size-limit@11.1.4) - '@size-limit/time': 11.1.4(size-limit@11.1.4) - '@size-limit/webpack': 11.1.4(@swc/core@1.3.107(@swc/helpers@0.5.5))(size-limit@11.1.4) - size-limit: 11.1.4 + '@size-limit/file': 11.1.6(size-limit@11.1.6) + '@size-limit/time': 11.1.6(size-limit@11.1.6) + '@size-limit/webpack': 11.1.6(@swc/core@1.3.107(@swc/helpers@0.5.5))(size-limit@11.1.6) + size-limit: 11.1.6 transitivePeerDependencies: - '@swc/core' - bufferutil @@ -14008,20 +13917,20 @@ snapshots: - utf-8-validate - webpack-cli - '@size-limit/time@11.1.4(size-limit@11.1.4)': + '@size-limit/time@11.1.6(size-limit@11.1.6)': dependencies: estimo: 3.0.3 - size-limit: 11.1.4 + size-limit: 11.1.6 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@size-limit/webpack@11.1.4(@swc/core@1.3.107(@swc/helpers@0.5.5))(size-limit@11.1.4)': + '@size-limit/webpack@11.1.6(@swc/core@1.3.107(@swc/helpers@0.5.5))(size-limit@11.1.6)': dependencies: nanoid: 5.0.7 - size-limit: 11.1.4 - webpack: 5.92.1(@swc/core@1.3.107(@swc/helpers@0.5.5)) + size-limit: 11.1.6 + webpack: 5.97.1(@swc/core@1.3.107(@swc/helpers@0.5.5)) transitivePeerDependencies: - '@swc/core' - esbuild @@ -14178,7 +14087,7 @@ snapshots: '@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.2(svelte@5.0.0-next.55)(vite@5.0.13(@types/node@22.7.6)(lightningcss@1.26.0)(terser@5.31.1)))(svelte@5.0.0-next.55)(vite@5.0.13(@types/node@22.7.6)(lightningcss@1.26.0)(terser@5.31.1))': dependencies: '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@5.0.0-next.55)(vite@5.0.13(@types/node@22.7.6)(lightningcss@1.26.0)(terser@5.31.1)) - debug: 4.3.5 + debug: 4.3.7 svelte: 5.0.0-next.55 vite: 5.0.13(@types/node@22.7.6)(lightningcss@1.26.0)(terser@5.31.1) transitivePeerDependencies: @@ -14313,8 +14222,8 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.8 + '@babel/types': 7.25.8 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.5 @@ -14349,7 +14258,7 @@ snapshots: '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 8.56.0 - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/eslint@8.56.0': dependencies: @@ -14463,10 +14372,6 @@ snapshots: '@types/prop-types': 15.7.11 csstype: 3.1.3 - '@types/react@19.0.1': - dependencies: - csstype: 3.1.3 - '@types/scheduler@0.16.8': {} '@types/semver@7.5.4': {} @@ -14638,7 +14543,7 @@ snapshots: '@typescript-eslint/type-utils@5.13.0(eslint@7.32.0)(typescript@5.0.4)': dependencies: '@typescript-eslint/utils': 5.13.0(eslint@7.32.0)(typescript@5.0.4) - debug: 4.3.5 + debug: 4.3.7 eslint: 7.32.0 tsutils: 3.21.0(typescript@5.0.4) optionalDependencies: @@ -14650,7 +14555,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 6.20.0(typescript@5.2.2) '@typescript-eslint/utils': 6.20.0(eslint@8.56.0)(typescript@5.2.2) - debug: 4.3.5 + debug: 4.3.7 eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.2.2) optionalDependencies: @@ -14662,7 +14567,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.2.2) '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.2.2) - debug: 4.3.5 + debug: 4.3.7 eslint: 8.57.0 ts-api-utils: 1.0.3(typescript@5.2.2) optionalDependencies: @@ -14682,10 +14587,10 @@ snapshots: dependencies: '@typescript-eslint/types': 5.13.0 '@typescript-eslint/visitor-keys': 5.13.0 - debug: 4.3.5 + debug: 4.3.7 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.0 + semver: 7.6.3 tsutils: 3.21.0(typescript@5.0.4) optionalDependencies: typescript: 5.0.4 @@ -14710,7 +14615,7 @@ snapshots: dependencies: '@typescript-eslint/types': 6.20.0 '@typescript-eslint/visitor-keys': 6.20.0 - debug: 4.3.5 + debug: 4.3.7 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -14725,7 +14630,7 @@ snapshots: dependencies: '@typescript-eslint/types': 7.5.0 '@typescript-eslint/visitor-keys': 7.5.0 - debug: 4.3.5 + debug: 4.3.7 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -14759,7 +14664,7 @@ snapshots: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) eslint: 7.32.0 eslint-scope: 5.1.1 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript @@ -14823,15 +14728,26 @@ snapshots: '@vitejs/plugin-react@4.2.1(vite@5.2.8(@types/node@22.7.6)(lightningcss@1.26.0)(terser@5.31.1))': dependencies: - '@babel/core': 7.24.4 - '@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.4) + '@babel/core': 7.24.9 + '@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.9) + '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.9) '@types/babel__core': 7.20.5 react-refresh: 0.14.0 vite: 5.2.8(@types/node@22.7.6)(lightningcss@1.26.0)(terser@5.31.1) transitivePeerDependencies: - supports-color + '@vitejs/plugin-react@4.2.1(vite@5.3.4(@types/node@22.7.6)(lightningcss@1.26.0)(terser@5.31.1))': + dependencies: + '@babel/core': 7.24.9 + '@babel/plugin-transform-react-jsx-self': 7.24.1(@babel/core@7.24.9) + '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.9) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.0 + vite: 5.3.4(@types/node@22.7.6)(lightningcss@1.26.0)(terser@5.31.1) + transitivePeerDependencies: + - supports-color + '@vitejs/plugin-vue@4.6.2(vite@5.0.13(@types/node@22.7.6)(lightningcss@1.26.0)(terser@5.31.1))(vue@3.4.6(typescript@5.2.2))': dependencies: vite: 5.0.13(@types/node@22.7.6)(lightningcss@1.26.0)(terser@5.31.1) @@ -14952,7 +14868,7 @@ snapshots: '@vitest/snapshot@1.2.2': dependencies: - magic-string: 0.30.10 + magic-string: 0.30.14 pathe: 1.1.2 pretty-format: 29.7.0 @@ -15026,7 +14942,7 @@ snapshots: '@vue/compiler-ssr': 3.4.6 '@vue/shared': 3.4.6 estree-walker: 2.0.2 - magic-string: 0.30.10 + magic-string: 0.30.14 postcss: 8.4.32 source-map-js: 1.2.0 @@ -15054,7 +14970,7 @@ snapshots: '@vue/compiler-dom': 3.4.6 '@vue/shared': 3.4.6 computeds: 0.0.1 - minimatch: 9.0.3 + minimatch: 9.0.5 muggle-string: 0.3.1 path-browserify: 1.0.1 vue-template-compiler: 2.7.16 @@ -15145,80 +15061,80 @@ snapshots: - supports-color optional: true - '@webassemblyjs/ast@1.12.1': + '@webassemblyjs/ast@1.14.1': dependencies: - '@webassemblyjs/helper-numbers': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/floating-point-hex-parser@1.11.6': {} + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} - '@webassemblyjs/helper-api-error@1.11.6': {} + '@webassemblyjs/helper-api-error@1.13.2': {} - '@webassemblyjs/helper-buffer@1.12.1': {} + '@webassemblyjs/helper-buffer@1.14.1': {} - '@webassemblyjs/helper-numbers@1.11.6': + '@webassemblyjs/helper-numbers@1.13.2': dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 '@xtuc/long': 4.2.2 - '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} - '@webassemblyjs/helper-wasm-section@1.12.1': + '@webassemblyjs/helper-wasm-section@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/ieee754@1.11.6': + '@webassemblyjs/ieee754@1.13.2': dependencies: '@xtuc/ieee754': 1.2.0 - '@webassemblyjs/leb128@1.11.6': + '@webassemblyjs/leb128@1.13.2': dependencies: '@xtuc/long': 4.2.2 - '@webassemblyjs/utf8@1.11.6': {} + '@webassemblyjs/utf8@1.13.2': {} - '@webassemblyjs/wasm-edit@1.12.1': + '@webassemblyjs/wasm-edit@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-opt': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - '@webassemblyjs/wast-printer': 1.12.1 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 - '@webassemblyjs/wasm-gen@1.12.1': + '@webassemblyjs/wasm-gen@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 - '@webassemblyjs/wasm-opt@1.12.1': + '@webassemblyjs/wasm-opt@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 - '@webassemblyjs/wasm-parser@1.12.1': + '@webassemblyjs/wasm-parser@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-api-error': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 - '@webassemblyjs/wast-printer@1.12.1': + '@webassemblyjs/wast-printer@1.14.1': dependencies: - '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 '@webgpu/types@0.1.21': {} @@ -15269,10 +15185,6 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-attributes@1.9.5(acorn@8.11.3): - dependencies: - acorn: 8.11.3 - acorn-jsx@5.3.2(acorn@7.4.1): dependencies: acorn: 7.4.1 @@ -15297,13 +15209,9 @@ snapshots: acorn@8.11.3: {} - agent-base@6.0.2: - dependencies: - debug: 4.3.7 - transitivePeerDependencies: - - supports-color + acorn@8.14.0: {} - agent-base@7.1.0: + agent-base@6.0.2: dependencies: debug: 4.3.7 transitivePeerDependencies: @@ -15521,8 +15429,6 @@ snapshots: dependencies: dequal: 2.0.3 - b4a@1.6.4: {} - b4a@1.6.6: {} babel-plugin-jsx-dom-expressions@0.37.21(@babel/core@7.24.4): @@ -15588,8 +15494,6 @@ snapshots: base64-js@1.5.1: {} - basic-ftp@5.0.3: {} - basic-ftp@5.0.5: {} better-path-resolve@1.0.0: @@ -15674,6 +15578,13 @@ snapshots: node-releases: 2.0.17 update-browserslist-db: 1.1.0(browserslist@4.23.2) + browserslist@4.24.3: + dependencies: + caniuse-lite: 1.0.30001688 + electron-to-chromium: 1.5.73 + node-releases: 2.0.19 + update-browserslist-db: 1.1.1(browserslist@4.24.3) + buffer-crc32@0.2.13: {} buffer-crc32@1.0.0: @@ -15738,7 +15649,7 @@ snapshots: fs-minipass: 3.0.3 glob: 10.4.5 lru-cache: 7.18.3 - minipass: 7.0.4 + minipass: 7.1.2 minipass-collect: 1.0.2 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 @@ -15785,6 +15696,8 @@ snapshots: caniuse-lite@1.0.30001642: {} + caniuse-lite@1.0.30001688: {} + canvaskit-wasm@0.39.1: dependencies: '@webgpu/types': 0.1.21 @@ -16535,8 +16448,6 @@ snapshots: data-uri-to-buffer@4.0.1: {} - data-uri-to-buffer@6.0.1: {} - data-uri-to-buffer@6.0.2: {} dataloader@2.2.2: {} @@ -16763,6 +16674,8 @@ snapshots: electron-to-chromium@1.4.830: {} + electron-to-chromium@1.5.73: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -16780,7 +16693,7 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.17.0: + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -17032,6 +16945,8 @@ snapshots: escalade@3.1.2: {} + escalade@3.2.0: {} + escape-goat@4.0.0: {} escape-html@1.0.3: {} @@ -17053,7 +16968,7 @@ snapshots: eslint-compat-utils@0.4.1(eslint@8.56.0): dependencies: eslint: 8.56.0 - semver: 7.6.0 + semver: 7.6.3 eslint-config-prettier@8.5.0(eslint@7.32.0): dependencies: @@ -17556,7 +17471,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 esutils@2.0.3: {} @@ -17859,7 +17774,7 @@ snapshots: fs-minipass@3.0.3: dependencies: - minipass: 7.0.4 + minipass: 7.1.2 fs.realpath@1.0.0: {} @@ -17944,15 +17859,6 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - get-uri@6.0.2: - dependencies: - basic-ftp: 5.0.3 - data-uri-to-buffer: 6.0.1 - debug: 4.3.7 - fs-extra: 8.1.0 - transitivePeerDependencies: - - supports-color - get-uri@6.0.3: dependencies: basic-ftp: 5.0.5 @@ -18037,7 +17943,7 @@ snapshots: fs.realpath: 1.0.0 minimatch: 8.0.4 minipass: 4.2.8 - path-scurry: 1.10.1 + path-scurry: 1.11.1 global-dirs@0.1.1: dependencies: @@ -18076,15 +17982,6 @@ snapshots: merge2: 1.4.1 slash: 4.0.0 - globby@14.0.1: - dependencies: - '@sindresorhus/merge-streams': 2.2.1 - fast-glob: 3.3.2 - ignore: 5.2.4 - path-type: 5.0.0 - slash: 5.1.0 - unicorn-magic: 0.1.0 - globrex@0.1.2: {} gopd@1.0.1: @@ -18278,13 +18175,6 @@ snapshots: transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.4: - dependencies: - agent-base: 7.1.0 - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 @@ -18384,8 +18274,6 @@ snapshots: jsbn: 1.1.0 sprintf-js: 1.1.3 - ip@1.1.8: {} - ip@2.0.0: {} ipaddr.js@1.9.1: {} @@ -18615,6 +18503,8 @@ snapshots: jiti@1.21.0: {} + jiti@2.4.1: {} + jju@1.4.0: {} joycon@3.1.1: {} @@ -19009,10 +18899,6 @@ snapshots: dependencies: sourcemap-codec: 1.4.8 - magic-string@0.30.10: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - magic-string@0.30.14: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -19849,8 +19735,6 @@ snapshots: minipass@5.0.0: {} - minipass@7.0.4: {} - minipass@7.1.2: {} minizlib@2.1.2: @@ -19976,7 +19860,7 @@ snapshots: nanospinner@1.1.0: dependencies: - picocolors: 1.0.1 + picocolors: 1.1.1 natural-compare-lite@1.4.0: {} @@ -20065,6 +19949,8 @@ snapshots: node-releases@2.0.17: {} + node-releases@2.0.19: {} + nopt@6.0.0: dependencies: abbrev: 1.1.1 @@ -20330,19 +20216,6 @@ snapshots: p-try@2.2.0: {} - pac-proxy-agent@7.0.1: - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.0 - debug: 4.3.7 - get-uri: 6.0.2 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.4 - pac-resolver: 7.0.0 - socks-proxy-agent: 8.0.2 - transitivePeerDependencies: - - supports-color - pac-proxy-agent@7.0.2: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 @@ -20356,12 +20229,6 @@ snapshots: transitivePeerDependencies: - supports-color - pac-resolver@7.0.0: - dependencies: - degenerator: 5.0.1 - ip: 1.1.8 - netmask: 2.0.2 - pac-resolver@7.0.1: dependencies: degenerator: 5.0.1 @@ -20488,11 +20355,6 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.10.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 @@ -20504,8 +20366,6 @@ snapshots: path-type@4.0.0: {} - path-type@5.0.0: {} - pathe@1.1.1: {} pathe@1.1.2: {} @@ -20611,11 +20471,11 @@ snapshots: postcss: 8.4.39 ts-node: 10.9.1(@swc/core@1.3.107(@swc/helpers@0.5.5))(@types/node@22.7.6)(typescript@5.4.5) - postcss-load-config@6.0.1(jiti@1.21.0)(postcss@8.4.39)(yaml@2.4.5): + postcss-load-config@6.0.1(jiti@2.4.1)(postcss@8.4.39)(yaml@2.4.5): dependencies: lilconfig: 3.1.2 optionalDependencies: - jiti: 1.21.0 + jiti: 2.4.1 postcss: 8.4.39 yaml: 2.4.5 @@ -20800,14 +20660,14 @@ snapshots: proxy-agent@6.4.0: dependencies: - agent-base: 7.1.0 + agent-base: 7.1.1 debug: 4.3.7 http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.4 + https-proxy-agent: 7.0.5 lru-cache: 7.18.3 - pac-proxy-agent: 7.0.1 + pac-proxy-agent: 7.0.2 proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.2 + socks-proxy-agent: 8.0.4 transitivePeerDependencies: - supports-color @@ -20956,7 +20816,7 @@ snapshots: rc-config-loader@4.1.3: dependencies: - debug: 4.3.5 + debug: 4.3.7 js-yaml: 4.1.0 json5: 2.2.3 require-from-string: 2.0.2 @@ -21041,8 +20901,6 @@ snapshots: dependencies: loose-envify: 1.4.0 - react@19.0.0: {} - read-cache@1.0.0: dependencies: pify: 2.3.0 @@ -22002,22 +21860,20 @@ snapshots: sisteransi@1.0.5: {} - size-limit@11.1.4: + size-limit@11.1.6: dependencies: bytes-iec: 3.1.1 - chokidar: 3.6.0 - globby: 14.0.1 - jiti: 1.21.0 + chokidar: 4.0.1 + jiti: 2.4.1 lilconfig: 3.1.2 nanospinner: 1.1.0 - picocolors: 1.0.1 + picocolors: 1.1.1 + tinyglobby: 0.2.10 slash@3.0.0: {} slash@4.0.0: {} - slash@5.1.0: {} - slice-ansi@3.0.0: dependencies: ansi-styles: 4.3.0 @@ -22054,14 +21910,6 @@ snapshots: transitivePeerDependencies: - supports-color - socks-proxy-agent@8.0.2: - dependencies: - agent-base: 7.1.0 - debug: 4.3.7 - socks: 2.7.1 - transitivePeerDependencies: - - supports-color - socks-proxy-agent@8.0.4: dependencies: agent-base: 7.1.1 @@ -22183,7 +22031,7 @@ snapshots: ssri@10.0.5: dependencies: - minipass: 7.0.4 + minipass: 7.1.2 stable@0.1.8: {} @@ -22430,7 +22278,7 @@ snapshots: dependencies: '@types/pug': 2.0.10 detect-indent: 6.1.0 - magic-string: 0.30.10 + magic-string: 0.30.14 sorcery: 0.11.0 strip-indent: 3.0.0 svelte: 5.0.0-next.55 @@ -22568,21 +22416,21 @@ snapshots: term-size@2.2.1: {} - terser-webpack-plugin@5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.5))(webpack@5.92.1(@swc/core@1.3.107(@swc/helpers@0.5.5))): + terser-webpack-plugin@5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.5))(webpack@5.97.1(@swc/core@1.3.107(@swc/helpers@0.5.5))): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 terser: 5.31.1 - webpack: 5.92.1(@swc/core@1.3.107(@swc/helpers@0.5.5)) + webpack: 5.97.1(@swc/core@1.3.107(@swc/helpers@0.5.5)) optionalDependencies: '@swc/core': 1.3.107(@swc/helpers@0.5.5) terser@5.31.1: dependencies: '@jridgewell/source-map': 0.3.5 - acorn: 8.11.3 + acorn: 8.14.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -22594,7 +22442,7 @@ snapshots: text-decoder@1.1.0: dependencies: - b4a: 1.6.4 + b4a: 1.6.6 text-extensions@1.9.0: {} @@ -22855,7 +22703,7 @@ snapshots: - supports-color - ts-node - tsup@8.2.0(@swc/core@1.3.107(@swc/helpers@0.5.5))(jiti@1.21.0)(postcss@8.4.39)(typescript@5.0.4)(yaml@2.4.5): + tsup@8.2.0(@swc/core@1.3.107(@swc/helpers@0.5.5))(jiti@2.4.1)(postcss@8.4.39)(typescript@5.0.4)(yaml@2.4.5): dependencies: bundle-require: 5.0.0(esbuild@0.23.0) cac: 6.7.14 @@ -22866,7 +22714,7 @@ snapshots: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 6.0.1(jiti@1.21.0)(postcss@8.4.39)(yaml@2.4.5) + postcss-load-config: 6.0.1(jiti@2.4.1)(postcss@8.4.39)(yaml@2.4.5) resolve-from: 5.0.0 rollup: 4.18.1 source-map: 0.8.0-beta.0 @@ -22882,7 +22730,7 @@ snapshots: - tsx - yaml - tsup@8.3.5(@swc/core@1.3.107(@swc/helpers@0.5.5))(jiti@1.21.0)(postcss@8.4.39)(typescript@5.0.4)(yaml@2.4.5): + tsup@8.3.5(@swc/core@1.3.107(@swc/helpers@0.5.5))(jiti@2.4.1)(postcss@8.4.39)(typescript@5.0.4)(yaml@2.4.5): dependencies: bundle-require: 5.0.0(esbuild@0.24.0) cac: 6.7.14 @@ -22892,7 +22740,7 @@ snapshots: esbuild: 0.24.0 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@1.21.0)(postcss@8.4.39)(yaml@2.4.5) + postcss-load-config: 6.0.1(jiti@2.4.1)(postcss@8.4.39)(yaml@2.4.5) resolve-from: 5.0.0 rollup: 4.28.0 source-map: 0.8.0-beta.0 @@ -23058,8 +22906,6 @@ snapshots: undici-types@6.19.8: {} - unicorn-magic@0.1.0: {} - unified-args@10.0.0: dependencies: '@types/text-table': 0.2.4 @@ -23082,7 +22928,7 @@ snapshots: '@types/node': 18.19.41 '@types/unist': 2.0.9 concat-stream: 2.0.0 - debug: 4.3.5 + debug: 4.3.7 fault: 2.0.1 glob: 8.1.0 ignore: 5.2.4 @@ -23110,7 +22956,7 @@ snapshots: '@types/node': 17.0.45 '@types/unist': 2.0.6 concat-stream: 2.0.0 - debug: 4.3.5 + debug: 4.3.7 fault: 2.0.1 glob: 7.2.3 ignore: 5.2.4 @@ -23320,6 +23166,12 @@ snapshots: escalade: 3.1.2 picocolors: 1.1.1 + update-browserslist-db@1.1.1(browserslist@4.24.3): + dependencies: + browserslist: 4.24.3 + escalade: 3.2.0 + picocolors: 1.1.1 + update-notifier@6.0.2: dependencies: boxen: 7.1.1 @@ -23473,7 +23325,7 @@ snapshots: vite-node@1.2.2(@types/node@22.7.6)(lightningcss@1.26.0)(terser@5.31.1): dependencies: cac: 6.7.14 - debug: 4.3.5 + debug: 4.3.7 pathe: 1.1.2 picocolors: 1.0.1 vite: 5.3.4(@types/node@22.7.6)(lightningcss@1.26.0)(terser@5.31.1) @@ -23597,6 +23449,16 @@ snapshots: optionalDependencies: vite: 5.2.13(@types/node@22.7.6)(lightningcss@1.26.0)(terser@5.31.1) + vitest-browser-react@0.0.4(@types/react-dom@18.2.24)(@types/react@18.2.74)(@vitest/browser@2.1.0-beta.5(@types/node@22.7.6)(playwright@1.45.2)(typescript@5.0.4)(vitest@2.1.0-beta.5)(webdriverio@8.39.1(encoding@0.1.13)(typescript@5.0.4)))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(vitest@2.1.0-beta.5(@types/node@22.7.6)(@vitest/browser@2.1.0-beta.5)(lightningcss@1.26.0)(terser@5.31.1)): + dependencies: + '@vitest/browser': 2.1.0-beta.5(@types/node@22.7.6)(playwright@1.45.2)(typescript@5.0.4)(vitest@2.1.0-beta.5)(webdriverio@8.39.1(encoding@0.1.13)(typescript@5.0.4)) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + vitest: 2.1.0-beta.5(@types/node@22.7.6)(@vitest/browser@2.1.0-beta.5)(lightningcss@1.26.0)(terser@5.31.1) + optionalDependencies: + '@types/react': 18.2.74 + '@types/react-dom': 18.2.24 + vitest@1.2.2(@types/node@22.7.6)(@vitest/browser@1.6.0)(lightningcss@1.26.0)(terser@5.31.1): dependencies: '@vitest/expect': 1.2.2 @@ -23877,18 +23739,17 @@ snapshots: webpack-sources@3.2.3: {} - webpack@5.92.1(@swc/core@1.3.107(@swc/helpers@0.5.5)): + webpack@5.97.1(@swc/core@1.3.107(@swc/helpers@0.5.5)): dependencies: '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/wasm-edit': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.11.3 - acorn-import-attributes: 1.9.5(acorn@8.11.3) - browserslist: 4.23.0 + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.0 + browserslist: 4.24.3 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.17.0 + enhanced-resolve: 5.17.1 es-module-lexer: 1.4.1 eslint-scope: 5.1.1 events: 3.3.0 @@ -23900,7 +23761,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.5))(webpack@5.92.1(@swc/core@1.3.107(@swc/helpers@0.5.5))) + terser-webpack-plugin: 5.3.10(@swc/core@1.3.107(@swc/helpers@0.5.5))(webpack@5.97.1(@swc/core@1.3.107(@swc/helpers@0.5.5))) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: