diff --git a/.github/README.md b/.github/README.md index a9c7099..9912977 100644 --- a/.github/README.md +++ b/.github/README.md @@ -9,6 +9,12 @@ A component to integrate [P5.js](https://p5js.org/) sketches into > been released for internal development or experimental testing ONLY. It is > recommended to continue utilising version `4.4.1` until version `5.0.0` is out > of the `rc` versioning scheme. +> +> One other thing to note about the coming release of the version `5.x.x` range +> is that it will support the `p5` version `2.x.x` range which means +> [support for `async` and `await`](https://beta.p5js.org/reference/p5/async_await/) +> in your sketches and much more besides, you can read more on the upcoming +> version of the [P5 docs](https://beta.p5js.org/). ## Installation diff --git a/config/typescript/tsconfig.json b/config/typescript/tsconfig.json deleted file mode 100644 index 8d0eb8e..0000000 --- a/config/typescript/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "types": ["vite/client"], - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "allowJs": true, - "skipLibCheck": true, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "ESNext", - "moduleResolution": "bundler", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": false, - "jsx": "react-jsx", - "noImplicitAny": true - }, - "include": ["../../config", "../../src", "../../tests", "../../demo"], - "references": [{ "path": "./tsconfig.node.json" }] -} diff --git a/config/typescript/tsconfig.node.json b/config/typescript/tsconfig.node.json deleted file mode 100644 index c2f8e2c..0000000 --- a/config/typescript/tsconfig.node.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "module": "ESNext", - "moduleResolution": "node", - "allowSyntheticDefaultImports": true - }, - "include": ["../vite/vite.component.config.ts"] -} diff --git a/config/vite/common.ts b/config/vite/common.ts new file mode 100644 index 0000000..a232a1b --- /dev/null +++ b/config/vite/common.ts @@ -0,0 +1,16 @@ +import { resolve } from "node:path"; +import { UserConfig } from "vite"; + +export function common(root: string): UserConfig { + return { + resolve: { + alias: { + "@": resolve(root, "src"), + "@components": resolve(root, "src", "components"), + "@utils": resolve(root, "src", "utils"), + "@constants": resolve(root, "src", "constants"), + "@contracts": resolve(root, "src", "contracts") + } + } + }; +} diff --git a/config/vite/demo.ts b/config/vite/demo.ts new file mode 100644 index 0000000..1bc6b6b --- /dev/null +++ b/config/vite/demo.ts @@ -0,0 +1,20 @@ +import react from "@vitejs/plugin-react"; +import { resolve } from "node:path"; +import { UserConfig } from "vite"; + +export function demo(root: string): UserConfig { + return { + root: resolve(root, "demo"), + base: "./", + plugins: [react()], + preview: { open: true }, + build: { + emptyOutDir: false, + rollupOptions: { + output: { + dir: resolve(root, "dist", "demo") + } + } + } + }; +} diff --git a/config/vite/library.ts b/config/vite/library.ts new file mode 100644 index 0000000..144b53a --- /dev/null +++ b/config/vite/library.ts @@ -0,0 +1,65 @@ +import react from "@vitejs/plugin-react"; +import { posix, resolve } from "node:path"; +import { UserConfig } from "vite"; +import dts from "vite-plugin-dts"; + +export function library(root: string): UserConfig { + const dist = resolve(root, "dist", "component"); + + return { + plugins: [ + dts({ + rollupTypes: true, + tsconfigPath: resolve(root, "tsconfig.json"), + outDir: dist + }), + react({ + babel: { + plugins: [["babel-plugin-react-compiler", {}]] + } + }) + ], + esbuild: { + legalComments: "external" + }, + build: { + emptyOutDir: true, + lib: { + entry: resolve(root, "src", "main.tsx"), + name: "ReactP5Wrapper", + fileName: "ReactP5Wrapper", + formats: ["es", "cjs"] + }, + rollupOptions: { + external: ["react", "react/jsx-runtime", "react-dom", "p5"], + output: { + assetFileNames: "assets/[name][extname]", + entryFileNames: "[name].[format].js", + dir: dist, + globals: { + p5: "p5", + react: "React", + "react/jsx-runtime": "jsxRuntime", + "react-dom": "ReactDom" + } + } + } + }, + test: { + globals: true, + environment: "happy-dom", + coverage: { + include: [posix.join("src", "**/*.{ts,tsx,js,jsx}")], + reporter: ["text-summary", "html", "clover"] + }, + setupFiles: resolve(root, "tests", "setup.ts"), + deps: { + optimizer: { + web: { + include: ["vitest-canvas-mock"] + } + } + } + } + }; +} diff --git a/config/vite/vite.component.config.ts b/config/vite/vite.component.config.ts deleted file mode 100644 index 2e64ca0..0000000 --- a/config/vite/vite.component.config.ts +++ /dev/null @@ -1,64 +0,0 @@ -import react from "@vitejs/plugin-react"; -import { resolve } from "node:path"; -import dts from "vite-plugin-dts"; -import { defineConfig } from "vitest/config"; - -const root = resolve(__dirname, "..", ".."); -const dist = resolve(root, "dist", "component"); -const tsConfig = resolve(root, "tsconfig.json"); - -export default defineConfig({ - plugins: [ - dts({ - rollupTypes: true, - tsconfigPath: tsConfig, - outDir: dist - }), - react({ - babel: { - plugins: [["babel-plugin-react-compiler", {}]] - } - }) - ], - esbuild: { - legalComments: "external" - }, - build: { - emptyOutDir: true, - lib: { - entry: resolve(root, "src", "main.tsx"), - name: "ReactP5Wrapper", - fileName: "ReactP5Wrapper", - formats: ["es", "cjs"] - }, - rollupOptions: { - external: ["react", "react/jsx-runtime", "react-dom", "p5"], - output: { - assetFileNames: "assets/[name][extname]", - entryFileNames: "[name].[format].js", - dir: dist, - globals: { - p5: "p5", - react: "React", - "react/jsx-runtime": "jsxRuntime", - "react-dom": "ReactDom" - } - } - } - }, - test: { - globals: true, - environment: "jsdom", - coverage: { - include: ["src"] - }, - setupFiles: resolve(root, "tests", "setup.ts"), - deps: { - optimizer: { - web: { - include: ["vitest-canvas-mock"] - } - } - } - } -}); diff --git a/config/vite/vite.config.ts b/config/vite/vite.config.ts new file mode 100644 index 0000000..79ff48a --- /dev/null +++ b/config/vite/vite.config.ts @@ -0,0 +1,19 @@ +import { resolve } from "node:path"; +import { UserConfig } from "vite"; +import { defineConfig } from "vitest/config"; + +import { common } from "./common"; +import { demo } from "./demo"; +import { library } from "./library"; + +const root = resolve(__dirname, "..", ".."); + +export default defineConfig(({ mode }): UserConfig => { + const isVitest = process.env.VITEST === "true"; + const config = isVitest || mode === "lib" ? library : demo; + + return { + ...common(root), + ...config(root) + } satisfies UserConfig; +}); diff --git a/config/vite/vite.demo.config.ts b/config/vite/vite.demo.config.ts deleted file mode 100644 index 507bd99..0000000 --- a/config/vite/vite.demo.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import react from "@vitejs/plugin-react"; -import { resolve } from "node:path"; -import { defineConfig } from "vitest/config"; - -export default defineConfig({ - root: resolve(__dirname, "..", "..", "demo"), - base: "./", - plugins: [react()], - preview: { - open: true - }, - build: { - emptyOutDir: false, - rollupOptions: { - output: { - dir: resolve(__dirname, "..", "..", "dist", "demo") - } - } - } -}); diff --git a/demo/app.jsx b/demo/app.jsx index 6decb4e..a335265 100644 --- a/demo/app.jsx +++ b/demo/app.jsx @@ -16,7 +16,7 @@ function App() { const [state, setState] = useState({ rotation: 160, - sketch: record, + sketch: box, unmount: false }); diff --git a/demo/sketches/record.jsx b/demo/sketches/record.jsx index c1affdf..e3d41e2 100644 --- a/demo/sketches/record.jsx +++ b/demo/sketches/record.jsx @@ -1,10 +1,10 @@ -import * as record from "p5.record.js"; - export function sketch(p5) { let recording; - p5.setup = () => { + p5.setup = async () => { const canvas = p5.createCanvas(400, 400); + const record = await import("p5.record.js"); + p5.background(200); recording = new record.Recorder({ diff --git a/package.json b/package.json index de4a7c2..a52f803 100644 --- a/package.json +++ b/package.json @@ -20,18 +20,18 @@ }, "scripts": { "build": "rimraf dist && pnpm build:component && pnpm build:demo", - "build:component": "tsc --noEmit && vite build --config config/vite/vite.component.config.ts", - "build:demo": "vite build --config config/vite/vite.demo.config.ts", - "ci": "pnpm format:check && pnpm lint && pnpm test && pnpm build", - "dev": "vite --config config/vite/vite.demo.config.ts --host", + "build:component": "tsc --noEmit && vite build --config config/vite/vite.config.ts --mode lib", + "build:demo": "vite build --config config/vite/vite.config.ts --mode demo", + "dev": "vite --config config/vite/vite.config.ts --host", "format": "pnpm prettier --write .", "format:check": "pnpm prettier --check .", + "integrate": "pnpm format:check && pnpm lint && pnpm test && pnpm build", "lint": "eslint --config config/eslint/eslint.config.ts", "lint:fix": "pnpm lint --fix", "prettier": "prettier --config config/prettier/prettier.json --ignore-path .gitignore", - "test": "vitest run --silent --config config/vite/vite.component.config.ts", - "test:coverage": "vitest run --silent --coverage --config config/vite/vite.component.config.ts", - "test:watch": "vitest watch --config config/vite/vite.component.config.ts" + "test": "vitest run --silent --config config/vite/vite.config.ts", + "test:coverage": "vitest run --silent --coverage --config config/vite/vite.config.ts", + "test:watch": "vitest watch --config config/vite/vite.config.ts" }, "keywords": [ "react", @@ -82,7 +82,7 @@ "react-error-boundary": "^6.0.0" }, "peerDependencies": { - "p5": ">= 1.11.3", + "p5": ">= 2.0.0", "react": ">= 19.0.0", "react-dom": ">= 19.0.0" }, @@ -90,15 +90,14 @@ "@babel/eslint-plugin": "^7.27.1", "@eslint/compat": "^1.3.2", "@eslint/js": "^9.33.0", - "@testing-library/jest-dom": "6.6.4", + "@testing-library/jest-dom": "6.7.0", "@testing-library/react": "^16.3.0", "@trivago/prettier-plugin-sort-imports": "^5.2.2", "@types/jest": "^30.0.0", - "@types/node": "^24.2.1", - "@types/p5": "^1.7.6", - "@types/react": "^19.1.9", + "@types/node": "^24.3.0", + "@types/react": "^19.1.10", "@types/react-dom": "^19.1.7", - "@typescript-eslint/eslint-plugin": "^8.39.0", + "@typescript-eslint/eslint-plugin": "^8.39.1", "@vitejs/plugin-react": "^5.0.0", "@vitest/coverage-v8": "^3.2.4", "babel-plugin-react-compiler": "19.1.0-rc.2", @@ -107,9 +106,7 @@ "eslint-plugin-react-compiler": "19.1.0-rc.2", "eslint-plugin-react-hooks": "^5.2.0", "gh-pages": "^6.3.0", - "jiti": "^2.5.1", - "js": "^0.1.0", - "jsdom": "^26.1.0", + "happy-dom": "^18.0.1", "p5.capture": "^1.6.0", "p5.record.js": "^0.2.0", "prettier": "^3.6.2", @@ -117,8 +114,8 @@ "react-dom": "19.1.1", "rimraf": "^6.0.1", "typescript": "^5.9.2", - "typescript-eslint": "^8.39.0", - "vite": "^7.1.1", + "typescript-eslint": "^8.39.1", + "vite": "^7.1.2", "vite-plugin-dts": "^4.5.4", "vitest": "^3.2.4", "vitest-canvas-mock": "^0.3.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cc3fe4f..6619d23 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,15 +12,15 @@ importers: specifier: ^1.5.0 version: 1.5.0 p5: - specifier: '>= 1.11.3' - version: 1.11.9 + specifier: '>= 2.0.0' + version: 2.0.4 react-error-boundary: specifier: ^6.0.0 version: 6.0.0(react@19.1.1) devDependencies: '@babel/eslint-plugin': specifier: ^7.27.1 - version: 7.27.1(@babel/eslint-parser@7.27.1(@babel/core@7.28.0)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)) + version: 7.27.1(@babel/eslint-parser@7.27.1(@babel/core@7.28.3)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1)) '@eslint/compat': specifier: ^1.3.2 version: 1.3.2(eslint@9.33.0(jiti@2.5.1)) @@ -28,11 +28,11 @@ importers: specifier: ^9.33.0 version: 9.33.0 '@testing-library/jest-dom': - specifier: 6.6.4 - version: 6.6.4 + specifier: 6.7.0 + version: 6.7.0 '@testing-library/react': specifier: ^16.3.0 - version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@trivago/prettier-plugin-sort-imports': specifier: ^5.2.2 version: 5.2.2(prettier@3.6.2) @@ -40,26 +40,23 @@ importers: specifier: ^30.0.0 version: 30.0.0 '@types/node': - specifier: ^24.2.1 - version: 24.2.1 - '@types/p5': - specifier: ^1.7.6 - version: 1.7.6 + specifier: ^24.3.0 + version: 24.3.0 '@types/react': - specifier: ^19.1.9 - version: 19.1.9 + specifier: ^19.1.10 + version: 19.1.10 '@types/react-dom': specifier: ^19.1.7 - version: 19.1.7(@types/react@19.1.9) + version: 19.1.7(@types/react@19.1.10) '@typescript-eslint/eslint-plugin': - specifier: ^8.39.0 - version: 8.39.0(@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + specifier: ^8.39.1 + version: 8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) '@vitejs/plugin-react': specifier: ^5.0.0 - version: 5.0.0(vite@7.1.1(@types/node@24.2.1)(jiti@2.5.1)) + version: 5.0.0(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)) '@vitest/coverage-v8': specifier: ^3.2.4 - version: 3.2.4(vitest@3.2.4(@types/node@24.2.1)(jiti@2.5.1)(jsdom@26.1.0)) + version: 3.2.4(vitest@3.2.4(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0)) babel-plugin-react-compiler: specifier: 19.1.0-rc.2 version: 19.1.0-rc.2 @@ -78,15 +75,9 @@ importers: gh-pages: specifier: ^6.3.0 version: 6.3.0 - jiti: - specifier: ^2.5.1 - version: 2.5.1 - js: - specifier: ^0.1.0 - version: 0.1.0 - jsdom: - specifier: ^26.1.0 - version: 26.1.0 + happy-dom: + specifier: ^18.0.1 + version: 18.0.1 p5.capture: specifier: ^1.6.0 version: 1.6.0 @@ -109,25 +100,25 @@ importers: specifier: ^5.9.2 version: 5.9.2 typescript-eslint: - specifier: ^8.39.0 - version: 8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + specifier: ^8.39.1 + version: 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) vite: - specifier: ^7.1.1 - version: 7.1.1(@types/node@24.2.1)(jiti@2.5.1) + specifier: ^7.1.2 + version: 7.1.2(@types/node@24.3.0)(jiti@2.5.1) vite-plugin-dts: specifier: ^4.5.4 - version: 4.5.4(@types/node@24.2.1)(rollup@4.46.2)(typescript@5.9.2)(vite@7.1.1(@types/node@24.2.1)(jiti@2.5.1)) + version: 4.5.4(@types/node@24.3.0)(rollup@4.46.2)(typescript@5.9.2)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/node@24.2.1)(jiti@2.5.1)(jsdom@26.1.0) + version: 3.2.4(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0) vitest-canvas-mock: specifier: ^0.3.3 - version: 0.3.3(vitest@3.2.4(@types/node@24.2.1)(jiti@2.5.1)(jsdom@26.1.0)) + version: 0.3.3(vitest@3.2.4(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0)) packages: - '@adobe/css-tools@4.4.3': - resolution: {integrity: sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==} + '@adobe/css-tools@4.4.4': + resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} @@ -144,8 +135,8 @@ packages: resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.0': - resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} + '@babel/core@7.28.3': + resolution: {integrity: sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==} engines: {node: '>=6.9.0'} '@babel/eslint-parser@7.27.1': @@ -162,8 +153,8 @@ packages: '@babel/eslint-parser': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - '@babel/generator@7.28.0': - resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} + '@babel/generator@7.28.3': + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.27.3': @@ -174,8 +165,8 @@ packages: resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.27.1': - resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} + '@babel/helper-create-class-features-plugin@7.28.3': + resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -192,8 +183,8 @@ packages: resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.27.3': - resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -228,12 +219,12 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.2': - resolution: {integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==} + '@babel/helpers@7.28.3': + resolution: {integrity: sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.0': - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + '@babel/parser@7.28.3': + resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} engines: {node: '>=6.0.0'} hasBin: true @@ -256,16 +247,16 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.28.2': - resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==} + '@babel/runtime@7.28.3': + resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==} engines: {node: '>=6.9.0'} '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.0': - resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} + '@babel/traverse@7.28.3': + resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==} engines: {node: '>=6.9.0'} '@babel/types@7.28.2': @@ -304,158 +295,161 @@ packages: resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} engines: {node: '>=18'} - '@esbuild/aix-ppc64@0.25.8': - resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} + '@davepagurek/bezier-path@0.0.2': + resolution: {integrity: sha512-4L9ddgzZc9DRGyl1RrS3z5nwnVJoyjsAelVG4X1jh4tVxryEHr4H9QavhxW/my6Rn3669Qz6mhv8gd5O/WeFTA==} + + '@esbuild/aix-ppc64@0.25.9': + resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.8': - resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} + '@esbuild/android-arm64@0.25.9': + resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.8': - resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} + '@esbuild/android-arm@0.25.9': + resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.8': - resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} + '@esbuild/android-x64@0.25.9': + resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.8': - resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} + '@esbuild/darwin-arm64@0.25.9': + resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.8': - resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} + '@esbuild/darwin-x64@0.25.9': + resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.8': - resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} + '@esbuild/freebsd-arm64@0.25.9': + resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.8': - resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} + '@esbuild/freebsd-x64@0.25.9': + resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.8': - resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} + '@esbuild/linux-arm64@0.25.9': + resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.8': - resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} + '@esbuild/linux-arm@0.25.9': + resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.8': - resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} + '@esbuild/linux-ia32@0.25.9': + resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.8': - resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} + '@esbuild/linux-loong64@0.25.9': + resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.8': - resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} + '@esbuild/linux-mips64el@0.25.9': + resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.8': - resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} + '@esbuild/linux-ppc64@0.25.9': + resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.8': - resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} + '@esbuild/linux-riscv64@0.25.9': + resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.8': - resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} + '@esbuild/linux-s390x@0.25.9': + resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.8': - resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} + '@esbuild/linux-x64@0.25.9': + resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.8': - resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} + '@esbuild/netbsd-arm64@0.25.9': + resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.8': - resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} + '@esbuild/netbsd-x64@0.25.9': + resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.8': - resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} + '@esbuild/openbsd-arm64@0.25.9': + resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.8': - resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} + '@esbuild/openbsd-x64@0.25.9': + resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.8': - resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} + '@esbuild/openharmony-arm64@0.25.9': + resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.8': - resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} + '@esbuild/sunos-x64@0.25.9': + resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.8': - resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} + '@esbuild/win32-arm64@0.25.9': + resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.8': - resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} + '@esbuild/win32-ia32@0.25.9': + resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.8': - resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} + '@esbuild/win32-x64@0.25.9': + resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -543,6 +537,9 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} + '@japont/unicode-range@1.0.0': + resolution: {integrity: sha512-BckHvA2XdjRBVAWe2uceNuRf78lBeI28kyWEbfr/Q2pE17POkwuZ6WWY/UMv8FL9iBxhW4xfDoNLM9UVZaTeUQ==} + '@jest/diff-sequences@30.0.1': resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -567,24 +564,24 @@ packages: resolution: {integrity: sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jridgewell/gen-mapping@0.3.12': - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.5.4': - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.29': - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + '@jridgewell/trace-mapping@0.3.30': + resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} '@microsoft/api-extractor-model@7.30.7': resolution: {integrity: sha512-TBbmSI2/BHpfR9YhQA7nH0nqVmGgJ0xH0Ex4D99/qBDAUpnhA2oikGmdXanbw9AWWY/ExBYIpkmY8dBHdla3YQ==} - '@microsoft/api-extractor@7.52.9': - resolution: {integrity: sha512-313nyhc6DSSMVKD43jZK6Yp5XbliGw5vjN7QOw1FHzR1V6DQ67k4dzkd3BSxMtWcm+cEs1Ux8rmDqots6EABFA==} + '@microsoft/api-extractor@7.52.10': + resolution: {integrity: sha512-LhKytJM5ZJkbHQVfW/3o747rZUNs/MGg6j/wt/9qwwqEOfvUDTYXXxIBuMgrRXhJ528p41iyz4zjBVHZU74Odg==} hasBin: true '@microsoft/tsdoc-config@0.17.1': @@ -746,15 +743,15 @@ packages: '@rushstack/ts-command-line@5.0.2': resolution: {integrity: sha512-+AkJDbu1GFMPIU8Sb7TLVXDv/Q7Mkvx+wAjEl8XiXVVq+p1FmWW6M3LYpJMmoHNckSofeMecgWg5lfMwNAAsEQ==} - '@sinclair/typebox@0.34.38': - resolution: {integrity: sha512-HpkxMmc2XmZKhvaKIZZThlHmx1L0I/V1hWK1NubtlFnr6ZqdiOpV72TKudZUNQjZNsyDBay72qFEhEvb+bcwcA==} + '@sinclair/typebox@0.34.39': + resolution: {integrity: sha512-keEoFsevmLwAedzacnTVmra66GViRH3fhWO1M+nZ8rUgpPJyN4mcvqlGr3QMrQXx4L8KNwW0q9/BeHSEoO4teg==} '@testing-library/dom@10.4.0': resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} - '@testing-library/jest-dom@6.6.4': - resolution: {integrity: sha512-xDXgLjVunjHqczScfkCJ9iyjdNOVHvvCdqHSSxwM9L0l/wHkTRum67SDc020uAlCoqktJplgO2AAQeLP1wgqDQ==} + '@testing-library/jest-dom@6.7.0': + resolution: {integrity: sha512-RI2e97YZ7MRa+vxP4UUnMuMFL2buSsf0ollxUbTgrbPLKhMn8KVTx7raS6DYjC7v1NDVrioOvaShxsguLNISCA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} '@testing-library/react@16.3.0': @@ -803,8 +800,8 @@ packages: '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - '@types/babel__traverse@7.20.7': - resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} @@ -830,86 +827,89 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@24.2.1': - resolution: {integrity: sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==} + '@types/node@20.19.11': + resolution: {integrity: sha512-uug3FEEGv0r+jrecvUUpbY8lLisvIjg6AAic6a2bSP5OEOLeJsDSnvhCDov7ipFFMXS3orMpzlmi0ZcuGkBbow==} - '@types/p5@1.7.6': - resolution: {integrity: sha512-6pLTOo0V3N5jZb5nTwjiv3lPHLK3Z/TjbhQUj8CTWXocUk1Z/f6OHTp3Pcwi1BhWnf5gqKUcyEb1gP0KIJuQgw==} + '@types/node@24.3.0': + resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==} '@types/react-dom@19.1.7': resolution: {integrity: sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==} peerDependencies: '@types/react': ^19.0.0 - '@types/react@19.1.9': - resolution: {integrity: sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==} + '@types/react@19.1.10': + resolution: {integrity: sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==} '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + '@types/whatwg-mimetype@3.0.2': + resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@typescript-eslint/eslint-plugin@8.39.0': - resolution: {integrity: sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==} + '@typescript-eslint/eslint-plugin@8.39.1': + resolution: {integrity: sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.39.0 + '@typescript-eslint/parser': ^8.39.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.39.0': - resolution: {integrity: sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==} + '@typescript-eslint/parser@8.39.1': + resolution: {integrity: sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.39.0': - resolution: {integrity: sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==} + '@typescript-eslint/project-service@8.39.1': + resolution: {integrity: sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.39.0': - resolution: {integrity: sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==} + '@typescript-eslint/scope-manager@8.39.1': + resolution: {integrity: sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.39.0': - resolution: {integrity: sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==} + '@typescript-eslint/tsconfig-utils@8.39.1': + resolution: {integrity: sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.39.0': - resolution: {integrity: sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==} + '@typescript-eslint/type-utils@8.39.1': + resolution: {integrity: sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.39.0': - resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==} + '@typescript-eslint/types@8.39.1': + resolution: {integrity: sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.39.0': - resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==} + '@typescript-eslint/typescript-estree@8.39.1': + resolution: {integrity: sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.39.0': - resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==} + '@typescript-eslint/utils@8.39.1': + resolution: {integrity: sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.39.0': - resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==} + '@typescript-eslint/visitor-keys@8.39.1': + resolution: {integrity: sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vitejs/plugin-react@5.0.0': @@ -956,14 +956,14 @@ packages: '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@volar/language-core@2.4.22': - resolution: {integrity: sha512-gp4M7Di5KgNyIyO903wTClYBavRt6UyFNpc5LWfyZr1lBsTUY+QrVZfmbNF2aCyfklBOVk9YC4p+zkwoyT7ECg==} + '@volar/language-core@2.4.23': + resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==} - '@volar/source-map@2.4.22': - resolution: {integrity: sha512-L2nVr/1vei0xKRgO2tYVXtJYd09HTRjaZi418e85Q+QdbbqA8h7bBjfNyPPSsjnrOO4l4kaAo78c8SQUAdHvgA==} + '@volar/source-map@2.4.23': + resolution: {integrity: sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==} - '@volar/typescript@2.4.22': - resolution: {integrity: sha512-6ZczlJW1/GWTrNnkmZxJp4qyBt/SGVlcTuCWpI5zLrdPdCZsj66Aff9ZsfFaT3TyjG8zVYgBMYPuCm/eRkpcpQ==} + '@volar/typescript@2.4.23': + resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==} '@vue/compiler-core@3.5.18': resolution: {integrity: sha512-3slwjQrrV1TO8MoXgy3aynDQ7lslj5UqDxuHnrzHtpON5CBinhWjJETciPngpin/T3OuW3tXUf86tEurusnztw==} @@ -990,6 +990,10 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -1096,8 +1100,8 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - ast-v8-to-istanbul@0.3.3: - resolution: {integrity: sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==} + ast-v8-to-istanbul@0.3.4: + resolution: {integrity: sha512-cxrAnZNLBnQwBPByK4CeDaw5sWZtMilJE/Q3iDA0aamgaIVNDF9T6K2/8DfYDZEejZ2jNnDrG9m8MY72HFd0KA==} async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} @@ -1126,8 +1130,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.25.1: - resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} + browserslist@4.25.2: + resolution: {integrity: sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1151,8 +1155,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001731: - resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} + caniuse-lite@1.0.30001735: + resolution: {integrity: sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==} chai@5.2.1: resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} @@ -1177,9 +1181,8 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - commander@1.1.1: - resolution: {integrity: sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==} - engines: {node: '>= 0.6.x'} + colorjs.io@0.5.2: + resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} commander@13.1.0: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} @@ -1291,8 +1294,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.192: - resolution: {integrity: sha512-rP8Ez0w7UNw/9j5eSXCe10o1g/8B1P5SM90PCCMVkIRQn2R0LEHWz4Eh9RnxkniuDe1W0cTSOB3MLlkTGDcuCg==} + electron-to-chromium@1.5.203: + resolution: {integrity: sha512-uz4i0vLhfm6dLZWbz/iH88KNDV+ivj5+2SA+utpgjKaj9Q0iDLuwk6Idhe9BTxciHudyx6IvTvijhkPvFGUQ0g==} email-addresses@5.0.0: resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==} @@ -1346,8 +1349,8 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - esbuild@0.25.8: - resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} + esbuild@0.25.9: + resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} engines: {node: '>=18'} hasBin: true @@ -1367,6 +1370,11 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + eslint-plugin-react-compiler@19.1.0-rc.2: resolution: {integrity: sha512-oKalwDGcD+RX9mf3NEO4zOoUMeLvjSvcbbEOpquzmzqEEM2MQdp7/FY/Hx9NzmUwFzH1W9SKTz5fihfMldpEYw==} engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} @@ -1423,6 +1431,11 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} @@ -1480,8 +1493,9 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -1495,6 +1509,9 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + file-saver@1.3.8: + resolution: {integrity: sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg==} + filename-reserved-regex@2.0.0: resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} engines: {node: '>=4'} @@ -1534,8 +1551,8 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - fs-extra@11.3.0: - resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + fs-extra@11.3.1: + resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} engines: {node: '>=14.14'} fsevents@2.3.3: @@ -1577,6 +1594,9 @@ packages: gif.js@0.2.0: resolution: {integrity: sha512-bYxCoT8OZKmbxY8RN4qDiYuj4nrQDTzgLRcFVovyona1PTWNePzI4nzOmotnlOFIzTk/ZxAHtv+TfVLiBWj/hw==} + gifenc@1.0.3: + resolution: {integrity: sha512-xdr6AdrfGBcfzncONUOlXMBuc5wJDtOueE3c5rdG0oNgtINLD+f2iFZltrBRZYzACRbKr+mSVU/x98zv2u3jmw==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -1619,6 +1639,10 @@ packages: h264-mp4-encoder@1.0.12: resolution: {integrity: sha512-xih3J+Go0o1RqGjhOt6TwXLWWGqLONRPyS8yoMu/RoS/S8WyEv4HuHp1KBsDDl8srZQ3gw9f95JYkCSjCuZbHQ==} + happy-dom@18.0.1: + resolution: {integrity: sha512-qn+rKOW7KWpVTtgIUi6RVmTBZJSe2k0Db0vh1f7CWrWclkkc7/Q+FrOfkZIb2eiErLyqu5AXEzE7XthO9JVxRA==} + engines: {node: '>=20.0.0'} + has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} @@ -1671,6 +1695,12 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} + i18next-browser-languagedetector@4.3.1: + resolution: {integrity: sha512-KIToAzf8zwWvacgnRwJp63ase26o24AuNUlfNVJ5YZAFmdGhsJpmFClxXPuk9rv1FMI4lnc8zLSqgZPEZMrW4g==} + + i18next@19.9.2: + resolution: {integrity: sha512-0i6cuo6ER6usEOtKajUUDj92zlG+KArFia0857xxiEHAQcUwh/RtOQocui1LPJwunSYT574Pk64aNva1kwtxZg==} + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -1890,10 +1920,6 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - js@0.1.0: - resolution: {integrity: sha512-ZBbGYOpact8QAH9RprFWL4RAESYwbDodxiuDjOnzwzzk9pBzKycoifGuUrHHcDixE/eLMKPHRaXenTgu1qXBqA==} - hasBin: true - jsdom@26.1.0: resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} engines: {node: '>=18'} @@ -1925,16 +1951,13 @@ packages: engines: {node: '>=6'} hasBin: true - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} - keypress@0.1.0: - resolution: {integrity: sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA==} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -1945,6 +1968,9 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + libtess@1.2.2: + resolution: {integrity: sha512-Nps8HPeVVcsmJxUvFLKVJcCgcz+1ajPTXDVAVPs6+giOQP4AHV31uZFFkh+CKow/bkB7GbZWKmwmit7myaqDSw==} + local-pkg@1.1.1: resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} engines: {node: '>=14'} @@ -2025,9 +2051,6 @@ packages: resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} - minimatch@3.0.8: - resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2093,6 +2116,9 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} + omggif@1.0.10: + resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -2127,12 +2153,15 @@ packages: p5.record.js@0.2.0: resolution: {integrity: sha512-H+1ollvKsZ88z4Q5rXLLhxmeOakfPCPmoKpB5gteNMf2NMgHuDM+DMty/ZRbfpCiGPmju6NPnt+DflO/FyoEEA==} - p5@1.11.9: - resolution: {integrity: sha512-sx0UdE3/0DO+yx11fWGSpGgm/oJV/hgZeJUvcvZvsNKI3G7kVTILUfjngAxiw4wEd1F7XDpv37YNYA9gOieqNQ==} + p5@2.0.4: + resolution: {integrity: sha512-OAbUg0T8fSyQJRH3aTb12tNLDuWnpoJ/kdyXJmg5R+EJ2Sp5idS7gOarzR3gZ4rwvMnCanVZlSo5SzloZDauZQ==} package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -2184,6 +2213,10 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} + pixelmatch@7.1.0: + resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} + hasBin: true + pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} @@ -2194,6 +2227,10 @@ packages: pkg-types@2.2.0: resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} + pngjs@7.0.0: + resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} + engines: {node: '>=14.19.0'} + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -2226,8 +2263,8 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - quansync@0.2.10: - resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -2560,8 +2597,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.39.0: - resolution: {integrity: sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==} + typescript-eslint@8.39.1: + resolution: {integrity: sha512-GDUv6/NDYngUlNvwaHM1RamYftxf782IyEDbdj3SeaIHHv8fNQVRC++fITT7kUJV/5rIA/tkoRSSskt6osEfqg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2584,6 +2621,9 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.10.0: resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} @@ -2614,8 +2654,8 @@ packages: vite: optional: true - vite@7.1.1: - resolution: {integrity: sha512-yJ+Mp7OyV+4S+afWo+QyoL9jFWD11QFH0i5i7JypnfTcA1rmgxCbiA8WwAICDEtZ1Z1hzrVhN8R8rGTqkTY8ZQ==} + vite@7.1.2: + resolution: {integrity: sha512-J0SQBPlQiEXAF7tajiH+rUooJPo0l8KQgyg4/aMunNtrOa7bwuZJsJbDWzeljqQpgftxuq5yNJxQ91O9ts29UQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -2705,6 +2745,10 @@ packages: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + whatwg-mimetype@4.0.0: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} @@ -2791,12 +2835,12 @@ packages: snapshots: - '@adobe/css-tools@4.4.3': {} + '@adobe/css-tools@4.4.4': {} '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 '@asamuzakjp/css-color@3.2.0': dependencies: @@ -2805,6 +2849,7 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 lru-cache: 10.4.3 + optional: true '@babel/code-frame@7.27.1': dependencies: @@ -2814,17 +2859,17 @@ snapshots: '@babel/compat-data@7.28.0': {} - '@babel/core@7.28.0': + '@babel/core@7.28.3': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 + '@babel/generator': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) - '@babel/helpers': 7.28.2 - '@babel/parser': 7.28.0 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) + '@babel/helpers': 7.28.3 + '@babel/parser': 7.28.3 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.3 '@babel/types': 7.28.2 convert-source-map: 2.0.0 debug: 4.4.1 @@ -2834,26 +2879,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.27.1(@babel/core@7.28.0)(eslint@9.33.0(jiti@2.5.1))': + '@babel/eslint-parser@7.27.1(@babel/core@7.28.3)(eslint@9.33.0(jiti@2.5.1))': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 9.33.0(jiti@2.5.1) eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/eslint-plugin@7.27.1(@babel/eslint-parser@7.27.1(@babel/core@7.28.0)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))': + '@babel/eslint-plugin@7.27.1(@babel/eslint-parser@7.27.1(@babel/core@7.28.3)(eslint@9.33.0(jiti@2.5.1)))(eslint@9.33.0(jiti@2.5.1))': dependencies: - '@babel/eslint-parser': 7.27.1(@babel/core@7.28.0)(eslint@9.33.0(jiti@2.5.1)) + '@babel/eslint-parser': 7.27.1(@babel/core@7.28.3)(eslint@9.33.0(jiti@2.5.1)) eslint: 9.33.0(jiti@2.5.1) eslint-rule-composer: 0.3.0 - '@babel/generator@7.28.0': + '@babel/generator@7.28.3': dependencies: - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.3 '@babel/types': 7.28.2 - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': @@ -2864,19 +2909,19 @@ snapshots: dependencies: '@babel/compat-data': 7.28.0 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.1 + browserslist: 4.25.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.0)': + '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0) + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.3) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.3 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -2885,24 +2930,24 @@ snapshots: '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.3 '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.3 '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color @@ -2912,18 +2957,18 @@ snapshots: '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.0)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.3 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.0 + '@babel/traverse': 7.28.3 '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color @@ -2934,47 +2979,47 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.28.2': + '@babel/helpers@7.28.3': dependencies: '@babel/template': 7.27.2 '@babel/types': 7.28.2 - '@babel/parser@7.28.0': + '@babel/parser@7.28.3': dependencies: '@babel/types': 7.28.2 - '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.28.0)': + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.3 + '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.3) '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.0)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.3)': dependencies: - '@babel/core': 7.28.0 + '@babel/core': 7.28.3 '@babel/helper-plugin-utils': 7.27.1 - '@babel/runtime@7.28.2': {} + '@babel/runtime@7.28.3': {} '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.3 '@babel/types': 7.28.2 - '@babel/traverse@7.28.0': + '@babel/traverse@7.28.3': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 + '@babel/generator': 7.28.3 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.3 '@babel/template': 7.27.2 '@babel/types': 7.28.2 debug: 4.4.1 @@ -2988,12 +3033,14 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@csstools/color-helpers@5.0.2': {} + '@csstools/color-helpers@5.0.2': + optional: true '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 + optional: true '@csstools/css-color-parser@3.0.10(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: @@ -3001,89 +3048,94 @@ snapshots: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 + optional: true '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': dependencies: '@csstools/css-tokenizer': 3.0.4 + optional: true + + '@csstools/css-tokenizer@3.0.4': + optional: true - '@csstools/css-tokenizer@3.0.4': {} + '@davepagurek/bezier-path@0.0.2': {} - '@esbuild/aix-ppc64@0.25.8': + '@esbuild/aix-ppc64@0.25.9': optional: true - '@esbuild/android-arm64@0.25.8': + '@esbuild/android-arm64@0.25.9': optional: true - '@esbuild/android-arm@0.25.8': + '@esbuild/android-arm@0.25.9': optional: true - '@esbuild/android-x64@0.25.8': + '@esbuild/android-x64@0.25.9': optional: true - '@esbuild/darwin-arm64@0.25.8': + '@esbuild/darwin-arm64@0.25.9': optional: true - '@esbuild/darwin-x64@0.25.8': + '@esbuild/darwin-x64@0.25.9': optional: true - '@esbuild/freebsd-arm64@0.25.8': + '@esbuild/freebsd-arm64@0.25.9': optional: true - '@esbuild/freebsd-x64@0.25.8': + '@esbuild/freebsd-x64@0.25.9': optional: true - '@esbuild/linux-arm64@0.25.8': + '@esbuild/linux-arm64@0.25.9': optional: true - '@esbuild/linux-arm@0.25.8': + '@esbuild/linux-arm@0.25.9': optional: true - '@esbuild/linux-ia32@0.25.8': + '@esbuild/linux-ia32@0.25.9': optional: true - '@esbuild/linux-loong64@0.25.8': + '@esbuild/linux-loong64@0.25.9': optional: true - '@esbuild/linux-mips64el@0.25.8': + '@esbuild/linux-mips64el@0.25.9': optional: true - '@esbuild/linux-ppc64@0.25.8': + '@esbuild/linux-ppc64@0.25.9': optional: true - '@esbuild/linux-riscv64@0.25.8': + '@esbuild/linux-riscv64@0.25.9': optional: true - '@esbuild/linux-s390x@0.25.8': + '@esbuild/linux-s390x@0.25.9': optional: true - '@esbuild/linux-x64@0.25.8': + '@esbuild/linux-x64@0.25.9': optional: true - '@esbuild/netbsd-arm64@0.25.8': + '@esbuild/netbsd-arm64@0.25.9': optional: true - '@esbuild/netbsd-x64@0.25.8': + '@esbuild/netbsd-x64@0.25.9': optional: true - '@esbuild/openbsd-arm64@0.25.8': + '@esbuild/openbsd-arm64@0.25.9': optional: true - '@esbuild/openbsd-x64@0.25.8': + '@esbuild/openbsd-x64@0.25.9': optional: true - '@esbuild/openharmony-arm64@0.25.8': + '@esbuild/openharmony-arm64@0.25.9': optional: true - '@esbuild/sunos-x64@0.25.8': + '@esbuild/sunos-x64@0.25.9': optional: true - '@esbuild/win32-arm64@0.25.8': + '@esbuild/win32-arm64@0.25.9': optional: true - '@esbuild/win32-ia32@0.25.8': + '@esbuild/win32-ia32@0.25.9': optional: true - '@esbuild/win32-x64@0.25.8': + '@esbuild/win32-x64@0.25.9': optional: true '@eslint-community/eslint-utils@4.7.0(eslint@9.33.0(jiti@2.5.1))': @@ -3164,6 +3216,8 @@ snapshots: '@istanbuljs/schema@0.1.3': {} + '@japont/unicode-range@1.0.0': {} + '@jest/diff-sequences@30.0.1': {} '@jest/expect-utils@30.0.5': @@ -3174,12 +3228,12 @@ snapshots: '@jest/pattern@30.0.1': dependencies: - '@types/node': 24.2.1 + '@types/node': 24.3.0 jest-regex-util: 30.0.1 '@jest/schemas@30.0.5': dependencies: - '@sinclair/typebox': 0.34.38 + '@sinclair/typebox': 0.34.39 '@jest/types@30.0.5': dependencies: @@ -3187,43 +3241,43 @@ snapshots: '@jest/schemas': 30.0.5 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 24.2.1 + '@types/node': 24.3.0 '@types/yargs': 17.0.33 chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.12': + '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.30 '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/sourcemap-codec@1.5.4': {} + '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.29': + '@jridgewell/trace-mapping@0.3.30': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 - '@microsoft/api-extractor-model@7.30.7(@types/node@24.2.1)': + '@microsoft/api-extractor-model@7.30.7(@types/node@24.3.0)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.14.0(@types/node@24.2.1) + '@rushstack/node-core-library': 5.14.0(@types/node@24.3.0) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.52.9(@types/node@24.2.1)': + '@microsoft/api-extractor@7.52.10(@types/node@24.3.0)': dependencies: - '@microsoft/api-extractor-model': 7.30.7(@types/node@24.2.1) + '@microsoft/api-extractor-model': 7.30.7(@types/node@24.3.0) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.14.0(@types/node@24.2.1) + '@rushstack/node-core-library': 5.14.0(@types/node@24.3.0) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.15.4(@types/node@24.2.1) - '@rushstack/ts-command-line': 5.0.2(@types/node@24.2.1) + '@rushstack/terminal': 0.15.4(@types/node@24.3.0) + '@rushstack/ts-command-line': 5.0.2(@types/node@24.3.0) lodash: 4.17.21 - minimatch: 3.0.8 + minimatch: 10.0.3 resolve: 1.22.10 semver: 7.5.4 source-map: 0.6.1 @@ -3329,46 +3383,46 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.46.2': optional: true - '@rushstack/node-core-library@5.14.0(@types/node@24.2.1)': + '@rushstack/node-core-library@5.14.0(@types/node@24.3.0)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) ajv-formats: 3.0.1(ajv@8.13.0) - fs-extra: 11.3.0 + fs-extra: 11.3.1 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.10 semver: 7.5.4 optionalDependencies: - '@types/node': 24.2.1 + '@types/node': 24.3.0 '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.10 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.15.4(@types/node@24.2.1)': + '@rushstack/terminal@0.15.4(@types/node@24.3.0)': dependencies: - '@rushstack/node-core-library': 5.14.0(@types/node@24.2.1) + '@rushstack/node-core-library': 5.14.0(@types/node@24.3.0) supports-color: 8.1.1 optionalDependencies: - '@types/node': 24.2.1 + '@types/node': 24.3.0 - '@rushstack/ts-command-line@5.0.2(@types/node@24.2.1)': + '@rushstack/ts-command-line@5.0.2(@types/node@24.3.0)': dependencies: - '@rushstack/terminal': 0.15.4(@types/node@24.2.1) + '@rushstack/terminal': 0.15.4(@types/node@24.3.0) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 transitivePeerDependencies: - '@types/node' - '@sinclair/typebox@0.34.38': {} + '@sinclair/typebox@0.34.39': {} '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.3 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -3376,31 +3430,30 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.6.4': + '@testing-library/jest-dom@6.7.0': dependencies: - '@adobe/css-tools': 4.4.3 + '@adobe/css-tools': 4.4.4 aria-query: 5.3.2 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 - lodash: 4.17.21 picocolors: 1.1.1 redent: 3.0.0 - '@testing-library/react@16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@testing-library/react@16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.7(@types/react@19.1.10))(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.3 '@testing-library/dom': 10.4.0 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) optionalDependencies: - '@types/react': 19.1.9 - '@types/react-dom': 19.1.7(@types/react@19.1.9) + '@types/react': 19.1.10 + '@types/react-dom': 19.1.7(@types/react@19.1.10) '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.6.2)': dependencies: - '@babel/generator': 7.28.0 - '@babel/parser': 7.28.0 - '@babel/traverse': 7.28.0 + '@babel/generator': 7.28.3 + '@babel/parser': 7.28.3 + '@babel/traverse': 7.28.3 '@babel/types': 7.28.2 javascript-natural-sort: 0.7.1 lodash: 4.17.21 @@ -3414,11 +3467,11 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.3 '@babel/types': 7.28.2 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.7 + '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: @@ -3426,10 +3479,10 @@ snapshots: '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.3 '@babel/types': 7.28.2 - '@types/babel__traverse@7.20.7': + '@types/babel__traverse@7.28.0': dependencies: '@babel/types': 7.28.2 @@ -3458,36 +3511,40 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/node@24.2.1': + '@types/node@20.19.11': dependencies: - undici-types: 7.10.0 + undici-types: 6.21.0 - '@types/p5@1.7.6': {} + '@types/node@24.3.0': + dependencies: + undici-types: 7.10.0 - '@types/react-dom@19.1.7(@types/react@19.1.9)': + '@types/react-dom@19.1.7(@types/react@19.1.10)': dependencies: - '@types/react': 19.1.9 + '@types/react': 19.1.10 - '@types/react@19.1.9': + '@types/react@19.1.10': dependencies: csstype: 3.1.3 '@types/stack-utils@2.0.3': {} + '@types/whatwg-mimetype@3.0.2': {} + '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.33': dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.39.0(@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/type-utils': 8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/parser': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/type-utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.1 eslint: 9.33.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 @@ -3497,41 +3554,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1 eslint: 9.33.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.39.0(typescript@5.9.2)': + '@typescript-eslint/project-service@8.39.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) - '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/tsconfig-utils': 8.39.1(typescript@5.9.2) + '@typescript-eslint/types': 8.39.1 debug: 4.4.1 typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.39.0': + '@typescript-eslint/scope-manager@8.39.1': dependencies: - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/visitor-keys': 8.39.1 - '@typescript-eslint/tsconfig-utils@8.39.0(typescript@5.9.2)': + '@typescript-eslint/tsconfig-utils@8.39.1(typescript@5.9.2)': dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.1 eslint: 9.33.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) @@ -3539,14 +3596,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.39.0': {} + '@typescript-eslint/types@8.39.1': {} - '@typescript-eslint/typescript-estree@8.39.0(typescript@5.9.2)': + '@typescript-eslint/typescript-estree@8.39.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.39.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/visitor-keys': 8.39.0 + '@typescript-eslint/project-service': 8.39.1(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.39.1(typescript@5.9.2) + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/visitor-keys': 8.39.1 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -3557,39 +3614,39 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.33.0(jiti@2.5.1)) - '@typescript-eslint/scope-manager': 8.39.0 - '@typescript-eslint/types': 8.39.0 - '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.1 + '@typescript-eslint/types': 8.39.1 + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) eslint: 9.33.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.39.0': + '@typescript-eslint/visitor-keys@8.39.1': dependencies: - '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/types': 8.39.1 eslint-visitor-keys: 4.2.1 - '@vitejs/plugin-react@5.0.0(vite@7.1.1(@types/node@24.2.1)(jiti@2.5.1))': + '@vitejs/plugin-react@5.0.0(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1))': dependencies: - '@babel/core': 7.28.0 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0) - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.0) + '@babel/core': 7.28.3 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.3) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.3) '@rolldown/pluginutils': 1.0.0-beta.30 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.1.1(@types/node@24.2.1)(jiti@2.5.1) + vite: 7.1.2(@types/node@24.3.0)(jiti@2.5.1) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/node@24.2.1)(jiti@2.5.1)(jsdom@26.1.0))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - ast-v8-to-istanbul: 0.3.3 + ast-v8-to-istanbul: 0.3.4 debug: 4.4.1 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -3600,7 +3657,7 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/node@24.2.1)(jiti@2.5.1)(jsdom@26.1.0) + vitest: 3.2.4(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0) transitivePeerDependencies: - supports-color @@ -3612,13 +3669,13 @@ snapshots: chai: 5.2.1 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.1.1(@types/node@24.2.1)(jiti@2.5.1))': + '@vitest/mocker@3.2.4(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 7.1.1(@types/node@24.2.1)(jiti@2.5.1) + vite: 7.1.2(@types/node@24.3.0)(jiti@2.5.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -3646,21 +3703,21 @@ snapshots: loupe: 3.2.0 tinyrainbow: 2.0.0 - '@volar/language-core@2.4.22': + '@volar/language-core@2.4.23': dependencies: - '@volar/source-map': 2.4.22 + '@volar/source-map': 2.4.23 - '@volar/source-map@2.4.22': {} + '@volar/source-map@2.4.23': {} - '@volar/typescript@2.4.22': + '@volar/typescript@2.4.23': dependencies: - '@volar/language-core': 2.4.22 + '@volar/language-core': 2.4.23 path-browserify: 1.0.1 vscode-uri: 3.1.0 '@vue/compiler-core@3.5.18': dependencies: - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.3 '@vue/shared': 3.5.18 entities: 4.5.0 estree-walker: 2.0.2 @@ -3678,7 +3735,7 @@ snapshots: '@vue/language-core@2.2.0(typescript@5.9.2)': dependencies: - '@volar/language-core': 2.4.22 + '@volar/language-core': 2.4.23 '@vue/compiler-dom': 3.5.18 '@vue/compiler-vue2': 2.7.16 '@vue/shared': 3.5.18 @@ -3695,9 +3752,14 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-walk@8.3.4: + dependencies: + acorn: 8.15.0 + acorn@8.15.0: {} - agent-base@7.1.4: {} + agent-base@7.1.4: + optional: true ajv-draft-04@1.0.0(ajv@8.13.0): optionalDependencies: @@ -3815,9 +3877,9 @@ snapshots: assertion-error@2.0.1: {} - ast-v8-to-istanbul@0.3.3: + ast-v8-to-istanbul@0.3.4: dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.30 estree-walker: 3.0.3 js-tokens: 9.0.1 @@ -3848,12 +3910,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.25.1: + browserslist@4.25.2: dependencies: - caniuse-lite: 1.0.30001731 - electron-to-chromium: 1.5.192 + caniuse-lite: 1.0.30001735 + electron-to-chromium: 1.5.203 node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.1) + update-browserslist-db: 1.1.3(browserslist@4.25.2) cac@6.7.14: {} @@ -3876,7 +3938,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001731: {} + caniuse-lite@1.0.30001735: {} chai@5.2.1: dependencies: @@ -3901,9 +3963,7 @@ snapshots: color-name@1.1.4: {} - commander@1.1.1: - dependencies: - keypress: 0.1.0 + colorjs.io@0.5.2: {} commander@13.1.0: {} @@ -3933,6 +3993,7 @@ snapshots: dependencies: '@asamuzakjp/css-color': 3.2.0 rrweb-cssom: 0.8.0 + optional: true csstype@3.1.3: {} @@ -3940,6 +4001,7 @@ snapshots: dependencies: whatwg-mimetype: 4.0.0 whatwg-url: 14.2.0 + optional: true data-view-buffer@1.0.2: dependencies: @@ -3965,7 +4027,8 @@ snapshots: dependencies: ms: 2.1.3 - decimal.js@10.6.0: {} + decimal.js@10.6.0: + optional: true deep-eql@5.0.2: {} @@ -4005,7 +4068,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.192: {} + electron-to-chromium@1.5.203: {} email-addresses@5.0.0: {} @@ -4015,7 +4078,8 @@ snapshots: entities@4.5.0: {} - entities@6.0.1: {} + entities@6.0.1: + optional: true es-abstract@1.24.0: dependencies: @@ -4120,34 +4184,34 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild@0.25.8: + esbuild@0.25.9: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.8 - '@esbuild/android-arm': 0.25.8 - '@esbuild/android-arm64': 0.25.8 - '@esbuild/android-x64': 0.25.8 - '@esbuild/darwin-arm64': 0.25.8 - '@esbuild/darwin-x64': 0.25.8 - '@esbuild/freebsd-arm64': 0.25.8 - '@esbuild/freebsd-x64': 0.25.8 - '@esbuild/linux-arm': 0.25.8 - '@esbuild/linux-arm64': 0.25.8 - '@esbuild/linux-ia32': 0.25.8 - '@esbuild/linux-loong64': 0.25.8 - '@esbuild/linux-mips64el': 0.25.8 - '@esbuild/linux-ppc64': 0.25.8 - '@esbuild/linux-riscv64': 0.25.8 - '@esbuild/linux-s390x': 0.25.8 - '@esbuild/linux-x64': 0.25.8 - '@esbuild/netbsd-arm64': 0.25.8 - '@esbuild/netbsd-x64': 0.25.8 - '@esbuild/openbsd-arm64': 0.25.8 - '@esbuild/openbsd-x64': 0.25.8 - '@esbuild/openharmony-arm64': 0.25.8 - '@esbuild/sunos-x64': 0.25.8 - '@esbuild/win32-arm64': 0.25.8 - '@esbuild/win32-ia32': 0.25.8 - '@esbuild/win32-x64': 0.25.8 + '@esbuild/aix-ppc64': 0.25.9 + '@esbuild/android-arm': 0.25.9 + '@esbuild/android-arm64': 0.25.9 + '@esbuild/android-x64': 0.25.9 + '@esbuild/darwin-arm64': 0.25.9 + '@esbuild/darwin-x64': 0.25.9 + '@esbuild/freebsd-arm64': 0.25.9 + '@esbuild/freebsd-x64': 0.25.9 + '@esbuild/linux-arm': 0.25.9 + '@esbuild/linux-arm64': 0.25.9 + '@esbuild/linux-ia32': 0.25.9 + '@esbuild/linux-loong64': 0.25.9 + '@esbuild/linux-mips64el': 0.25.9 + '@esbuild/linux-ppc64': 0.25.9 + '@esbuild/linux-riscv64': 0.25.9 + '@esbuild/linux-s390x': 0.25.9 + '@esbuild/linux-x64': 0.25.9 + '@esbuild/netbsd-arm64': 0.25.9 + '@esbuild/netbsd-x64': 0.25.9 + '@esbuild/openbsd-arm64': 0.25.9 + '@esbuild/openbsd-x64': 0.25.9 + '@esbuild/openharmony-arm64': 0.25.9 + '@esbuild/sunos-x64': 0.25.9 + '@esbuild/win32-arm64': 0.25.9 + '@esbuild/win32-ia32': 0.25.9 + '@esbuild/win32-x64': 0.25.9 escalade@3.2.0: {} @@ -4157,11 +4221,19 @@ snapshots: escape-string-regexp@4.0.0: {} + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + eslint-plugin-react-compiler@19.1.0-rc.2(eslint@9.33.0(jiti@2.5.1)): dependencies: - '@babel/core': 7.28.0 - '@babel/parser': 7.28.0 - '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.28.0) + '@babel/core': 7.28.3 + '@babel/parser': 7.28.3 + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.28.3) eslint: 9.33.0(jiti@2.5.1) hermes-parser: 0.25.1 zod: 3.25.76 @@ -4261,6 +4333,8 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 + esprima@4.0.1: {} + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -4314,7 +4388,7 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.4.6(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -4324,6 +4398,8 @@ snapshots: dependencies: flat-cache: 4.0.1 + file-saver@1.3.8: {} + filename-reserved-regex@2.0.0: {} filenamify@4.3.0: @@ -4368,10 +4444,10 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fs-extra@11.3.0: + fs-extra@11.3.1: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 fsevents@2.3.3: @@ -4423,11 +4499,13 @@ snapshots: email-addresses: 5.0.0 filenamify: 4.3.0 find-cache-dir: 3.3.2 - fs-extra: 11.3.0 + fs-extra: 11.3.1 globby: 11.1.0 gif.js@0.2.0: {} + gifenc@1.0.3: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -4478,6 +4556,12 @@ snapshots: h264-mp4-encoder@1.0.12: {} + happy-dom@18.0.1: + dependencies: + '@types/node': 20.19.11 + '@types/whatwg-mimetype': 3.0.2 + whatwg-mimetype: 3.0.0 + has-bigints@1.1.0: {} has-flag@4.0.0: {} @@ -4511,6 +4595,7 @@ snapshots: html-encoding-sniffer@4.0.0: dependencies: whatwg-encoding: 3.1.1 + optional: true html-escaper@2.0.2: {} @@ -4520,6 +4605,7 @@ snapshots: debug: 4.4.1 transitivePeerDependencies: - supports-color + optional: true https-proxy-agent@7.0.6: dependencies: @@ -4527,10 +4613,20 @@ snapshots: debug: 4.4.1 transitivePeerDependencies: - supports-color + optional: true + + i18next-browser-languagedetector@4.3.1: + dependencies: + '@babel/runtime': 7.28.3 + + i18next@19.9.2: + dependencies: + '@babel/runtime': 7.28.3 iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 + optional: true ignore@5.3.2: {} @@ -4623,7 +4719,8 @@ snapshots: is-number@7.0.0: {} - is-potential-custom-element-name@1.0.1: {} + is-potential-custom-element-name@1.0.1: + optional: true is-regex@1.2.1: dependencies: @@ -4678,7 +4775,7 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/trace-mapping': 0.3.30 debug: 4.4.1 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: @@ -4744,7 +4841,7 @@ snapshots: jest-mock@30.0.5: dependencies: '@jest/types': 30.0.5 - '@types/node': 24.2.1 + '@types/node': 24.3.0 jest-util: 30.0.5 jest-regex-util@30.0.1: {} @@ -4752,13 +4849,14 @@ snapshots: jest-util@30.0.5: dependencies: '@jest/types': 30.0.5 - '@types/node': 24.2.1 + '@types/node': 24.3.0 chalk: 4.1.2 ci-info: 4.3.0 graceful-fs: 4.2.11 picomatch: 4.0.3 - jiti@2.5.1: {} + jiti@2.5.1: + optional: true jju@1.4.0: {} @@ -4770,10 +4868,6 @@ snapshots: dependencies: argparse: 2.0.1 - js@0.1.0: - dependencies: - commander: 1.1.1 - jsdom@26.1.0: dependencies: cssstyle: 4.6.0 @@ -4800,6 +4894,7 @@ snapshots: - bufferutil - supports-color - utf-8-validate + optional: true jsesc@3.1.0: {} @@ -4813,7 +4908,7 @@ snapshots: json5@2.2.3: {} - jsonfile@6.1.0: + jsonfile@6.2.0: dependencies: universalify: 2.0.1 optionalDependencies: @@ -4826,8 +4921,6 @@ snapshots: object.assign: 4.1.7 object.values: 1.2.1 - keypress@0.1.0: {} - keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -4839,11 +4932,13 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + libtess@1.2.2: {} + local-pkg@1.1.1: dependencies: mlly: 1.7.4 pkg-types: 2.2.0 - quansync: 0.2.10 + quansync: 0.2.11 locate-path@5.0.0: dependencies: @@ -4879,11 +4974,11 @@ snapshots: magic-string@0.30.17: dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 magicast@0.3.5: dependencies: - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.3 '@babel/types': 7.28.2 source-map-js: 1.2.1 @@ -4912,10 +5007,6 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.0 - minimatch@3.0.8: - dependencies: - brace-expansion: 1.1.12 - minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -4947,7 +5038,8 @@ snapshots: node-releases@2.0.19: {} - nwsapi@2.2.21: {} + nwsapi@2.2.21: + optional: true object-assign@4.1.1: {} @@ -4985,6 +5077,8 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + omggif@1.0.10: {} + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -5028,10 +5122,28 @@ snapshots: p5.record.js@0.2.0: {} - p5@1.11.9: {} + p5@2.0.4: + dependencies: + '@davepagurek/bezier-path': 0.0.2 + '@japont/unicode-range': 1.0.0 + acorn: 8.15.0 + acorn-walk: 8.3.4 + colorjs.io: 0.5.2 + escodegen: 2.1.0 + file-saver: 1.3.8 + gifenc: 1.0.3 + i18next: 19.9.2 + i18next-browser-languagedetector: 4.3.1 + libtess: 1.2.2 + omggif: 1.0.10 + pako: 2.1.0 + pixelmatch: 7.1.0 + zod: 3.25.76 package-json-from-dist@1.0.1: {} + pako@2.1.0: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -5039,6 +5151,7 @@ snapshots: parse5@7.3.0: dependencies: entities: 6.0.1 + optional: true path-browserify@1.0.1: {} @@ -5070,6 +5183,10 @@ snapshots: picomatch@4.0.3: {} + pixelmatch@7.1.0: + dependencies: + pngjs: 7.0.0 + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 @@ -5086,6 +5203,8 @@ snapshots: exsolve: 1.0.7 pathe: 2.0.3 + pngjs@7.0.0: {} + possible-typed-array-names@1.1.0: {} postcss@8.5.6: @@ -5118,7 +5237,7 @@ snapshots: punycode@2.3.1: {} - quansync@0.2.10: {} + quansync@0.2.11: {} queue-microtask@1.2.3: {} @@ -5129,7 +5248,7 @@ snapshots: react-error-boundary@6.0.0(react@19.1.1): dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.3 react: 19.1.1 react-is@16.13.1: {} @@ -5216,7 +5335,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.46.2 fsevents: 2.3.3 - rrweb-cssom@0.8.0: {} + rrweb-cssom@0.8.0: + optional: true run-parallel@1.2.0: dependencies: @@ -5241,11 +5361,13 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 - safer-buffer@2.1.2: {} + safer-buffer@2.1.2: + optional: true saxes@6.0.0: dependencies: xmlchars: 2.2.0 + optional: true scheduler@0.26.0: {} @@ -5428,7 +5550,8 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - symbol-tree@3.2.4: {} + symbol-tree@3.2.4: + optional: true test-exclude@7.0.1: dependencies: @@ -5442,7 +5565,7 @@ snapshots: tinyglobby@0.2.14: dependencies: - fdir: 6.4.6(picomatch@4.0.3) + fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 tinypool@1.1.1: {} @@ -5451,11 +5574,13 @@ snapshots: tinyspy@4.0.3: {} - tldts-core@6.1.86: {} + tldts-core@6.1.86: + optional: true tldts@6.1.86: dependencies: tldts-core: 6.1.86 + optional: true to-regex-range@5.0.1: dependencies: @@ -5464,10 +5589,12 @@ snapshots: tough-cookie@5.1.2: dependencies: tldts: 6.1.86 + optional: true tr46@5.1.1: dependencies: punycode: 2.3.1 + optional: true trim-repeated@1.0.0: dependencies: @@ -5514,12 +5641,12 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): + typescript-eslint@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.39.0(@typescript-eslint/parser@8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.39.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/eslint-plugin': 8.39.1(@typescript-eslint/parser@8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.39.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.33.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: @@ -5538,13 +5665,15 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 + undici-types@6.21.0: {} + undici-types@7.10.0: {} universalify@2.0.1: {} - update-browserslist-db@1.1.3(browserslist@4.25.1): + update-browserslist-db@1.1.3(browserslist@4.25.2): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -5552,13 +5681,13 @@ snapshots: dependencies: punycode: 2.3.1 - vite-node@3.2.4(@types/node@24.2.1)(jiti@2.5.1): + vite-node@3.2.4(@types/node@24.3.0)(jiti@2.5.1): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.1(@types/node@24.2.1)(jiti@2.5.1) + vite: 7.1.2(@types/node@24.3.0)(jiti@2.5.1) transitivePeerDependencies: - '@types/node' - jiti @@ -5573,11 +5702,11 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.5.4(@types/node@24.2.1)(rollup@4.46.2)(typescript@5.9.2)(vite@7.1.1(@types/node@24.2.1)(jiti@2.5.1)): + vite-plugin-dts@4.5.4(@types/node@24.3.0)(rollup@4.46.2)(typescript@5.9.2)(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)): dependencies: - '@microsoft/api-extractor': 7.52.9(@types/node@24.2.1) + '@microsoft/api-extractor': 7.52.10(@types/node@24.3.0) '@rollup/pluginutils': 5.2.0(rollup@4.46.2) - '@volar/typescript': 2.4.22 + '@volar/typescript': 2.4.23 '@vue/language-core': 2.2.0(typescript@5.9.2) compare-versions: 6.1.1 debug: 4.4.1 @@ -5586,35 +5715,35 @@ snapshots: magic-string: 0.30.17 typescript: 5.9.2 optionalDependencies: - vite: 7.1.1(@types/node@24.2.1)(jiti@2.5.1) + vite: 7.1.2(@types/node@24.3.0)(jiti@2.5.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite@7.1.1(@types/node@24.2.1)(jiti@2.5.1): + vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1): dependencies: - esbuild: 0.25.8 - fdir: 6.4.6(picomatch@4.0.3) + esbuild: 0.25.9 + fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 rollup: 4.46.2 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 24.2.1 + '@types/node': 24.3.0 fsevents: 2.3.3 jiti: 2.5.1 - vitest-canvas-mock@0.3.3(vitest@3.2.4(@types/node@24.2.1)(jiti@2.5.1)(jsdom@26.1.0)): + vitest-canvas-mock@0.3.3(vitest@3.2.4(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0)): dependencies: jest-canvas-mock: 2.5.2 - vitest: 3.2.4(@types/node@24.2.1)(jiti@2.5.1)(jsdom@26.1.0) + vitest: 3.2.4(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0) - vitest@3.2.4(@types/node@24.2.1)(jiti@2.5.1)(jsdom@26.1.0): + vitest@3.2.4(@types/node@24.3.0)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.1(@types/node@24.2.1)(jiti@2.5.1)) + '@vitest/mocker': 3.2.4(vite@7.1.2(@types/node@24.3.0)(jiti@2.5.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -5632,11 +5761,12 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.1(@types/node@24.2.1)(jiti@2.5.1) - vite-node: 3.2.4(@types/node@24.2.1)(jiti@2.5.1) + vite: 7.1.2(@types/node@24.3.0)(jiti@2.5.1) + vite-node: 3.2.4(@types/node@24.3.0)(jiti@2.5.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.2.1 + '@types/node': 24.3.0 + happy-dom: 18.0.1 jsdom: 26.1.0 transitivePeerDependencies: - jiti @@ -5657,21 +5787,28 @@ snapshots: w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 + optional: true - webidl-conversions@7.0.0: {} + webidl-conversions@7.0.0: + optional: true webm-writer@1.0.0: {} whatwg-encoding@3.1.1: dependencies: iconv-lite: 0.6.3 + optional: true - whatwg-mimetype@4.0.0: {} + whatwg-mimetype@3.0.0: {} + + whatwg-mimetype@4.0.0: + optional: true whatwg-url@14.2.0: dependencies: tr46: 5.1.1 webidl-conversions: 7.0.0 + optional: true which-boxed-primitive@1.1.1: dependencies: @@ -5737,11 +5874,14 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 - ws@8.18.3: {} + ws@8.18.3: + optional: true - xml-name-validator@5.0.0: {} + xml-name-validator@5.0.0: + optional: true - xmlchars@2.2.0: {} + xmlchars@2.2.0: + optional: true yallist@3.1.1: {} diff --git a/src/components/ReactP5Wrapper.tsx b/src/components/ReactP5Wrapper.tsx index 5f351a7..5836583 100644 --- a/src/components/ReactP5Wrapper.tsx +++ b/src/components/ReactP5Wrapper.tsx @@ -1,6 +1,5 @@ import * as React from "react"; - -import { propsAreEqual } from "../utils/propsAreEqual"; +import { propsAreEqual } from "@utils/propsAreEqual"; const ReactP5WrapperGuard = React.lazy(() => import("./ReactP5WrapperGuard")); diff --git a/src/components/ReactP5WrapperGuard.tsx b/src/components/ReactP5WrapperGuard.tsx index 2c17952..2b4a573 100644 --- a/src/components/ReactP5WrapperGuard.tsx +++ b/src/components/ReactP5WrapperGuard.tsx @@ -1,12 +1,11 @@ import * as React from "react"; +import { type P5WrapperProps } from "@contracts/P5WrapperProps"; +import { type P5WrapperPropsWithSketch } from "@contracts/P5WrapperPropsWithSketch"; +import { type SketchProps } from "@contracts/SketchProps"; +import { logErrorBoundaryError } from "@utils/logErrorBoundaryError"; import { ReactNode } from "react"; import { FallbackProps } from "react-error-boundary"; -import { type P5WrapperProps } from "../contracts/P5WrapperProps"; -import { type P5WrapperPropsWithSketch } from "../contracts/P5WrapperPropsWithSketch"; -import { type SketchProps } from "../contracts/SketchProps"; -import { logErrorBoundaryError } from "../utils/logErrorBoundaryError"; - const ReactP5WrapperWithSketch = React.lazy( () => import("./ReactP5WrapperWithSketch") ); diff --git a/src/components/ReactP5WrapperWithSketch.tsx b/src/components/ReactP5WrapperWithSketch.tsx index f9f3168..1f7d5be 100644 --- a/src/components/ReactP5WrapperWithSketch.tsx +++ b/src/components/ReactP5WrapperWithSketch.tsx @@ -1,13 +1,12 @@ import * as React from "react"; - -import { P5WrapperClassName } from "../constants/P5WrapperClassName"; -import { type CanvasInstanceRef } from "../contracts/CanvasInstanceRef"; -import { type P5WrapperPropsWithSketch } from "../contracts/P5WrapperPropsWithSketch"; -import { type SketchProps } from "../contracts/SketchProps"; -import { type WrapperRef } from "../contracts/WrapperRef"; -import { removeCanvasInstance } from "../utils/removeCanvasInstance"; -import { updateCanvasInstance } from "../utils/updateCanvasInstance"; -import { withoutKeys } from "../utils/withoutKeys"; +import { P5WrapperClassName } from "@constants/P5WrapperClassName"; +import { type CanvasInstanceRef } from "@contracts/CanvasInstanceRef"; +import { type P5WrapperPropsWithSketch } from "@contracts/P5WrapperPropsWithSketch"; +import { type SketchProps } from "@contracts/SketchProps"; +import { type WrapperRef } from "@contracts/WrapperRef"; +import { removeCanvasInstance } from "@utils/removeCanvasInstance"; +import { updateCanvasInstance } from "@utils/updateCanvasInstance"; +import { withoutKeys } from "@utils/withoutKeys"; const ReactP5WrapperWithSketch = ( props: P5WrapperPropsWithSketch diff --git a/src/contracts/CanvasInstanceRef.ts b/src/contracts/CanvasInstanceRef.ts index c5a757a..12c09d5 100644 --- a/src/contracts/CanvasInstanceRef.ts +++ b/src/contracts/CanvasInstanceRef.ts @@ -1,7 +1,6 @@ -import { type MutableRefObject } from "react"; - -import { type P5CanvasInstance } from "./P5CanvasInstance"; -import { type SketchProps } from "./SketchProps"; +import { type P5CanvasInstance } from "@contracts/P5CanvasInstance"; +import { type SketchProps } from "@contracts/SketchProps"; +import { type RefObject } from "react"; export type CanvasInstanceRef = - MutableRefObject | null>; + RefObject | null>; diff --git a/src/contracts/InputProps.ts b/src/contracts/InputProps.ts index 58c5338..03c53fa 100644 --- a/src/contracts/InputProps.ts +++ b/src/contracts/InputProps.ts @@ -1,9 +1,8 @@ +import { type Sketch } from "@contracts/Sketch"; +import { type SketchProps } from "@contracts/SketchProps"; import { type ReactNode } from "react"; import { type FallbackProps } from "react-error-boundary"; -import { type Sketch } from "./Sketch"; -import { type SketchProps } from "./SketchProps"; - export type InputProps = Props & { sketch?: Sketch; fallback?: () => ReactNode; diff --git a/src/contracts/P5CanvasInstance.ts b/src/contracts/P5CanvasInstance.ts index d70409a..06e02ae 100644 --- a/src/contracts/P5CanvasInstance.ts +++ b/src/contracts/P5CanvasInstance.ts @@ -1,7 +1,7 @@ -import type p5 from "p5"; - -import { type SketchProps } from "./SketchProps"; +import p5 from "@contracts/p5"; +import { type SketchProps } from "@contracts/SketchProps"; export type P5CanvasInstance = p5 & { updateWithProps?: (props: Props) => void; + [key: string]: unknown; }; diff --git a/src/contracts/P5WrapperProps.ts b/src/contracts/P5WrapperProps.ts index eba8210..ecb7a6e 100644 --- a/src/contracts/P5WrapperProps.ts +++ b/src/contracts/P5WrapperProps.ts @@ -1,6 +1,6 @@ -import { type InputProps } from "./InputProps"; -import { type SketchProps } from "./SketchProps"; -import { type WithChildren } from "./WithChildren"; +import { type InputProps } from "@contracts/InputProps"; +import { type SketchProps } from "@contracts/SketchProps"; +import { type WithChildren } from "@contracts/WithChildren"; export type P5WrapperProps = WithChildren>; diff --git a/src/contracts/P5WrapperPropsWithSketch.ts b/src/contracts/P5WrapperPropsWithSketch.ts index 7955cbd..2836d71 100644 --- a/src/contracts/P5WrapperPropsWithSketch.ts +++ b/src/contracts/P5WrapperPropsWithSketch.ts @@ -1,6 +1,6 @@ -import { type P5WrapperProps } from "./P5WrapperProps"; -import { type Sketch } from "./Sketch"; -import { type SketchProps } from "./SketchProps"; +import { type P5WrapperProps } from "@contracts/P5WrapperProps"; +import { type Sketch } from "@contracts/Sketch"; +import { type SketchProps } from "@contracts/SketchProps"; export type P5WrapperPropsWithSketch = P5WrapperProps & { sketch: Sketch }; diff --git a/src/contracts/Sketch.ts b/src/contracts/Sketch.ts index 028958f..a4c8e87 100644 --- a/src/contracts/Sketch.ts +++ b/src/contracts/Sketch.ts @@ -1,5 +1,5 @@ -import { type P5CanvasInstance } from "./P5CanvasInstance"; -import { type SketchProps } from "./SketchProps"; +import { type P5CanvasInstance } from "@contracts/P5CanvasInstance"; +import { type SketchProps } from "@contracts/SketchProps"; export type Sketch = ( instance: P5CanvasInstance diff --git a/src/contracts/WrapperRef.ts b/src/contracts/WrapperRef.ts index c33fb0c..6961c2a 100644 --- a/src/contracts/WrapperRef.ts +++ b/src/contracts/WrapperRef.ts @@ -1,5 +1,4 @@ -import { type MutableRefObject } from "react"; +import { type Wrapper } from "@contracts/Wrapper"; +import { type RefObject } from "react"; -import { type Wrapper } from "./Wrapper"; - -export type WrapperRef = MutableRefObject; +export type WrapperRef = RefObject; diff --git a/src/contracts/p5.ts b/src/contracts/p5.ts new file mode 100644 index 0000000..0a867b0 --- /dev/null +++ b/src/contracts/p5.ts @@ -0,0 +1,5 @@ +// @see https://github.com/processing/p5.js/pull/7863 +// @ts-expect-error: P5 does not export types correctly right now, should be resolved soon by the PR above. +import p5 from "p5"; + +export default p5; diff --git a/src/utils/createCanvasInstance.ts b/src/utils/createCanvasInstance.ts index ee51921..d764d7b 100644 --- a/src/utils/createCanvasInstance.ts +++ b/src/utils/createCanvasInstance.ts @@ -1,9 +1,8 @@ -import p5 from "p5"; - -import { type P5CanvasInstance } from "../contracts/P5CanvasInstance"; -import { type Sketch } from "../contracts/Sketch"; -import { type SketchProps } from "../contracts/SketchProps"; -import { type Wrapper } from "../contracts/Wrapper"; +import p5 from "@contracts/p5"; +import { type P5CanvasInstance } from "@contracts/P5CanvasInstance"; +import { type Sketch } from "@contracts/Sketch"; +import { type SketchProps } from "@contracts/SketchProps"; +import { type Wrapper } from "@contracts/Wrapper"; export function createCanvasInstance( sketch: Sketch, diff --git a/src/utils/propsAreEqual.ts b/src/utils/propsAreEqual.ts index 204db7b..cfd84ae 100644 --- a/src/utils/propsAreEqual.ts +++ b/src/utils/propsAreEqual.ts @@ -1,8 +1,7 @@ +import { type P5WrapperProps } from "@contracts/P5WrapperProps"; +import { type SketchProps } from "@contracts/SketchProps"; import diff from "microdiff"; -import { type P5WrapperProps } from "../contracts/P5WrapperProps"; -import { type SketchProps } from "../contracts/SketchProps"; - export function propsAreEqual( previous: P5WrapperProps, next: P5WrapperProps diff --git a/src/utils/removeCanvasInstance.ts b/src/utils/removeCanvasInstance.ts index d722413..2dba2b5 100644 --- a/src/utils/removeCanvasInstance.ts +++ b/src/utils/removeCanvasInstance.ts @@ -1,5 +1,5 @@ -import { type CanvasInstanceRef } from "../contracts/CanvasInstanceRef"; -import { type SketchProps } from "../contracts/SketchProps"; +import { type CanvasInstanceRef } from "@contracts/CanvasInstanceRef"; +import { type SketchProps } from "@contracts/SketchProps"; export function removeCanvasInstance( canvasInstanceRef: CanvasInstanceRef diff --git a/src/utils/updateCanvasInstance.ts b/src/utils/updateCanvasInstance.ts index 61e5232..fdafc8e 100644 --- a/src/utils/updateCanvasInstance.ts +++ b/src/utils/updateCanvasInstance.ts @@ -1,7 +1,8 @@ -import { type CanvasInstanceRef } from "../contracts/CanvasInstanceRef"; -import { type Sketch } from "../contracts/Sketch"; -import { type SketchProps } from "../contracts/SketchProps"; -import { type WrapperRef } from "../contracts/WrapperRef"; +import { type CanvasInstanceRef } from "@contracts/CanvasInstanceRef"; +import { type Sketch } from "@contracts/Sketch"; +import { type SketchProps } from "@contracts/SketchProps"; +import { type WrapperRef } from "@contracts/WrapperRef"; + import { createCanvasInstance } from "./createCanvasInstance"; import { removeCanvasInstance } from "./removeCanvasInstance"; diff --git a/tests/components/ReactP5Wrapper.test.tsx b/tests/components/ReactP5Wrapper.test.tsx index a4aac0e..0cdeaca 100644 --- a/tests/components/ReactP5Wrapper.test.tsx +++ b/tests/components/ReactP5Wrapper.test.tsx @@ -1,12 +1,11 @@ +import { ReactP5Wrapper } from "@components/ReactP5Wrapper"; +import { P5WrapperClassName } from "@constants/P5WrapperClassName"; +import { type P5CanvasInstance } from "@contracts/P5CanvasInstance"; +import { type Sketch } from "@contracts/Sketch"; import { render, RenderResult, waitFor } from "@testing-library/react"; import { renderToStaticMarkup, renderToString } from "react-dom/server"; import { assert, describe, expect, it, vi } from "vitest"; -import { ReactP5Wrapper } from "../../src/components/ReactP5Wrapper"; -import { P5WrapperClassName } from "../../src/constants/P5WrapperClassName"; -import { type P5CanvasInstance } from "../../src/contracts/P5CanvasInstance"; -import { type Sketch } from "../../src/contracts/Sketch"; - function createSketch( updateFunction?: P5CanvasInstance["updateWithProps"] ): Sketch { diff --git a/tests/constants/P5WrapperClassName.test.ts b/tests/constants/P5WrapperClassName.test.ts index 32c3c98..a7eb280 100644 --- a/tests/constants/P5WrapperClassName.test.ts +++ b/tests/constants/P5WrapperClassName.test.ts @@ -1,7 +1,6 @@ +import { P5WrapperClassName } from "@constants/P5WrapperClassName"; import { describe, expect, it } from "vitest"; -import { P5WrapperClassName } from "../../src/constants/P5WrapperClassName"; - describe("P5WrapperClassName", () => { it("Is exported as a non-empty string", () => { expect(P5WrapperClassName).toBeTypeOf("string"); diff --git a/tests/setup.ts b/tests/setup.ts index c6497c0..1acbe9d 100644 --- a/tests/setup.ts +++ b/tests/setup.ts @@ -1,6 +1,11 @@ +import p5 from "@contracts/p5"; import "@testing-library/jest-dom/vitest"; import { cleanup } from "@testing-library/react"; import { afterEach } from "vitest"; import "vitest-canvas-mock"; +// Disables P5 "friendly errors" to avoid DOM-related script scanning that causes unhandled rejections in the tests. +// @see https://p5js.org/reference/p5/disableFriendlyErrors/ +p5.disableFriendlyErrors = true; + afterEach(() => cleanup()); diff --git a/tests/utils/createCanvasInstance.test.ts b/tests/utils/createCanvasInstance.test.ts index a8d3990..aacd2e6 100644 --- a/tests/utils/createCanvasInstance.test.ts +++ b/tests/utils/createCanvasInstance.test.ts @@ -1,8 +1,7 @@ -import p5 from "p5"; +import p5 from "@contracts/p5"; +import { createCanvasInstance } from "@utils/createCanvasInstance"; import { describe, expect, it, vi } from "vitest"; -import { createCanvasInstance } from "../../src/utils/createCanvasInstance"; - describe("createCanvasInstance", () => { it("Should construct a valid implementation of p5 in instance mode", () => { const sketch = vi.fn(); diff --git a/tests/utils/logErrorBoundaryError.test.ts b/tests/utils/logErrorBoundaryError.test.ts index 418345c..1894468 100644 --- a/tests/utils/logErrorBoundaryError.test.ts +++ b/tests/utils/logErrorBoundaryError.test.ts @@ -1,3 +1,4 @@ +import { logErrorBoundaryError } from "@utils/logErrorBoundaryError"; import { afterEach, beforeEach, @@ -8,8 +9,6 @@ import { vi } from "vitest"; -import { logErrorBoundaryError } from "../../src/utils/logErrorBoundaryError"; - describe("logErrorBoundaryError", () => { let errorLoggerSpy: MockInstance; diff --git a/tests/utils/propsAreEqual.test.ts b/tests/utils/propsAreEqual.test.ts index 49c5205..b5520ef 100644 --- a/tests/utils/propsAreEqual.test.ts +++ b/tests/utils/propsAreEqual.test.ts @@ -1,8 +1,7 @@ +import { type P5WrapperProps } from "@contracts/P5WrapperProps"; +import { propsAreEqual } from "@utils/propsAreEqual"; import { describe, expect, it, vi } from "vitest"; -import { type P5WrapperProps } from "../../src/contracts/P5WrapperProps"; -import { propsAreEqual } from "../../src/utils/propsAreEqual"; - describe("propsAreEqual", () => { it("Returns true when the current and next props are the same", () => { const sketch = vi.fn(); diff --git a/tests/utils/removeCanvasInstance.test.ts b/tests/utils/removeCanvasInstance.test.ts index dce6e8d..2b7d033 100644 --- a/tests/utils/removeCanvasInstance.test.ts +++ b/tests/utils/removeCanvasInstance.test.ts @@ -1,10 +1,10 @@ -import p5 from "p5"; +import { type CanvasInstanceRef } from "@contracts/CanvasInstanceRef"; +import p5 from "@contracts/p5"; +import { removeCanvasInstance } from "@utils/removeCanvasInstance"; import { createRef } from "react"; import { describe, expect, it, vi } from "vitest"; -import { type CanvasInstanceRef } from "../../src/contracts/CanvasInstanceRef"; import { SketchProps } from "../../src/main"; -import { removeCanvasInstance } from "../../src/utils/removeCanvasInstance"; describe("removeCanvasInstance", () => { it("Calls the remove method on the canvas if it exists", () => { diff --git a/tests/utils/updateCanvasInstance.test.ts b/tests/utils/updateCanvasInstance.test.ts index fd99ded..cd2a310 100644 --- a/tests/utils/updateCanvasInstance.test.ts +++ b/tests/utils/updateCanvasInstance.test.ts @@ -1,12 +1,12 @@ -import p5 from "p5"; +import { type CanvasInstanceRef } from "@contracts/CanvasInstanceRef"; +import p5 from "@contracts/p5"; +import { type WrapperRef } from "@contracts/WrapperRef"; +import { createCanvasInstance } from "@utils/createCanvasInstance"; +import { updateCanvasInstance } from "@utils/updateCanvasInstance"; import { createRef } from "react"; import { describe, expect, it, vi } from "vitest"; -import { type CanvasInstanceRef } from "../../src/contracts/CanvasInstanceRef"; -import { type WrapperRef } from "../../src/contracts/WrapperRef"; import { SketchProps } from "../../src/main"; -import { createCanvasInstance } from "../../src/utils/createCanvasInstance"; -import { updateCanvasInstance } from "../../src/utils/updateCanvasInstance"; describe("updateCanvasInstance", () => { it("Should update a canvas instance to a new version", () => { diff --git a/tests/utils/withoutKeys.test.ts b/tests/utils/withoutKeys.test.ts index 1ec7d5b..caa120f 100644 --- a/tests/utils/withoutKeys.test.ts +++ b/tests/utils/withoutKeys.test.ts @@ -1,7 +1,6 @@ +import { withoutKeys } from "@utils/withoutKeys"; import { describe, expect, it } from "vitest"; -import { withoutKeys } from "../../src/utils/withoutKeys"; - describe("withoutKeys", () => { it("Returns the original object if the keys to ignore list is empty", () => { const object = { a: 1, b: 2 }; diff --git a/tsconfig.json b/tsconfig.json index 7c1030d..6aa2e07 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,3 +1,25 @@ { - "extends": "./config/typescript/tsconfig.json" + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["src/*"], + "@components/*": ["src/components/*"], + "@utils/*": ["src/utils/*"], + "@constants/*": ["src/constants/*"], + "@contracts/*": ["src/contracts/*"] + }, + "types": ["vite/client"], + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "target": "ESNext", + "module": "ESNext", + "jsx": "react-jsx", + "moduleResolution": "bundler", + "strict": true, + "noImplicitAny": true, + "isolatedModules": true, + "useDefineForClassFields": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true + } }