From 10264e9a2ba876ecb4093c9e23c087406197b104 Mon Sep 17 00:00:00 2001 From: Rob Cheung Date: Mon, 4 Sep 2023 14:39:17 -0400 Subject: [PATCH 001/103] chore: update three stdlib (#1639) --- package.json | 2 +- yarn.lock | 55 +++++----------------------------------------------- 2 files changed, 6 insertions(+), 51 deletions(-) diff --git a/package.json b/package.json index b9c6274f5..a4d969184 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "stats.js": "^0.17.0", "suspend-react": "^0.1.3", "three-mesh-bvh": "^0.6.0", - "three-stdlib": "^2.23.9", + "three-stdlib": "^2.25.1", "troika-three-text": "^0.47.2", "utility-types": "^3.10.0", "zustand": "^3.5.13" diff --git a/yarn.lock b/yarn.lock index d089e81e3..310c2bb9c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1537,33 +1537,6 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@chevrotain/cst-dts-gen@^10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@chevrotain/cst-dts-gen/-/cst-dts-gen-10.1.2.tgz#4ee6eff237bb47f4990cfb76c18ee2e71237929c" - integrity sha512-E/XrL0QlzExycPzwhOEZGVOheJ/Clr5uNv3oCds88MiNqEmg3UU1iauZk7DhjsUo3jgEW4lf0I5HRl7/HC5ZkQ== - dependencies: - "@chevrotain/gast" "^10.1.2" - "@chevrotain/types" "^10.1.2" - lodash "4.17.21" - -"@chevrotain/gast@^10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@chevrotain/gast/-/gast-10.1.2.tgz#91d5b342480d7532118a6cf3958955f86c9cc03e" - integrity sha512-er+TcxUOMuGOPoiOq8CJsRm92zGE4YPIYtyxJfxoVwVgtj4AMrPNCmrHvYaK/bsbt2DaDuFdcbbAfM9bcBXW6Q== - dependencies: - "@chevrotain/types" "^10.1.2" - lodash "4.17.21" - -"@chevrotain/types@^10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@chevrotain/types/-/types-10.1.2.tgz#f4caa373b1cd14d13ecb61c77dfee2456eef1ab3" - integrity sha512-4qF9SmmWKv8AIG/3d+71VFuqLumNCQTP5GoL0CW6x7Ay2OdXm6FUgWFLTMneGUjYUk2C+MSCf7etQfdq3LEr1A== - -"@chevrotain/utils@^10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@chevrotain/utils/-/utils-10.1.2.tgz#d2fb7b968141139e5c2419553e5295382c265e7d" - integrity sha512-bbZIpW6fdyf7FMaeDmw3cBbkTqsecxEkwlVKgVfqqXWBPLH6azxhPA2V9F7OhoZSVrsnMYw7QuyK6qutXPjEew== - "@choojs/findup@^0.2.0": version "0.2.1" resolved "https://registry.yarnpkg.com/@choojs/findup/-/findup-0.2.1.tgz#ac13c59ae7be6e1da64de0779a0a7f03d75615a3" @@ -5317,18 +5290,6 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chevrotain@^10.1.2: - version "10.1.2" - resolved "https://registry.yarnpkg.com/chevrotain/-/chevrotain-10.1.2.tgz#c990ab43e32fd0bfb176ad1cbdebf48302ac8542" - integrity sha512-hvRiQuhhTZxkPMGD/dke+s1EGo8AkKDBU05CcufBO278qgAQSwIC4QyLdHz0CFHVtqVYWjlAS5D1KwvBbaHT+w== - dependencies: - "@chevrotain/cst-dts-gen" "^10.1.2" - "@chevrotain/gast" "^10.1.2" - "@chevrotain/types" "^10.1.2" - "@chevrotain/utils" "^10.1.2" - lodash "4.17.21" - regexp-to-ast "0.5.0" - chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -9579,7 +9540,7 @@ lodash.uniqby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== -lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4: +lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -11784,11 +11745,6 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-to-ast@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz#56c73856bee5e1fef7f73a00f1473452ab712a24" - integrity sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw== - regexp.prototype.flags@^1.4.3: version "1.5.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" @@ -13057,15 +13013,14 @@ three-mesh-bvh@^0.6.0: resolved "https://registry.yarnpkg.com/three-mesh-bvh/-/three-mesh-bvh-0.6.0.tgz#15523c335383df658dc60063a783fdd52d045dc5" integrity sha512-4/oXeqVMLuN9/P0M3L5ezIVrFiXQXKvjVTErkiSYMjSaPoWfNPAwqulSgLf4bIUPn8/Lq3rmIJwxbCuD8qDobA== -three-stdlib@^2.23.9: - version "2.23.9" - resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.23.9.tgz#09c74fc6acced3d124e4f9d695156136c587a355" - integrity sha512-fYBClVGQptD7UZcoRZGNlR3sKcUW37hVPoEW1v68E4XuiwD0Ml/VqDUJ0yEMVE2DlooDvqgqv/rIcHC/B4N5pg== +three-stdlib@^2.25.1: + version "2.25.1" + resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.25.1.tgz#46c6b8bd18659d9d3695237cd92b3d5baee309b4" + integrity sha512-cFlxaTJjlSM10NGoUVEoQkMRpSOftuAh3OCpSKiLTsUfA7/HuhpoBJy3StiOor/LZm5M+onegqsbr5UBCCYYjQ== dependencies: "@types/draco3d" "^1.4.0" "@types/offscreencanvas" "^2019.6.4" "@types/webxr" "^0.5.2" - chevrotain "^10.1.2" draco3d "^1.4.1" fflate "^0.6.9" ktx-parse "^0.4.5" From f43a36402b9a07b3e8d57468a09f211f12bdb1a0 Mon Sep 17 00:00:00 2001 From: Simon Ducroquet Date: Mon, 4 Sep 2023 14:42:20 -0400 Subject: [PATCH 002/103] Added a closing slash to PerformanceMonitor examp. (#1623) --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 43d3d59a5..105175d51 100644 --- a/README.md +++ b/README.md @@ -3300,7 +3300,7 @@ function App() { const [dpr, setDpr] = useState(1.5) return ( - setDpr(2)} onDecline={() => setDpr(1)} > + setDpr(2)} onDecline={() => setDpr(1)} /> ``` You can also use the `onChange` callback to get notified when the average changes in whichever direction. This allows you to make gradual changes. It gives you a `factor` between 0 and 1, which is increased by incline and decreased by decline. The `factor` is initially 0.5 by default. If your app starts with lowest defaults and gradually increases quality set `factor` to 0. If it starts with highest defaults and decreases quality, set it to 1. If it starts in the middle and can either increase or decrease, set it to 0.5. @@ -3310,16 +3310,16 @@ The following starts at the highest dpr (2) and clamps the gradual dpr between 0 ```jsx import round from 'lodash/round' -const [dpr, set] = useState(2) +const [dpr, setDpr] = useState(2) return ( - setDpr(round(0.5 + 1.5 * factor, 1))} > + setDpr(round(0.5 + 1.5 * factor, 1))} /> ``` If you still experience flip flops despite the bounds you can define a limit of `flipflops`. If it is met `onFallback` will be triggered which typically sets a lowest possible baseline for the app. After the fallback has been called PerformanceMonitor will shut down. ```jsx - setDpr(1)}> + setDpr(1)}/> ``` PerformanceMonitor can also have children, if you wrap your app in it you get to use `usePerformanceMonitor` which allows individual components down the nested tree to respond to performance changes on their own. From a0c7a6b6de98620689717f99d1261360f25df34b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Mosmann?= Date: Mon, 4 Sep 2023 19:47:06 +0100 Subject: [PATCH 003/103] fix(SpriteAnimator): add hasEnded ref to prevent infinite looping (#1619) --- src/core/SpriteAnimator.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core/SpriteAnimator.tsx b/src/core/SpriteAnimator.tsx index 08efd2515..9500c9a72 100644 --- a/src/core/SpriteAnimator.tsx +++ b/src/core/SpriteAnimator.tsx @@ -52,6 +52,7 @@ export const SpriteAnimator: React.FC = ( const v = useThree((state) => state.viewport) const spriteData = React.useRef(null) const [isJsonReady, setJsonReady] = React.useState(false) + const hasEnded = React.useRef(false) const matRef = React.useRef() const spriteRef = React.useRef() const timerOffset = React.useRef(window.performance.now()) @@ -116,6 +117,7 @@ export const SpriteAnimator: React.FC = ( if (currentFrameName.current !== frameName && frameName) { currentFrame.current = 0 currentFrameName.current = frameName + hasEnded.current = false } }, [frameName]) @@ -266,6 +268,7 @@ export const SpriteAnimator: React.FC = ( currentFrameName: frameName, currentFrame: currentFrame.current, }) + hasEnded.current = true } if (!loop) return } @@ -304,7 +307,7 @@ export const SpriteAnimator: React.FC = ( return } - if (autoPlay || play) { + if (!hasEnded.current && (autoPlay || play)) { runAnimation() onFrame && onFrame({ currentFrameName: currentFrameName.current, currentFrame: currentFrame.current }) } From 410c84adf0afc7e995e0f0005f536e37d3bc28ac Mon Sep 17 00:00:00 2001 From: Michael Dobekidis Date: Mon, 4 Sep 2023 21:49:00 +0300 Subject: [PATCH 004/103] feat(RoundedBox): Add bevel as optional (#1627) * feat(RoundedBox): Add bevel as optional * fix: added bevel-segments property --- README.md | 1 + src/core/RoundedBox.tsx | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 105175d51..598b8508e 100644 --- a/README.md +++ b/README.md @@ -969,6 +969,7 @@ A box buffer geometry with rounded corners, done with extrusion. args={[1, 1, 1]} // Width, height, depth. Default is [1, 1, 1] radius={0.05} // Radius of the rounded corners. Default is 0.05 smoothness={4} // The number of curve segments. Default is 4 + bevelSegments={4} // The number of bevel segments. Default is 4, setting it to 0 removes the bevel, as a result the texture is applied to the whole geometry. creaseAngle={0.4} // Smooth normals everywhere except faces that meet at an angle greater than the crease angle {...meshProps} // All THREE.Mesh props are valid > diff --git a/src/core/RoundedBox.tsx b/src/core/RoundedBox.tsx index 6ac523883..f691d16a2 100644 --- a/src/core/RoundedBox.tsx +++ b/src/core/RoundedBox.tsx @@ -19,6 +19,7 @@ type Props = { args?: NamedArrayTuple<(width?: number, height?: number, depth?: number) => void> radius?: number smoothness?: number + bevelSegments?: number steps?: number creaseAngle?: number } & Omit @@ -29,6 +30,7 @@ export const RoundedBox: ForwardRefComponent = React.forwardRef = React.forwardRef ({ depth: depth - radius * 2, bevelEnabled: true, - bevelSegments: smoothness * 2, + bevelSegments: bevelSegments * 2, steps, bevelSize: radius - eps, bevelThickness: radius, From 65bf73dbb8989cca3ba6b4d94bb48c79e279da46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Roche?= Date: Tue, 5 Sep 2023 17:15:36 +0200 Subject: [PATCH 005/103] set useGLTF draco decoder path globally (#1640) * feat(useGLTF): setDecoderPath globally * fix(useGLTF): add setDecoderPath to docs --- README.md | 8 ++++++-- package.json | 5 +++-- src/core/useGLTF.tsx | 9 ++++++--- yarn.lock | 9 ++++++++- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 598b8508e..2fca899d2 100644 --- a/README.md +++ b/README.md @@ -2796,6 +2796,10 @@ useGLTF(url, '/draco-gltf') useGLTF.preload(url) ``` +If you want to use your own draco decoder globally, you can pass it through `useGLTF.setDecoderPath(path)`: + +````jsx + > **Note**
If you are using the CDN loaded draco binaries, you can get a small speedup in loading time by prefetching them. > > You can accomplish this by adding two `` tags to your `` tag, as below. The version in those URLs must exactly match what [useGLTF](src/core/useGLTF.tsx#L18) uses for this to work. If you're using create-react-app, `public/index.html` file contains the `` tag. @@ -2828,7 +2832,7 @@ function SuzanneFBX() { let fbx = useFBX('suzanne/suzanne.fbx') return } -``` +```` #### useTexture @@ -3320,7 +3324,7 @@ return ( If you still experience flip flops despite the bounds you can define a limit of `flipflops`. If it is met `onFallback` will be triggered which typically sets a lowest possible baseline for the app. After the fallback has been called PerformanceMonitor will shut down. ```jsx - setDpr(1)}/> + setDpr(1)} /> ``` PerformanceMonitor can also have children, if you wrap your app in it you get to use `usePerformanceMonitor` which allows individual components down the nested tree to respond to performance changes on their own. diff --git a/package.json b/package.json index a4d969184..641191ea8 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,8 @@ "test": "npm run eslint:ci && (cd test/e2e; ./e2e.sh)", "typecheck": "tsc --noEmit --emitDeclarationOnly false --strict --jsx react", "typegen": "tsc --emitDeclarationOnly", - "storybook": "NODE_OPTIONS=\"--openssl-legacy-provider\" storybook dev -p 6006", - "build-storybook": "NODE_OPTIONS=\"--openssl-legacy-provider\" storybook build", + "storybook": "cross-env NODE_OPTIONS=\"--openssl-legacy-provider\" storybook dev -p 6006", + "build-storybook": "cross-env NODE_OPTIONS=\"--openssl-legacy-provider\" storybook build", "copy": "copyfiles package.json README.md LICENSE dist && json -I -f dist/package.json -e \"this.private=false; this.devDependencies=undefined; this.optionalDependencies=undefined; this.scripts=undefined; this.husky=undefined; this.prettier=undefined; this.jest=undefined; this['lint-staged']=undefined;\"", "release": "semantic-release" }, @@ -60,6 +60,7 @@ "@react-spring/three": "~9.6.1", "@use-gesture/react": "^10.2.24", "camera-controls": "^2.4.2", + "cross-env": "^7.0.3", "detect-gpu": "^5.0.28", "glsl-noise": "^0.0.0", "lodash.clamp": "^4.0.3", diff --git a/src/core/useGLTF.tsx b/src/core/useGLTF.tsx index a07c28b62..fc81bead6 100644 --- a/src/core/useGLTF.tsx +++ b/src/core/useGLTF.tsx @@ -5,6 +5,8 @@ import { useLoader } from '@react-three/fiber' let dracoLoader: DRACOLoader | null = null +let decoderPath: string = 'https://www.gstatic.com/draco/versioned/decoders/1.5.5/' + function extensions(useDraco: boolean | string, useMeshopt: boolean, extendLoader?: (loader: GLTFLoader) => void) { return (loader: Loader) => { if (extendLoader) { @@ -14,9 +16,7 @@ function extensions(useDraco: boolean | string, useMeshopt: boolean, extendLoade if (!dracoLoader) { dracoLoader = new DRACOLoader() } - dracoLoader.setDecoderPath( - typeof useDraco === 'string' ? useDraco : 'https://www.gstatic.com/draco/versioned/decoders/1.5.5/' - ) + dracoLoader.setDecoderPath(typeof useDraco === 'string' ? useDraco : decoderPath) ;(loader as GLTFLoader).setDRACOLoader(dracoLoader) } if (useMeshopt) { @@ -45,3 +45,6 @@ useGLTF.preload = ( ) => useLoader.preload(GLTFLoader, path, extensions(useDraco, useMeshOpt, extendLoader)) useGLTF.clear = (input: string | string[]) => useLoader.clear(GLTFLoader, input) +useGLTF.setDecoderPath = (path: string) => { + decoderPath = path +} diff --git a/yarn.lock b/yarn.lock index 310c2bb9c..b4dedcf62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5774,6 +5774,13 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + dependencies: + cross-spawn "^7.0.1" + cross-fetch@3.1.6: version "3.1.6" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.6.tgz#bae05aa31a4da760969756318feeee6e70f15d6c" @@ -5781,7 +5788,7 @@ cross-fetch@3.1.6: dependencies: node-fetch "^2.6.11" -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== From 74355f8604e8bff256dc00dcd48e2e12f7fc1dfa Mon Sep 17 00:00:00 2001 From: uma-neko <36249844+uma-neko@users.noreply.github.com> Date: Thu, 7 Sep 2023 02:09:42 +0900 Subject: [PATCH 006/103] fix(BBAnchor): fixed Vector3 type anchor to work (#1642) --- src/core/BBAnchor.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/BBAnchor.tsx b/src/core/BBAnchor.tsx index ad1c16eab..75b283bf3 100644 --- a/src/core/BBAnchor.tsx +++ b/src/core/BBAnchor.tsx @@ -29,9 +29,9 @@ export const BBAnchor = ({ anchor, ...props }: BBAnchorProps) => { boundingBox.getSize(boundingBoxSize) ref.current.position.set( - parentRef.current.position.x + (boundingBoxSize.x * anchor[0]) / 2, - parentRef.current.position.y + (boundingBoxSize.y * anchor[1]) / 2, - parentRef.current.position.z + (boundingBoxSize.z * anchor[2]) / 2 + parentRef.current.position.x + (boundingBoxSize.x * (Array.isArray(anchor) ? anchor[0] : anchor.x)) / 2, + parentRef.current.position.y + (boundingBoxSize.y * (Array.isArray(anchor) ? anchor[1] : anchor.y)) / 2, + parentRef.current.position.z + (boundingBoxSize.z * (Array.isArray(anchor) ? anchor[2] : anchor.z)) / 2 ) } }) From b7d89c055f06a835a693fc22fe79736758629fd9 Mon Sep 17 00:00:00 2001 From: Michael Dobekidis Date: Wed, 6 Sep 2023 23:36:36 +0300 Subject: [PATCH 007/103] feat: added optional Sprite or Plane geometry for SpriteAnimator (#1643) --- README.md | 2 ++ src/core/SpriteAnimator.tsx | 34 +++++++++++++++++++++++++--------- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 2fca899d2..cfcbd330f 100644 --- a/README.md +++ b/README.md @@ -2358,6 +2358,8 @@ type Props = { flipX?: boolean /** Sets the alpha value to be used when running an alpha test. https://threejs.org/docs/#api/en/materials/Material.alphaTest */ alphaTest?: number + /** Displays the texture on a SpriteGeometry always facing the camera, if set to false, it renders on a PlaneGeometry */ + asSprite?: boolean } ``` diff --git a/src/core/SpriteAnimator.tsx b/src/core/SpriteAnimator.tsx index 9500c9a72..8bd848607 100644 --- a/src/core/SpriteAnimator.tsx +++ b/src/core/SpriteAnimator.tsx @@ -22,6 +22,7 @@ export type SpriteAnimatorProps = { flipX?: boolean position?: Array alphaTest?: number + asSprite?: boolean } & JSX.IntrinsicElements['group'] export const SpriteAnimator: React.FC = ( @@ -45,6 +46,7 @@ export const SpriteAnimator: React.FC = ( flipX, alphaTest, children, + asSprite, ...props }, fref @@ -64,6 +66,7 @@ export const SpriteAnimator: React.FC = ( const totalFrames = React.useRef(0) const [aspect, setAspect] = React.useState([1, 1, 1]) const flipOffset = flipX ? -1 : 1 + const [displayAsSprite,setDisplayAsSprite] = React.useState(asSprite ?? true) function loadJsonAndTextureAndExecuteCallback( jsonUrl: string, @@ -102,6 +105,10 @@ export const SpriteAnimator: React.FC = ( } }, []) + React.useEffect(() => { + setDisplayAsSprite(asSprite ?? true) + }, [asSprite]) + React.useLayoutEffect(() => { modifySpritePosition() }, [spriteTexture, flipX]) @@ -328,15 +335,24 @@ export const SpriteAnimator: React.FC = ( return ( - - - + {displayAsSprite && ( + + + + )} + {!displayAsSprite && ( + + + + + )} {children} From ff8eedcaaca50ad061cc63e8cf09e5e7f6244c0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Wed, 6 Sep 2023 23:45:09 +0200 Subject: [PATCH 008/103] fix: instancing for outlines --- README.md | 2 +- src/core/Outlines.tsx | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 43d3d59a5..5bc569f38 100644 --- a/README.md +++ b/README.md @@ -1402,7 +1402,7 @@ Abstracts [THREE.EdgesGeometry](https://threejs.org/docs/#api/en/geometries/Edge Demo

-An ornamental component that extracts the geometry from its parent and displays an [inverted-hull outline](https://bnpr.gitbook.io/bnpr/outline/inverse-hull-method). +An ornamental component that extracts the geometry from its parent and displays an [inverted-hull outline](https://bnpr.gitbook.io/bnpr/outline/inverse-hull-method). Supported parents are ``, `` and ``. ```tsx type OutlinesProps = JSX.IntrinsicElements['group'] & { diff --git a/src/core/Outlines.tsx b/src/core/Outlines.tsx index 708e790c1..9d8c016c7 100644 --- a/src/core/Outlines.tsx +++ b/src/core/Outlines.tsx @@ -22,7 +22,13 @@ const OutlinesMaterial = shaderMaterial( #include #include #include - vec3 newPosition = transformed + normal * thickness; + vec4 transformedNormal = vec4(normal, 0.0); + vec4 transformedPosition = vec4(transformed, 1.0); + #ifdef USE_INSTANCING + transformedNormal = instanceMatrix * transformedNormal; + transformedPosition = instanceMatrix * transformedPosition; + #endif + vec3 newPosition = transformedPosition.xyz + transformedNormal.xyz * thickness; gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0); }`, `uniform vec3 color; @@ -54,12 +60,12 @@ export function Outlines({ thickness = 0.05, angle = Math.PI, ...props -}) { +}: OutlinesProps) { const ref = React.useRef(null!) React.useMemo(() => extend({ OutlinesMaterial }), []) React.useLayoutEffect(() => { const group = ref.current - const parent = group.parent as THREE.Mesh & THREE.SkinnedMesh + const parent = group.parent as THREE.Mesh & THREE.SkinnedMesh & THREE.InstancedMesh if (parent && parent.geometry) { let mesh if (parent.skeleton) { @@ -67,6 +73,10 @@ export function Outlines({ mesh.material = new OutlinesMaterial({ side: THREE.BackSide }) mesh.bind(parent.skeleton, parent.bindMatrix) group.add(mesh) + } else if (parent.isInstancedMesh) { + mesh = new THREE.InstancedMesh(parent.geometry, new OutlinesMaterial({ side: THREE.BackSide }), parent.count) + mesh.instanceMatrix = parent.instanceMatrix + group.add(mesh) } else { mesh = new THREE.Mesh() mesh.material = new OutlinesMaterial({ side: THREE.BackSide }) From 7fc2b2fb67445ebda05c9ffb9faf07121334efac Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Thu, 7 Sep 2023 02:04:23 -0500 Subject: [PATCH 009/103] chore(Storybook): add MeshTransmissionMaterial (#1645) --- .storybook/public/gelatinous_cube.glb | Bin 0 -> 665348 bytes .../MeshTransmissionMaterial.stories.tsx | 93 ++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 .storybook/public/gelatinous_cube.glb create mode 100644 .storybook/stories/MeshTransmissionMaterial.stories.tsx diff --git a/.storybook/public/gelatinous_cube.glb b/.storybook/public/gelatinous_cube.glb new file mode 100644 index 0000000000000000000000000000000000000000..153d9b281f27d3640e680cb9632b6c99451db79d GIT binary patch literal 665348 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 Ir`5dQ?wo&##p^f>rS({7p&#g=sRHZ<% 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

Oepb_{A z$C6U-WnlR8!BMXm7r?~$QUoKt*fJVXYUt`bJI1^@y?oe z{S>ZvxCgJ%d%Z_Gf^f@5AdfCe5_lsxMRTo3fZ$V~pQ5Nc`BU?RUymzUS|558{4u}l z{U+(6vbmr5trz7!^I7@XpC+6=A4}J#FT*L_c*MuD#5EN-)RrRO;S)Q0JW=#-R4O1= z`hteJS5Ceo>meML9jp4mlSe88DJ5b@|nA z%a-e0glJ8jX($Vej;Jb%Ji{@x!9`F1znm}VHc5J=;+*Ww>veH|BrF%GCEX*af9H>r z*H1mQqEklU)#@?dCK8AA1?9mBch>p@JL%usKuqxBc0XEVYA-lpv<1prfei9O%Qe*5 ziH*A#ARgsqjP~_^p@)jdGZ!TAg7ojlHg)Ah8FV&i;Rjr>3&sk)aquI$Kp&Re=kl*$ zEm>~c08ER_6RDG@vSCilR`8A?^lxUmDMEFSA#sIm!~`v4kVKONks|)qsgAf;c~D>C zB%?~p9J$bQ1zEbzJK9u{7%1Z-iao@)2Kwfq(L|H_{RR_JM%CXN;4aT;{Inr7rBUjM z+Nbwtb00odvov%I-xBW{)|tE|E90y$5C~|TnV-(FdwD4`>lUOXv~mc)Efzk$;Sn~@KBh4IFAK-r4AMBYZ0mQ* z)Wc0b|0e{YtXSfJmJ9Jjw2i7?R6}TLuMzc8+LGq~3~A>vVjt31pIoND2~iTZrP73gl3JwpX0%jM;@v3_04;%g5EcW7Mi z$o`>~t@Z!~0qcgO*C!RyoDjqTR%$^>y~5a)ob`lsX~!Rs2uQ{5VKi3;akBIh4Qg@?gM|dUpS45S8Sy zV@`-)oQkhP*Y9F6J6{MFpIUg~!> zU{;SMO>yK0wSc~9|Dh1Rd4ovu%fm$>kr#zOO8A1pX>`hEdRPztaO$O`fIQ1M3KKn6 z(v%5~wZEp5w53kJ>)?`lu89`oP$mDynazf!8s;~yWNXABg7rY6nxuM2{#qD5j8Zn_ z_~{saDKQZs;*+}K6EyzRjsBZ<=!YrKuBLM_d_!{Cvu)_*bDu6&A#v*v5dr>TS%Fkn zB3~Om#VFU(sELTv%%lgsn5FNEnGM`W5N@E>NbzZ*`W4nzxmK1H!DOh`ozco!5Ltfs zx;Z0ovW6Ck-Zr9EG!QXXn>|S_OkyzqkY_y1J;tNjvqS=b0*&?)Uk0GYOCR#2fXw_GzzMAr@eCRi>(^l^*uA)c7jSi7b-2q;dZ zk>)U~bOTqL10GCSxayC>8GNLSAxY`S`qH~c>aV+v3$`vUz`XpQ=+p%|ur&6hPq|zy zNHc78Fu?<(SG>0ZSP7pA?1M?C2so}pV{fSQZ=mQ(M$~3uqYgw=p!O;&!If@rEp$_9 zvh@?mOXkCelk@5QG%r(c{6<(c8QrU5ooxi%^if<9JdI>(rZ$~d7Q0E<%yv(CtbF;d zN&&Z|Hb7+ep|4q=4&&?^Yv{1j*l0A%ygcTPXcHhFQl`BKHK(&k)IzQ(%&CZ9<+p@Z ztx*@%CdeRtVH`fKFfX6*He2r5iXc1=tk=N2J~ilcA5(DIYZ$Zd{zZnG(>{r0-|w71 z0&joC0I1XzGr<=H*`suY*ONV9;RW)$ll=g1ZhaH27;{;5iYfA; zTjNs4eeLeMAkGs$$Ju!}VR^C*-8VKJM7-<+zL`Le_mJ;Txkgb@LiL{CH}G0G8K#wF zHq(NQA&EWL&+=p;)Gubzi23gRs{rL|5#(52EBC#WS-aY+@zJcCz2=G9iGiC|2W1{M zv4G3S=3G{XjHgY@qSbVw|Iiz>ElN;xn^BKXW!vFZibV%s|-Mco`*I^3VGA)yJ6-YIm;zHT&qi=Ve1cLHn zzZ0Ku080snKG*uc7CR82i$$2j-f6yPwK@zy>Pn?xki@5$zSxj zSrpl|F3FsREG@jMuDEdyW^2ej0l1ye$wQTREv-|n!aNb4Z1bx=c6nE0EJ*yUYVr(l zdC^YJg`Q%$EI3Mf;~XShQfCv%A(x6N9U0AHthARqflJ+p~}lG1`{^wkw< z97N{N#>qxdp{s!9t+IoaAd-A6_%`Fj;oIMf1IzRPiK}(Q+E`fDD8U3-1Nzxd%pg^R zri!f$x>@9Y-2T}KWH=^I^+H}KcSV6d|2wMwdT62z9g>2$O>Q#V0uEC&89P9##1DV$ zuDDa|!SEhp_#^ws{PkLTS#XrX3CIEt8z4J?kFO3$Nsi}~is>C zY}g0f`Nw!$-lCyoSC<7vEK4W~jpcc&QFFVZeUXG>{2^82q68R^Ng#wTqH#+Xa^H!D zMKNP&3#0vYv{qfx*w#@qH*%#-;=VX zI7;VMoq4anGom}!6f93p`6bKQtI%OLA0ax5#0g0d4=+#i*501pn45S&E^H!=QWm@f zO-vI^h)wfj6Of;qtAL@`!w1U$u@i8N;HJO7YI0N9>qfdJrlQz_ zf_e4^(+Ob)-bOX5i{fVA(OCFOd?O2Cs)LgjiWRc|v;}uFg4{6125)BQMc^BF{!%{# zkAXdR64}Q37G(U1!4INw=!(IyfaI{8wsBPfg>YwH>#2ogo9^q$X~mSRG?P0^cdCdWi1z+rM}K~fZ^iPgFXz2xeg4t>7^f!U9Rn-WG%oG~O^ z&XEo(DtZBWFx#jEL9ML>1hk6>u5ZDrOqRag3#FiL_u>`KOc8f^bEltS#*q#jK16Z^ z!2@6kURk*Vo#<%Hc}iKKs~{zo5C*Rw8zywI!Qpx9aT8_yk58%;EZ!mYPR+Kr zU|Kyako*2Fa_nprBfc)sgLe`^h9{LloCW#Mzhg91Jew(h@yLEA&uhOlR6C412UPB& zwvWW_Y5W|##OCL^AWWEiczE-a0JLXmzhhd(D4&3$doWawn89_>o8YdDGclNx5Fqy) zAXSVt>SD!^Q`RX!(%fKAw35J(upW*yV4m0H2W11ltq;J-jnUl65j9d@J4Jj zb4k8cxY0SvNU?Y&*BaSK=)J>Zy+_!#EFh!5CGvq`%(4ofn5(20C*GKdyEMITsJd0r zET`A=kLHVQel0ZLRlk|>I{3rljrT=fHa)lL)e-Um?J_ec28l!qVuW6{zuQ)%V=p78 z=d$s&x0CNup_o*Ifku!4R78qp=mL+2Ic|-q%cwJw&Oq$3-azj|HKl=JD0j2va}Agxjj8ylLRy*=;6|^t76{R0|8HqBkFMbL zj&u`xOtJ94A2P0uA@GM>pq;JjG1V{iyWwDa!K10IWUSY};2E)@EJZ(hd(p6;?H6`u zd3t>Yl=rZPZg^*i9$S`&8|E&By}R4HIE`MUwh4oMj3 zz@A-z_tECi5B<#CH(wBIA?G$!ei193#dZQIhM$MeM%uRRT1#GDLuuUFD**s1SFbt_OrsMTw6L7F#|Yz(Fi=gu|*K@fM|&XdrJq z1ouItqmiV_)~dg%NJHQ3l47k{#kD3|4kB~(mWT&H#$dII9wkrdDgEL$d*O1zbe!*! z)9;;25ez3-*e+ss4J&N{P51elKH?tNc7EQ5{BhVFipctxZJ0i`5K{gof?k$Ue_Zdd zM^%Rpdd4IbVpv^MmD6y>@?=Oesh1T@$FfNVwHTSSCJHn3FU{4Z;aiZn#k3^xZGXJr zclLe-7JA`#Kq^3YLA_bHdEjIN8rQ+u7KHyG=>mq4TzILaUrk}G)!k;+KoTljZP6hX z%%#UGk48I=b;Nvnj27r!!C|q@xmsO5`=f#(Q1k)hua>4I@ZP%N1rkF9*l)9jFW$m8 zx*{#Z>;Iqy_5CPl0o1*jaR2}SPp#!De=I6c$ZY0~_x`wvQgu6wHD>Yxqvyd&{1J-B z5W)5bdeA~^-vr-8bwzO(B{W%NXc8Vmjk@4e$8=4hB(u@`h5xc11PZ#_ow%E<$h`+o z6f%shJ->TDo+k$WwY_1?ARwT=i2g}U3au`v3d@4uVyy>VYN`hh7Z#8xO;^&k&EINLK$dsCRo0R4b)qF2)(BizV=xC!UofG z$S$wI--c_amfjklP`XTCReWE2{=V=K`j77b>upQ`4Kd^f^j9+8?|G@wpc32ay>LUm zyG8CSJDxo0TdAQ#4<7>gV3@n!n_5)XLxb2T;IT+WvJRP*`58H5N4I4ffGy5A`0HKi zaHQgJ-~WNbn7}Pa4$$8Hmk6XJD8J;dVq{Ng{oqF`!!FDB#c_TkGqIbzRhASZb0#?c zAfghReoCce5oV*vE5jl98}-2o#V^WYx+xYcwwLGz9Bqz`61E(rBb2~|zePR?-$2;N zX)%A4GS?CVx5oF{=cSpPXVG^)zT_N?arJjly2Fof_b~cts_d}hJ2~r5R+L<3gVAdX zTwWwF=%uwmzR{zx19kBQFiSW>D}40Eu_)R4vyY0b?yLcSI!!P|T53ir#$#^p9Gn)=xkhXJVo@nB0f`|0a z+Y1!Fhe{Nj7)Y^Zf=5d9*BgK?SldSFYS3!Rv}=qWhdhuFI`BEsYTW%V!y0qA`K|sk z#3sVQfvDCqm@v@I8dDi0I1cnnJs6=jk6Pa+Rk>lGHy2IxU{Fg9b0DjVYb?66f`^5^ zkd2hx{|!9kQaN0TCzWXlSr)Mj;!)*%mvPFi1?A&i?Pzh}52N)AJWtk0>e)%-3Y=z+ zZ1csgb=SgLbLn1)3ZHD53h0-wa&bt}?OmROBI$WM#PU|e@yR_b4#8;oB?y{#$5;W< zVP@k-Q*mF%2(@qiJ`VCDYUPo)v0Rs**w#i!8Sm8-iA<{F4>H0GvrR_7_wEGw$|<8) z#oB&~0#k;FJnYy?5WsCULAubP!*%Kk+I1!23Bd7;%eyt2!Y`ZT9X@b`Bm zmUh9If}blO9C_%89^!FQZ?E&~KItjTs)b6AM8tR8ag3Zl4#tWy3mAlX zSHX1WdAqe_I|SO%#*g-}fHXRC()_Rib^yt;-AX;Ng#YU-fkQR)rCea6 zn?!vTA-V=apjbg=ZBjvDzGbldv8w_$BxE=-?~AW$jnk*))}I&LYo7XF1_qC7y{>IY z?~dIVHr7GuC|&?mhNF%53FgsYx*b(+jL1$mmLp*iv40F2sJ}S&MNJd?R-x35B`gSi zwK&@!J;ngQQQ_npp5#5N<_;0@H9k|l_wjC5lr585)?aF-<1X84&G_$U_6qSR?k6TYl$uph7bI`~X4ln2K9OTA$w zjot)0a+OO3=U=?!j{S#f+@ALaK1h51OS#o@!cII&2-(CMD46H2v}#G-1L{gS2$p3? z25Y>F+Y~!uX6G8_+|g6I{INtBQ69ZdEBtVAAOk5AG}b8n zdUMj&k>BoUXySp6QYPkU5vpeum48G#$b+P~xwr-LVNS`KNIQO?WDQ){7F-Tr)Jm}y zSSRa5AKSHf@uxL9`}nMdHhTp5w@rOUMEiXmFC>Q%*eEoxVDJ~0txFnB&9R{XwKJT| zuw|UHw+r*|<5XPe5%&Eim$Qf|0>;)$gC~lyu<}ggVi_cyM z!+y8GdU8%atw4!$m-)&ZN#M~1vpXIIKS-zu zbvx9Rf#}Y8&0S$9kqTo(8bCnf(5d>`1SYZf-t57GZ{5jH!IW@B;lxABAh(gjjQGMd z0J#ncY-1Q6zAVfoNb}Si^de!)`X_vOVV(2m$e)BtAR{8ZNO!bmc3OtA zwu2ula)M}@Szdfckjx6yeK(3AvWVm(*E=dk`DHiZ*dIkRcue*!F_`}dg9eW!B0cS}z8|q~ z6iZAK7sEPC&@=ed1;aJmI7jW>_Xw;Z^*g|#yWRa5L8x4!m-W#w8iags7+rA$91wc5 z)fcXgxYSw|2v5H+(umXQd)m1M#$i-s{czPnWpl~V&!iQQh?~)@4!Q4Lk5NvstRI)$ zzSyRP$F$AN2e0; zpI%A08yOwv)YEN@v|us?aa<~gf|-Ur2@QT{RSGdDxYv7=v$WlI5b{;Vh+^LR7IdCV z>MV0%@yCjHyH9-#;VB_I$+;3IJuwO>N+d78_nPHLb$XM&!MUlPvJWXNtI3p(u}(kN zAT~$uy?ayY*OQHgh3)MkYu+6yMP~bSH$S|QXzG;{6Q{;q&wFKES^#eny1inRb~>F! zYrcb4o$fv>F|a^y#gf`d8ABVSw)Hp zKk7%L-&Sr_72iVuL|M@%YP<2?CkNEnKaINj==VHcZFWkFnj#{HLMtLMU-9g}i;evd z!&UcxEGwmtX+fbtc{xVJXZ;kHO;pYzo1@@H0eG^5pRm+RSJ*T&3N3(z;b}Kx3ZLn< zQ+SOwz1thI`g_eC8tF*nV3k^V7y+yV?29bLy+WBnSL;e^0?}o*C`PX-P7Gf@blULNsff*Pd~py0NOI0mdZufJAn>Yj|V~!J8_$^Rh!pu0#hyc zL7kBav^~#^tRnaEKX~uMp&c4i^oGl<<94sugaV7J1m*X$EnaXrzod91WX8IV-*Fn| z;-+qd=&BFJoULPOI9M=+g9Gjmpzv8q?t}r8G=6e;bxc}8T6|S^nwGugRmOIxUHY#^ zv^vN(SxFN?I32lN4Gr|Y0%lu(fOUG|%MPF6sXPtkgQE<1#1?3k3{o%`eiMBmv04OZ zUYagVdcx8M2aa1OdKqdF+*G8;k5FKHSoeck--V?240FHCed-~3(r(kCG(an=zjUHZ z>?{!`1b7JnBZGiZDbaIDyX<()G)W@R=BgJtQPtx~`l?jUkb5%I1InRO%JFv>)#V+| zay`+1U@$Oq$D*=Mj4kIrT@R_?x#mTnmS{-d?;gYa6j^A!IrVBCW-aE_&gMf0umKbv zL7b+bk)%^+@gW(Mzig*deTy;JEZ!lZ!_eayB!AZjdVREj@$$u0I=I&oI>m~|QD}>M z)q2rXU-qU0uPs9iB|lVklU8>BNdHRS5(0ImnQ_!jP4SAMtss`)ELMph{H5YTNvD-K ztR=vPWkCPQaVCAh&^y%t`2R>R_(o}Tfw=!!!WN^AJQJ*o=DoqTQmDLe7j`FZ5l?m2 zjLVq63e4}ai(@4L6l4wv3eSk+t4S1A!aXy1_jbuv16TU2hfDx|P)C5+)fRZ%tNGP= z5h;j4=ODu2nM(LQdW(GSqF0kV`f?a)_%?+!QE;epbX)JaJyz9VY-icQTRNz@0uK_eu~z2E#|o*JVPSn z4i;Z++q47r0@l^OAyb0{ReDmp{6mM|8|D^@mQgq;sSxd)FXrkI8V3q6EPbB8D8(1= z=fy%eho~9isc7RT)8pQe;9fRpR~{Q$3*%qTZnRG}LGl@w(_o|*pzgPs=b3qHC{h^X zqKE=!R6epK2cAat!>=iS1S$*euG4|XSTagZzziJeqQ6F1{FwrEyt(`j5%lZlh=zg1 zioJ38)p6MRUZ4Op;3HlgxtueGbr0?%T`i&jV;6FQqw1^?)#xKq$8Y?8^qCGpA}L{% z#&Z{B5DW1Ozp0+%wU2F}Owep2qiZYJXANoj(`KjJr^+%(8J3N`2$p+1*0prVkO*E_ zOdM}at+HIRK$aB-P6eRP(k0E?x!Z-1d_a=in~9g=Vq2Hr7%59sh&8o|VYzAoFLO8` zKB0sGA*5$-?mM=|fl&%`KE%p!*}32~j_VIg&JeQsK6z$VEyUZj;D=v3E5ZWwmmzL- zL>KCxhHJvv9Ztpp6TAfocji&t1;4eji!mmE=QfGWJP~Za$eulC-tB|7^;XY{qd z5t-+2&;kDNkpk`uqN|k&EQEN20kF8Z%cjqfZ0)pP*C)3I_1rrN*9GGHExu>jI|gQP zuW?IiZ3p$s-eW0Te=~(%HR@PjO1Uh9<2_3R!%IhYVt7};dRTQ|Es#+ByYw^N*_{h* z&RJ^6HioiKR1_$rgw`%Tg_j~DwJy-Qrmz`V5P2Eku38MpFXc6SmA+_UPuOG`=WhMn zl05c62Os-VewK(U%A#P&R`{vAWnDJFf()mayQ{F73dexxxY3>jYn@^1k?Q`@HoYfvevB?*;pKm9A`XYfB9@rPVTrTvPw_h_oO z>AGhT^!z3pd#h?d++!yku6wMHVlI}RQJztR_~wfrubezd=>P-`Wc)*xMD2!IIqadG zrxQl=3F{Z?dmc=JJUSabaNx@55dK5HVVr?XDFP}C4zT&+e3y&t(ZTjQ7L=7fqC`ynrqM(+TZr40fV@h zgqRL}7&wSEiI!wj5+V9$Gn%zrMf*W+6Kx@4WffU57uH`qq>+wBIyg7Dbm=s)6Q+=D zwiBd_zrzacVH}HkdCwxINa4(a=EeErJHt5IQ0CEC*5lKLM#iR)&Qn6yftg8YRfG-> z&@2aw&J`lan}QIuJMB%IwGEV>kD1Ru?qHEl!C}=adIH?YR}%=|CM#HJT6HRQMcE_6 zOKIHEUF1#OD(?YA#ZovYeVNE=9?Qt#Q`X=vy))LoRqyJYhe2W&b0ZErE3Ak(6rhkS z+8f;*SQ#)q=>;IR`wwPEEpH4{vg)$z!hD?IRg{ip;8$QqeP=dAaKK!p+?5t)J*YB7Jnz-&D9a8*l_IB@B(&`TEVPe09v71EBia4F$6i^NW|X&EJd;#%Au z$~o#Z--6SSGt@Cov;84CU1{!%FUs%aV^)X0%h4(wj2lmR25XX$tW96GmJ|5Mt!3t% zSGbi7h0h=HSofw~Yn!CA;PSUEcn^&xdADfxd3nB$Lp>wsMC3;#pqe(U&mi~az(uOD zv<@xJ7!-~26#ZzxI(jW2PSq*3#v*?zoGTX5M?<#M@&1_*gTHJng~7V|lb$e*1k}51 zoj6sf8%~o4L-Lp9qsZ%#>Jem%<*HD3Rm>sO(@0r-;%Heb)T`G78v;+2R?}drC%Hsi z<(Ay?<|82Ud(wdMK}F$vn1cK#(nwIT(RgjIZuo?qp1cW9O;Bf);S5X7yDPw;-bud| zpWyv{q9)O-iip=t66HVXVNN8idh@hTbvDdy7n5SiFC%U}`PG84Sd{B|TLW*e!xCLq zgo|pxIph}P83i&N8;_vA8|*Ch0E;(7-7%Lkrk#4FNNMtU z*t1n)IDk;E7hagxb~Q9rRk>hpoZqkkDX-c6pE~f~vsj6aPBZ12_~3ONo&mw!!j$L6 z3Uztk{DumN5SB$m>!mjNM0bDFM`MfGH63C7$5Z zDTBeyc+eG>5JgEBsph^7eHUk^>M{nRH7F1ZdSz)PNphL7rp2Pognmyb3Ey5)c-Da9 z(+g=aK*)47XP~nn2f-zg2>5$GeLGj*s?Pn9Dwu+yPJ1`*p;{R3AuEpS wqP!7H8 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
    `$1R|v;FSezt3J7lI<6ig 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 z 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®IEbN^wJI=O{lst}IvT0p7f8jKU<*^F=eXbYQEZ8eCT)&geU&(pW^q_+Uu! z7b3(cY&@R`ETe{>bTbu;Iz1mxb~E#!fw?_)VZIo>jx=Lb<6TTAh{yB{d*31lK%rLp z)<2bWR-)4EM>LwlP9^VK+*4?%0x&i@W3Cgcj2do%_UwP0JXm7YcORfXe5wpaU>`#;MX${gKX#p zf5!)%aHzLmgnh0mTq9(^yr|@+%2HUFlgLmr6G`;IfI&*G5ZeWkJ6Vm(~*a&fmhax%n}q^Z(11Yn`9b08mmXFk8_MB(_urW zBh)~qq<6JD^ci&df0;X#?_0VcEl*aJ#Dar7k_|-#4=*NrEj|a~P*%XN@ae+w!R{Gz z(dbU61 zcVDv+{X|l68uuDANx(;5oMtVVEgY@xvfruce@{c8T|#;vX3Qiiph*h4i7b`W((g_D z37n}Y_OXC+|}93}@#0U5_z5|c}h?a%bGUwpMu#tzjY99Trf zn3G;b)&$1n`_bD&>&XaLV_KI3zsvcc6&dT_;SC@!2UG`rc-MKe~Lw^^UuG` ziq7bkM))CGZl8FbI9DMdjCuk49cUQ~R%EJrVocQg7!fM7|A- zvGyZ7Wy^u%JhOisqDYDRL`eAuP1+nOPY5E#bBm3nGn6K&n1RM>Re2%U_BFUWCoof+ z0*4_B52uyB%*7bIpZ^vsZjx)=+VB|B5O@vQI1np_*qPs9lvb<{r6K5gR~5zeaEX1aEWrfOSs)00FbtD7I@q2laCv_ub{Z4oZhSRKA>6J_e9 z`okYvFyod}DeFu|eXbC(REV8LdFQx#v>SSWb_ z#7m%wdxWvZ6l`19PuA5vOW^--rZN4OS>~eC6)=R z&@sgyA?oJ4)(d_goLnf=i+3mi!WdD{wkC%Wpdx+K|4y=w0tT8&Y}T1U|7#w$EON`* zv|_>3oNw`W5gA({omQTyF3cH_{y)Py`)YX(chhw(Xo`nV*PcR zJK$Gh!G!J~L=KDM8lmd0QM^TBr0BE;+sxze%U9aWI7bwQPZ9=?yvl)bhuee?mUJB7 zd{^JbF!lkz0ucb}6;a(0rQ5|sO7@^9s}r_wVgsHX*4roytyY7~VFK34WEo@^F3TBB zkOY>lISMi>@tBaS#8AwQV${hAy|2!#>78nC9BNC4F^{;Dl4am)ES>^jR2a#z{l@&Pc)z1SPDzlCvgXCu zVy0#_4+xAU@0qTnDU+=o)dbfoC-LLlPX0KT>oWLK!c8Vb%5wvgxQWWy1JY%%_Qe_u ztZG=J=y=2S2ct!$CzC7I)+?n#!e&=G2gkRh-de-_SJ_}YK(h2RhTy@*H;9%UG-GlB zfQ?8y8vPS3;)iF0ti54QWqLa3a%!({+OSF{X72tBXQSh`+VoQJIrHQ81K4S5%=cRP z;y|K*W@rA!VBd-;FNOH#;vEl{#E`+(o4XEsKqmz;Z+xs}UYHxGW3bw)Mu_sUQ}K?+ zAvY^Nlv9pk{;t{1F`9trz#MQi1-RORg)4-$QTHyQ3Y{UY!}1EL&gYg@i#8982rWwac`ixmrPyAX<@fU+4f9~1kVeBsT=1JVK2`EZN=-b!B$&WZ}4t>%bTq)Q6z5Id_<@3v>Nc(K^d zs2UwtC`7dlMDY2uexpr*8`(Ek#MkD;Z(X}YOn4i`F~ox!B2j ( + + {storyFn()} + + ), + ], +} + +// https://sketchfab.com/3d-models/gelatinous-cube-e08385238f4d4b59b012233a9fbdca21 +export function GelatinousCube() { + const { nodes, materials } = useGLTF('/gelatinous_cube.glb') as any + return ( + + + + + + + + + + + + + ) +} + +export const TransmissionSt = () => ( + + + +
    + +
    + + + +
    + + +
    +) +TransmissionSt.storyName = 'Default' From 8353284f21c7ff72927392ad2a5bdeba8fd82f3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Thu, 7 Sep 2023 09:07:39 +0200 Subject: [PATCH 010/103] fix: outline disposal --- src/core/Outlines.tsx | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/core/Outlines.tsx b/src/core/Outlines.tsx index 9d8c016c7..77bd0d60c 100644 --- a/src/core/Outlines.tsx +++ b/src/core/Outlines.tsx @@ -1,7 +1,7 @@ import * as THREE from 'three' import * as React from 'react' import { shaderMaterial } from './shaderMaterial' -import { extend, applyProps, dispose, ReactThreeFiber } from '@react-three/fiber' +import { extend, applyProps, ReactThreeFiber } from '@react-three/fiber' import { toCreasedNormals } from 'three-stdlib' const OutlinesMaterial = shaderMaterial( @@ -12,7 +12,7 @@ const OutlinesMaterial = shaderMaterial( uniform float thickness; void main() { #if defined (USE_SKINNING) - #include + #include #include #include #include @@ -62,6 +62,7 @@ export function Outlines({ ...props }: OutlinesProps) { const ref = React.useRef(null!) + const [material] = React.useState(() => new OutlinesMaterial({ side: THREE.BackSide })) React.useMemo(() => extend({ OutlinesMaterial }), []) React.useLayoutEffect(() => { const group = ref.current @@ -70,28 +71,29 @@ export function Outlines({ let mesh if (parent.skeleton) { mesh = new THREE.SkinnedMesh() - mesh.material = new OutlinesMaterial({ side: THREE.BackSide }) + mesh.material = material mesh.bind(parent.skeleton, parent.bindMatrix) group.add(mesh) } else if (parent.isInstancedMesh) { - mesh = new THREE.InstancedMesh(parent.geometry, new OutlinesMaterial({ side: THREE.BackSide }), parent.count) + mesh = new THREE.InstancedMesh(parent.geometry, material, parent.count) mesh.instanceMatrix = parent.instanceMatrix group.add(mesh) } else { mesh = new THREE.Mesh() - mesh.material = new OutlinesMaterial({ side: THREE.BackSide }) + mesh.material = material group.add(mesh) } mesh.geometry = angle ? toCreasedNormals(parent.geometry, angle) : parent.geometry return () => { - dispose(mesh) - group.clear() + if (angle) mesh.geometry.dispose() + group.remove(mesh) } } - }, [angle]) + }, [angle, (ref.current as any)?.parent?.geometry]) React.useLayoutEffect(() => { const group = ref.current + console.log(group.children.length) const mesh = group.children[0] as THREE.Mesh if (mesh) { applyProps(mesh.material as any, { transparent, thickness, color, opacity }) From 31234c38be241523781b72b0f33a730b7dfc24a7 Mon Sep 17 00:00:00 2001 From: Cody Bennett <23324155+CodyJasonBennett@users.noreply.github.com> Date: Thu, 7 Sep 2023 03:51:18 -0500 Subject: [PATCH 011/103] fix(Outlines): remove console.log --- src/core/Outlines.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/core/Outlines.tsx b/src/core/Outlines.tsx index 77bd0d60c..65b779767 100644 --- a/src/core/Outlines.tsx +++ b/src/core/Outlines.tsx @@ -93,7 +93,6 @@ export function Outlines({ React.useLayoutEffect(() => { const group = ref.current - console.log(group.children.length) const mesh = group.children[0] as THREE.Mesh if (mesh) { applyProps(mesh.material as any, { transparent, thickness, color, opacity }) From 4ccaf2535c41c53621bb62f34440df3af7e849d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Sat, 9 Sep 2023 10:46:34 +0200 Subject: [PATCH 012/103] fix: outline shader crash --- src/core/Outlines.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/Outlines.tsx b/src/core/Outlines.tsx index 65b779767..255e98e51 100644 --- a/src/core/Outlines.tsx +++ b/src/core/Outlines.tsx @@ -22,13 +22,13 @@ const OutlinesMaterial = shaderMaterial( #include #include #include - vec4 transformedNormal = vec4(normal, 0.0); - vec4 transformedPosition = vec4(transformed, 1.0); + vec4 tNormal = vec4(normal, 0.0); + vec4 tPosition = vec4(transformed, 1.0); #ifdef USE_INSTANCING - transformedNormal = instanceMatrix * transformedNormal; - transformedPosition = instanceMatrix * transformedPosition; + tNormal = instanceMatrix * tNormal; + tPosition = instanceMatrix * tPosition; #endif - vec3 newPosition = transformedPosition.xyz + transformedNormal.xyz * thickness; + vec3 newPosition = tPosition.xyz + tNormal.xyz * thickness; gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0); }`, `uniform vec3 color; From 13ee5cf9faf922ce5cf53a9e48643e7db1206ddd Mon Sep 17 00:00:00 2001 From: Nathan Bierema Date: Sat, 9 Sep 2023 15:00:27 -0400 Subject: [PATCH 013/103] fix: type error with @types/three@0.156.0 (#1647) --- src/web/Select.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/web/Select.tsx b/src/web/Select.tsx index d9acde843..23bc745be 100644 --- a/src/web/Select.tsx +++ b/src/web/Select.tsx @@ -169,6 +169,9 @@ export function Select({ ) } -export function useSelect() { +// The return type is explicitly declared here because otherwise TypeScript will emit `THREE.Object3D[]`. +// The meaning of the generic parameter for `Object3D` was changed in r156, so it should not be included so that it +// works with all versions of @types/three. +export function useSelect(): THREE.Object3D[] { return React.useContext(context) } From 032cecad5ab4b14811de23dd9f25ccc4b0a80f17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Sat, 9 Sep 2023 22:26:42 +0200 Subject: [PATCH 014/103] fix: outlines screenspace --- README.md | 2 ++ src/core/Outlines.tsx | 27 +++++++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 13b1cfb03..752637c9d 100644 --- a/README.md +++ b/README.md @@ -1409,6 +1409,8 @@ An ornamental component that extracts the geometry from its parent and displays type OutlinesProps = JSX.IntrinsicElements['group'] & { /** Outline color, default: black */ color: ReactThreeFiber.Color + /** Line thickness is independent of zoom, default: false */ + screenspace: boolean /** Outline opacity, default: 1 */ opacity: number /** Outline transparency, default: false */ diff --git a/src/core/Outlines.tsx b/src/core/Outlines.tsx index 255e98e51..a5f7d7b14 100644 --- a/src/core/Outlines.tsx +++ b/src/core/Outlines.tsx @@ -1,15 +1,17 @@ import * as THREE from 'three' import * as React from 'react' import { shaderMaterial } from './shaderMaterial' -import { extend, applyProps, ReactThreeFiber } from '@react-three/fiber' +import { extend, applyProps, ReactThreeFiber, useThree } from '@react-three/fiber' import { toCreasedNormals } from 'three-stdlib' const OutlinesMaterial = shaderMaterial( - { color: new THREE.Color('black'), opacity: 1, thickness: 0.05 }, + { screenspace: false, color: new THREE.Color('black'), opacity: 1, thickness: 0.05, size: new THREE.Vector2() }, `#include #include #include uniform float thickness; + uniform float screenspace; + uniform vec2 size; void main() { #if defined (USE_SKINNING) #include @@ -28,8 +30,16 @@ const OutlinesMaterial = shaderMaterial( tNormal = instanceMatrix * tNormal; tPosition = instanceMatrix * tPosition; #endif - vec3 newPosition = tPosition.xyz + tNormal.xyz * thickness; - gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0); + if (screenspace == 0.0) { + vec3 newPosition = tPosition.xyz + tNormal.xyz * thickness; + gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0); + } else { + vec4 clipPosition = projectionMatrix * modelViewMatrix * tPosition; + vec4 clipNormal = projectionMatrix * modelViewMatrix * tNormal; + vec2 offset = normalize(clipNormal.xy) * thickness / size * clipPosition.w * 2.0; + clipPosition.xy += offset; + gl_Position = clipPosition; + } }`, `uniform vec3 color; uniform float opacity; @@ -43,6 +53,8 @@ const OutlinesMaterial = shaderMaterial( type OutlinesProps = JSX.IntrinsicElements['group'] & { /** Outline color, default: black */ color: ReactThreeFiber.Color + /** Line thickness is independent of zoom, default: false */ + screenspace: boolean /** Outline opacity, default: 1 */ opacity: number /** Outline transparency, default: false */ @@ -57,12 +69,15 @@ export function Outlines({ color = 'black', opacity = 1, transparent = false, + screenspace = false, thickness = 0.05, angle = Math.PI, ...props }: OutlinesProps) { const ref = React.useRef(null!) const [material] = React.useState(() => new OutlinesMaterial({ side: THREE.BackSide })) + const { gl } = useThree() + const contextSize = gl.getDrawingBufferSize(new THREE.Vector2()) React.useMemo(() => extend({ OutlinesMaterial }), []) React.useLayoutEffect(() => { const group = ref.current @@ -95,9 +110,9 @@ export function Outlines({ const group = ref.current const mesh = group.children[0] as THREE.Mesh if (mesh) { - applyProps(mesh.material as any, { transparent, thickness, color, opacity }) + applyProps(mesh.material as any, { transparent, thickness, color, opacity, size: contextSize, screenspace }) } - }, [angle, transparent, thickness, color, opacity]) + }, [angle, transparent, thickness, color, opacity, screenspace]) return } From 2df576c8b3ae28e9a03495a26d108425a0ca0441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Sat, 9 Sep 2023 22:53:08 +0200 Subject: [PATCH 015/103] fix: outlines material props --- src/core/Outlines.tsx | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/core/Outlines.tsx b/src/core/Outlines.tsx index a5f7d7b14..793af8c94 100644 --- a/src/core/Outlines.tsx +++ b/src/core/Outlines.tsx @@ -63,6 +63,9 @@ type OutlinesProps = JSX.IntrinsicElements['group'] & { thickness: number /** Geometry crease angle (0 === no crease), default: Math.PI */ angle: number + toneMapped?: boolean + polygonOffset?: boolean + polygonOffsetFactor?: number } export function Outlines({ @@ -70,6 +73,9 @@ export function Outlines({ opacity = 1, transparent = false, screenspace = false, + toneMapped = true, + polygonOffset = false, + polygonOffsetFactor = 0, thickness = 0.05, angle = Math.PI, ...props @@ -110,9 +116,19 @@ export function Outlines({ const group = ref.current const mesh = group.children[0] as THREE.Mesh if (mesh) { - applyProps(mesh.material as any, { transparent, thickness, color, opacity, size: contextSize, screenspace }) + applyProps(mesh.material as any, { + transparent, + thickness, + color, + opacity, + size: contextSize, + screenspace, + toneMapped, + polygonOffset, + polygonOffsetFactor, + }) } - }, [angle, transparent, thickness, color, opacity, screenspace]) + }, [angle, transparent, thickness, color, opacity, screenspace, toneMapped, polygonOffset, polygonOffsetFactor]) return } From 242d08650e4aaef9e0163329a471ed96eb7d471f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Sat, 9 Sep 2023 23:43:00 +0200 Subject: [PATCH 016/103] fix: outlines context size --- src/core/Outlines.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/core/Outlines.tsx b/src/core/Outlines.tsx index 793af8c94..acd422545 100644 --- a/src/core/Outlines.tsx +++ b/src/core/Outlines.tsx @@ -128,7 +128,18 @@ export function Outlines({ polygonOffsetFactor, }) } - }, [angle, transparent, thickness, color, opacity, screenspace, toneMapped, polygonOffset, polygonOffsetFactor]) + }, [ + angle, + transparent, + thickness, + color, + opacity, + screenspace, + toneMapped, + polygonOffset, + polygonOffsetFactor, + contextSize, + ]) return } From dd32c757202b1b9b713bbec3ffe9c6a341f1c92d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Sun, 10 Sep 2023 23:56:17 +0200 Subject: [PATCH 017/103] fix: outlines renderorder --- src/core/Outlines.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/Outlines.tsx b/src/core/Outlines.tsx index acd422545..53efe3e58 100644 --- a/src/core/Outlines.tsx +++ b/src/core/Outlines.tsx @@ -66,6 +66,7 @@ type OutlinesProps = JSX.IntrinsicElements['group'] & { toneMapped?: boolean polygonOffset?: boolean polygonOffsetFactor?: number + renderOrder?: number } export function Outlines({ @@ -76,6 +77,7 @@ export function Outlines({ toneMapped = true, polygonOffset = false, polygonOffsetFactor = 0, + renderOrder = 0, thickness = 0.05, angle = Math.PI, ...props @@ -116,6 +118,7 @@ export function Outlines({ const group = ref.current const mesh = group.children[0] as THREE.Mesh if (mesh) { + mesh.renderOrder = renderOrder applyProps(mesh.material as any, { transparent, thickness, @@ -139,6 +142,7 @@ export function Outlines({ polygonOffset, polygonOffsetFactor, contextSize, + renderOrder, ]) return From 48aa0b9a0419cb7328dec12358d020fe6ec7e784 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Roche?= Date: Fri, 15 Sep 2023 15:09:04 +0200 Subject: [PATCH 018/103] Fix README (#1652) remove extra ````js --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 752637c9d..c935858c5 100644 --- a/README.md +++ b/README.md @@ -2802,8 +2802,6 @@ useGLTF.preload(url) If you want to use your own draco decoder globally, you can pass it through `useGLTF.setDecoderPath(path)`: -````jsx - > **Note**
    If you are using the CDN loaded draco binaries, you can get a small speedup in loading time by prefetching them. > > You can accomplish this by adding two `` tags to your `` tag, as below. The version in those URLs must exactly match what [useGLTF](src/core/useGLTF.tsx#L18) uses for this to work. If you're using create-react-app, `public/index.html` file contains the `` tag. From 9e00d8fb1e3448bdda8be082a79c15b6156e42ca Mon Sep 17 00:00:00 2001 From: Michael Dobekidis Date: Mon, 18 Sep 2023 18:28:33 +0300 Subject: [PATCH 019/103] feat: curve path animator (#1651) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: added optional Sprite or Plane geometry for SpriteAnimator * added initial draft for MotionPath component * feat: added motionpath component * fix: added optional chaining to avoid null focus object on MotionPath * fix: removed default value, for focus object * fix: type and import issue loading internal drei components * feat: reworked MotionPathControls to work like a Control component * fix: for types and declarations * fix: state value type * fix: types and ts quirks * fix: added threejs curve type for extend * feat: added ability to externally update the control * fix: TS type definitions * fix for codesandbox URL * fix: added delta for damp animation * fix: added changes for more manual control and proper damping * fix: ts types fixes, increased maath library version * fix: types --------- Co-authored-by: — --- README.md | 70 + package.json | 2 +- src/core/BBAnchor.tsx | 2 +- src/core/Cloud.tsx | 2 +- src/core/CubeCamera.tsx | 2 +- src/core/GizmoHelper.tsx | 2 +- src/core/MeshPortalMaterial.tsx | 2 +- src/core/MeshTransmissionMaterial.tsx | 2 +- src/core/MotionPathControls.tsx | 167 + src/core/RoundedBox.tsx | 2 +- src/core/index.ts | 1 + src/core/useGLTF.tsx | 4 +- src/web/View.tsx | 5 +- yarn.lock | 8050 +++++++++++++------------ 14 files changed, 4336 insertions(+), 3977 deletions(-) create mode 100644 src/core/MotionPathControls.tsx diff --git a/README.md b/README.md index c935858c5..51bd6787b 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ The `native` route of the library **does not** export `Html` or `Loader`. The de
  1. KeyboardControls
  2. FaceControls
  3. +
  4. MotionPathControls
  5. Gizmos
    • @@ -750,6 +751,75 @@ useFrame((_, delta) => { }) ``` +#### MotionPathControls + +

      + Demo +

      + +Motion path controls, it takes a path of bezier curves or catmull-rom curves as input and animates the passed `object` along that path. It can be configured to look upon an external object for staging or presentation purposes by adding a `focusObject` property (ref). + +```tsx +type MotionPathProps = JSX.IntrinsicElements['group'] & { + curves?: THREE.Curve[] // The curves from which the curve path is constructed, default: [] + debug?: boolean // show the path on which the object animates, default: false + object?: React.MutableRefObject // default: default camera + focus?: [x: number, y: number, z: number] | React.MutableRefObject // default: undefined + offset?: number // manually progress the object along the path (0 - 1), default: undefined + smooth?: boolean // whether or not to smooth out the curve path, default: false + eps?: number // End of animation precision, default: 0.00001 + damping?: number // Approximate time to reach the target. A smaller value will reach the target faster. default: 0.1 + maxSpeed?: number // Optionally allows you to clamp the maximum speed. default: Infinity +} +``` + +```jsx +const poi = useRef() + +function Loop({ factor = 0.2 }) { + const motion = useMotion() + useFrame((state, delta) => (motion.current += delta * factor)) +} + + + + + + + + + +``` + +```jsx +const poi = useRef() + + + + +``` + + # Gizmos #### GizmoHelper diff --git a/package.json b/package.json index 641191ea8..2d8a60c09 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "lodash.clamp": "^4.0.3", "lodash.omit": "^4.5.0", "lodash.pick": "^4.4.0", - "maath": "^0.6.0", + "maath": "^0.9.0", "meshline": "^3.1.6", "react-composer": "^5.0.3", "react-merge-refs": "^1.1.0", diff --git a/src/core/BBAnchor.tsx b/src/core/BBAnchor.tsx index 75b283bf3..116fb33ad 100644 --- a/src/core/BBAnchor.tsx +++ b/src/core/BBAnchor.tsx @@ -10,7 +10,7 @@ export interface BBAnchorProps extends GroupProps { } export const BBAnchor = ({ anchor, ...props }: BBAnchorProps) => { - const ref = React.useRef(null!) + const ref = React.useRef(null!) const parentRef = React.useRef(null) // Reattach group created by this component to the parent's parent, diff --git a/src/core/Cloud.tsx b/src/core/Cloud.tsx index d113e3225..1878d3ff5 100644 --- a/src/core/Cloud.tsx +++ b/src/core/Cloud.tsx @@ -18,7 +18,7 @@ export function Cloud({ depthTest = true, ...props }) { - const group = React.useRef() + const group = React.useRef(null!) const cloudTexture = useTexture(texture) as Texture const clouds = React.useMemo( () => diff --git a/src/core/CubeCamera.tsx b/src/core/CubeCamera.tsx index f870dbbe5..895fc631a 100644 --- a/src/core/CubeCamera.tsx +++ b/src/core/CubeCamera.tsx @@ -12,7 +12,7 @@ type Props = Omit & { } & CubeCameraOptions export function CubeCamera({ children, frames = Infinity, resolution, near, far, envMap, fog, ...props }: Props) { - const ref = React.useRef() + const ref = React.useRef(null!) const { fbo, camera, update } = useCubeCamera({ resolution, near, diff --git a/src/core/GizmoHelper.tsx b/src/core/GizmoHelper.tsx index fe7ff5f3b..69f85ad80 100644 --- a/src/core/GizmoHelper.tsx +++ b/src/core/GizmoHelper.tsx @@ -61,7 +61,7 @@ export const GizmoHelper = ({ // @ts-ignore const defaultControls = useThree((state) => state.controls) as ControlsProto const invalidate = useThree((state) => state.invalidate) - const gizmoRef = React.useRef() + const gizmoRef = React.useRef(null!) const virtualCam = React.useRef(null!) const animating = React.useRef(false) diff --git a/src/core/MeshPortalMaterial.tsx b/src/core/MeshPortalMaterial.tsx index af76dce61..87fdfb64c 100644 --- a/src/core/MeshPortalMaterial.tsx +++ b/src/core/MeshPortalMaterial.tsx @@ -180,7 +180,7 @@ export const MeshPortalMaterial = React.forwardRef( return ( [] + debug?: boolean + object?: React.MutableRefObject + focus?: [x: number, y: number, z: number] | React.MutableRefObject + offset?: number + smooth?: boolean + eps?: number + damping?: number + maxSpeed?: number + lookupDamping?: number +} + +type MotionState = { + path: THREE.CurvePath + focus: React.MutableRefObject> | [x: number, y: number, z: number] | undefined + object: React.MutableRefObject> + current: number + offset: number + point: THREE.Vector3 + tangent: THREE.Vector3 + next: THREE.Vector3 +} + +const isObject3DRef = (ref: any): ref is React.MutableRefObject => + ref?.current instanceof THREE.Object3D + +const context = React.createContext(null!) + +export function useMotion() { + return React.useContext(context) as MotionState +} + +function Debug({ points = 50 }: { points?: number }) { + //@ts-ignore + const { path } = useMotion() + const [dots, setDots] = React.useState([]) + const [material] = React.useState(() => new THREE.MeshBasicMaterial({ color: 'black' })) + const [geometry] = React.useState(() => new THREE.SphereGeometry(0.025, 16, 16)) + const last = React.useRef[]>([]) + React.useEffect(() => { + if (path.curves !== last.current) { + setDots(path.getPoints(points)) + last.current = path.curves + } + }) + return ( + <> + {dots.map((item: { x: any; y: any; z: any }, index: any) => ( + + ))} + + ) +} + +export const MotionPathControls = React.forwardRef( + ( + { + children, + curves = [], + object, + debug = false, + smooth = false, + focus, + offset = undefined, + eps = 0.00001, + damping = 0.1, + lookupDamping = 0.1, + maxSpeed = Infinity, + ...props + }: MotionPathProps, + fref + ) => { + const { camera } = useThree() + const ref = React.useRef() + const [path] = React.useState(() => new THREE.CurvePath()) + + const pos = React.useRef(offset ?? 0) + const state = React.useMemo( + () => ({ + focus, + object: object?.current instanceof THREE.Object3D ? object : { current: camera }, + path, + current: pos.current, + offset: pos.current, + point: new THREE.Vector3(), + tangent: new THREE.Vector3(), + next: new THREE.Vector3(), + }), + [focus, object] + ) + + React.useLayoutEffect(() => { + path.curves = [] + const _curves = curves.length > 0 ? curves : ref.current?.__r3f.objects + for (var i = 0; i < _curves.length; i++) path.add(_curves[i]) + + //Smoothen curve + if (smooth) { + const points = path.getPoints(typeof smooth === 'number' ? smooth : 1) + const catmull = new THREE.CatmullRomCurve3(points) + path.curves = [catmull] + } + path.updateArcLengths() + }) + + React.useImperativeHandle(fref, () => ref.current, []) + + React.useLayoutEffect(() => { + // When offset changes, normalise pos to avoid overshoot spinning + pos.current = misc.repeat(pos.current, 1) + }, [offset]) + + let last = 0 + const [vec] = React.useState(() => new THREE.Vector3()) + + useFrame((_state, delta) => { + last = state.offset + easing.damp( + pos, + 'current', + offset !== undefined ? offset : state.current, + damping, + delta, + maxSpeed, + undefined, + eps + ) + state.offset = misc.repeat(pos.current, 1) + + if (path.getCurveLengths().length > 0) { + path.getPointAt(state.offset, state.point) + path.getTangentAt(state.offset, state.tangent).normalize() + path.getPointAt(misc.repeat(pos.current - (last - state.offset), 1), state.next) + const target = object?.current instanceof THREE.Object3D ? object.current : camera + target.position.copy(state.point) + //@ts-ignore + if (focus) { + easing.dampLookAt( + target, + isObject3DRef(focus) ? focus.current.getWorldPosition(vec) : focus, + lookupDamping, + delta, + maxSpeed, + undefined, + eps + ) + } + } + }) + + return ( + + + {children} + {debug && } + + + ) + } +) diff --git a/src/core/RoundedBox.tsx b/src/core/RoundedBox.tsx index f691d16a2..e662b120a 100644 --- a/src/core/RoundedBox.tsx +++ b/src/core/RoundedBox.tsx @@ -50,7 +50,7 @@ export const RoundedBox: ForwardRefComponent = React.forwardRef() + const geomRef = React.useRef(null!) React.useLayoutEffect(() => { if (geomRef.current) { diff --git a/src/core/index.ts b/src/core/index.ts index cf48c174d..b34aa0df6 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -40,6 +40,7 @@ export * from './PointerLockControls' export * from './FirstPersonControls' export * from './CameraControls' export * from './FaceControls' +export * from './MotionPathControls' // Gizmos export * from './GizmoHelper' diff --git a/src/core/useGLTF.tsx b/src/core/useGLTF.tsx index fc81bead6..62cdeaaa4 100644 --- a/src/core/useGLTF.tsx +++ b/src/core/useGLTF.tsx @@ -1,6 +1,6 @@ import { Loader } from 'three' // @ts-ignore -import { GLTFLoader, DRACOLoader, MeshoptDecoder, GLTF } from 'three-stdlib' +import { GLTFLoader, DRACOLoader, MeshoptDecoder } from 'three-stdlib' import { useLoader } from '@react-three/fiber' let dracoLoader: DRACOLoader | null = null @@ -33,7 +33,7 @@ export function useGLTF( useMeshOpt: boolean = true, extendLoader?: (loader: GLTFLoader) => void ) { - const gltf = useLoader(GLTFLoader, path, extensions(useDraco, useMeshOpt, extendLoader)) + const gltf = useLoader(GLTFLoader, path, extensions(useDraco, useMeshOpt, extendLoader)) return gltf } diff --git a/src/web/View.tsx b/src/web/View.tsx index ceb476ece..ca11e5c9f 100644 --- a/src/web/View.tsx +++ b/src/web/View.tsx @@ -180,7 +180,10 @@ export const View = ({ track, index = 1, frames = Infinity, children }: ViewProp null} /> , virtualScene, - { events: { compute, priority: index }, size: { width: rect.current?.width, height: rect.current?.height } } + { + events: { compute, priority: index }, + size: { width: rect.current?.width, height: rect.current?.height } as any, + } )} ) diff --git a/yarn.lock b/yarn.lock index b4dedcf62..825cee36b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,13 +7,6 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@ampproject/remapping@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" - integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.0" - "@ampproject/remapping@^2.2.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" @@ -22,10 +15,10 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@aw-web-design/x-default-browser@1.4.88": - version "1.4.88" - resolved "https://registry.yarnpkg.com/@aw-web-design/x-default-browser/-/x-default-browser-1.4.88.tgz#33d869cb2a537cd6d2a8369d4dc8ea4988d4be89" - integrity sha512-AkEmF0wcwYC2QkhK703Y83fxWARttIWXDmQN8+cof8FmFZ5BRhnNXGymeb1S73bOCLfWjYELxtujL56idCN/XA== +"@aw-web-design/x-default-browser@1.4.126": + version "1.4.126" + resolved "https://registry.yarnpkg.com/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz#43e4bd8f0314ed907a8718d7e862a203af79bc16" + integrity sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug== dependencies: default-browser-id "3.0.0" @@ -36,254 +29,114 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.5.5": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" - integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== - dependencies: - "@babel/highlight" "^7.22.5" - -"@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" - integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.5.5": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" - integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" -"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.5": - version "7.21.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.7.tgz#61caffb60776e49a57ba61a88f02bedd8714f6bc" - integrity sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA== +"@babel/compat-data@^7.22.20", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" + integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== -"@babel/core@^7.11.6", "@babel/core@^7.13.16", "@babel/core@^7.20.12", "@babel/core@^7.20.2", "@babel/core@~7.21.0": - version "7.21.8" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.8.tgz#2a8c7f0f53d60100ba4c32470ba0281c92aa9aa4" - integrity sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ== +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.14.3", "@babel/core@^7.20.12", "@babel/core@^7.22.9", "@babel/core@^7.7.5": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.20.tgz#e3d0eed84c049e2a2ae0a64d27b6a37edec385b7" + integrity sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.5" - "@babel/helper-compilation-targets" "^7.21.5" - "@babel/helper-module-transforms" "^7.21.5" - "@babel/helpers" "^7.21.5" - "@babel/parser" "^7.21.8" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.5" - "@babel/types" "^7.21.5" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.22.15" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-module-transforms" "^7.22.20" + "@babel/helpers" "^7.22.15" + "@babel/parser" "^7.22.16" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.22.20" + "@babel/types" "^7.22.19" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" + json5 "^2.2.3" + semver "^6.3.1" -"@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.14.3", "@babel/core@^7.7.5": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.8.tgz#3dac27c190ebc3a4381110d46c80e77efe172e1a" - integrity sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.7" - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helpers" "^7.17.8" - "@babel/parser" "^7.17.8" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - -"@babel/generator@^7.12.11", "@babel/generator@^7.21.5", "@babel/generator@~7.21.1": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.5.tgz#c0c0e5449504c7b7de8236d99338c3e2a340745f" - integrity sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w== +"@babel/generator@^7.12.11", "@babel/generator@^7.22.15", "@babel/generator@^7.22.9", "@babel/generator@^7.7.2": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.15.tgz#1564189c7ec94cb8f77b5e8a90c4d200d21b2339" + integrity sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA== dependencies: - "@babel/types" "^7.21.5" + "@babel/types" "^7.22.15" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/generator@^7.17.3", "@babel/generator@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" - integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== - dependencies: - "@babel/types" "^7.17.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/generator@^7.22.5", "@babel/generator@^7.7.2": +"@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" - integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: "@babel/types" "^7.22.5" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" + integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.22.15" -"@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.21.5.tgz#817f73b6c59726ab39f6ba18c234268a519e5abb" - integrity sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g== - dependencies: - "@babel/types" "^7.21.5" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" - integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== - dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz#631e6cc784c7b660417421349aac304c94115366" - integrity sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w== +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" + integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== dependencies: - "@babel/compat-data" "^7.21.5" - "@babel/helper-validator-option" "^7.21.0" - browserslist "^4.21.3" + "@babel/compat-data" "^7.22.9" + "@babel/helper-validator-option" "^7.22.15" + browserslist "^4.21.9" lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.16.7": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz#3778c1ed09a7f3e65e6d6e0f6fbfcc53809d92c9" - integrity sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": - version "7.21.8" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.8.tgz#205b26330258625ef8869672ebca1e0dee5a0f02" - integrity sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.21.5" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-member-expression-to-functions" "^7.21.5" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.21.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/helper-split-export-declaration" "^7.18.6" - semver "^6.3.0" + semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.16.7": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" - integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" + integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^5.0.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": - version "7.21.8" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.8.tgz#a7886f61c2e29e21fd4aaeaf1e473deba6b571dc" - integrity sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" + integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" regexpu-core "^5.3.1" - semver "^6.3.0" + semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== +"@babel/helper-define-polyfill-provider@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" + integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-define-polyfill-provider@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" - integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== - dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba" - integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ== - -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== - -"@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== - dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" - integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== - dependencies: - "@babel/template" "^7.20.7" - "@babel/types" "^7.21.0" +"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== "@babel/helper-function-name@^7.22.5": version "7.22.5" @@ -293,27 +146,6 @@ "@babel/template" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/helper-get-function-arity@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" - integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" @@ -321,303 +153,144 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.16.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" - integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== +"@babel/helper-member-expression-to-functions@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz#b95a144896f6d491ca7863576f820f3628818621" + integrity sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA== dependencies: - "@babel/types" "^7.17.0" + "@babel/types" "^7.22.15" -"@babel/helper-member-expression-to-functions@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.5.tgz#3b1a009af932e586af77c1030fba9ee0bde396c0" - integrity sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg== +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: - "@babel/types" "^7.21.5" + "@babel/types" "^7.22.15" -"@babel/helper-module-imports@^7.10.4": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== +"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.20", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz#da9edc14794babbe7386df438f3768067132f59e" + integrity sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A== dependencies: - "@babel/types" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" - integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== - dependencies: - "@babel/types" "^7.21.4" - -"@babel/helper-module-transforms@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" - integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz#d937c82e9af68d31ab49039136a222b17ac0b420" - integrity sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw== - dependencies: - "@babel/helper-environment-visitor" "^7.21.5" - "@babel/helper-module-imports" "^7.21.4" - "@babel/helper-simple-access" "^7.21.5" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.5" - "@babel/types" "^7.21.5" - -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-optimise-call-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" - integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== - -"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz#345f2377d05a720a4e5ecfa39cbf4474a4daed56" - integrity sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg== + "@babel/types" "^7.22.5" -"@babel/helper-plugin-utils@^7.22.5": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" - integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-wrap-function" "^7.18.9" - "@babel/types" "^7.18.9" - -"@babel/helper-replace-supers@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" - integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7", "@babel/helper-replace-supers@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.21.5.tgz#a6ad005ba1c7d9bc2973dfde05a1bba7065dde3c" - integrity sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg== - dependencies: - "@babel/helper-environment-visitor" "^7.21.5" - "@babel/helper-member-expression-to-functions" "^7.21.5" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.5" - "@babel/types" "^7.21.5" - -"@babel/helper-simple-access@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" - integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== +"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" + integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== dependencies: - "@babel/types" "^7.17.0" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-simple-access@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz#d697a7971a5c39eac32c7e63c0921c06c8a249ee" - integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg== +"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" + integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== dependencies: - "@babel/types" "^7.21.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" - integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== - dependencies: - "@babel/types" "^7.20.0" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@^7.22.5": +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08" - integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== dependencies: "@babel/types" "^7.22.5" -"@babel/helper-string-parser@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" - integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w== +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" "@babel/helper-string-parser@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== +"@babel/helper-validator-identifier@^7.22.19", "@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.22.5": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== +"@babel/helper-validator-option@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" + integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== -"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== - -"@babel/helper-wrap-function@^7.18.9": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" - integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== - dependencies: - "@babel/helper-function-name" "^7.19.0" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.5" - "@babel/types" "^7.20.5" - -"@babel/helpers@^7.17.8": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.8.tgz#288450be8c6ac7e4e44df37bcc53d345e07bc106" - integrity sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - -"@babel/helpers@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.5.tgz#5bac66e084d7a4d2d9696bdf0175a93f7fb63c08" - integrity sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.5" - "@babel/types" "^7.21.5" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" - integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== +"@babel/helper-wrap-function@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" + integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.0.0" - js-tokens "^4.0.0" + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.19" -"@babel/highlight@^7.16.7": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" - integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== +"@babel/helpers@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.15.tgz#f09c3df31e86e3ea0b7ff7556d85cdebd47ea6f1" + integrity sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.22.15" + "@babel/types" "^7.22.15" -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== +"@babel/highlight@^7.10.4", "@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.3", "@babel/parser@^7.17.8", "@babel/parser@^7.7.0": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.8.tgz#2817fb9d885dd8132ea0f8eb615a6388cca1c240" - integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ== - -"@babel/parser@^7.13.16", "@babel/parser@^7.20.7", "@babel/parser@^7.21.5", "@babel/parser@^7.21.8", "@babel/parser@~7.21.2": - version "7.21.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.8.tgz#642af7d0333eab9c0ad70b14ac5e76dbde7bfdf8" - integrity sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA== +"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.22.16", "@babel/parser@^7.22.7", "@babel/parser@^7.7.0": + version "7.22.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.16.tgz#180aead7f247305cce6551bea2720934e2fa2c95" + integrity sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA== -"@babel/parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" - integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" - integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" - integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" + integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-proposal-optional-chaining" "^7.20.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-proposal-async-generator-functions@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" - integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" + integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.15" "@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.18.6": version "7.18.6" @@ -627,48 +300,7 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d" - integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.21.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" - integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" - integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" - integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== @@ -676,34 +308,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" - integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.20.7" - -"@babel/plugin-proposal-optional-catch-binding@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" - integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0": +"@babel/plugin-proposal-optional-chaining@^7.13.12": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== @@ -712,39 +317,10 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" - integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-private-property-in-object@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc" - integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.21.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" - integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" - integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -788,19 +364,26 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.18.6": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.21.4.tgz#3e37fca4f06d93567c1cd9b75156422e90a67107" - integrity sha512-l9xd3N+XG4fZRxEP3vXdK6RW7vN1Uf5dxzRC/09wV86wqZ/YYQooBIGNsiRdfNR3/q2/5pPzV4B54J/9ctX5jw== +"@babel/plugin-syntax-flow@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" + integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-assertions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" + integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-assertions@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" - integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== +"@babel/plugin-syntax-import-attributes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" + integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -816,14 +399,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2" - integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-syntax-jsx@^7.7.2": +"@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.7.2": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== @@ -886,414 +462,505 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" - integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== +"@babel/plugin-syntax-typescript@^7.22.5", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" + integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-syntax-typescript@^7.20.0": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8" - integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA== +"@babel/plugin-transform-arrow-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" + integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-typescript@^7.7.2": +"@babel/plugin-transform-async-generator-functions@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" + integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-transform-async-to-generator@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" + integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== dependencies: + "@babel/helper-module-imports" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" -"@babel/plugin-transform-arrow-functions@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz#9bb42a53de447936a57ba256fbf537fc312b6929" - integrity sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA== +"@babel/plugin-transform-block-scoped-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" + integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-to-generator@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" - integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== +"@babel/plugin-transform-block-scoping@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz#494eb82b87b5f8b1d8f6f28ea74078ec0a10a841" + integrity sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw== dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoped-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" - integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== +"@babel/plugin-transform-class-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" + integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02" - integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== +"@babel/plugin-transform-class-static-block@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" + integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665" - integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-split-export-declaration" "^7.18.6" +"@babel/plugin-transform-classes@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" + integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz#3a2d8bb771cd2ef1cd736435f6552fe502e11b44" - integrity sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q== +"@babel/plugin-transform-computed-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" + integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== dependencies: - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/template" "^7.20.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.5" -"@babel/plugin-transform-destructuring@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401" - integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== +"@babel/plugin-transform-destructuring@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz#e7404ea5bb3387073b9754be654eecb578324694" + integrity sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" - integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== +"@babel/plugin-transform-dotall-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" + integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" - integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== +"@babel/plugin-transform-duplicate-keys@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" + integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" - integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== +"@babel/plugin-transform-dynamic-import@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" + integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" - integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== +"@babel/plugin-transform-exponentiation-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" + integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-flow-strip-types@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz#6aeca0adcb81dc627c8986e770bfaa4d9812aff5" - integrity sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w== +"@babel/plugin-transform-export-namespace-from@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" + integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-flow" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz#e890032b535f5a2e237a18535f56a9fdaa7b83fc" - integrity sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ== +"@babel/plugin-transform-flow-strip-types@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" + integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-flow" "^7.22.5" -"@babel/plugin-transform-function-name@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" - integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== +"@babel/plugin-transform-for-of@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" + integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== dependencies: - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" - integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== +"@babel/plugin-transform-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" + integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-member-expression-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" - integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== +"@babel/plugin-transform-json-strings@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" + integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-modules-amd@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" - integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== +"@babel/plugin-transform-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" + integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== dependencies: - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz#d69fb947eed51af91de82e4708f676864e5e47bc" - integrity sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ== +"@babel/plugin-transform-logical-assignment-operators@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" + integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== dependencies: - "@babel/helper-module-transforms" "^7.21.5" - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/helper-simple-access" "^7.21.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-modules-commonjs@^7.14.0": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz#d86b217c8e45bb5f2dbc11eefc8eab62cf980d19" - integrity sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA== +"@babel/plugin-transform-member-expression-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" + integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== dependencies: - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" - integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== +"@babel/plugin-transform-modules-amd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" + integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== dependencies: - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-identifier" "^7.19.1" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-umd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" - integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== +"@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.14.0", "@babel/plugin-transform-modules-commonjs@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz#b11810117ed4ee7691b29bd29fd9f3f98276034f" + integrity sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" - integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== +"@babel/plugin-transform-modules-systemjs@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz#3386be5875d316493b517207e8f1931d93154bb1" + integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.20.5" - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.9" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" -"@babel/plugin-transform-new-target@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" - integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== +"@babel/plugin-transform-modules-umd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" + integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-object-super@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" - integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db" - integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== +"@babel/plugin-transform-new-target@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" + integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-property-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" - integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" + integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-react-display-name@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" - integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== +"@babel/plugin-transform-numeric-separator@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" + integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-react-jsx-development@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" - integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== +"@babel/plugin-transform-object-rest-spread@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" + integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.22.15" + +"@babel/plugin-transform-object-super@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" + integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + +"@babel/plugin-transform-optional-catch-binding@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" + integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz#d7a5996c2f7ca4ad2ad16dbb74444e5c4385b1ba" + integrity sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" + integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-methods@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" + integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== dependencies: - "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-property-in-object@^7.22.11": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" + integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" + integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-display-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" + integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-jsx-development@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" + integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.22.5" "@babel/plugin-transform-react-jsx-self@^7.18.6": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz#ec98d4a9baafc5a1eb398da4cf94afbb40254a54" - integrity sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz#ca2fdc11bc20d4d46de01137318b13d04e481d8e" + integrity sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-jsx-source@^7.19.6": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz#88578ae8331e5887e8ce28e4c9dc83fb29da0b86" - integrity sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz#49af1615bfdf6ed9d3e9e43e425e0b2b65d15b6c" + integrity sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-jsx@^7.18.6", "@babel/plugin-transform-react-jsx@^7.19.0": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.5.tgz#bd98f3b429688243e4fa131fe1cbb2ef31ce6f38" - integrity sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA== +"@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz#7e6266d88705d7c49f11c98db8b9464531289cd6" + integrity sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-module-imports" "^7.21.4" - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/plugin-syntax-jsx" "^7.21.4" - "@babel/types" "^7.21.5" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/types" "^7.22.15" -"@babel/plugin-transform-react-pure-annotations@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" - integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== +"@babel/plugin-transform-react-pure-annotations@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" + integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz#576c62f9923f94bcb1c855adc53561fd7913724e" - integrity sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w== +"@babel/plugin-transform-regenerator@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" + integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== dependencies: - "@babel/helper-plugin-utils" "^7.21.5" - regenerator-transform "^0.15.1" + "@babel/helper-plugin-utils" "^7.22.5" + regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" - integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== +"@babel/plugin-transform-reserved-words@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" + integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.14.3": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz#0a2e08b5e2b2d95c4b1d3b3371a2180617455b70" - integrity sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.15.tgz#3a625c4c05a39e932d7d34f5d4895cdd0172fdc9" + integrity sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g== dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - semver "^6.3.0" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.5" + babel-plugin-polyfill-corejs3 "^0.8.3" + babel-plugin-polyfill-regenerator "^0.5.2" + semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" - integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== +"@babel/plugin-transform-shorthand-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" + integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" - integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== +"@babel/plugin-transform-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" + integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" - integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== +"@babel/plugin-transform-sticky-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" + integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-template-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" + integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" - integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== +"@babel/plugin-transform-typeof-symbol@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" + integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" - integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== +"@babel/plugin-transform-typescript@^7.22.15", "@babel/plugin-transform-typescript@^7.3.2": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz#15adef906451d86349eb4b8764865c960eb54127" + integrity sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.22.5" -"@babel/plugin-transform-typescript@^7.16.7", "@babel/plugin-transform-typescript@^7.3.2": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" - integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== +"@babel/plugin-transform-unicode-escapes@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" + integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-typescript" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-property-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" + integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typescript@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz#316c5be579856ea890a57ebc5116c5d064658f2b" - integrity sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw== +"@babel/plugin-transform-unicode-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" + integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.21.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-typescript" "^7.20.0" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz#1e55ed6195259b0e9061d81f5ef45a9b009fb7f2" - integrity sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg== +"@babel/plugin-transform-unicode-sets-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" + integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" - integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== +"@babel/preset-env@^7.21.5", "@babel/preset-env@^7.22.9": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.20.tgz#de9e9b57e1127ce0a2f580831717f7fb677ceedb" + integrity sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/preset-env@^7.20.2", "@babel/preset-env@^7.21.5", "@babel/preset-env@~7.21.0": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.5.tgz#db2089d99efd2297716f018aeead815ac3decffb" - integrity sha512-wH00QnTTldTbf/IefEVyChtRdw5RJvODT/Vb4Vcxq1AZvtXj6T0YeX0cAcXhI6/BdGuiP3GcNIL4OQbI2DVNxg== - dependencies: - "@babel/compat-data" "^7.21.5" - "@babel/helper-compilation-targets" "^7.21.5" - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/helper-validator-option" "^7.21.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7" - "@babel/plugin-proposal-async-generator-functions" "^7.20.7" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.21.0" - "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.20.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" - "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.20.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.21.0" - "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.21.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/compat-data" "^7.22.20" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-import-assertions" "^7.22.5" + "@babel/plugin-syntax-import-attributes" "^7.22.5" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -1304,102 +971,108 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.21.5" - "@babel/plugin-transform-async-to-generator" "^7.20.7" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.21.0" - "@babel/plugin-transform-classes" "^7.21.0" - "@babel/plugin-transform-computed-properties" "^7.21.5" - "@babel/plugin-transform-destructuring" "^7.21.3" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.21.5" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.20.11" - "@babel/plugin-transform-modules-commonjs" "^7.21.5" - "@babel/plugin-transform-modules-systemjs" "^7.20.11" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5" - "@babel/plugin-transform-new-target" "^7.18.6" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.21.3" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.21.5" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.20.7" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.21.5" - "@babel/plugin-transform-unicode-regex" "^7.18.6" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.21.5" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - core-js-compat "^3.25.1" - semver "^6.3.0" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.22.5" + "@babel/plugin-transform-async-generator-functions" "^7.22.15" + "@babel/plugin-transform-async-to-generator" "^7.22.5" + "@babel/plugin-transform-block-scoped-functions" "^7.22.5" + "@babel/plugin-transform-block-scoping" "^7.22.15" + "@babel/plugin-transform-class-properties" "^7.22.5" + "@babel/plugin-transform-class-static-block" "^7.22.11" + "@babel/plugin-transform-classes" "^7.22.15" + "@babel/plugin-transform-computed-properties" "^7.22.5" + "@babel/plugin-transform-destructuring" "^7.22.15" + "@babel/plugin-transform-dotall-regex" "^7.22.5" + "@babel/plugin-transform-duplicate-keys" "^7.22.5" + "@babel/plugin-transform-dynamic-import" "^7.22.11" + "@babel/plugin-transform-exponentiation-operator" "^7.22.5" + "@babel/plugin-transform-export-namespace-from" "^7.22.11" + "@babel/plugin-transform-for-of" "^7.22.15" + "@babel/plugin-transform-function-name" "^7.22.5" + "@babel/plugin-transform-json-strings" "^7.22.11" + "@babel/plugin-transform-literals" "^7.22.5" + "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" + "@babel/plugin-transform-member-expression-literals" "^7.22.5" + "@babel/plugin-transform-modules-amd" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.15" + "@babel/plugin-transform-modules-systemjs" "^7.22.11" + "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.22.5" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" + "@babel/plugin-transform-numeric-separator" "^7.22.11" + "@babel/plugin-transform-object-rest-spread" "^7.22.15" + "@babel/plugin-transform-object-super" "^7.22.5" + "@babel/plugin-transform-optional-catch-binding" "^7.22.11" + "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.11" + "@babel/plugin-transform-property-literals" "^7.22.5" + "@babel/plugin-transform-regenerator" "^7.22.10" + "@babel/plugin-transform-reserved-words" "^7.22.5" + "@babel/plugin-transform-shorthand-properties" "^7.22.5" + "@babel/plugin-transform-spread" "^7.22.5" + "@babel/plugin-transform-sticky-regex" "^7.22.5" + "@babel/plugin-transform-template-literals" "^7.22.5" + "@babel/plugin-transform-typeof-symbol" "^7.22.5" + "@babel/plugin-transform-unicode-escapes" "^7.22.10" + "@babel/plugin-transform-unicode-property-regex" "^7.22.5" + "@babel/plugin-transform-unicode-regex" "^7.22.5" + "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/preset-modules" "0.1.6-no-external-plugins" + "@babel/types" "^7.22.19" + babel-plugin-polyfill-corejs2 "^0.4.5" + babel-plugin-polyfill-corejs3 "^0.8.3" + babel-plugin-polyfill-regenerator "^0.5.2" + core-js-compat "^3.31.0" + semver "^6.3.1" "@babel/preset-flow@^7.13.13": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.21.4.tgz#a5de2a1cafa61f0e0b3af9b30ff0295d38d3608f" - integrity sha512-F24cSq4DIBmhq4OzK3dE63NHagb27OPE3eWR+HLekt4Z3Y5MzIIUGF3LlLgV0gN8vzbDViSY7HnrReNVCJXTeA== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.22.15.tgz#30318deb9b3ebd9f5738e96da03a531e0cd3165d" + integrity sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-option" "^7.21.0" - "@babel/plugin-transform-flow-strip-types" "^7.21.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-transform-flow-strip-types" "^7.22.5" -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/types" "^7.4.4" esutils "^2.0.2" "@babel/preset-react@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" - integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.15.tgz#9a776892b648e13cc8ca2edf5ed1264eea6b6afc" + integrity sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-transform-react-display-name" "^7.18.6" - "@babel/plugin-transform-react-jsx" "^7.18.6" - "@babel/plugin-transform-react-jsx-development" "^7.18.6" - "@babel/plugin-transform-react-pure-annotations" "^7.18.6" - -"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.21.5": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.21.5.tgz#68292c884b0e26070b4d66b202072d391358395f" - integrity sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA== - dependencies: - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/helper-validator-option" "^7.21.0" - "@babel/plugin-syntax-jsx" "^7.21.4" - "@babel/plugin-transform-modules-commonjs" "^7.21.5" - "@babel/plugin-transform-typescript" "^7.21.3" - -"@babel/preset-typescript@^7.3.3", "@babel/preset-typescript@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" - integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-typescript" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-transform-react-display-name" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.22.15" + "@babel/plugin-transform-react-jsx-development" "^7.22.5" + "@babel/plugin-transform-react-pure-annotations" "^7.22.5" + +"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.21.5", "@babel/preset-typescript@^7.3.3", "@babel/preset-typescript@^7.8.3": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.22.15.tgz#43db30516fae1d417d748105a0bc95f637239d48" + integrity sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.15" + "@babel/plugin-transform-typescript" "^7.22.15" "@babel/register@^7.13.16": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.21.0.tgz#c97bf56c2472e063774f31d344c592ebdcefa132" - integrity sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw== + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.22.15.tgz#c2c294a361d59f5fa7bcc8b97ef7319c32ecaec7" + integrity sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -1412,119 +1085,45 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.8.tgz#3e56e4aff81befa55ac3ac6a0967349fd1c5bca2" - integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.12.0", "@babel/runtime@^7.18.3": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200" - integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q== - dependencies: - regenerator-runtime "^0.13.11" - -"@babel/template@^7.16.7", "@babel/template@^7.3.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" + integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/template@^7.18.10", "@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/template@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" - integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== - dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" + regenerator-runtime "^0.14.0" -"@babel/traverse@^7.1.6", "@babel/traverse@^7.20.5", "@babel/traverse@^7.21.5", "@babel/traverse@~7.21.2": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.5.tgz#ad22361d352a5154b498299d523cf72998a4b133" - integrity sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw== +"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== dependencies: - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.5" - "@babel/helper-environment-visitor" "^7.21.5" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.21.5" - "@babel/types" "^7.21.5" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.17.3", "@babel/traverse@^7.7.0": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" - integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.3" - "@babel/types" "^7.17.0" - debug "^4.1.0" - globals "^11.1.0" + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" -"@babel/traverse@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1" - integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ== +"@babel/traverse@^7.1.6", "@babel/traverse@^7.22.15", "@babel/traverse@^7.22.20", "@babel/traverse@^7.22.8", "@babel/traverse@^7.7.0": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.20.tgz#db572d9cb5c79e02d83e5618b82f6991c07584c9" + integrity sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw== dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.22.5" "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.22.16" + "@babel/types" "^7.22.19" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" - integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - -"@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.2.0", "@babel/types@^7.20.0", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@~7.21.2": - version "7.21.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6" - integrity sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q== - dependencies: - "@babel/helper-string-parser" "^7.21.5" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@babel/types@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" - integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.22.19" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.19.tgz#7425343253556916e440e662bb221a93ddb75684" + integrity sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg== dependencies: "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.19" to-fast-properties "^2.0.0" "@base2/pretty-print-object@1.0.1": @@ -1737,9 +1336,9 @@ integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== "@emotion/react@^11.8.1": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.0.tgz#408196b7ef8729d8ad08fc061b03b046d1460e02" - integrity sha512-ZSK3ZJsNkwfjT3JpDAWJZlrGD81Z3ytNDsxw1LKq1o+xkmO5pnWfr6gmCC8gHEFf3nSSX/09YrG67jybNPxSUw== + version "11.11.1" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.1.tgz#b2c36afac95b184f73b08da8c214fdf861fa4157" + integrity sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA== dependencies: "@babel/runtime" "^7.18.3" "@emotion/babel-plugin" "^11.11.0" @@ -1786,115 +1385,115 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== -"@esbuild/android-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" - integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== - -"@esbuild/android-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" - integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== - -"@esbuild/android-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" - integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== - -"@esbuild/darwin-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" - integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== - -"@esbuild/darwin-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" - integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== - -"@esbuild/freebsd-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" - integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== - -"@esbuild/freebsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" - integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== - -"@esbuild/linux-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" - integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== - -"@esbuild/linux-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" - integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== - -"@esbuild/linux-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" - integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== - -"@esbuild/linux-loong64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" - integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== - -"@esbuild/linux-mips64el@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" - integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== - -"@esbuild/linux-ppc64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" - integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== - -"@esbuild/linux-riscv64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" - integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== - -"@esbuild/linux-s390x@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" - integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== - -"@esbuild/linux-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" - integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== - -"@esbuild/netbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" - integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== - -"@esbuild/openbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" - integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== - -"@esbuild/sunos-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" - integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== - -"@esbuild/win32-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" - integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== - -"@esbuild/win32-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" - integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== - -"@esbuild/win32-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" - integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== +"@esbuild/android-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" + integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== + +"@esbuild/android-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" + integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== + +"@esbuild/android-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" + integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== + +"@esbuild/darwin-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" + integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== + +"@esbuild/darwin-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" + integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== + +"@esbuild/freebsd-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" + integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== + +"@esbuild/freebsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" + integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== + +"@esbuild/linux-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" + integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== + +"@esbuild/linux-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" + integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== + +"@esbuild/linux-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" + integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== + +"@esbuild/linux-loong64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" + integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== + +"@esbuild/linux-mips64el@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" + integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== + +"@esbuild/linux-ppc64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" + integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== + +"@esbuild/linux-riscv64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" + integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== + +"@esbuild/linux-s390x@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" + integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== + +"@esbuild/linux-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" + integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== + +"@esbuild/netbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" + integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== + +"@esbuild/openbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" + integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== + +"@esbuild/sunos-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" + integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== + +"@esbuild/win32-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" + integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== + +"@esbuild/win32-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" + integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== + +"@esbuild/win32-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" + integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" @@ -1903,6 +1502,11 @@ dependencies: eslint-visitor-keys "^3.3.0" +"@eslint-community/regexpp@^4.4.0": + version "4.8.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.8.1.tgz#8c4bb756cc2aa7eaf13cfa5e69c83afb3260c20c" + integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ== + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -1923,17 +1527,32 @@ resolved "https://registry.yarnpkg.com/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz#c05ed35ad82df8e6ac616c68b92c2282bd083ba4" integrity sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ== -"@floating-ui/core@^1.2.6": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.2.6.tgz#d21ace437cc919cdd8f1640302fa8851e65e75c0" - integrity sha512-EvYTiXet5XqweYGClEmpu3BoxmsQ4hkj3QaYA6qEnigCWffTP3vNRwBReTdrwDwo7OoJ3wM8Uoe9Uk4n+d4hfg== +"@floating-ui/core@^1.4.2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.5.0.tgz#5c05c60d5ae2d05101c3021c1a2a350ddc027f8c" + integrity sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg== + dependencies: + "@floating-ui/utils" "^0.1.3" -"@floating-ui/dom@^1.0.1": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.2.8.tgz#aee0f6ccc0787ab8fe741487a6e5e95b7b125375" - integrity sha512-XLwhYV90MxiHDq6S0rzFZj00fnDM+A1R9jhSioZoMsa7G0Q0i+Q4x40ajR8FHSdYDE1bgjG45mIWe6jtv9UPmg== +"@floating-ui/dom@^1.0.1", "@floating-ui/dom@^1.5.1": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.3.tgz#54e50efcb432c06c23cd33de2b575102005436fa" + integrity sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA== + dependencies: + "@floating-ui/core" "^1.4.2" + "@floating-ui/utils" "^0.1.3" + +"@floating-ui/react-dom@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.2.tgz#fab244d64db08e6bed7be4b5fcce65315ef44d20" + integrity sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ== dependencies: - "@floating-ui/core" "^1.2.6" + "@floating-ui/dom" "^1.5.1" + +"@floating-ui/utils@^0.1.3": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.4.tgz#19654d1026cc410975d46445180e70a5089b3e7d" + integrity sha512-qprfWkn82Iw821mcKofJ5Pk9wgioHicxcQMxx+5zt5GSKoqdWvgG5AxVmpmUUjzTLPVSH5auBrhI93Deayn/DA== "@humanwhocodes/config-array@^0.5.0": version "0.5.0" @@ -1982,110 +1601,110 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.5.0.tgz#593a6c5c0d3f75689835f1b3b4688c4f8544cb57" - integrity sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^29.5.0" - jest-util "^29.5.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.5.0.tgz#76674b96904484e8214614d17261cc491e5f1f03" - integrity sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ== +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: - "@jest/console" "^29.5.0" - "@jest/reporters" "^29.5.0" - "@jest/test-result" "^29.5.0" - "@jest/transform" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^29.5.0" - jest-config "^29.5.0" - jest-haste-map "^29.5.0" - jest-message-util "^29.5.0" - jest-regex-util "^29.4.3" - jest-resolve "^29.5.0" - jest-resolve-dependencies "^29.5.0" - jest-runner "^29.5.0" - jest-runtime "^29.5.0" - jest-snapshot "^29.5.0" - jest-util "^29.5.0" - jest-validate "^29.5.0" - jest-watcher "^29.5.0" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - pretty-format "^29.5.0" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.5.0.tgz#9152d56317c1fdb1af389c46640ba74ef0bb4c65" - integrity sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^29.5.0" + jest-mock "^29.7.0" -"@jest/expect-utils@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036" - integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg== +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: - jest-get-type "^29.4.3" + jest-get-type "^29.6.3" -"@jest/expect@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.5.0.tgz#80952f5316b23c483fbca4363ce822af79c38fba" - integrity sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g== +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== dependencies: - expect "^29.5.0" - jest-snapshot "^29.5.0" + expect "^29.7.0" + jest-snapshot "^29.7.0" -"@jest/fake-timers@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.5.0.tgz#d4d09ec3286b3d90c60bdcd66ed28d35f1b4dc2c" - integrity sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg== +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.3" "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^29.5.0" - jest-mock "^29.5.0" - jest-util "^29.5.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/globals@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.5.0.tgz#6166c0bfc374c58268677539d0c181f9c1833298" - integrity sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^29.5.0" - "@jest/expect" "^29.5.0" - "@jest/types" "^29.5.0" - jest-mock "^29.5.0" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" -"@jest/reporters@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.5.0.tgz#985dfd91290cd78ddae4914ba7921bcbabe8ac9b" - integrity sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.5.0" - "@jest/test-result" "^29.5.0" - "@jest/transform" "^29.5.0" - "@jest/types" "^29.5.0" - "@jridgewell/trace-mapping" "^0.3.15" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" @@ -2093,70 +1712,70 @@ glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^29.5.0" - jest-util "^29.5.0" - jest-worker "^29.5.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" v8-to-istanbul "^9.0.1" -"@jest/schemas@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" - integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: - "@sinclair/typebox" "^0.25.16" + "@sinclair/typebox" "^0.27.8" -"@jest/source-map@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.4.3.tgz#ff8d05cbfff875d4a791ab679b4333df47951d20" - integrity sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w== +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: - "@jridgewell/trace-mapping" "^0.3.15" + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.5.0.tgz#7c856a6ca84f45cc36926a4e9c6b57f1973f1408" - integrity sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz#34d7d82d3081abd523dbddc038a3ddcb9f6d3cc4" - integrity sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ== +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: - "@jest/test-result" "^29.5.0" + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^29.5.0" + jest-haste-map "^29.7.0" slash "^3.0.0" -"@jest/transform@^29.3.1", "@jest/transform@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.5.0.tgz#cf9c872d0965f0cbd32f1458aa44a2b1988b00f9" - integrity sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw== +"@jest/transform@^29.3.1", "@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^29.5.0" - "@jridgewell/trace-mapping" "^0.3.15" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^2.0.0" fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.5.0" - jest-regex-util "^29.4.3" - jest-util "^29.5.0" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" @@ -2173,12 +1792,12 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@jest/types@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" - integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: - "@jest/schemas" "^29.4.3" + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -2204,15 +1823,10 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" - integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== "@jridgewell/set-array@^1.0.1": version "1.1.2" @@ -2220,24 +1834,14 @@ integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/source-map@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" - integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.11" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" - integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== - -"@jridgewell/sourcemap-codec@^1.4.13": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== @@ -2250,21 +1854,13 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.0": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" - integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.19" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" + integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" "@juggle/resize-observer@^3.3.1": version "3.4.0" @@ -2285,9 +1881,9 @@ integrity sha512-d8Q9uRK89ZRWmED2JLI9/blpJcfdbh0iEUuMo8TgkMzNfQBY1/GC0FEJWrairTwHkxIf6Oud1vFBP+aHicWqJA== "@ndelangen/get-tarball@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@ndelangen/get-tarball/-/get-tarball-3.0.7.tgz#87c7aef2df4ff4fbdbab6ac9ed32cee142c4b1a3" - integrity sha512-NqGfTZIZpRFef1GoVaShSSRwDC3vde3ThtTeqFdcYd6ipKqnfEVhjK2hUeHjCQUcptyZr2TONqcloFXM+5QBrQ== + version "3.0.9" + resolved "https://registry.yarnpkg.com/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz#727ff4454e65f34707e742a59e5e6b1f525d8964" + integrity sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA== dependencies: gunzip-maybe "^1.4.2" pump "^3.0.0" @@ -2314,10 +1910,20 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@^6.2.10": - version "6.2.10" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-6.2.10.tgz#d12dbc772b5f2894e7eb680fde2b03ada81331ed" - integrity sha512-YpGd6RgYZ4JzIZCP6d+PfH81tD0XynOE7HyKUZPLss/YQZXR5pO6hyXWNYb1fcQw4yJrh9ed9umhGbxPhcjBRA== +"@npmcli/agent@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.1.1.tgz#31095663b8feef27ec3eccd5254a35b8fc70353a" + integrity sha512-6RlbiOAi6L6uUYF4/CDEkDZQnKw0XDsFJVrEpnib8rAx2WRMOsUyAdgnvDpX/fdkDWxtqE+NHwF465llI2wR0g== + dependencies: + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.1" + lru-cache "^10.0.1" + socks-proxy-agent "^8.0.1" + +"@npmcli/arborist@^6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-6.3.0.tgz#df37c79f7b82a2de8986fb9061b40efb4d188a38" + integrity sha512-XrS14qBDhK95RdGhjTSx8AgeZPNah949qp3b0v3GUFOugtPc9Z85rpWid57mONS8gHbuGIHjFzuA+5hSM7BuBA== dependencies: "@isaacs/string-locale-compare" "^1.1.0" "@npmcli/fs" "^3.1.0" @@ -2326,7 +1932,7 @@ "@npmcli/metavuln-calculator" "^5.0.0" "@npmcli/name-from-folder" "^2.0.0" "@npmcli/node-gyp" "^3.0.0" - "@npmcli/package-json" "^3.0.0" + "@npmcli/package-json" "^4.0.0" "@npmcli/query" "^3.0.0" "@npmcli/run-script" "^6.0.0" bin-links "^4.0.1" @@ -2353,6 +1959,45 @@ treeverse "^3.0.0" walk-up-path "^3.0.1" +"@npmcli/arborist@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-7.1.0.tgz#f240e2437201cf796d50311fb3bd39746e30baeb" + integrity sha512-QwVVXZ1kt9VREBuZ6Q9y6jyrT/GRME+/xl3X6/xFUSdd7SGGG+fEbIdWBc25tqqUEuPZfuCEPxJIUngEpXMogw== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/fs" "^3.1.0" + "@npmcli/installed-package-contents" "^2.0.2" + "@npmcli/map-workspaces" "^3.0.2" + "@npmcli/metavuln-calculator" "^7.0.0" + "@npmcli/name-from-folder" "^2.0.0" + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^5.0.0" + "@npmcli/query" "^3.0.0" + "@npmcli/run-script" "^7.0.1" + bin-links "^4.0.1" + cacache "^18.0.0" + common-ancestor-path "^1.0.1" + hosted-git-info "^7.0.0" + json-parse-even-better-errors "^3.0.0" + json-stringify-nice "^1.1.4" + minimatch "^9.0.0" + nopt "^7.0.0" + npm-install-checks "^6.2.0" + npm-package-arg "^11.0.0" + npm-pick-manifest "^9.0.0" + npm-registry-fetch "^16.0.0" + npmlog "^7.0.1" + pacote "^17.0.4" + parse-conflict-json "^3.0.0" + proc-log "^3.0.0" + promise-all-reject-late "^1.0.0" + promise-call-limit "^1.0.2" + read-package-json-fast "^3.0.2" + semver "^7.3.7" + ssri "^10.0.5" + treeverse "^3.0.0" + walk-up-path "^3.0.1" + "@npmcli/config@^6.2.1": version "6.2.1" resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-6.2.1.tgz#954cc09b727b6bfc087cb1d2a48994dc342e45cc" @@ -2395,6 +2040,20 @@ semver "^7.3.5" which "^3.0.0" +"@npmcli/git@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-5.0.3.tgz#ad3ede0994bcf716ddb63d361f3ea16cb72d878c" + integrity sha512-UZp9NwK+AynTrKvHn5k3KviW/hA5eENmFsu3iAPe7sWRt0lFUdsY/wXIYjpDFe7cdSNwOIzbObfwgt6eL5/2zw== + dependencies: + "@npmcli/promise-spawn" "^7.0.0" + lru-cache "^10.0.1" + npm-pick-manifest "^9.0.0" + proc-log "^3.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^4.0.0" + "@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" @@ -2423,6 +2082,16 @@ pacote "^15.0.0" semver "^7.3.5" +"@npmcli/metavuln-calculator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-7.0.0.tgz#fb59245926d7f677db904177f9aca15ac883d6cb" + integrity sha512-Pw0tyX02VkpqlIQlG2TeiJNsdrecYeUU0ubZZa9pi3N37GCsxI+en43u4hYFdq+eSx1A9a9vwFAUyqEtKFsbHQ== + dependencies: + cacache "^18.0.0" + json-parse-even-better-errors "^3.0.0" + pacote "^17.0.0" + semver "^7.3.5" + "@npmcli/name-from-folder@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" @@ -2433,29 +2102,50 @@ resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== -"@npmcli/package-json@^3.0.0", "@npmcli/package-json@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-3.1.1.tgz#5628332aac90fa1b4d6f98e03988c5958b35e0c5" - integrity sha512-+UW0UWOYFKCkvszLoTwrYGrjNrT8tI5Ckeb/h+Z1y1fsNJEctl7HmerA5j2FgmoqFaLI2gsA1X9KgMFqx/bRmA== +"@npmcli/package-json@^4.0.0", "@npmcli/package-json@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-4.0.1.tgz#1a07bf0e086b640500791f6bf245ff43cc27fa37" + integrity sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q== dependencies: "@npmcli/git" "^4.1.0" glob "^10.2.2" + hosted-git-info "^6.1.1" json-parse-even-better-errors "^3.0.0" normalize-package-data "^5.0.0" - npm-normalize-package-bin "^3.0.1" proc-log "^3.0.0" + semver "^7.5.3" + +"@npmcli/package-json@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.0.0.tgz#77d0f8b17096763ccbd8af03b7117ba6e34d6e91" + integrity sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g== + dependencies: + "@npmcli/git" "^5.0.0" + glob "^10.2.2" + hosted-git-info "^7.0.0" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^6.0.0" + proc-log "^3.0.0" + semver "^7.5.3" -"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": +"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1", "@npmcli/promise-spawn@^6.0.2": version "6.0.2" resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== dependencies: which "^3.0.0" +"@npmcli/promise-spawn@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-7.0.0.tgz#fd1c64ed4ff2341e503e1f390c62640a6540df09" + integrity sha512-wBqcGsMELZna0jDblGd7UXgOby45TQaMWmbFwWX+SEotk4HV6zG2t6rT9siyLhPk4P6YYqgfL1UO8nMWDBVJXQ== + dependencies: + which "^4.0.0" + "@npmcli/query@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.0.0.tgz#51a0dfb85811e04f244171f164b6bc83b36113a7" - integrity sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.0.1.tgz#77d63ceb7d27ed748da3cc8b50d45fc341448ed6" + integrity sha512-0jE8iHBogf/+bFDj+ju6/UMLbJ39c8h6nSe6qile+dB7PJ0iV3gNqcb2vtt6WWCBrxv9uAjzUT/8vroluulidA== dependencies: postcss-selector-parser "^6.0.10" @@ -2470,40 +2160,51 @@ read-package-json-fast "^3.0.0" which "^3.0.0" -"@octokit/auth-token@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" - integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== - -"@octokit/core@^4.2.1": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" - integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" +"@npmcli/run-script@^7.0.0", "@npmcli/run-script@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-7.0.1.tgz#18eebaed96214357f618a82510411319181417bd" + integrity sha512-Od/JMrgkjZ8alyBE0IzeqZDiF1jgMez9Gkc/OYrCkHHiXNwM0wc6s7+h+xM7kYDZkS0tAoOLr9VvygyE5+2F7g== + dependencies: + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/promise-spawn" "^7.0.0" + node-gyp "^9.0.0" + read-package-json-fast "^3.0.0" + which "^4.0.0" + +"@octokit/auth-token@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-4.0.0.tgz#40d203ea827b9f17f42a29c6afb93b7745ef80c7" + integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== + +"@octokit/core@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-5.0.0.tgz#0fc2b6eb88437e5c1d69f756a5dcee7472d2b2dd" + integrity sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A== + dependencies: + "@octokit/auth-token" "^4.0.0" + "@octokit/graphql" "^7.0.0" + "@octokit/request" "^8.0.2" + "@octokit/request-error" "^5.0.0" + "@octokit/types" "^11.0.0" before-after-hook "^2.2.0" universal-user-agent "^6.0.0" -"@octokit/endpoint@^7.0.0": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" - integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== +"@octokit/endpoint@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-9.0.0.tgz#c5ce19c74b999b85af9a8a189275c80faa3e90fd" + integrity sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ== dependencies: - "@octokit/types" "^9.0.0" + "@octokit/types" "^11.0.0" is-plain-object "^5.0.0" universal-user-agent "^6.0.0" -"@octokit/graphql@^5.0.0": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" - integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== +"@octokit/graphql@^7.0.0": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-7.0.1.tgz#f2291620e17cdaa8115f8d0cdfc0644789ec2db2" + integrity sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w== dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" + "@octokit/request" "^8.0.1" + "@octokit/types" "^11.0.0" universal-user-agent "^6.0.0" "@octokit/openapi-types@^18.0.0": @@ -2511,77 +2212,54 @@ resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.0.0.tgz#f43d765b3c7533fd6fb88f3f25df079c24fccf69" integrity sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw== -"@octokit/plugin-paginate-rest@^7.0.0": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-7.1.2.tgz#1e25e88acab8198858960f6ef7ae02e6c9f7139f" - integrity sha512-Jx8KuKqEAVRsK6fMzZKv3h6UH9/NRDHsDRtUAROqqmZlCptM///Uef7A1ViZ/cbDplekz7VbDWdFLAZ/mpuDww== +"@octokit/plugin-paginate-rest@^8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz#417b5367da2ba3c2d255a59b87c1cc608228ec38" + integrity sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ== dependencies: - "@octokit/tsconfig" "^2.0.0" - "@octokit/types" "^9.3.2" + "@octokit/types" "^11.0.0" -"@octokit/plugin-retry@^5.0.0": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-5.0.4.tgz#c726c0e4e3fcd3b34a010e709f2c8b92cce1915a" - integrity sha512-hw00fDIhOgijy4aSxS6weWF5uqZVeoiC/AptLLyjL8KFCJRGRaXfcfgj76h/Z3cSLTjRsEIQnNCTig8INttL/g== +"@octokit/plugin-retry@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz#4a83ca5d531bbd56e0822a644ab0ba4a3215f87a" + integrity sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ== dependencies: - "@octokit/request-error" "^4.0.1" - "@octokit/types" "^10.0.0" + "@octokit/request-error" "^5.0.0" + "@octokit/types" "^11.0.0" bottleneck "^2.15.3" -"@octokit/plugin-throttling@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-6.1.0.tgz#093275e6b542be371acb0631252a428f2f1b0615" - integrity sha512-JqMbTiPC0sUSTsLQsdq3JVx1mx8UtTo5mwR80YqPXE93+XhevvSyOR1rO2Z+NbO/r0TK4hqFJSSi/9oIZBxZTg== +"@octokit/plugin-throttling@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz#89f2580b43cfd5ec17f19e3939d8af549f573b0b" + integrity sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew== dependencies: - "@octokit/types" "^9.0.0" + "@octokit/types" "^11.0.0" bottleneck "^2.15.3" -"@octokit/request-error@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" - integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request-error@^4.0.1": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-4.0.2.tgz#0e16802f3e688e1dd6807e81c7810f419b2c530d" - integrity sha512-uqwUEmZw3x4I9DGYq9fODVAAvcLsPQv97NRycP6syEFu5916M189VnNBW2zANNwqg3OiligNcAey7P0SET843w== +"@octokit/request-error@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-5.0.0.tgz#060c5770833f9d563ad9a49fec6650c41584bc40" + integrity sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ== dependencies: - "@octokit/types" "^10.0.0" + "@octokit/types" "^11.0.0" deprecation "^2.0.0" once "^1.4.0" -"@octokit/request@^6.0.0": - version "6.2.8" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" - integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== +"@octokit/request@^8.0.1", "@octokit/request@^8.0.2": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-8.1.1.tgz#23b4d3f164e973f4c1a0f24f68256f1646c00620" + integrity sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ== dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" + "@octokit/endpoint" "^9.0.0" + "@octokit/request-error" "^5.0.0" + "@octokit/types" "^11.1.0" is-plain-object "^5.0.0" - node-fetch "^2.6.7" universal-user-agent "^6.0.0" -"@octokit/tsconfig@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-2.0.0.tgz#9f316995c2fd49516b2d2ffb2e02a4341e347fe8" - integrity sha512-tWnrai3quGt8+gRN2edzo9fmraWekeryXPeXDomMw2oFSpu/lH3VSWGn/q4V+rwjTRMeeXk/ci623/01Zet4VQ== - -"@octokit/types@^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" - integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== - dependencies: - "@octokit/openapi-types" "^18.0.0" - -"@octokit/types@^9.0.0", "@octokit/types@^9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" - integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== +"@octokit/types@^11.0.0", "@octokit/types@^11.1.0": + version "11.1.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-11.1.0.tgz#9e5db741d582b05718a4d91bac8cc987def235ea" + integrity sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ== dependencies: "@octokit/openapi-types" "^18.0.0" @@ -2611,19 +2289,309 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@puppeteer/browsers@1.4.3": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-1.4.3.tgz#39bfd8bf999d707ed2914b036fa2febac2960985" - integrity sha512-8Jfkpb8qhPQhMsNBmIY8b6+ic2kvcmHZlyvifmcNKBC5jNZf3MAKq3gryKfmrjFAYFl3naPjiKljPUq5wuolfQ== +"@puppeteer/browsers@1.4.6": + version "1.4.6" + resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-1.4.6.tgz#1f70fd23d5d2ccce9d29b038e5039d7a1049ca77" + integrity sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ== dependencies: debug "4.3.4" extract-zip "2.0.1" progress "2.0.3" - proxy-agent "6.2.1" - tar-fs "3.0.3" + proxy-agent "6.3.0" + tar-fs "3.0.4" unbzip2-stream "1.4.3" yargs "17.7.1" +"@radix-ui/number@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.0.1.tgz#644161a3557f46ed38a042acf4a770e826021674" + integrity sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/primitive@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.0.1.tgz#e46f9958b35d10e9f6dc71c497305c22e3e55dbd" + integrity sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-arrow@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz#c24f7968996ed934d57fe6cde5d6ec7266e1d25d" + integrity sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/react-collection@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.0.3.tgz#9595a66e09026187524a36c6e7e9c7d286469159" + integrity sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-slot" "1.0.2" + +"@radix-ui/react-compose-refs@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz#7ed868b66946aa6030e580b1ffca386dd4d21989" + integrity sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-context@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.0.1.tgz#fe46e67c96b240de59187dcb7a1a50ce3e2ec00c" + integrity sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-direction@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.0.1.tgz#9cb61bf2ccf568f3421422d182637b7f47596c9b" + integrity sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-dismissable-layer@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz#883a48f5f938fa679427aa17fcba70c5494c6978" + integrity sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-escape-keydown" "1.0.3" + +"@radix-ui/react-focus-guards@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz#1ea7e32092216b946397866199d892f71f7f98ad" + integrity sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-focus-scope@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz#9c2e8d4ed1189a1d419ee61edd5c1828726472f9" + integrity sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + +"@radix-ui/react-id@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.0.1.tgz#73cdc181f650e4df24f0b6a5b7aa426b912c88c0" + integrity sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-layout-effect" "1.0.1" + +"@radix-ui/react-popper@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.1.2.tgz#4c0b96fcd188dc1f334e02dba2d538973ad842e9" + integrity sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg== + dependencies: + "@babel/runtime" "^7.13.10" + "@floating-ui/react-dom" "^2.0.0" + "@radix-ui/react-arrow" "1.0.3" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-layout-effect" "1.0.1" + "@radix-ui/react-use-rect" "1.0.1" + "@radix-ui/react-use-size" "1.0.1" + "@radix-ui/rect" "1.0.1" + +"@radix-ui/react-portal@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.0.3.tgz#ffb961244c8ed1b46f039e6c215a6c4d9989bda1" + integrity sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/react-primitive@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz#d49ea0f3f0b2fe3ab1cb5667eb03e8b843b914d0" + integrity sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-slot" "1.0.2" + +"@radix-ui/react-roving-focus@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz#e90c4a6a5f6ac09d3b8c1f5b5e81aab2f0db1974" + integrity sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-collection" "1.0.3" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-controllable-state" "1.0.1" + +"@radix-ui/react-select@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-select/-/react-select-1.2.2.tgz#caa981fa0d672cf3c1b2a5240135524e69b32181" + integrity sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/number" "1.0.1" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-collection" "1.0.3" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-dismissable-layer" "1.0.4" + "@radix-ui/react-focus-guards" "1.0.1" + "@radix-ui/react-focus-scope" "1.0.3" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-popper" "1.1.2" + "@radix-ui/react-portal" "1.0.3" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-slot" "1.0.2" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-controllable-state" "1.0.1" + "@radix-ui/react-use-layout-effect" "1.0.1" + "@radix-ui/react-use-previous" "1.0.1" + "@radix-ui/react-visually-hidden" "1.0.3" + aria-hidden "^1.1.1" + react-remove-scroll "2.5.5" + +"@radix-ui/react-separator@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.0.3.tgz#be5a931a543d5726336b112f465f58585c04c8aa" + integrity sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/react-slot@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.0.2.tgz#a9ff4423eade67f501ffb32ec22064bc9d3099ab" + integrity sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.1" + +"@radix-ui/react-toggle-group@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle-group/-/react-toggle-group-1.0.4.tgz#f5b5c8c477831b013bec3580c55e20a68179d6ec" + integrity sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-roving-focus" "1.0.4" + "@radix-ui/react-toggle" "1.0.3" + "@radix-ui/react-use-controllable-state" "1.0.1" + +"@radix-ui/react-toggle@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-toggle/-/react-toggle-1.0.3.tgz#aecb2945630d1dc5c512997556c57aba894e539e" + integrity sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-controllable-state" "1.0.1" + +"@radix-ui/react-toolbar@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-toolbar/-/react-toolbar-1.0.4.tgz#3211a105567fa016e89921b5b514877f833de559" + integrity sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-roving-focus" "1.0.4" + "@radix-ui/react-separator" "1.0.3" + "@radix-ui/react-toggle-group" "1.0.4" + +"@radix-ui/react-use-callback-ref@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz#f4bb1f27f2023c984e6534317ebc411fc181107a" + integrity sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-controllable-state@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz#ecd2ced34e6330caf89a82854aa2f77e07440286" + integrity sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "1.0.1" + +"@radix-ui/react-use-escape-keydown@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz#217b840c250541609c66f67ed7bab2b733620755" + integrity sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "1.0.1" + +"@radix-ui/react-use-layout-effect@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz#be8c7bc809b0c8934acf6657b577daf948a75399" + integrity sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-previous@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz#b595c087b07317a4f143696c6a01de43b0d0ec66" + integrity sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-rect@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz#fde50b3bb9fd08f4a1cd204572e5943c244fcec2" + integrity sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/rect" "1.0.1" + +"@radix-ui/react-use-size@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz#1c5f5fea940a7d7ade77694bb98116fb49f870b2" + integrity sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-layout-effect" "1.0.1" + +"@radix-ui/react-visually-hidden@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz#51aed9dd0fe5abcad7dee2a234ad36106a6984ac" + integrity sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/rect@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.0.1.tgz#bf8e7d947671996da2e30f4904ece343bc4a883f" + integrity sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@react-spring/animated@~9.6.1": version "9.6.1" resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.6.1.tgz#ccc626d847cbe346f5f8815d0928183c647eb425" @@ -2671,17 +2639,18 @@ integrity sha512-POu8Mk0hIU3lRXB3bGIGe4VHIwwDsQyoD1F394OK7STTiX9w4dG3cTLljjYswkQN+hDSHRrj4O36kuVa7KPU8Q== "@react-three/fiber@^8.0.8": - version "8.0.8" - resolved "https://registry.yarnpkg.com/@react-three/fiber/-/fiber-8.0.8.tgz#eb8925f0f08cf11712625549b7213af371ecad61" - integrity sha512-MVlNSx9BlAUZpA2hPqLafCYlCAVOo89ygl/kXCN4OmTcWswLTWU9bCzUJBxY9QPMSTbSWSfGiv1BT0AA7KRsLQ== + version "8.14.2" + resolved "https://registry.yarnpkg.com/@react-three/fiber/-/fiber-8.14.2.tgz#e6253f215f20be2eac7e732f4636f608669578bc" + integrity sha512-mD+1Vwl6AwLKmVsXXJNOzGnDOoghIusRXGFBIX6qK9mIAYOO58WAmqSodayYQ1vkp8wnzM9AfrBZZH8Y01BfqA== dependencies: "@babel/runtime" "^7.17.8" - "@types/react-reconciler" "^0.26.4" - react-merge-refs "^1.1.0" + "@types/react-reconciler" "^0.26.7" + base64-js "^1.5.1" + its-fine "^1.0.6" react-reconciler "^0.27.0" react-use-measure "^2.1.1" scheduler "^0.21.0" - suspend-react "^0.0.8" + suspend-react "^0.1.3" zustand "^3.7.1" "@rollup/plugin-babel@^5.3.0": @@ -2733,7 +2702,7 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@rollup/pluginutils@^4.1.1", "@rollup/pluginutils@^4.2.0": +"@rollup/pluginutils@^4.1.1": version "4.2.1" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== @@ -2741,14 +2710,23 @@ estree-walker "^2.0.1" picomatch "^2.2.2" +"@rollup/pluginutils@^5.0.2": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.4.tgz#74f808f9053d33bafec0cc98e7b835c9667d32ba" + integrity sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + "@semantic-release/commit-analyzer@^10.0.0": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.1.tgz#be6fcc1703459294c394ede41b37fd9a21d39807" - integrity sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ== + version "10.0.4" + resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.4.tgz#e2770f341b75d8f19fe6b5b833e8c2e0de2b84de" + integrity sha512-pFGn99fn8w4/MHE0otb2A/l5kxgOuxaaauIh4u30ncoTJuqWj4hXTgEJ03REqjS+w1R2vPftSsO26WC61yOcpw== dependencies: conventional-changelog-angular "^6.0.0" conventional-commits-filter "^3.0.0" - conventional-commits-parser "^4.0.0" + conventional-commits-parser "^5.0.0" debug "^4.0.0" import-from "^4.0.0" lodash-es "^4.17.21" @@ -2760,16 +2738,16 @@ integrity sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ== "@semantic-release/github@^9.0.0": - version "9.0.3" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-9.0.3.tgz#2559da9bcedeacb572f240469270a281c2a83615" - integrity sha512-X6gq4USKVlCxPwIIyXb99jU7gwVWlnsKOevs+OyABRdoqc+OIRITbFmrrYU3eE1vGMGk+Qu/GAoLUQQQwC3YOA== - dependencies: - "@octokit/core" "^4.2.1" - "@octokit/plugin-paginate-rest" "^7.0.0" - "@octokit/plugin-retry" "^5.0.0" - "@octokit/plugin-throttling" "^6.0.0" + version "9.0.6" + resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-9.0.6.tgz#33c922e43be411e672f250890cbbd53686bb2ff0" + integrity sha512-GBGt9c3c2UdSvso4jcyQQSUpZA9hbfHqGQerZKN9WvVzCIkaBy8xkhOyiFVX08LjRHHT/H221SJNBLtuihX5iw== + dependencies: + "@octokit/core" "^5.0.0" + "@octokit/plugin-paginate-rest" "^8.0.0" + "@octokit/plugin-retry" "^6.0.0" + "@octokit/plugin-throttling" "^7.0.0" "@semantic-release/error" "^4.0.0" - aggregate-error "^4.0.1" + aggregate-error "^5.0.0" debug "^4.3.4" dir-glob "^3.0.1" globby "^13.1.4" @@ -2782,13 +2760,13 @@ url-join "^5.0.0" "@semantic-release/npm@^10.0.2": - version "10.0.4" - resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-10.0.4.tgz#b55df5cb86d4b10b4e8eb56d5ce0bd3537c641e1" - integrity sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw== + version "10.0.6" + resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-10.0.6.tgz#1c47a77e79464586fa1c67f148567ef2b9fda315" + integrity sha512-DyqHrGE8aUyapA277BB+4kV0C4iMHh3sHzUWdf0jTgp5NNJxVUz76W1f57FB64Ue03him3CBXxFqQD2xGabxow== dependencies: "@semantic-release/error" "^4.0.0" - aggregate-error "^4.0.1" - execa "^7.0.0" + aggregate-error "^5.0.0" + execa "^8.0.0" fs-extra "^11.0.0" lodash-es "^4.17.21" nerf-dart "^1.0.0" @@ -2801,39 +2779,78 @@ tempy "^3.0.0" "@semantic-release/release-notes-generator@^11.0.0": - version "11.0.3" - resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.3.tgz#9d7d94e305441d3b31385e29aa5a79ce3f6a21ae" - integrity sha512-NU77dWKQf+QcZrv/Hcp3DPeSxglPu8hYKCipGxAPpeaneLkg6S0zfTVug4tg4mfDhZHC6RtoI7ljQDK8VoJ2Dw== + version "11.0.7" + resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.7.tgz#2193b8aa6b8b40297b6cbc5156bc9a7e5cdb9bbd" + integrity sha512-T09QB9ImmNx7Q6hY6YnnEbw/rEJ6a+22LBxfZq+pSAXg/OL/k0siwEm5cK4k1f9dE2Z2mPIjJKKohzUm0jbxcQ== dependencies: conventional-changelog-angular "^6.0.0" conventional-changelog-writer "^6.0.0" - conventional-commits-filter "^3.0.0" - conventional-commits-parser "^4.0.0" + conventional-commits-filter "^4.0.0" + conventional-commits-parser "^5.0.0" debug "^4.0.0" get-stream "^7.0.0" import-from "^4.0.0" into-stream "^7.0.0" lodash-es "^4.17.21" - read-pkg-up "^9.0.0" + read-pkg-up "^10.0.0" + +"@sigstore/bundle@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-1.1.0.tgz#17f8d813b09348b16eeed66a8cf1c3d6bd3d04f1" + integrity sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" -"@sigstore/protobuf-specs@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz#957cb64ea2f5ce527cc9cf02a096baeb0d2b99b4" - integrity sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ== +"@sigstore/bundle@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.1.0.tgz#c6140ca97b68815edf7c4fb7bdbf58d656525c39" + integrity sha512-89uOo6yh/oxaU8AeOUnVrTdVMcGk9Q1hJa7Hkvalc6G3Z3CupWk4Xe9djSgJm9fMkH69s0P0cVHUoKSOemLdng== + dependencies: + "@sigstore/protobuf-specs" "^0.2.1" -"@sigstore/tuf@^1.0.0": +"@sigstore/protobuf-specs@^0.2.0", "@sigstore/protobuf-specs@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz#be9ef4f3c38052c43bd399d3f792c97ff9e2277b" + integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A== + +"@sigstore/sign@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.0.tgz#13b69323e7bf8de458cd6c952c57acd1169772a5" - integrity sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ== + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-1.0.0.tgz#6b08ebc2f6c92aa5acb07a49784cb6738796f7b4" + integrity sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA== dependencies: - "@sigstore/protobuf-specs" "^0.1.0" + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" make-fetch-happen "^11.0.1" - tuf-js "^1.1.3" -"@sinclair/typebox@^0.25.16": - version "0.25.24" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" - integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== +"@sigstore/sign@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-2.1.0.tgz#801f4b5f60e13ecd1925117a7d084ab7b2199f01" + integrity sha512-4VRpfJxs+8eLqzLVrZngVNExVA/zAhVbi4UT4zmtLi4xRd7vz5qie834OgkrGsLlLB1B2nz/3wUxT1XAUBe8gw== + dependencies: + "@sigstore/bundle" "^2.1.0" + "@sigstore/protobuf-specs" "^0.2.1" + make-fetch-happen "^13.0.0" + +"@sigstore/tuf@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.3.tgz#2a65986772ede996485728f027b0514c0b70b160" + integrity sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg== + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" + tuf-js "^1.1.7" + +"@sigstore/tuf@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-2.2.0.tgz#ef636239687e41af3f2ce10667ab88f5ca6165b3" + integrity sha512-KKATZ5orWfqd9ZG6MN8PtCIx4eevWSuGRKQvofnWXRpyMyUEpmrzg5M5BrCpjM+NfZ0RbNGOh5tCz/P2uoRqOA== + dependencies: + "@sigstore/protobuf-specs" "^0.2.1" + tuf-js "^2.1.0" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sinonjs/commons@^3.0.0": version "3.0.0" @@ -2849,116 +2866,115 @@ dependencies: "@sinonjs/commons" "^3.0.0" -"@storybook/addon-actions@7.0.12", "@storybook/addon-actions@^7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.0.12.tgz#61634c40073718cf02967f073df4595afd363521" - integrity sha512-f07Mc3qwcG9heGsuUUTIJbWF2nw/Ite3mvyIZY2VbgwhMUMVHj4knY4fh/LojwcUmmmc7CNZu3sJN/wIqpaHCQ== +"@storybook/addon-actions@7.4.2", "@storybook/addon-actions@^7.0.12": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.4.2.tgz#7f1d69a5439d6d39c7453e2167f831f34c620380" + integrity sha512-aKHyYjxcWaOTf/7B8x4EmUNkDAiYJZyJfGTYg2TDEDs89x7/9slujAA01qIgOp74C9nWkHDUVdm7/J+h3kWJWw== dependencies: - "@storybook/client-logger" "7.0.12" - "@storybook/components" "7.0.12" - "@storybook/core-events" "7.0.12" + "@storybook/client-logger" "7.4.2" + "@storybook/components" "7.4.2" + "@storybook/core-events" "7.4.2" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.0.12" - "@storybook/preview-api" "7.0.12" - "@storybook/theming" "7.0.12" - "@storybook/types" "7.0.12" + "@storybook/manager-api" "7.4.2" + "@storybook/preview-api" "7.4.2" + "@storybook/theming" "7.4.2" + "@storybook/types" "7.4.2" dequal "^2.0.2" lodash "^4.17.21" polished "^4.2.2" prop-types "^15.7.2" react-inspector "^6.0.0" - telejson "^7.0.3" + telejson "^7.2.0" ts-dedent "^2.0.0" uuid "^9.0.0" -"@storybook/addon-backgrounds@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-7.0.12.tgz#8e5242bb9f1bfc831f196de54c88a46d00f76f28" - integrity sha512-sAZSxsbj3CcabowALKTafpdnqXMBZB8C42s4Uxv11FCP50GqrP8jp2TqsIiDZxUbeXwI094W/gHnw41MSphG8Q== +"@storybook/addon-backgrounds@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-7.4.2.tgz#1d68c2a123e35580dc614c4849dd6a83976e4883" + integrity sha512-Vl6Vw1NzO5jRqlAEpG017z6N79Drlp7Wpw8O9+69/dKtTNmuLqLnPxWrn4nL2CNvghHToLMpToSAFpRo2fBZBg== dependencies: - "@storybook/client-logger" "7.0.12" - "@storybook/components" "7.0.12" - "@storybook/core-events" "7.0.12" + "@storybook/client-logger" "7.4.2" + "@storybook/components" "7.4.2" + "@storybook/core-events" "7.4.2" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.0.12" - "@storybook/preview-api" "7.0.12" - "@storybook/theming" "7.0.12" - "@storybook/types" "7.0.12" + "@storybook/manager-api" "7.4.2" + "@storybook/preview-api" "7.4.2" + "@storybook/theming" "7.4.2" + "@storybook/types" "7.4.2" memoizerific "^1.11.3" ts-dedent "^2.0.0" -"@storybook/addon-controls@7.0.12", "@storybook/addon-controls@^7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-7.0.12.tgz#24f3a579c7485dcb619c6d05cbd90c1b9e4a53eb" - integrity sha512-/+yBhswN1N7ttR1NGN94HE/25VELm4YuBtrkh+LJeKP/eQ5CZpLjexASN2GZcfmdnkwIYZAEH0X/AImLaCJAWA== - dependencies: - "@storybook/blocks" "7.0.12" - "@storybook/client-logger" "7.0.12" - "@storybook/components" "7.0.12" - "@storybook/core-common" "7.0.12" - "@storybook/manager-api" "7.0.12" - "@storybook/node-logger" "7.0.12" - "@storybook/preview-api" "7.0.12" - "@storybook/theming" "7.0.12" - "@storybook/types" "7.0.12" +"@storybook/addon-controls@7.4.2", "@storybook/addon-controls@^7.0.12": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-7.4.2.tgz#6ab9486c493d6b1b6b75cdbe336fa5626bbe9b2b" + integrity sha512-qzSac1bulSa7mqkfBfyAqbP9PbIio5CjGJ5VyT055ab50e13gj1eS3I9EJHCupYb19E3f465QatrGhoaTsE4hg== + dependencies: + "@storybook/blocks" "7.4.2" + "@storybook/client-logger" "7.4.2" + "@storybook/components" "7.4.2" + "@storybook/core-common" "7.4.2" + "@storybook/core-events" "7.4.2" + "@storybook/manager-api" "7.4.2" + "@storybook/node-logger" "7.4.2" + "@storybook/preview-api" "7.4.2" + "@storybook/theming" "7.4.2" + "@storybook/types" "7.4.2" lodash "^4.17.21" ts-dedent "^2.0.0" -"@storybook/addon-docs@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-7.0.12.tgz#c20f591904c8816af8f77aaa6e9c108ef72c2b11" - integrity sha512-zgg4sq34Zz8TN74+kSogxRHsIZ5gsIazJpa0osZp91nJQvsKUEfldjBtQWbBWzjVCrWmzOhW5/RLCnmCNm9y/w== +"@storybook/addon-docs@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-7.4.2.tgz#f733deca41c8b25f21a1965f96e2fab8dd7daca6" + integrity sha512-MV49/bGTibk2kvufk1+JEkDe2Ii/wfh5s+zO6a7p/FRy9zK0hQy3nEc56VpQ3+KzgDr0uyZI+mYq26OPwBuKRg== dependencies: - "@babel/core" "^7.20.2" - "@babel/plugin-transform-react-jsx" "^7.19.0" "@jest/transform" "^29.3.1" "@mdx-js/react" "^2.1.5" - "@storybook/blocks" "7.0.12" - "@storybook/client-logger" "7.0.12" - "@storybook/components" "7.0.12" - "@storybook/csf-plugin" "7.0.12" - "@storybook/csf-tools" "7.0.12" + "@storybook/blocks" "7.4.2" + "@storybook/client-logger" "7.4.2" + "@storybook/components" "7.4.2" + "@storybook/csf-plugin" "7.4.2" + "@storybook/csf-tools" "7.4.2" "@storybook/global" "^5.0.0" "@storybook/mdx2-csf" "^1.0.0" - "@storybook/node-logger" "7.0.12" - "@storybook/postinstall" "7.0.12" - "@storybook/preview-api" "7.0.12" - "@storybook/react-dom-shim" "7.0.12" - "@storybook/theming" "7.0.12" - "@storybook/types" "7.0.12" + "@storybook/node-logger" "7.4.2" + "@storybook/postinstall" "7.4.2" + "@storybook/preview-api" "7.4.2" + "@storybook/react-dom-shim" "7.4.2" + "@storybook/theming" "7.4.2" + "@storybook/types" "7.4.2" fs-extra "^11.1.0" remark-external-links "^8.0.0" remark-slug "^6.0.0" ts-dedent "^2.0.0" "@storybook/addon-essentials@^7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-7.0.12.tgz#3d7475d2c80eb746478cfee7e65915c29ec2df43" - integrity sha512-Js2cxvauAf8fkA5D0QrqPPe/FvpY1DbJp61VNGh82Xu0zZrczCGYP3jkWG79vl0zllJNs7hnkV8W6xY1JWgLoA== - dependencies: - "@storybook/addon-actions" "7.0.12" - "@storybook/addon-backgrounds" "7.0.12" - "@storybook/addon-controls" "7.0.12" - "@storybook/addon-docs" "7.0.12" - "@storybook/addon-highlight" "7.0.12" - "@storybook/addon-measure" "7.0.12" - "@storybook/addon-outline" "7.0.12" - "@storybook/addon-toolbars" "7.0.12" - "@storybook/addon-viewport" "7.0.12" - "@storybook/core-common" "7.0.12" - "@storybook/manager-api" "7.0.12" - "@storybook/node-logger" "7.0.12" - "@storybook/preview-api" "7.0.12" + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-7.4.2.tgz#3319aa75f94afa697f00e4ef616ac3242edeb0c2" + integrity sha512-9VqVe8pUogA9TIAl9xxNSdqU1zfXXdZW6J3BfT3r0DolU4nLusejs2xIu6smhEjZ1KYD6V30Uy9HDft/GRCSnw== + dependencies: + "@storybook/addon-actions" "7.4.2" + "@storybook/addon-backgrounds" "7.4.2" + "@storybook/addon-controls" "7.4.2" + "@storybook/addon-docs" "7.4.2" + "@storybook/addon-highlight" "7.4.2" + "@storybook/addon-measure" "7.4.2" + "@storybook/addon-outline" "7.4.2" + "@storybook/addon-toolbars" "7.4.2" + "@storybook/addon-viewport" "7.4.2" + "@storybook/core-common" "7.4.2" + "@storybook/manager-api" "7.4.2" + "@storybook/node-logger" "7.4.2" + "@storybook/preview-api" "7.4.2" ts-dedent "^2.0.0" -"@storybook/addon-highlight@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/addon-highlight/-/addon-highlight-7.0.12.tgz#4b5ff3e347d983c7fc3ae4e6a26514931053be8a" - integrity sha512-ccIsBVjUlZ7cM1adSSFTqqWXiELPdDqfZLz4dWfDbiLyG3InC953ugtvoUWCIZpC2OOnjVLpF7Rbshq2O/QoMw== +"@storybook/addon-highlight@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-highlight/-/addon-highlight-7.4.2.tgz#f50ef4106b7e5ec69cb2f17524eddc83699d80c9" + integrity sha512-HpwQiYil9RlMz303wQ9+ElW6W+Z0baqBUemlQ1JJZ6Wm47mgVVy8vLPcdH3JQkv7E34f51apPKVKFqq49xDqaA== dependencies: - "@storybook/core-events" "7.0.12" + "@storybook/core-events" "7.4.2" "@storybook/global" "^5.0.0" - "@storybook/preview-api" "7.0.12" + "@storybook/preview-api" "7.4.2" "@storybook/addon-knobs@^7.0.2": version "7.0.2" @@ -2977,84 +2993,85 @@ react-lifecycles-compat "^3.0.4" react-select "^5.7.0" -"@storybook/addon-measure@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-7.0.12.tgz#41d552872b2bed2ea21ca29990ae205aeaffa6e8" - integrity sha512-Uq9cj9QmN7WKBQ6wqeneFmTqo1UQKXIc4CpGBEtJtfsYNLsERrVzOs/tRUf66Zl3lWgfFZxs1B5Ij6RDsYEjRw== +"@storybook/addon-measure@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-7.4.2.tgz#c64a3ca48f76dedbee2a896494307f1c032bcfe5" + integrity sha512-fewNqI3mDAGAhFOFh/rdDS3dJ3e1QDmSVMB0KDJ7K22HOF2To/H9QfXHV24osnBRu6QemSIqObry1leF+u5BmQ== dependencies: - "@storybook/client-logger" "7.0.12" - "@storybook/components" "7.0.12" - "@storybook/core-events" "7.0.12" + "@storybook/client-logger" "7.4.2" + "@storybook/components" "7.4.2" + "@storybook/core-events" "7.4.2" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.0.12" - "@storybook/preview-api" "7.0.12" - "@storybook/types" "7.0.12" - -"@storybook/addon-outline@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-7.0.12.tgz#ecb3c86d48c0a2bfeec64d30b273b153b6e32b71" - integrity sha512-eZPkm3mECdqx1EDJ0S6DAzZ9WZLPIsZH7fRy6vdJJuAgvnOSzkt7AEpA0hlgiNyXcFpE1Cav6/g12FUf4Zo82g== - dependencies: - "@storybook/client-logger" "7.0.12" - "@storybook/components" "7.0.12" - "@storybook/core-events" "7.0.12" + "@storybook/manager-api" "7.4.2" + "@storybook/preview-api" "7.4.2" + "@storybook/types" "7.4.2" + tiny-invariant "^1.3.1" + +"@storybook/addon-outline@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-7.4.2.tgz#59f529254997bda6c8fededdec85ad1b61e2f984" + integrity sha512-C6Zfoa6k2ef55O16GKV29T0wIYaDyiBtyd/fuTzz7hkpusSqKGFNeQyfG6hRmPv5yAib7+Pzl86cH3wGz85oTw== + dependencies: + "@storybook/client-logger" "7.4.2" + "@storybook/components" "7.4.2" + "@storybook/core-events" "7.4.2" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.0.12" - "@storybook/preview-api" "7.0.12" - "@storybook/types" "7.0.12" + "@storybook/manager-api" "7.4.2" + "@storybook/preview-api" "7.4.2" + "@storybook/types" "7.4.2" ts-dedent "^2.0.0" -"@storybook/addon-toolbars@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-7.0.12.tgz#e67ab9b64fac6ed672b0b7531234f16818698270" - integrity sha512-7xRxk+999NVdEwzn2z1O9Tg5iuUSEXQ5jo+hiyK934VvuyqUsZnflKbSvwVEHb2W+DroaaXu8bdHWxGSH+6moQ== - dependencies: - "@storybook/client-logger" "7.0.12" - "@storybook/components" "7.0.12" - "@storybook/manager-api" "7.0.12" - "@storybook/preview-api" "7.0.12" - "@storybook/theming" "7.0.12" - -"@storybook/addon-viewport@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-7.0.12.tgz#c470223fb439fed039331089c9f9013e837c055e" - integrity sha512-pMgqtDQF8e9AErnRKbbSK9m1lcKn1dFSOkk0PgSBwIIjmha6q+GeT45EHQrQGtkLdtWT0iTktC8ivzIiGKmHkg== - dependencies: - "@storybook/client-logger" "7.0.12" - "@storybook/components" "7.0.12" - "@storybook/core-events" "7.0.12" +"@storybook/addon-toolbars@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-7.4.2.tgz#faceec604618f06b0c7c0a8fbb7a57b9dc4ccd57" + integrity sha512-zSU8GpyMKo3vGxR7LQdvw5jV/6QUOfUepS3HEYGB88vlIPK7UriV8k9HB0FObEyYZKYU7wuPYBYhXApK4ZBVUA== + dependencies: + "@storybook/client-logger" "7.4.2" + "@storybook/components" "7.4.2" + "@storybook/manager-api" "7.4.2" + "@storybook/preview-api" "7.4.2" + "@storybook/theming" "7.4.2" + +"@storybook/addon-viewport@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-7.4.2.tgz#ab7c4381fa3439021b7faa2f7ceefdf5c77a5af0" + integrity sha512-0mlqJmHezyZG9lLpj2LKN6HTZI015T3hYuFP4MwZRj579e246DvcBTw/h3n3bjLRGglapmFqkCw9PRVMhsQ/CA== + dependencies: + "@storybook/client-logger" "7.4.2" + "@storybook/components" "7.4.2" + "@storybook/core-events" "7.4.2" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.0.12" - "@storybook/preview-api" "7.0.12" - "@storybook/theming" "7.0.12" + "@storybook/manager-api" "7.4.2" + "@storybook/preview-api" "7.4.2" + "@storybook/theming" "7.4.2" memoizerific "^1.11.3" prop-types "^15.7.2" "@storybook/addons@^7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-7.0.12.tgz#2997fb59a12b3838a607bf9ae78790cc98bbec1d" - integrity sha512-yVADbWCFdb12cSpspeb+/6lfTNarPtZZLql49Bhu6E7PxECw/Q3kfHu0LXBLcSnU7f4QqQvQjp88ultt01ABBQ== - dependencies: - "@storybook/manager-api" "7.0.12" - "@storybook/preview-api" "7.0.12" - "@storybook/types" "7.0.12" - -"@storybook/blocks@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-7.0.12.tgz#4b92955c49f7beea58df1c0f8d3138dc54a01444" - integrity sha512-MbJKjuTJ7xVbkUVwkEwb6vTYGrkRk4+Xtx1UGo+512o91ubqFs8hXwCHP+x/49RCIIQs5zl93Ig8fTtm+MejWw== - dependencies: - "@storybook/channels" "7.0.12" - "@storybook/client-logger" "7.0.12" - "@storybook/components" "7.0.12" - "@storybook/core-events" "7.0.12" + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-7.4.2.tgz#d87da2b4a247a2945527d764cb729594cc5b7543" + integrity sha512-3snQVlTIKgzk6apNZc9sHr+0n4riiQkKGUkoHS8B1G90qj/9OyRnkDq55A7mJ9CxskqIjei5Q+hlko87g0jDsA== + dependencies: + "@storybook/manager-api" "7.4.2" + "@storybook/preview-api" "7.4.2" + "@storybook/types" "7.4.2" + +"@storybook/blocks@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-7.4.2.tgz#6a4307323eeb1bf49a13050942d6e8c00e928e41" + integrity sha512-ijuZBsYfQBuwMA8Lb1dT6t2PzqhkOtIdc+G5iQ/IgWLX5HT1br+Wq8o3TUWrqACM9VKIASnJk13FMAOeGggD/w== + dependencies: + "@storybook/channels" "7.4.2" + "@storybook/client-logger" "7.4.2" + "@storybook/components" "7.4.2" + "@storybook/core-events" "7.4.2" "@storybook/csf" "^0.1.0" - "@storybook/docs-tools" "7.0.12" + "@storybook/docs-tools" "7.4.2" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.0.12" - "@storybook/preview-api" "7.0.12" - "@storybook/theming" "7.0.12" - "@storybook/types" "7.0.12" + "@storybook/manager-api" "7.4.2" + "@storybook/preview-api" "7.4.2" + "@storybook/theming" "7.4.2" + "@storybook/types" "7.4.2" "@types/lodash" "^4.14.167" color-convert "^2.0.1" dequal "^2.0.2" @@ -3063,25 +3080,26 @@ memoizerific "^1.11.3" polished "^4.2.2" react-colorful "^5.1.2" - telejson "^7.0.3" + telejson "^7.2.0" + tocbot "^4.20.1" ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/builder-manager@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-7.0.12.tgz#9c7038fa1bb7ea91c72438571080c6e7a79bb077" - integrity sha512-bkZPSDH38/dUSsO087oQ8+goyaEDP/xD0/O61QcQ8EbaVeT6s6Qt7mMhqsLrtmEZHvPMQwKeIXhOJlRNNXB+SA== +"@storybook/builder-manager@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-7.4.2.tgz#de00614fbe14dc3d7929fdc96c495fff5d883182" + integrity sha512-MgdXr9QJ2sNk0fUshQ7hk4Ec9IkbPWR6alrmDByIOEU9bThx0j4OxU9uTLBy8r5uZsSL6nNtRyCvSP8YSKaQHQ== dependencies: "@fal-works/esbuild-plugin-global-externals" "^2.1.2" - "@storybook/core-common" "7.0.12" - "@storybook/manager" "7.0.12" - "@storybook/node-logger" "7.0.12" + "@storybook/core-common" "7.4.2" + "@storybook/manager" "7.4.2" + "@storybook/node-logger" "7.4.2" "@types/ejs" "^3.1.1" "@types/find-cache-dir" "^3.2.1" "@yarnpkg/esbuild-plugin-pnp" "^3.0.0-rc.10" browser-assert "^1.2.1" ejs "^3.1.8" - esbuild "^0.17.0" + esbuild "^0.18.0" esbuild-plugin-alias "^0.2.1" express "^4.17.3" find-cache-dir "^3.0.0" @@ -3089,76 +3107,63 @@ process "^0.11.10" util "^0.12.4" -"@storybook/builder-vite@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/builder-vite/-/builder-vite-7.0.12.tgz#3a477b3ce4c34c88550618dba8a29d425fa99257" - integrity sha512-6FJNXis+dYs/KrhfRQgz8HcRw/Oq4FaEghCwsjngQDy4PcpQuxkDbvGJKlBaSr92vUL36FWSPq8u5+VGCHjh5Q== +"@storybook/builder-vite@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/builder-vite/-/builder-vite-7.4.2.tgz#b8602bd653e20a5b66bad48ff1fce8400d53ee26" + integrity sha512-FAAq0lSCUoD+oP+aCIEuLdDr4DEgMn7RDuJrgRoFcDa3y4wWeMxsxTchCaz0Zfz7vwELwegL7KDQl2XT1uLBzQ== dependencies: - "@storybook/channel-postmessage" "7.0.12" - "@storybook/channel-websocket" "7.0.12" - "@storybook/client-logger" "7.0.12" - "@storybook/core-common" "7.0.12" - "@storybook/csf-plugin" "7.0.12" + "@storybook/channels" "7.4.2" + "@storybook/client-logger" "7.4.2" + "@storybook/core-common" "7.4.2" + "@storybook/csf-plugin" "7.4.2" "@storybook/mdx2-csf" "^1.0.0" - "@storybook/node-logger" "7.0.12" - "@storybook/preview" "7.0.12" - "@storybook/preview-api" "7.0.12" - "@storybook/types" "7.0.12" + "@storybook/node-logger" "7.4.2" + "@storybook/preview" "7.4.2" + "@storybook/preview-api" "7.4.2" + "@storybook/types" "7.4.2" + "@types/find-cache-dir" "^3.2.1" browser-assert "^1.2.1" es-module-lexer "^0.9.3" express "^4.17.3" + find-cache-dir "^3.0.0" fs-extra "^11.1.0" - glob "^8.1.0" - glob-promise "^6.0.2" - magic-string "^0.27.0" + magic-string "^0.30.0" remark-external-links "^8.0.0" remark-slug "^6.0.0" rollup "^2.25.0 || ^3.3.0" -"@storybook/channel-postmessage@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-7.0.12.tgz#9cade50f7fb01e1f113b75e2391d7abe31382e71" - integrity sha512-Tc7kQZ5yxlZ44Nmmzec92JaDJ6UZ3Ze4cBfiHik4XcnM1PtN8hr8VFoC6a2AIm1ybfIRenfT5w9TH5yriiPIhw== +"@storybook/channels@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.4.2.tgz#6a730506e65d07e10faf8f16142db7284acc5848" + integrity sha512-Q95KnV+fTGaAV3S875+d5LlGg+bdC3bUnki3engODDS4ViSRHJ1bnXnqxKmAaS3O/52geIyWWR766YvwHw3avw== dependencies: - "@storybook/channels" "7.0.12" - "@storybook/client-logger" "7.0.12" - "@storybook/core-events" "7.0.12" + "@storybook/client-logger" "7.4.2" + "@storybook/core-events" "7.4.2" "@storybook/global" "^5.0.0" qs "^6.10.0" - telejson "^7.0.3" - -"@storybook/channel-websocket@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/channel-websocket/-/channel-websocket-7.0.12.tgz#d0571e117c2baf9590e7c8c65299afec56351e3f" - integrity sha512-UV6b9gX2mQLtXlKaFKCHcy+6MaK2od6BYqSJfainnBjDsMIXyhcf7fJaj0XQkJrbNnRBwGhw+6s8JxL98xp7Ew== - dependencies: - "@storybook/channels" "7.0.12" - "@storybook/client-logger" "7.0.12" - "@storybook/global" "^5.0.0" - telejson "^7.0.3" + telejson "^7.2.0" + tiny-invariant "^1.3.1" -"@storybook/channels@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.0.12.tgz#54fc4a14cd27746c1f210e45d563f4d88cf2280c" - integrity sha512-KDdDmDs8kxAJU+vndTqTNazjLO+XoIPiTRlfP7mk7cgHiQXSjMYy3JSCQ7W0of0Q+9VSl/ve9CNbnGbcQF7rNQ== - -"@storybook/cli@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-7.0.12.tgz#b5072f5938e4e514e103846dc9f50dd1b0b44e41" - integrity sha512-OABCRIujxsszIJ0CCpKg8Uj4C1UlAwBpBQhv2aMX3lA/pur6Od524syv2ypWu6J2FyvK/ooeyMbjoP7330cIuA== +"@storybook/cli@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-7.4.2.tgz#a3134a58cc2b18c9a1326869f11377ce08c4f1ef" + integrity sha512-WleObtC7OU2lT+pI2vTdXZPFMKDGbg3bkUJ+PG8+yqGg53ea5ZkwKWg9qHpXuiMkYDztqhbA8kYrny1GqFuVdg== dependencies: - "@babel/core" "^7.20.2" - "@babel/preset-env" "^7.20.2" + "@babel/core" "^7.22.9" + "@babel/preset-env" "^7.22.9" + "@babel/types" "^7.22.5" "@ndelangen/get-tarball" "^3.0.7" - "@storybook/codemod" "7.0.12" - "@storybook/core-common" "7.0.12" - "@storybook/core-server" "7.0.12" - "@storybook/csf-tools" "7.0.12" - "@storybook/node-logger" "7.0.12" - "@storybook/telemetry" "7.0.12" - "@storybook/types" "7.0.12" + "@storybook/codemod" "7.4.2" + "@storybook/core-common" "7.4.2" + "@storybook/core-events" "7.4.2" + "@storybook/core-server" "7.4.2" + "@storybook/csf-tools" "7.4.2" + "@storybook/node-logger" "7.4.2" + "@storybook/telemetry" "7.4.2" + "@storybook/types" "7.4.2" "@types/semver" "^7.3.4" - boxen "^5.1.2" + "@yarnpkg/fslib" "2.10.3" + "@yarnpkg/libzip" "2.3.0" chalk "^4.1.0" commander "^6.2.1" cross-spawn "^7.0.3" @@ -3174,37 +3179,38 @@ globby "^11.0.2" jscodeshift "^0.14.0" leven "^3.1.0" + ora "^5.4.1" prettier "^2.8.0" prompts "^2.4.0" puppeteer-core "^2.1.1" read-pkg-up "^7.0.1" semver "^7.3.7" - shelljs "^0.8.5" - simple-update-notifier "^1.0.0" + simple-update-notifier "^2.0.0" strip-json-comments "^3.0.1" tempy "^1.0.1" ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/client-logger@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.0.12.tgz#259931a1de7503227f0c082e130ca98e5109ca92" - integrity sha512-MQMtIgGEgdixvxnBvZ2m8hhc0DGJWeCpHtxg7oqBLBEBmCYFueTqDZHl4Z6SoCrK0a2YS5X/BIXOcEtP1ulMKw== +"@storybook/client-logger@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.4.2.tgz#bbd31bec31837b506a9e3a345571a0975d5e4b4d" + integrity sha512-LC8tYrYSJwF4DHRdNYh6y8hSvccwUIv5/WOZKJDmKx7mcEm6HsVuUu16C9jsl7iy6IqJYxgVz1va3WS6852E+A== dependencies: "@storybook/global" "^5.0.0" -"@storybook/codemod@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-7.0.12.tgz#710dc8ea971d6663bcaf8d1b32a6bfb668508b2b" - integrity sha512-eGbGZSglvbnY1omzRyEC4XP0FbpuCFKgjXmdHn9faGQUU5EJHwcGYYrRW8JZL3nEVIvNDuRAKzM3p0BVo1xeSQ== +"@storybook/codemod@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-7.4.2.tgz#fd5da534271d28c9355f59961c9bf4ef91f0cf5e" + integrity sha512-wU+SLHG/PpLptI0aWEhPxwFPcX7uYe+Id21DKNPg/HvYaLG3N+/DPDef+lm3Vaov9w4OD74iuQ3knT67SSkvmw== dependencies: - "@babel/core" "~7.21.0" - "@babel/preset-env" "~7.21.0" - "@babel/types" "~7.21.2" + "@babel/core" "^7.22.9" + "@babel/preset-env" "^7.22.9" + "@babel/types" "^7.22.5" "@storybook/csf" "^0.1.0" - "@storybook/csf-tools" "7.0.12" - "@storybook/node-logger" "7.0.12" - "@storybook/types" "7.0.12" + "@storybook/csf-tools" "7.4.2" + "@storybook/node-logger" "7.4.2" + "@storybook/types" "7.4.2" + "@types/cross-spawn" "^6.0.2" cross-spawn "^7.0.3" globby "^11.0.2" jscodeshift "^0.14.0" @@ -3212,84 +3218,91 @@ prettier "^2.8.0" recast "^0.23.1" -"@storybook/components@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.0.12.tgz#fe363ffd09e8643ff3e640e9208bbf02853c7c4c" - integrity sha512-6TxByzYS4+LxwZRioGpP6Zh9If5ctjQs5OnR2UmQvP6HDjmMWYTntoHKIbDwAL9C6MrnQYpPOGCPkqrtODQ4/w== +"@storybook/components@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.4.2.tgz#f8c3019a2255a48de61712e8de9f2c60cf4b3f5e" + integrity sha512-ecbDzSUd74vf6IwHsbQr+9mVRxKWLmwd9zJ8RHMcR8UejTRAAR/eVvYoCG331TQ8TrhTmHTy5xCVv47pm6ORkQ== dependencies: - "@storybook/client-logger" "7.0.12" + "@radix-ui/react-select" "^1.2.2" + "@radix-ui/react-toolbar" "^1.0.4" + "@storybook/client-logger" "7.4.2" "@storybook/csf" "^0.1.0" "@storybook/global" "^5.0.0" - "@storybook/theming" "7.0.12" - "@storybook/types" "7.0.12" + "@storybook/theming" "7.4.2" + "@storybook/types" "7.4.2" memoizerific "^1.11.3" use-resize-observer "^9.1.0" util-deprecate "^1.0.2" -"@storybook/core-client@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-7.0.12.tgz#3c381cc5c42bf990cea27c90be8d2e594fb9a5be" - integrity sha512-m0r+Vl3LfU8cJl8UqIwzh0sEN9I//nMaT8UIIm481AINhQTNihQcnYi9jRw7USjfz2fv5CYkg8cEr4KhI8QlRA== +"@storybook/core-client@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-7.4.2.tgz#30ae78e856cf1af7898be43f01773c58b52553c8" + integrity sha512-2K4g8ZaqBUv6oC+1/Bd6XSQ/F7hNyy8OLqnnxjoYsjUQc8DaN5wUckEEgT9WSvLQg88B/FYFtNAX5m17aySWrg== dependencies: - "@storybook/client-logger" "7.0.12" - "@storybook/preview-api" "7.0.12" + "@storybook/client-logger" "7.4.2" + "@storybook/preview-api" "7.4.2" -"@storybook/core-common@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.0.12.tgz#0a1fea8cc5ceb113243621513d4524ea8ca75cc7" - integrity sha512-PFVjYXHUxDQO1oqfqwQe7S3XoLNO0aZYEr9Zl0LiexlxxnU1v+TQjEfNd/H3T0xxpXlsgzhtEcagdzJeAKyh2g== +"@storybook/core-common@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.4.2.tgz#6f2873cb49e893967764839cb240c18df737372b" + integrity sha512-Qj9S97TYO+jSNdC2+LrMFtZRvTnELeFnRtn/MDWhkM6mpZgRglxlZuXi5enJjqTh0dISAUxPpTtXNAJDfX99JA== dependencies: - "@storybook/node-logger" "7.0.12" - "@storybook/types" "7.0.12" + "@storybook/core-events" "7.4.2" + "@storybook/node-logger" "7.4.2" + "@storybook/types" "7.4.2" + "@types/find-cache-dir" "^3.2.1" "@types/node" "^16.0.0" + "@types/node-fetch" "^2.6.4" "@types/pretty-hrtime" "^1.0.0" chalk "^4.1.0" - esbuild "^0.17.0" + esbuild "^0.18.0" esbuild-register "^3.4.0" - file-system-cache "^2.0.0" + file-system-cache "2.3.0" + find-cache-dir "^3.0.0" find-up "^5.0.0" fs-extra "^11.1.0" - glob "^8.1.0" - glob-promise "^6.0.2" + glob "^10.0.0" handlebars "^4.7.7" lazy-universal-dotenv "^4.0.0" + node-fetch "^2.0.0" picomatch "^2.3.0" pkg-dir "^5.0.0" pretty-hrtime "^1.0.3" resolve-from "^5.0.0" ts-dedent "^2.0.0" -"@storybook/core-events@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.0.12.tgz#928409c27cca2855189834726c268b7c59996994" - integrity sha512-VTmb/zjbz3o1bg+bATzLigVXMVDC/S1FP8CqIrz4mkiys52139FGzMandL2Y2AecPZPGss7ZRdfma28HKVYTRg== +"@storybook/core-events@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.4.2.tgz#8b362bf86ade69a164094d9647992c3f8598034e" + integrity sha512-WCEBw+Ew8DrccnB0hpP9TXadreoOlMnWCyuXU2XrvmK/vde009leWQIsLs1rY+L17zDVuogBms62AxrDDJmMpw== + dependencies: + ts-dedent "^2.0.0" -"@storybook/core-server@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.0.12.tgz#f666057f4b003b15cff4037cf43ab8c91c001d43" - integrity sha512-X35Kmg7y35Ph4J+gCDJrnVgBwlz4/DzOQofUS6rAbi4KvrPWDJXeM2OzOgx6B0abKl4CeMmjuc0tjbg4vbUFuA== +"@storybook/core-server@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.4.2.tgz#ce2568d9793d752a3319cc8a907ea07264ef9e2d" + integrity sha512-4aaFQTjb8jsbzJeCs+VTo3gdyK3r3VhQN2sxn6k/lcKjQFeO84+iqGgGmb+oWUVz2TJL+JrNh7SUXkVsMZBXVQ== dependencies: - "@aw-web-design/x-default-browser" "1.4.88" + "@aw-web-design/x-default-browser" "1.4.126" "@discoveryjs/json-ext" "^0.5.3" - "@storybook/builder-manager" "7.0.12" - "@storybook/core-common" "7.0.12" - "@storybook/core-events" "7.0.12" + "@storybook/builder-manager" "7.4.2" + "@storybook/channels" "7.4.2" + "@storybook/core-common" "7.4.2" + "@storybook/core-events" "7.4.2" "@storybook/csf" "^0.1.0" - "@storybook/csf-tools" "7.0.12" + "@storybook/csf-tools" "7.4.2" "@storybook/docs-mdx" "^0.1.0" "@storybook/global" "^5.0.0" - "@storybook/manager" "7.0.12" - "@storybook/node-logger" "7.0.12" - "@storybook/preview-api" "7.0.12" - "@storybook/telemetry" "7.0.12" - "@storybook/types" "7.0.12" + "@storybook/manager" "7.4.2" + "@storybook/node-logger" "7.4.2" + "@storybook/preview-api" "7.4.2" + "@storybook/telemetry" "7.4.2" + "@storybook/types" "7.4.2" "@types/detect-port" "^1.3.0" "@types/node" "^16.0.0" - "@types/node-fetch" "^2.5.7" "@types/pretty-hrtime" "^1.0.0" "@types/semver" "^7.3.4" - better-opn "^2.1.1" - boxen "^5.1.2" + better-opn "^3.0.2" chalk "^4.1.0" cli-table3 "^0.6.1" compression "^1.7.4" @@ -3299,38 +3312,39 @@ globby "^11.0.2" ip "^2.0.0" lodash "^4.17.21" - node-fetch "^2.6.7" open "^8.4.0" pretty-hrtime "^1.0.3" prompts "^2.4.0" read-pkg-up "^7.0.1" semver "^7.3.7" serve-favicon "^2.5.0" - telejson "^7.0.3" + telejson "^7.2.0" + tiny-invariant "^1.3.1" ts-dedent "^2.0.0" + util "^0.12.4" util-deprecate "^1.0.2" watchpack "^2.2.0" ws "^8.2.3" -"@storybook/csf-plugin@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-7.0.12.tgz#7f7804dd8e2358e616e898c213c89ace0fc38009" - integrity sha512-iiH0ynLQV5BYFc0o7RlSJS2S3GT/ffyfbV4rnCnPKdqyo4REEVvmhOuLhwzurtsXsjh+xF6VUYUDN+8/5mbkYw== +"@storybook/csf-plugin@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-7.4.2.tgz#13321a8aa29eb39d56990e07c5a873a68673cf10" + integrity sha512-b0yQ8oXEH0s3SGgjhOVrbjkc3C8IYGyTSnDtPwx/Dgmru/rC6LT7ZOdBegmGqBN1+6Ho0+AxFrmAmuuYK8p2rA== dependencies: - "@storybook/csf-tools" "7.0.12" - unplugin "^0.10.2" + "@storybook/csf-tools" "7.4.2" + unplugin "^1.3.1" -"@storybook/csf-tools@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.0.12.tgz#ce90ba94a5fc1cd75a7d6a2d77572832f2910d31" - integrity sha512-EcDzKeENzs4awyjx0VxlONDLibiEtIPDP1XdOCcZGtv3nXXBFtS2WDsYhJHkwyvE37jWTyw2e4xKQmBi0Hjvbw== +"@storybook/csf-tools@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.4.2.tgz#55e4c275d8ce7ef2f67d473d5a74f2a6f7964ad9" + integrity sha512-5AvF2YRcYHIqQqskb3R8JvsmSWnNwkP0CGmP8Zq7zIfK/C+npKb/onv5YQlbSgh+2UrVxVdIDLc9AepBeXC3uQ== dependencies: - "@babel/generator" "~7.21.1" - "@babel/parser" "~7.21.2" - "@babel/traverse" "~7.21.2" - "@babel/types" "~7.21.2" + "@babel/generator" "^7.22.9" + "@babel/parser" "^7.22.7" + "@babel/traverse" "^7.22.8" + "@babel/types" "^7.22.5" "@storybook/csf" "^0.1.0" - "@storybook/types" "7.0.12" + "@storybook/types" "7.4.2" fs-extra "^11.1.0" recast "^0.23.1" ts-dedent "^2.0.0" @@ -3343,9 +3357,9 @@ lodash "^4.17.15" "@storybook/csf@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.0.tgz#62315bf9704f3aa4e0d4d909b9033833774ddfbe" - integrity sha512-uk+jMXCZ8t38jSTHk2o5btI+aV2Ksbvl6DoOv3r6VaCM1KZqeuMwtwywIQdflkA8/6q/dKT8z8L+g8hC4GC3VQ== + version "0.1.1" + resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.1.tgz#abccc8c3e49aed0a6a7e87beb0d1c262b1921c06" + integrity sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg== dependencies: type-fest "^2.19.0" @@ -3354,15 +3368,14 @@ resolved "https://registry.yarnpkg.com/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz#33ba0e39d1461caf048b57db354b2cc410705316" integrity sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg== -"@storybook/docs-tools@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-7.0.12.tgz#70121cde281d87adf89487b8414147ed291ddeae" - integrity sha512-+HykeQLgjyDyF9G7HqY0FHXlX7X5YpQcmNjftJzBrc/GO1EeO0M78d54avcOPyyTfuWOh7oZtSJ0MzjA1qrqaQ== +"@storybook/docs-tools@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-7.4.2.tgz#403885e64cff1876397d0651e82a16cecb19bce4" + integrity sha512-MXW+xaxah+C+aqJ5178oOILqX7dCSwJMKJefIJHHwr9w6UuGRaiPG1NDYK/0N0IEv9H8pNnXPnw3R8S6x7COhQ== dependencies: - "@babel/core" "^7.12.10" - "@storybook/core-common" "7.0.12" - "@storybook/preview-api" "7.0.12" - "@storybook/types" "7.0.12" + "@storybook/core-common" "7.4.2" + "@storybook/preview-api" "7.4.2" + "@storybook/types" "7.4.2" "@types/doctrine" "^0.0.3" doctrine "^3.0.0" lodash "^4.17.21" @@ -3372,46 +3385,41 @@ resolved "https://registry.yarnpkg.com/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed" integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ== -"@storybook/manager-api@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.0.12.tgz#b0278d5500641bdb31fc7125609466bfd8a4f258" - integrity sha512-3QXARtxpc6Xxqf5pviUw2UuhK53+IsINSljeWhAqdQ1Gzbywl67TpibTd7xVN6NKxhUH5Bzo9bIZTAzMZGqaKw== +"@storybook/manager-api@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.4.2.tgz#821d1a07e9b3058d7470eab091392d1bdbe06c94" + integrity sha512-gKPG0At9AGhF32iwjiba+ILqswc3ZFj9ZIu5HjGEmaoiOfqI6TayuHoptup0QxkI/Hx8f9mNkHCwR9COrmb69w== dependencies: - "@storybook/channels" "7.0.12" - "@storybook/client-logger" "7.0.12" - "@storybook/core-events" "7.0.12" + "@storybook/channels" "7.4.2" + "@storybook/client-logger" "7.4.2" + "@storybook/core-events" "7.4.2" "@storybook/csf" "^0.1.0" "@storybook/global" "^5.0.0" - "@storybook/router" "7.0.12" - "@storybook/theming" "7.0.12" - "@storybook/types" "7.0.12" + "@storybook/router" "7.4.2" + "@storybook/theming" "7.4.2" + "@storybook/types" "7.4.2" dequal "^2.0.2" lodash "^4.17.21" memoizerific "^1.11.3" semver "^7.3.7" store2 "^2.14.2" - telejson "^7.0.3" + telejson "^7.2.0" ts-dedent "^2.0.0" -"@storybook/manager@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.0.12.tgz#917d60c5822c002d37ce169a22b4492055575284" - integrity sha512-19BsDcwJOYXn6zEarxvNGDdYLUqZyhX92x6GPHSC4cf8BoxHuhmtnz5vOTZHusCxkKIu/C9W0H6wH2Ma47kDCg== +"@storybook/manager@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.4.2.tgz#423312640930b39c3263f2db9a0ffd564045cc53" + integrity sha512-MtjmbAaf4hUObAa2ETQkm0+SzESoPeNm+TyzwZU5qq3Ouj4IOj2Ugd8EJPO3isdHxYt26A255tW/G9mb9v20fQ== "@storybook/mdx2-csf@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz#97f6df04d0bf616991cc1005a073ac004a7281e5" integrity sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw== -"@storybook/node-logger@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.0.12.tgz#f7e8f3ff6ac0f6500089430cab1236771ebeffe9" - integrity sha512-VL+NXzc9NuOP6/9alg4Sofz9kh8tmlo3p+UtCIYCHH088yCsB3XsNhkG9lF1C5EZVWcuHxc2u6MMF3ezOjvKfQ== - dependencies: - "@types/npmlog" "^4.1.2" - chalk "^4.1.0" - npmlog "^5.0.1" - pretty-hrtime "^1.0.3" +"@storybook/node-logger@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.4.2.tgz#e8058aab8266a00d253f724fef78e793d7d790ff" + integrity sha512-iSBjhnMpWY9Hs5KGnf/xfHjGtGl740LUg4Gce874DuL773Mdc4hdppSKr4X/Pp1/AD67mNuifSXYx3V7d6XzTQ== "@storybook/node-logger@^5.3.17": version "5.3.22" @@ -3425,10 +3433,10 @@ pretty-hrtime "^1.0.3" regenerator-runtime "^0.13.3" -"@storybook/postinstall@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.0.12.tgz#89062ee571e13e681be230f176d938959c47c8a1" - integrity sha512-RKNvBLgABBTQwvGyF2jX4vP7OMLB3KvEEOQDoeOKjqyWfekDn5smI+eT714mtmKIH0YMcwmvzLgEdZkjmM/XhA== +"@storybook/postinstall@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.4.2.tgz#e3383ac3b19669a4b506949bc21d55d88801f3fd" + integrity sha512-L9r14KqS87HPyXw0S3pK2X29ckel/4sdBSmy9nVF8n/ADafKE0pSLKB935VL0+88eMx06aT32SMcQoqjubGKWw== "@storybook/preset-typescript@^3.0.0": version "3.0.0" @@ -3441,18 +3449,17 @@ babel-preset-typescript-vue "^1.0.3" fork-ts-checker-webpack-plugin "^4.1.0" -"@storybook/preview-api@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.0.12.tgz#bbbf75c8f94f5aac2fdbe1caf7d1e5a7b8dd09a5" - integrity sha512-YI/AfHszIOYt967fsRlc7j6I0zZB+RSsBwD/nMA8y9vszdpQ0MgRhxHgQxFf6cgqbuQcdCsnTIpT0iQ4GHjDXg== +"@storybook/preview-api@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.4.2.tgz#b481d3cbeac6ee1813b97e8fbdd76e0393b78772" + integrity sha512-ihTHRYzI/sI6bD215aYppiWF+1u38TrlsNjFYJ/Grftbti5d40g5wCwvAXK41SxJNYpk6CRtfvNKOwbEAC33gg== dependencies: - "@storybook/channel-postmessage" "7.0.12" - "@storybook/channels" "7.0.12" - "@storybook/client-logger" "7.0.12" - "@storybook/core-events" "7.0.12" + "@storybook/channels" "7.4.2" + "@storybook/client-logger" "7.4.2" + "@storybook/core-events" "7.4.2" "@storybook/csf" "^0.1.0" "@storybook/global" "^5.0.0" - "@storybook/types" "7.0.12" + "@storybook/types" "7.4.2" "@types/qs" "^6.9.5" dequal "^2.0.2" lodash "^4.17.21" @@ -3462,131 +3469,140 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/preview@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-7.0.12.tgz#87005ce2785fbe2ae1bd890c073e68d1fb38ed72" - integrity sha512-za8El/nnkyAo/uqyqAg7PMuP6DSdPoEnDRyIk4LzY7sAGly6i4Uge377cdo1nUBQLS5S4kKIc4xf8TUegb3G1Q== +"@storybook/preview@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-7.4.2.tgz#8539e0379f195d12774832bd9c87166b0382fc1e" + integrity sha512-T7rAV6qQ7tBeSvgi0RuA5EU8tm1OMhU8PcCqosWGaLhMCR0VMzw1/WGKuR11g1XmzvaAm2xGgMp82nqi4G0i7A== -"@storybook/react-dom-shim@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.0.12.tgz#bd6223a1462c6d8c48b1e91e2dab8dec04c2ea80" - integrity sha512-4z9J54TD7uphxPqSuLEzeKTV4oF8Fmv8qFfnT0XZJ2mpYTC2NTbkYoYZQ8N0eYzvNOk6xgfpDqBdmIANf4NaYw== +"@storybook/react-dom-shim@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.4.2.tgz#861e6afd540634f5dda8639251f207c8d8e722e0" + integrity sha512-9Ae2As3Hf//mdFEAv58VgDbi9R5JRGne8Ai6Vspc5FZMCJIjr5kullckBi3n9uKRg2L8V7wjDRK8Cql2tEr0Yg== "@storybook/react-vite@^7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/react-vite/-/react-vite-7.0.12.tgz#5b06c3c4dd218a003c1a583a61dd83c970824a97" - integrity sha512-SIszevqIKOW+5TwzNposDI+3giSZNVZ7HSu7u2JEpu0Iw/CWyYI06rUgH2ft8Xluhb8vEorZKiZjsdiQDVo64w== + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/react-vite/-/react-vite-7.4.2.tgz#12493b858cd8fe12b45c115b2d82524f5f2393f8" + integrity sha512-DIfInR1VOinI+qjrMLcVdelFTfDppZXhjbrNpXt209ZY6nPGHjvr+4FpgKh+y/ClUBmOqkMsR7/kj4rMzGL5yw== dependencies: "@joshwooding/vite-plugin-react-docgen-typescript" "0.2.1" - "@rollup/pluginutils" "^4.2.0" - "@storybook/builder-vite" "7.0.12" - "@storybook/react" "7.0.12" + "@rollup/pluginutils" "^5.0.2" + "@storybook/builder-vite" "7.4.2" + "@storybook/react" "7.4.2" "@vitejs/plugin-react" "^3.0.1" ast-types "^0.14.2" - magic-string "^0.27.0" + magic-string "^0.30.0" react-docgen "6.0.0-alpha.3" -"@storybook/react@7.0.12", "@storybook/react@^7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-7.0.12.tgz#acd6d7c52dff7e73b95f4335ff034b19af74111e" - integrity sha512-dKHKc02LSgn3St7U/xj/Rr2DFLbS4dWQka+pS/AOvPPvMAR2gGHVhkmoFuFMf176hUTuE5MCoWBoNJIRMz7ZiQ== +"@storybook/react@7.4.2", "@storybook/react@^7.0.12": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-7.4.2.tgz#a5b5f0f2e63ca60936e874eca243082d0eb2544c" + integrity sha512-8bAnSOpDTiE1c9pSkIKRipvqbuZP6Hu1CYaG1RXWF8AIBsjiV9+SsR919Flj1UiCmcw4BLO/ZIvIDGny4ktHhA== dependencies: - "@storybook/client-logger" "7.0.12" - "@storybook/core-client" "7.0.12" - "@storybook/docs-tools" "7.0.12" + "@storybook/client-logger" "7.4.2" + "@storybook/core-client" "7.4.2" + "@storybook/docs-tools" "7.4.2" "@storybook/global" "^5.0.0" - "@storybook/preview-api" "7.0.12" - "@storybook/react-dom-shim" "7.0.12" - "@storybook/types" "7.0.12" + "@storybook/preview-api" "7.4.2" + "@storybook/react-dom-shim" "7.4.2" + "@storybook/types" "7.4.2" "@types/escodegen" "^0.0.6" "@types/estree" "^0.0.51" "@types/node" "^16.0.0" acorn "^7.4.1" acorn-jsx "^5.3.1" acorn-walk "^7.2.0" - escodegen "^2.0.0" + escodegen "^2.1.0" html-tags "^3.1.0" lodash "^4.17.21" prop-types "^15.7.2" react-element-to-jsx-string "^15.0.0" ts-dedent "^2.0.0" - type-fest "^2.19.0" + type-fest "~2.19" util-deprecate "^1.0.2" -"@storybook/router@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.0.12.tgz#a3be69987483c1e7a91b488cc94bc89692b702d4" - integrity sha512-dOtBiCBGeDem86BCWR7AlTVQjoBk0yw/XZLXS9qcpUfpe+UDjd0Rh21ZdEEMHG1Wfu4d2AhhG5l/JSJ1IE83jQ== +"@storybook/router@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.4.2.tgz#04644705bf0703a5c65163dff0f11d42c8727b93" + integrity sha512-TFpMrmliklWNSrF84kGnh3WcLZciqIvaAjhxahqD+kx070KLqjxrsiny7UC6PUUYZdjLkbR9m8n3SFdXAVKgLw== dependencies: - "@storybook/client-logger" "7.0.12" + "@storybook/client-logger" "7.4.2" memoizerific "^1.11.3" qs "^6.10.0" -"@storybook/telemetry@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.0.12.tgz#2cc55144334c2cbb269e71ef2567e097fc43a11e" - integrity sha512-oxqe15bn5W+1pLpLjXTfj3H+YPZq3jExjdJwTCUHtFrrsNs0k6dyqAUk8qTOUqOTclANHb6vlNBFJDvZ6qbfEQ== +"@storybook/telemetry@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.4.2.tgz#cc03efd39661c0d4c8eacfe02e95e90b1cba52a6" + integrity sha512-ZAh1Bjk9JVpL5j0Aj3PHr3XEDZcOrFeugVyRuuul2gAyu6SbpPhl8Dd2Wr9YJS0ZDWs3u0CgKRCeFPPAi3QosA== dependencies: - "@storybook/client-logger" "7.0.12" - "@storybook/core-common" "7.0.12" + "@storybook/client-logger" "7.4.2" + "@storybook/core-common" "7.4.2" + "@storybook/csf-tools" "7.4.2" chalk "^4.1.0" detect-package-manager "^2.0.1" fetch-retry "^5.0.2" fs-extra "^11.1.0" - isomorphic-unfetch "^3.1.0" - nanoid "^3.3.1" read-pkg-up "^7.0.1" -"@storybook/theming@7.0.12", "@storybook/theming@^7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.0.12.tgz#5583639b391e7bbb710a74bc59c94b8bbc455d88" - integrity sha512-frBkvH7LF8j23ODaywLK4m4LLscw49oKblkZ+30QZkBAzRf2o3a/QSZW2V1zfBo7ygcXiUJ5bIjh7Y17mMJqbQ== +"@storybook/theming@7.4.2", "@storybook/theming@^7.0.12": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.4.2.tgz#57396b3c520187103ce99168b8473e2138311194" + integrity sha512-wVmxZHVCqDoZgUOXTS4HRV4UClLtCydRNOEuUZ7X08QIPSA1FVL3gEpTQJfgCsyBX/cwSSofAMUbzAGEVNo+9g== dependencies: "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@storybook/client-logger" "7.0.12" + "@storybook/client-logger" "7.4.2" "@storybook/global" "^5.0.0" memoizerific "^1.11.3" -"@storybook/types@7.0.12": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.0.12.tgz#e3942135a3ff7a8932c2be449c078727d579d24d" - integrity sha512-nlvU4MyO2grwPCRQ8alA3AnY1bQxGJ6A4QgJu+1MhtjVenifFlxOQX4H1OiA+YXfjlV096oO5LrxvetJPFAKKQ== +"@storybook/types@7.4.2": + version "7.4.2" + resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.4.2.tgz#c7ae7521e6f7a3f811797464724d5e4714597ca9" + integrity sha512-OOJ2TeS3Zzc6spHbdH+JXml0q4IHuYt9axmXAv1/pkhqHjA5072pyUacmlYNQeihpQOOsKLiCQUQlvtMy9fTnQ== dependencies: - "@storybook/channels" "7.0.12" + "@storybook/channels" "7.4.2" "@types/babel__core" "^7.0.0" "@types/express" "^4.7.0" - file-system-cache "^2.0.0" + file-system-cache "2.3.0" "@tootallnate/once@2": version "2.0.0" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@tootallnate/quickjs-emscripten@^0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c" + integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== + "@tsconfig/node10@^1.0.7": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" - integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" - integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" - integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" - integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@tufjs/canonical-json@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== +"@tufjs/canonical-json@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" + integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== + "@tufjs/models@1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.4.tgz#5a689630f6b9dbda338d4b208019336562f176ef" @@ -3595,21 +3611,18 @@ "@tufjs/canonical-json" "1.0.0" minimatch "^9.0.0" -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.6": - version "7.1.19" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" - integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== +"@tufjs/models@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-2.0.0.tgz#c7ab241cf11dd29deb213d6817dabb8c99ce0863" + integrity sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg== dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" + "@tufjs/canonical-json" "2.0.0" + minimatch "^9.0.3" -"@types/babel__core@^7.1.14": - version "7.20.1" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b" - integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.6": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" + integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -3618,46 +3631,53 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + version "7.6.5" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" + integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + version "7.4.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" + integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + version "7.20.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" + integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== dependencies: - "@babel/types" "^7.3.0" + "@babel/types" "^7.20.7" "@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + version "1.19.3" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.3.tgz#fb558014374f7d9e56c8f34bab2042a3a07d25cd" + integrity sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ== dependencies: "@types/connect" "*" "@types/node" "*" "@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + version "3.4.36" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.36.tgz#e511558c15a39cb29bd5357eebb57bd1459cd1ab" + integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== + dependencies: + "@types/node" "*" + +"@types/cross-spawn@^6.0.2": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cross-spawn/-/cross-spawn-6.0.3.tgz#c743cb2608f55860ee9776d8c99135d6032c763c" + integrity sha512-BDAkU7WHHRHnvBf5z89lcvACsvkz/n7Tv+HyD/uW76O29HoH1Tk/W6iQrepaZVbisvlEek4ygwT8IW7ow9XLAA== dependencies: "@types/node" "*" "@types/detect-port@^1.3.0": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.2.tgz#8c06a975e472803b931ee73740aeebd0a2eb27ae" - integrity sha512-xxgAGA2SAU4111QefXPSp5eGbDm/hW6zhvYl9IeEPZEry9F4d66QAHm5qpUXjb6IsevZV/7emAEx5MhP6O192g== + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/detect-port/-/detect-port-1.3.3.tgz#124c5d4c283f48a21f80826bcf39433b3e64aa81" + integrity sha512-bV/jQlAJ/nPY3XqSatkGpu+nGzou+uSwrH1cROhn+jBFg47yaNH+blW4C7p9KhopC7QxCv/6M86s37k8dMk0Yg== "@types/doctrine@^0.0.3": version "0.0.3" @@ -3674,25 +3694,35 @@ resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.1.2.tgz#75d277b030bc11b3be38c807e10071f45ebc78d9" integrity sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g== +"@types/emscripten@^1.39.6": + version "1.39.7" + resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.7.tgz#3025183ea56e12bf4d096aadc48ce74ca051233d" + integrity sha512-tLqYV94vuqDrXh515F/FOGtBcRMTPGvVV1LzLbtYDcQmmhtpf/gLYf+hikBbQk8MzOHNz37wpFfJbYAuSn8HqA== + "@types/escodegen@^0.0.6": version "0.0.6" resolved "https://registry.yarnpkg.com/@types/escodegen/-/escodegen-0.0.6.tgz#5230a9ce796e042cda6f086dbf19f22ea330659c" integrity sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig== -"@types/estree@*", "@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + "@types/express-serve-static-core@^4.17.33": - version "4.17.35" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" - integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== + version "4.17.36" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz#baa9022119bdc05a4adfe740ffc97b5f9360e545" + integrity sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q== dependencies: "@types/node" "*" "@types/qs" "*" @@ -3722,14 +3752,6 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/glob@^8.0.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc" - integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== - dependencies: - "@types/minimatch" "^5.1.2" - "@types/node" "*" - "@types/graceful-fs@^4.1.3": version "4.1.6" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" @@ -3737,6 +3759,11 @@ dependencies: "@types/node" "*" +"@types/http-errors@*": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.2.tgz#a86e00bbde8950364f8e7846687259ffcd96e8c2" + integrity sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg== + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" @@ -3765,36 +3792,31 @@ pretty-format "^26.0.0" "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + version "7.0.13" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" + integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/lodash-es@^4.17.3": - version "4.17.6" - resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.6.tgz#c2ed4c8320ffa6f11b43eb89e9eaeec65966a0a0" - integrity sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg== + version "4.17.9" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.9.tgz#49dbe5112e23c54f2b387d860b7d03028ce170c2" + integrity sha512-ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ== dependencies: "@types/lodash" "*" -"@types/lodash@*": - version "4.14.181" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.181.tgz#d1d3740c379fda17ab175165ba04e2d03389385d" - integrity sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag== - -"@types/lodash@^4.14.167": - version "4.14.191" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" - integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== +"@types/lodash@*", "@types/lodash@^4.14.167": + version "4.14.198" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.198.tgz#4d27465257011aedc741a809f1269941fa2c5d4c" + integrity sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg== "@types/mdx@^2.0.0": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.5.tgz#9a85a8f70c7c4d9e695a21d5ae5c93645eda64b1" - integrity sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg== + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.7.tgz#c7482e995673e01b83f8e96df83b3843ea76401f" + integrity sha512-BG4tyr+4amr3WsSEmHn/fXPqaCba/AYZ7dsaQTiavihQunHSIxk+uAtqsjvicNpyHN6cm+B9RVrUOtW9VzIKHw== "@types/mime-types@^2.1.0": version "2.1.1" @@ -3811,7 +3833,7 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== -"@types/minimatch@*", "@types/minimatch@^5.1.2": +"@types/minimatch@*": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== @@ -3826,23 +3848,23 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== -"@types/node-fetch@^2.5.7": - version "2.6.4" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660" - integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg== +"@types/node-fetch@^2.6.4": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.5.tgz#972756a9a0fe354b2886bf3defe667ddb4f0d30a" + integrity sha512-OZsUlr2nxvkqUFLSaY2ZbA+P1q22q+KrlxWOn/38RX+u5kTkYL2mTujEpzUhGkS+K/QCYp9oagfXG39XOzyySg== dependencies: "@types/node" "*" - form-data "^3.0.0" + form-data "^4.0.0" "@types/node@*": - version "17.0.23" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.23.tgz#3b41a6e643589ac6442bdbd7a4a3ded62f33f7da" - integrity sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw== + version "20.6.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.6.2.tgz#a065925409f59657022e9063275cd0b9bd7e1b12" + integrity sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw== "@types/node@^16.0.0": - version "16.18.30" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.30.tgz#4a2c426370712a10c630a55ba086c55c17ca54e0" - integrity sha512-Kmp/wBZk19Dn7uRiol8kF8agnf8m0+TU9qIwyfPmXglVxMlmiIz0VQSMw5oFgwhmD2aKTlfBIO5FtsVj3y7hKQ== + version "16.18.52" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.52.tgz#70c56b55d0d7e15fafa875127e95a92605c59c9b" + integrity sha512-sm2aph6cRSsTMFYFgI+RpPLunXO9ClJkpizUVdT7KmGeyfQ14xnjTMT/f3MHcfKqevXqGT6BgVFzW8wcEoDUtA== "@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.1": version "2.4.1" @@ -3855,34 +3877,29 @@ integrity sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ== "@types/offscreencanvas@^2019.6.4": - version "2019.7.0" - resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz#e4a932069db47bb3eabeb0b305502d01586fa90d" - integrity sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg== + version "2019.7.1" + resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.1.tgz#1ac01f5dfed9e093663cc25c62310714fe282016" + integrity sha512-+HSrJgjBW77ALieQdMJvXhRZUIRN1597L+BKvsyeiIlHHERnqjcuOLyodK3auJ3Y3zRezNKtKAhuQWYJfEgFHQ== "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - "@types/pretty-hrtime@^1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz#72a26101dc567b0d68fd956cf42314556e42d601" integrity sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ== "@types/prop-types@*": - version "15.7.4" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" - integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== "@types/qs@*", "@types/qs@^6.9.5": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + version "6.9.8" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" + integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== "@types/range-parser@*": version "1.2.4" @@ -3890,16 +3907,23 @@ integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/react-dom@^17.0.5": - version "17.0.14" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.14.tgz#c8f917156b652ddf807711f5becbd2ab018dea9f" - integrity sha512-H03xwEP1oXmSfl3iobtmQ/2dHF5aBHr8aUMwyGZya6OW45G+xtdzmq6HkncefiBt5JU8DVyaWl/nWZbjZCnzAQ== + version "17.0.20" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.20.tgz#e0c8901469d732b36d8473b40b679ad899da1b53" + integrity sha512-4pzIjSxDueZZ90F52mU3aPoogkHIoSIDG+oQ+wQK7Cy2B9S+MvOqY0uEA/qawKz381qrEDkvpwyt8Bm31I8sbA== + dependencies: + "@types/react" "^17" + +"@types/react-reconciler@^0.26.7": + version "0.26.7" + resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.26.7.tgz#0c4643f30821ae057e401b0d9037e03e8e9b2a36" + integrity sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ== dependencies: "@types/react" "*" -"@types/react-reconciler@^0.26.4": - version "0.26.4" - resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.26.4.tgz#651404be172cf29b65cddf246d8d964b4e448399" - integrity sha512-bdx4aIBkQRDAnzc23JBFeZmVpmfLJHfHikmQukEt9qs4bQtq9f+PDbNwhR9u74FkIUyIDz1I1qJ8OF6RwadKpw== +"@types/react-reconciler@^0.28.0": + version "0.28.4" + resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.28.4.tgz#c2c06f6d42f055972290eecebb87b10d0ac66e0e" + integrity sha512-Xd55E2aLI9Q/ikDQEmfRzIwYJs4oO0h9ZHA3FZDakzt1WR6JMZcpqtCZlF97I72KVjoY4rHXU5TfvkRDOyr/rg== dependencies: "@types/react" "*" @@ -3910,19 +3934,19 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^17.0.5": - version "17.0.43" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.43.tgz#4adc142887dd4a2601ce730bc56c3436fdb07a55" - integrity sha512-8Q+LNpdxf057brvPu1lMtC5Vn7J119xrP1aq4qiaefNioQUYANF/CYeK4NsKorSZyUGJ66g0IM+4bbjwx45o2A== +"@types/react@*", "@types/react@>=16": + version "18.2.21" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.21.tgz#774c37fd01b522d0b91aed04811b58e4e0514ed9" + integrity sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" csstype "^3.0.2" -"@types/react@>=16": - version "18.2.6" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.6.tgz#5cd53ee0d30ffc193b159d3516c8c8ad2f19d571" - integrity sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA== +"@types/react@^17", "@types/react@^17.0.5": + version "17.0.65" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.65.tgz#95f6a2ab61145ffb69129d07982d047f9e0870cd" + integrity sha512-oxur785xZYHvnI7TRS61dXbkIhDPnGfsXKv0cNXR/0ml4SipRIFpSMzA7HMEfOywFwJ5AOnPrXYTEiTRUQeGlQ== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -3936,14 +3960,14 @@ "@types/node" "*" "@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + version "0.16.3" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== "@types/semver@^7.3.12", "@types/semver@^7.3.4": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + version "7.5.2" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.2.tgz#31f6eec1ed7ec23f4f05608d3a2d381df041f564" + integrity sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw== "@types/send@*": version "0.17.1" @@ -3954,10 +3978,11 @@ "@types/node" "*" "@types/serve-static@*": - version "1.15.1" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" - integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + version "1.15.2" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" + integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== dependencies: + "@types/http-errors" "*" "@types/mime" "*" "@types/node" "*" @@ -3974,19 +3999,14 @@ "@types/webxr" "*" "@types/unist@^2.0.0": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" - integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + version "2.0.8" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.8.tgz#bb197b9639aa1a04cf464a617fe800cccd92ad5c" + integrity sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw== -"@types/webxr@*": - version "0.5.1" - resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.1.tgz#4908349419104bd476a4252d04e4c3abb496748d" - integrity sha512-xlFXPfgJR5vIuDefhaHuUM9uUgvPaXB6GKdXy2gdEh8gBWQZ2ul24AJz3foUd8NNKlSTQuWYJpCb1/pL81m1KQ== - -"@types/webxr@^0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.2.tgz#5d9627b0ffe223aa3b166de7112ac8a9460dc54f" - integrity sha512-szL74BnIcok9m7QwYtVmQ+EdIKwbjPANudfuvDrAF8Cljg9MKUlIoc1w5tjj9PMpeSH3U1Xnx//czQybJ0EfSw== +"@types/webxr@*", "@types/webxr@^0.5.2": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.4.tgz#3d55a6427f9281d456843d754c99bf7804657fe3" + integrity sha512-41gfGLTtqXZhcmoDlLDHqMJDuwAMwhHwXf9Q2job3TUBsvkNfPNI/3IWVEtLH4tyY1ElWtfwIaoNeqeEX238/Q== "@types/yargs-parser@*": version "21.0.0" @@ -3994,9 +4014,9 @@ integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^15.0.0": - version "15.0.14" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" - integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== + version "15.0.15" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.15.tgz#e609a2b1ef9e05d90489c2f5f45bbfb2be092158" + integrity sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg== dependencies: "@types/yargs-parser" "*" @@ -4015,144 +4035,100 @@ "@types/node" "*" "@typescript-eslint/eslint-plugin@^5.4.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.17.0.tgz#704eb4e75039000531255672bf1c85ee85cf1d67" - integrity sha512-qVstvQilEd89HJk3qcbKt/zZrfBZ+9h2ynpAGlWjWiizA7m/MtLT9RoX6gjtpE500vfIg8jogAkDzdCxbsFASQ== - dependencies: - "@typescript-eslint/scope-manager" "5.17.0" - "@typescript-eslint/type-utils" "5.17.0" - "@typescript-eslint/utils" "5.17.0" - debug "^4.3.2" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" - regexpp "^3.2.0" - semver "^7.3.5" + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" tsutils "^3.21.0" "@typescript-eslint/parser@^5.4.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.17.0.tgz#7def77d5bcd8458d12d52909118cf3f0a45f89d5" - integrity sha512-aRzW9Jg5Rlj2t2/crzhA2f23SIYFlF9mchGudyP0uiD6SenIxzKoLjwzHbafgHn39dNV/TV7xwQkLfFTZlJ4ig== - dependencies: - "@typescript-eslint/scope-manager" "5.17.0" - "@typescript-eslint/types" "5.17.0" - "@typescript-eslint/typescript-estree" "5.17.0" - debug "^4.3.2" - -"@typescript-eslint/scope-manager@5.17.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz#4cea7d0e0bc0e79eb60cad431c89120987c3f952" - integrity sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w== - dependencies: - "@typescript-eslint/types" "5.17.0" - "@typescript-eslint/visitor-keys" "5.17.0" - -"@typescript-eslint/scope-manager@5.59.6": - version "5.59.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.6.tgz#d43a3687aa4433868527cfe797eb267c6be35f19" - integrity sha512-gLbY3Le9Dxcb8KdpF0+SJr6EQ+hFGYFl6tVY8VxLPFDfUZC7BHFw+Vq7bM5lE9DwWPfx4vMWWTLGXgpc0mAYyQ== - dependencies: - "@typescript-eslint/types" "5.59.6" - "@typescript-eslint/visitor-keys" "5.59.6" - -"@typescript-eslint/type-utils@5.17.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.17.0.tgz#1c4549d68c89877662224aabb29fbbebf5fc9672" - integrity sha512-3hU0RynUIlEuqMJA7dragb0/75gZmwNwFf/QJokWzPehTZousP/MNifVSgjxNcDCkM5HI2K22TjQWUmmHUINSg== - dependencies: - "@typescript-eslint/utils" "5.17.0" - debug "^4.3.2" - tsutils "^3.21.0" + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + dependencies: + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + debug "^4.3.4" -"@typescript-eslint/types@5.17.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.17.0.tgz#861ec9e669ffa2aa9b873dd4d28d9b1ce26d216f" - integrity sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw== - -"@typescript-eslint/types@5.59.6": - version "5.59.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.6.tgz#5a6557a772af044afe890d77c6a07e8c23c2460b" - integrity sha512-tH5lBXZI7T2MOUgOWFdVNUILsI02shyQvfzG9EJkoONWugCG77NDDa1EeDGw7oJ5IvsTAAGVV8I3Tk2PNu9QfA== - -"@typescript-eslint/typescript-estree@5.17.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz#a7cba7dfc8f9cc2ac78c18584e684507df4f2488" - integrity sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg== - dependencies: - "@typescript-eslint/types" "5.17.0" - "@typescript-eslint/visitor-keys" "5.17.0" - debug "^4.3.2" - globby "^11.0.4" - is-glob "^4.0.3" - semver "^7.3.5" +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + dependencies: + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.59.6": - version "5.59.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.6.tgz#2fb80522687bd3825504925ea7e1b8de7bb6251b" - integrity sha512-vW6JP3lMAs/Tq4KjdI/RiHaaJSO7IUsbkz17it/Rl9Q+WkQ77EOuOnlbaU8kKfVIOJxMhnRiBG+olE7f3M16DA== +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== dependencies: - "@typescript-eslint/types" "5.59.6" - "@typescript-eslint/visitor-keys" "5.59.6" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.17.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.17.0.tgz#549a9e1d491c6ccd3624bc3c1b098f5cfb45f306" - integrity sha512-DVvndq1QoxQH+hFv+MUQHrrWZ7gQ5KcJzyjhzcqB1Y2Xes1UQQkTRPUfRpqhS8mhTWsSb2+iyvDW1Lef5DD7vA== - dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.17.0" - "@typescript-eslint/types" "5.17.0" - "@typescript-eslint/typescript-estree" "5.17.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/utils@^5.45.0": - version "5.59.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.6.tgz#82960fe23788113fc3b1f9d4663d6773b7907839" - integrity sha512-vzaaD6EXbTS29cVH0JjXBdzMt6VBlv+hE31XktDRMX1j3462wZCJa7VzO2AxXEXcIl8GQqZPcOPuW/Z1tZVogg== +"@typescript-eslint/utils@5.62.0", "@typescript-eslint/utils@^5.45.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.59.6" - "@typescript-eslint/types" "5.59.6" - "@typescript-eslint/typescript-estree" "5.59.6" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.17.0": - version "5.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz#52daae45c61b0211b4c81b53a71841911e479128" - integrity sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA== +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== dependencies: - "@typescript-eslint/types" "5.17.0" - eslint-visitor-keys "^3.0.0" - -"@typescript-eslint/visitor-keys@5.59.6": - version "5.59.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.6.tgz#673fccabf28943847d0c8e9e8d008e3ada7be6bb" - integrity sha512-zEfbFLzB9ETcEJ4HZEEsCR9HHeNku5/Qw1jSS5McYJv5BR+ftYXwFFAH5Al+xkGaZEqowMwl7uoJjQb1YSPF8Q== - dependencies: - "@typescript-eslint/types" "5.59.6" + "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@use-gesture/core@10.2.24": - version "10.2.24" - resolved "https://registry.yarnpkg.com/@use-gesture/core/-/core-10.2.24.tgz#88d13a60954ba62463c774acb92d12bf7b3d810c" - integrity sha512-ZL7F9mgOn3Qlnp6QLI9jaOfcvqrx6JPE/BkdVSd8imveaFTm/a3udoO6f5Us/1XtqnL4347PsIiK6AtCvMHk2Q== +"@use-gesture/core@10.3.0": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@use-gesture/core/-/core-10.3.0.tgz#9afd3777a45b2a08990a5dcfcf8d9ddd55b00db9" + integrity sha512-rh+6MND31zfHcy9VU3dOZCqGY511lvGcfyJenN4cWZe0u1BH6brBpBddLVXhF2r4BMqWbvxfsbL7D287thJU2A== "@use-gesture/react@^10.2.24": - version "10.2.24" - resolved "https://registry.yarnpkg.com/@use-gesture/react/-/react-10.2.24.tgz#bc13780381e786b286f099f69ea3801bb9ed27a5" - integrity sha512-rAZ8Nnpu1g4eFzqCPlaq+TppJpMy0dTpYOQx5KpfoBF4P3aWnCqwj7eKxcmdIb1NJKpIJj50DPugUH4mq5cpBg== + version "10.3.0" + resolved "https://registry.yarnpkg.com/@use-gesture/react/-/react-10.3.0.tgz#180534c821fd635c2853cbcfa813f92c94f27e3f" + integrity sha512-3zc+Ve99z4usVP6l9knYVbVnZgfqhKah7sIG+PS2w+vpig2v2OLct05vs+ZXMzwxdNCMka8B+8WlOo0z6Pn6DA== dependencies: - "@use-gesture/core" "10.2.24" + "@use-gesture/core" "10.3.0" "@vitejs/plugin-react@^3.0.1": version "3.1.0" @@ -4172,6 +4148,22 @@ dependencies: tslib "^2.4.0" +"@yarnpkg/fslib@2.10.3": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@yarnpkg/fslib/-/fslib-2.10.3.tgz#a8c9893df5d183cf6362680b9f1c6d7504dd5717" + integrity sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A== + dependencies: + "@yarnpkg/libzip" "^2.3.0" + tslib "^1.13.0" + +"@yarnpkg/libzip@2.3.0", "@yarnpkg/libzip@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/libzip/-/libzip-2.3.0.tgz#fe1e762e47669f6e2c960fc118436608d834e3be" + integrity sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg== + dependencies: + "@types/emscripten" "^1.39.6" + tslib "^1.13.0" + "@zeit/schemas@2.29.0": version "2.29.0" resolved "https://registry.yarnpkg.com/@zeit/schemas/-/schemas-2.29.0.tgz#a59ae6ebfdf4ddc66a876872dd736baa58b6696c" @@ -4220,7 +4212,7 @@ acorn-walk@^7.2.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^8.1.1, acorn-walk@^8.2.0: +acorn-walk@^8.1.1: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== @@ -4230,20 +4222,10 @@ acorn@^7.1.1, acorn@^7.4.0, acorn@^7.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.4.1: - version "8.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" - integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== - -acorn@^8.7.0, acorn@^8.8.2: - version "8.9.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" - integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== - -acorn@^8.8.0: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +acorn@^8.10.0, acorn@^8.4.1, acorn@^8.8.2: + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== address@^1.0.1: version "1.2.2" @@ -4262,7 +4244,7 @@ agent-base@6, agent-base@^6.0.2: dependencies: debug "4" -agent-base@^7.0.1, agent-base@^7.0.2, agent-base@^7.1.0: +agent-base@^7.0.2, agent-base@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== @@ -4270,12 +4252,10 @@ agent-base@^7.0.1, agent-base@^7.0.2, agent-base@^7.1.0: debug "^4.3.4" agentkeepalive@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" - integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== + version "4.5.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== dependencies: - debug "^4.1.0" - depd "^2.0.0" humanize-ms "^1.2.1" aggregate-error@^3.0.0: @@ -4286,7 +4266,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -aggregate-error@^4.0.0, aggregate-error@^4.0.1: +aggregate-error@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-4.0.1.tgz#25091fe1573b9e0be892aeda15c7c66a545f758e" integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== @@ -4294,6 +4274,14 @@ aggregate-error@^4.0.0, aggregate-error@^4.0.1: clean-stack "^4.0.0" indent-string "^5.0.0" +aggregate-error@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-5.0.0.tgz#ffe15045d7521c51c9d618e3d7f37c13f29b3fd3" + integrity sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw== + dependencies: + clean-stack "^5.2.0" + indent-string "^5.0.0" + ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" @@ -4329,7 +4317,7 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-align@^3.0.0, ansi-align@^3.0.1: +ansi-align@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== @@ -4358,7 +4346,7 @@ ansi-escapes@^6.2.0: ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" @@ -4399,15 +4387,7 @@ ansicolors@~0.3.2: resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== -anymatch@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -anymatch@~3.1.2: +anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -4418,7 +4398,7 @@ anymatch@~3.1.2: app-root-dir@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" - integrity sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg= + integrity sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g== aproba@^1.0.3: version "1.2.0" @@ -4440,14 +4420,6 @@ archy@~1.0.0: resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - are-we-there-yet@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" @@ -4457,9 +4429,9 @@ are-we-there-yet@^3.0.0: readable-stream "^3.6.0" are-we-there-yet@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz#3ff397dc14f08b52dd8b2a64d3cee154ab8760d2" - integrity sha512-nSXlV+u3vtVjRgihdTzbfWYzxPWGo424zPgQbHD0ZqIla3jqYAewDcvee0Ua2hjS5IfTAmjGlx1Jf0PKwjZDEw== + version "4.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.1.tgz#05a6fc0e5f70771b673e82b0f915616e0ace8fd3" + integrity sha512-2zuA+jpOYBRgoBCfa+fB87Rk0oGJjDX6pxGzqH6f33NzUhG25Xur6R0u0Z9VVAq8Z5JvQpQI6j6rtonuivC8QA== dependencies: delegates "^1.0.0" readable-stream "^4.1.0" @@ -4499,10 +4471,17 @@ argv-formatter@~1.0.0: resolved "https://registry.yarnpkg.com/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" integrity sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw== +aria-hidden@^1.1.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.3.tgz#14aeb7fb692bbb72d69bebfa47279c1fd725e954" + integrity sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ== + dependencies: + tslib "^2.0.0" + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== arr-flatten@^1.1.0: version "1.1.0" @@ -4512,7 +4491,7 @@ arr-flatten@^1.1.0: arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== array-buffer-byte-length@^1.0.0: version "1.0.0" @@ -4535,28 +4514,17 @@ array-flatten@1.1.1: array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= - -array-includes@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" - integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" - is-string "^1.0.7" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" is-string "^1.0.7" array-union@^2.1.0: @@ -4567,43 +4535,67 @@ array-union@^2.1.0: array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== + +array.prototype.findlastindex@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" array.prototype.flat@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" array.prototype.tosorted@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" - integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== + version "1.1.2" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd" + integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" + get-intrinsic "^1.2.1" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== arrify@^2.0.1: version "2.0.1" @@ -4611,19 +4603,20 @@ arrify@^2.0.1: integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== assert@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" - integrity sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A== + version "2.1.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" + integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== dependencies: - es6-object-assign "^1.1.0" - is-nan "^1.2.1" - object-is "^1.0.1" - util "^0.12.0" + call-bind "^1.0.2" + is-nan "^1.3.2" + object-is "^1.1.5" + object.assign "^4.1.4" + util "^0.12.5" assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== ast-types@0.15.2: version "0.15.2" @@ -4673,10 +4666,17 @@ async@^3.2.3: resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== +asynciterator.prototype@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" + integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== + dependencies: + has-symbols "^1.0.3" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" @@ -4715,36 +4715,29 @@ babel-eslint@^10.1.0: eslint-visitor-keys "^1.0.0" resolve "^1.12.0" -babel-jest@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.5.0.tgz#3fe3ddb109198e78b1c88f9ebdecd5e4fc2f50a5" - integrity sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q== +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== dependencies: - "@jest/transform" "^29.5.0" + "@jest/transform" "^29.7.0" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.5.0" + babel-preset-jest "^29.6.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" babel-loader@^8.1.0: - version "8.2.4" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.4.tgz#95f5023c791b2e9e2ca6f67b0984f39c82ff384b" - integrity sha512-8dytA3gcvPPPv4Grjhnt8b5IIiTcq/zeXOPk4iTYI0SVXcsmuGg7JtBRDp8S9X+gJfhQ8ektjXZlDu1Bb33U8A== + version "8.3.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" + integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== dependencies: find-cache-dir "^3.3.1" loader-utils "^2.0.0" make-dir "^3.1.0" schema-utils "^2.6.5" -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" @@ -4756,10 +4749,10 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz#a97db437936f441ec196990c9738d4b88538618a" - integrity sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -4775,53 +4768,29 @@ babel-plugin-macros@^3.1.0: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== +babel-plugin-polyfill-corejs2@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" + integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" - semver "^6.1.1" + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.4.2" + semver "^6.3.1" -babel-plugin-polyfill-corejs2@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" - integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== +babel-plugin-polyfill-corejs3@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" + integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.3" - semver "^6.1.1" + "@babel/helper-define-polyfill-provider" "^0.4.2" + core-js-compat "^3.31.0" -babel-plugin-polyfill-corejs3@^0.5.0: +babel-plugin-polyfill-regenerator@^0.5.2: version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.21.0" - -babel-plugin-polyfill-corejs3@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" - integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - core-js-compat "^3.25.1" - -babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - -babel-plugin-polyfill-regenerator@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" - integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" + integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" + "@babel/helper-define-polyfill-provider" "^0.4.2" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" @@ -4841,12 +4810,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz#57bc8cc88097af7ff6a5ab59d1cd29d52a5916e2" - integrity sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg== +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== dependencies: - babel-plugin-jest-hoist "^29.5.0" + babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" babel-preset-typescript-vue@^1.0.3: @@ -4864,7 +4833,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.3.1: +base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -4892,17 +4861,17 @@ before-after-hook@^2.2.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== -better-opn@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-2.1.1.tgz#94a55b4695dc79288f31d7d0e5f658320759f7c6" - integrity sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA== +better-opn@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-3.0.2.tgz#f96f35deaaf8f34144a4102651babcf00d1d8817" + integrity sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ== dependencies: - open "^7.0.3" + open "^8.0.4" bidi-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bidi-js/-/bidi-js-1.0.2.tgz#1a497a762c2ddea377429d2649c9ce0f8a91527f" - integrity sha512-rzSy/k7WdX5zOyeHHCOixGXbCHkyogkxPKL2r8QtzHmVQDiWCXUWa18bLdMWT9CYMLOYTjWpTHawuev2ouYJVw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/bidi-js/-/bidi-js-1.0.3.tgz#6f8bcf3c877c4d9220ddf49b9bb6930c88f877d2" + integrity sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw== dependencies: require-from-string "^2.0.2" @@ -4917,9 +4886,9 @@ big.js@^5.2.2: integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== bin-links@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.1.tgz#afeb0549e642f61ff889b58ea2f8dca78fb9d8d3" - integrity sha512-bmFEM39CyX336ZGGRsGPlc6jZHriIoHacOQcTt72MktIjpPhZoP4te2jOyUXF3BLILmJ8aNLncoPVeIIFlrDeA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.2.tgz#13321472ea157e9530caded2b7281496d698665b" + integrity sha512-jxJ0PbXR8eQyPlExCvCs3JFnikvs1Yp4gUJt6nmgathdOwvur+q22KWC3h20gvWl4T/14DXKj2IlkJwwZkZPOw== dependencies: cmd-shim "^6.0.0" npm-normalize-package-bin "^3.0.0" @@ -4939,7 +4908,7 @@ bl@^2.2.1: readable-stream "^2.3.5" safe-buffer "^5.1.1" -bl@^4.0.3: +bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -4985,20 +4954,6 @@ boxen@7.0.0: widest-line "^4.0.1" wrap-ansi "^8.0.1" -boxen@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - bplist-parser@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" @@ -5056,26 +5011,15 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" -browserslist@^4.17.5, browserslist@^4.19.1: - version "4.20.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88" - integrity sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA== - dependencies: - caniuse-lite "^1.0.30001317" - electron-to-chromium "^1.4.84" - escalade "^3.1.1" - node-releases "^2.0.2" - picocolors "^1.0.0" - -browserslist@^4.21.3, browserslist@^4.21.5: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== +browserslist@^4.21.10, browserslist@^4.21.9: + version "4.21.10" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" + integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" + caniuse-lite "^1.0.30001517" + electron-to-chromium "^1.4.477" + node-releases "^2.0.13" + update-browserslist-db "^1.0.11" bser@2.1.1: version "2.1.1" @@ -5133,9 +5077,9 @@ bytes@3.1.2: integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== c8@^7.6.0: - version "7.13.0" - resolved "https://registry.yarnpkg.com/c8/-/c8-7.13.0.tgz#a2a70a851278709df5a9247d62d7f3d4bcb5f2e4" - integrity sha512-/NL4hQTv1gBL6J6ei80zu3IiTrmePDKXKXOTLpHvcIWZTVYQlDhVWjjWvkhICylE8EwwnMVzDZugCvdx0/DIIA== + version "7.14.0" + resolved "https://registry.yarnpkg.com/c8/-/c8-7.14.0.tgz#f368184c73b125a80565e9ab2396ff0be4d732f3" + integrity sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw== dependencies: "@bcoe/v8-coverage" "^0.2.3" "@istanbuljs/schema" "^0.1.3" @@ -5151,15 +5095,33 @@ c8@^7.6.0: yargs-parser "^20.2.9" cacache@^17.0.0, cacache@^17.0.4, cacache@^17.1.3: - version "17.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044" - integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg== + version "17.1.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" + integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== dependencies: "@npmcli/fs" "^3.1.0" fs-minipass "^3.0.0" glob "^10.2.2" lru-cache "^7.7.1" - minipass "^5.0.0" + minipass "^7.0.3" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + +cacache@^18.0.0: + version "18.0.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.0.tgz#17a9ecd6e1be2564ebe6cdca5f7cfed2bfeb6ddc" + integrity sha512-I7mVOPl3PUCeRub1U8YoGz2Lqv9WOBpobZ8RyWFXmReuILz+3OAyTa5oH3QPdtKZD7N0Yk00aLfzn0qvp8dZ1w== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^10.0.1" + minipass "^7.0.3" minipass-collect "^1.0.2" minipass-flush "^1.0.5" minipass-pipeline "^1.2.4" @@ -5221,19 +5183,14 @@ camelcase@^7.0.0: integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== camera-controls@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/camera-controls/-/camera-controls-2.4.2.tgz#815aa5d7c4c43054fc55fb8b6cc685a56540fea2" - integrity sha512-blYDPECYFT/4egDMNWqKc2lBrpOfIAjPPRUNVswQELPi8naGBXUvZM3sDJSNuIRaHqid+JKPtlcoZk+Cb+X5qg== + version "2.7.2" + resolved "https://registry.yarnpkg.com/camera-controls/-/camera-controls-2.7.2.tgz#19a8b5d10e650088e41fe4ee59bafc35df524961" + integrity sha512-6+gaZFK3LYbWaXC94EN0BYLlvpo9xfUqwp59vsU3nV7WXIU05q4wyP5TOgyG1tqTHReuBofb20vKfZNBNjMtzw== -caniuse-lite@^1.0.30001317: - version "1.0.30001322" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001322.tgz#2e4c09d11e1e8f852767dab287069a8d0c29d623" - integrity sha512-neRmrmIrCGuMnxGSoh+x7zYtQFFgnSY2jaomjU56sCkTA6JINqQrxutF459JpWcWRajvoyn95sOXq4Pqrnyjew== - -caniuse-lite@^1.0.30001449: - version "1.0.30001487" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001487.tgz#d882d1a34d89c11aea53b8cdc791931bdab5fe1b" - integrity sha512-83564Z3yWGqXsh2vaH/mhXfEM0wX+NlBCm1jYHOb97TrTWJEmPTccZgeLTPBUUb0PNVo+oomb7wkimZBIERClA== +caniuse-lite@^1.0.30001517: + version "1.0.30001535" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001535.tgz#908a5b7ef11172f51f0b88f3d850aef1c6a3cf7b" + integrity sha512-48jLyUkiWFfhm/afF7cQPqPjaUmSraEhK4j+FCTJpgnGGEZHqyLe3hmWH7lIooZdSzXL0ReMvHz0vKDoTBsrwg== cardinal@^2.1.1: version "2.1.1" @@ -5255,7 +5212,7 @@ chalk@5.0.1: resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== -chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1: +chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -5280,7 +5237,7 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.0.1, chalk@^5.2.0: +chalk@^5.0.1, chalk@^5.2.0, chalk@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== @@ -5361,10 +5318,12 @@ clean-stack@^4.0.0: dependencies: escape-string-regexp "5.0.0" -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== +clean-stack@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-5.2.0.tgz#c7a0c91939c7caace30a3bf254e8a8ac276d1189" + integrity sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ== + dependencies: + escape-string-regexp "5.0.0" cli-boxes@^3.0.0: version "3.0.0" @@ -5379,6 +5338,18 @@ cli-columns@^4.0.0: string-width "^4.2.3" strip-ansi "^6.0.1" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.9.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.1.tgz#9c0b9dad69a6d47cbb4333c14319b060ed395a35" + integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== + cli-table3@^0.6.1, cli-table3@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" @@ -5437,22 +5408,22 @@ cmd-shim@^6.0.0: co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -5474,14 +5445,14 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-support@^1.1.2, color-support@^1.1.3: +color-support@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== @@ -5524,7 +5495,7 @@ common-ancestor-path@^1.0.1: commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== compare-func@^2.0.0: version "2.0.0" @@ -5562,7 +5533,7 @@ compression@1.7.4, compression@^1.7.4: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^1.5.2, concat-stream@^1.6.2: version "1.6.2" @@ -5585,7 +5556,7 @@ config-chain@^1.1.11: console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== content-disposition@0.5.2: version "0.5.2" @@ -5629,16 +5600,16 @@ conventional-changelog-conventionalcommits@^4.3.1: q "^1.5.1" conventional-changelog-writer@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.0.tgz#8c8dea0441c6e648c9b25bb784e750d02f8002d5" - integrity sha512-8PyWTnn7zBIt9l4hj4UusFs1TyG+9Ulu1zlOAc72L7Sdv9Hsc8E86ot7htY3HXCVhXHB/NO0pVGvZpwsyJvFfw== + version "6.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz#d8d3bb5e1f6230caed969dcc762b1c368a8f7b01" + integrity sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== dependencies: conventional-commits-filter "^3.0.0" dateformat "^3.0.3" handlebars "^4.7.7" json-stringify-safe "^5.0.1" meow "^8.1.2" - semver "^6.3.0" + semver "^7.0.0" split "^1.0.1" conventional-commits-filter@^3.0.0: @@ -5649,6 +5620,11 @@ conventional-commits-filter@^3.0.0: lodash.ismatch "^4.4.0" modify-values "^1.0.1" +conventional-commits-filter@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-4.0.0.tgz#845d713e48dc7d1520b84ec182e2773c10c7bf7f" + integrity sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A== + conventional-commits-parser@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" @@ -5661,22 +5637,20 @@ conventional-commits-parser@^3.0.0: split2 "^3.0.0" through2 "^4.0.0" -conventional-commits-parser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" - integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== +conventional-commits-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz#57f3594b81ad54d40c1b4280f04554df28627d9a" + integrity sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA== dependencies: JSONStream "^1.3.5" - is-text-path "^1.0.1" - meow "^8.1.2" - split2 "^3.2.2" + is-text-path "^2.0.0" + meow "^12.0.1" + split2 "^4.0.0" convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== convert-source-map@^2.0.0: version "2.0.0" @@ -5696,7 +5670,7 @@ cookie@0.5.0: copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== copy-to-clipboard@^3.3.3: version "3.3.3" @@ -5718,37 +5692,24 @@ copyfiles@^2.4.1: untildify "^4.0.0" yargs "^16.1.0" -core-js-compat@^3.21.0: - version "3.21.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82" - integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g== - dependencies: - browserslist "^4.19.1" - semver "7.0.0" - -core-js-compat@^3.25.1: - version "3.30.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.2.tgz#83f136e375babdb8c80ad3c22d67c69098c1dd8b" - integrity sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA== +core-js-compat@^3.31.0: + version "3.32.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.2.tgz#8047d1a8b3ac4e639f0d4f66d4431aa3b16e004c" + integrity sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ== dependencies: - browserslist "^4.21.5" + browserslist "^4.21.10" -core-js@^3.0.1: - version "3.21.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.21.1.tgz#f2e0ddc1fc43da6f904706e8e955bc19d06a0d94" - integrity sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig== - -core-js@^3.29.0: - version "3.30.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.2.tgz#6528abfda65e5ad728143ea23f7a14f0dcf503fc" - integrity sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg== +core-js@^3.0.1, core-js@^3.29.0: + version "3.32.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.32.2.tgz#172fb5949ef468f93b4be7841af6ab1f21992db7" + integrity sha512-pxXSw1mYZPDGvTQqEc5vgIb83jGQKFGYWY76z4a7weZXUolw3G+OvpZqSRcfYOoOVUQJYEPsWeQK8pKEnUtWxQ== core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig@8.2.0, cosmiconfig@^8.0.0: +cosmiconfig@8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd" integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ== @@ -5759,9 +5720,9 @@ cosmiconfig@8.2.0, cosmiconfig@^8.0.0: path-type "^4.0.0" cosmiconfig@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== dependencies: "@types/parse-json" "^4.0.0" import-fresh "^3.2.1" @@ -5769,6 +5730,29 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +cosmiconfig@^8.0.0: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -5781,12 +5765,12 @@ cross-env@^7.0.3: dependencies: cross-spawn "^7.0.1" -cross-fetch@3.1.6: - version "3.1.6" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.6.tgz#bae05aa31a4da760969756318feeee6e70f15d6c" - integrity sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g== +cross-fetch@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" + integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== dependencies: - node-fetch "^2.6.11" + node-fetch "^2.6.12" cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" @@ -5815,9 +5799,9 @@ cssesc@^3.0.0: integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== csstype@^3.0.2: - version "3.0.11" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33" - integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== dargs@^7.0.0: version "7.0.0" @@ -5837,7 +5821,7 @@ dateformat@^3.0.3: de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= + integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== debounce@^1.2.1: version "1.2.1" @@ -5851,7 +5835,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -5866,9 +5850,9 @@ debug@^3.2.7: ms "^2.1.1" decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + version "1.1.1" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== dependencies: decamelize "^1.1.0" map-obj "^1.0.0" @@ -5876,17 +5860,17 @@ decamelize-keys@^1.1.0: decamelize@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== deep-extend@^0.6.0: version "0.6.0" @@ -5899,9 +5883,9 @@ deep-is@^0.1.3, deep-is@~0.1.3: integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== default-browser-id@3.0.0: version "3.0.0" @@ -5918,37 +5902,40 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +define-data-property@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" + integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: + define-data-property "^1.0.1" has-property-descriptors "^1.0.0" object-keys "^1.1.1" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== dependencies: is-descriptor "^1.0.0" @@ -5965,15 +5952,14 @@ defu@^6.1.2: resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.2.tgz#1217cba167410a1765ba93893c6dbac9ed9d9e5c" integrity sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ== -degenerator@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-4.0.4.tgz#dbeeb602c64ce543c1f17e2c681d1d0cc9d4a0ac" - integrity sha512-MTZdZsuNxSBL92rsjx3VFWe57OpRlikyLbcx2B5Dmdv6oScqpMrvpY7zHLMymrUxo3U5+suPUMsNgW/+SZB1lg== +degenerator@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5" + integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== dependencies: ast-types "^0.13.4" - escodegen "^1.14.3" + escodegen "^2.1.0" esprima "^4.0.1" - vm2 "^3.9.19" del@^6.0.0: version "6.1.1" @@ -5992,14 +5978,14 @@ del@^6.0.0: delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -depd@2.0.0, depd@^2.0.0: +depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -6020,9 +6006,9 @@ destroy@1.2.0: integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-gpu@^5.0.28: - version "5.0.28" - resolved "https://registry.yarnpkg.com/detect-gpu/-/detect-gpu-5.0.28.tgz#e7762c04cc3b5a33d902eb5719add195494df60a" - integrity sha512-sdT5Ti9ZHBBq39mK0DRwnm/5xZOVAz2+vxYLdPcFP83+3DGkzucEK0lzw1XFwct4zWDAXYrSTFUjC33qsoRAoQ== + version "5.0.37" + resolved "https://registry.yarnpkg.com/detect-gpu/-/detect-gpu-5.0.37.tgz#27febe44d478ef4d35cd38007355da795ba075d5" + integrity sha512-EraWs84faI4iskB4qvE39bevMIazEvd1RpoyGLOBesRLbiz6eMeJqqRPHjEFClfRByYZzi9IzU35rBXIO76oDw== dependencies: webgl-constants "^1.1.1" @@ -6036,6 +6022,11 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +detect-node-es@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" + integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== + detect-package-manager@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/detect-package-manager/-/detect-package-manager-2.0.1.tgz#6b182e3ae5e1826752bfef1de9a7b828cffa50d8" @@ -6051,20 +6042,20 @@ detect-port@^1.3.0: address "^1.0.1" debug "4" -devtools-protocol@0.0.1135028: - version "0.0.1135028" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1135028.tgz#b2c667c301cb6da9ba3ed0989fe1fb88b660ee0a" - integrity sha512-jEcNGrh6lOXNRJvZb9RjeevtZGrgugPKSMJZxfyxWQnhlKawMPhMtk/dfC+Z/6xNXExlzTKlY5LzIAK/fRpQIw== +devtools-protocol@0.0.1147663: + version "0.0.1147663" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz#4ec5610b39a6250d1f87e6b9c7e16688ed0ac78e" + integrity sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ== diff-sequences@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== -diff-sequences@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" - integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== diff@^4.0.1: version "4.0.2" @@ -6123,14 +6114,14 @@ dotenv-expand@^10.0.0: integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== dotenv@^16.0.0: - version "16.0.3" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" - integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + version "16.3.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== draco3d@^1.4.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/draco3d/-/draco3d-1.5.2.tgz#a09604a9e6bbf4e5a69208af4622038c55ef4ca7" - integrity sha512-AeRQ25Fb29c14vpjnh167UGW0nGY0ZpEM3ld+zEXoEySlmEXcXfsCHZeTgo5qXH925V1JsdjrzasdaQ22/vXog== + version "1.5.6" + resolved "https://registry.yarnpkg.com/draco3d/-/draco3d-1.5.6.tgz#0d570a9792e3a3a9fafbfea065b692940441c626" + integrity sha512-+3NaRjWktb5r61ZFoDejlykPEFKT5N/LkbXsaddlw6xNSXBanUYpFc2AXXpbJDilPHazcSreU/DpQIaxfX0NfQ== duplexer2@~0.1.0: version "0.1.4" @@ -6166,15 +6157,10 @@ ejs@^3.1.8: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.284: - version "1.4.396" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.396.tgz#3d3664eb58d86376fbe2fece3705f68ca197205c" - integrity sha512-pqKTdqp/c5vsrc0xUPYXTDBo9ixZuGY8es4ZOjjd6HD6bFYbu5QA09VoW3fkY4LF1T0zYk86lN6bZnNlBuOpdQ== - -electron-to-chromium@^1.4.84: - version "1.4.99" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.99.tgz#da97e2c116dc6de2f91a81b4ff8d1b19bf54dc1f" - integrity sha512-YXMzbvlo6pW12KWw0bj6cIGCJi1Moy8PLCuuzgRzg6WYIcHILK3szU+HHnHFx2b373qRv+cfmHhbmRbatyAbPA== +electron-to-chromium@^1.4.477: + version "1.4.523" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.523.tgz#f82f99243c827df05c26776d49712cb284972df6" + integrity sha512-9AreocSUWnzNtvLcbpng6N+GkXnCcBR80IQkxRC9Dfdyg4gaWNUPBujAHUpKkiUkoSoR9UlhA4zD/IgBklmhzg== emittery@^0.13.1: version "0.13.1" @@ -6216,11 +6202,12 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: once "^1.4.0" enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== dependencies: ansi-colors "^4.1.1" + strip-ansi "^6.0.1" env-ci@^9.0.0: version "9.1.1" @@ -6236,9 +6223,9 @@ env-paths@^2.2.0: integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== envinfo@^7.7.3: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + version "7.10.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" + integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== err-code@^2.0.2: version "2.0.3" @@ -6252,44 +6239,19 @@ error-ex@^1.3.1, error-ex@^1.3.2: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.0, es-abstract@^1.19.1: - version "1.19.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.2.tgz#8f7b696d8f15b167ae3640b4060670f3d054143f" - integrity sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.1" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" - -es-abstract@^1.20.4: - version "1.21.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" - integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== +es-abstract@^1.22.1: + version "1.22.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" + integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== dependencies: array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" call-bind "^1.0.2" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.0" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.1" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" @@ -6304,19 +6266,43 @@ es-abstract@^1.20.4: is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" - is-typed-array "^1.1.10" + is-typed-array "^1.1.12" is-weakref "^1.0.2" object-inspect "^1.12.3" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" + which-typed-array "^1.1.11" + +es-iterator-helpers@^1.0.12: + version "1.0.15" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" + integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== + dependencies: + asynciterator.prototype "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.1" + es-abstract "^1.22.1" + es-set-tostringtag "^2.0.1" + function-bind "^1.1.1" + get-intrinsic "^1.2.1" + globalthis "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + iterator.prototype "^1.1.2" + safe-array-concat "^1.0.1" es-module-lexer@^0.9.3: version "0.9.3" @@ -6348,50 +6334,45 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-object-assign@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" - integrity sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== - esbuild-plugin-alias@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/esbuild-plugin-alias/-/esbuild-plugin-alias-0.2.1.tgz#45a86cb941e20e7c2bc68a2bea53562172494fcb" integrity sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ== esbuild-register@^3.4.0: - version "3.4.2" - resolved "https://registry.yarnpkg.com/esbuild-register/-/esbuild-register-3.4.2.tgz#1e39ee0a77e8f320a9790e68c64c3559620b9175" - integrity sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q== + version "3.5.0" + resolved "https://registry.yarnpkg.com/esbuild-register/-/esbuild-register-3.5.0.tgz#449613fb29ab94325c722f560f800dd946dc8ea8" + integrity sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A== dependencies: debug "^4.3.4" -esbuild@^0.17.0, esbuild@^0.17.5: - version "0.17.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" - integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== +esbuild@^0.18.0, esbuild@^0.18.10: + version "0.18.20" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" + integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== optionalDependencies: - "@esbuild/android-arm" "0.17.19" - "@esbuild/android-arm64" "0.17.19" - "@esbuild/android-x64" "0.17.19" - "@esbuild/darwin-arm64" "0.17.19" - "@esbuild/darwin-x64" "0.17.19" - "@esbuild/freebsd-arm64" "0.17.19" - "@esbuild/freebsd-x64" "0.17.19" - "@esbuild/linux-arm" "0.17.19" - "@esbuild/linux-arm64" "0.17.19" - "@esbuild/linux-ia32" "0.17.19" - "@esbuild/linux-loong64" "0.17.19" - "@esbuild/linux-mips64el" "0.17.19" - "@esbuild/linux-ppc64" "0.17.19" - "@esbuild/linux-riscv64" "0.17.19" - "@esbuild/linux-s390x" "0.17.19" - "@esbuild/linux-x64" "0.17.19" - "@esbuild/netbsd-x64" "0.17.19" - "@esbuild/openbsd-x64" "0.17.19" - "@esbuild/sunos-x64" "0.17.19" - "@esbuild/win32-arm64" "0.17.19" - "@esbuild/win32-ia32" "0.17.19" - "@esbuild/win32-x64" "0.17.19" + "@esbuild/android-arm" "0.18.20" + "@esbuild/android-arm64" "0.18.20" + "@esbuild/android-x64" "0.18.20" + "@esbuild/darwin-arm64" "0.18.20" + "@esbuild/darwin-x64" "0.18.20" + "@esbuild/freebsd-arm64" "0.18.20" + "@esbuild/freebsd-x64" "0.18.20" + "@esbuild/linux-arm" "0.18.20" + "@esbuild/linux-arm64" "0.18.20" + "@esbuild/linux-ia32" "0.18.20" + "@esbuild/linux-loong64" "0.18.20" + "@esbuild/linux-mips64el" "0.18.20" + "@esbuild/linux-ppc64" "0.18.20" + "@esbuild/linux-riscv64" "0.18.20" + "@esbuild/linux-s390x" "0.18.20" + "@esbuild/linux-x64" "0.18.20" + "@esbuild/netbsd-x64" "0.18.20" + "@esbuild/openbsd-x64" "0.18.20" + "@esbuild/sunos-x64" "0.18.20" + "@esbuild/win32-arm64" "0.18.20" + "@esbuild/win32-ia32" "0.18.20" + "@esbuild/win32-x64" "0.18.20" escalade@^3.1.1: version "3.1.1" @@ -6401,7 +6382,7 @@ escalade@^3.1.1: escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0: version "5.0.0" @@ -6411,7 +6392,7 @@ escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0: escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" @@ -6423,7 +6404,7 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escodegen@^1.11.1, escodegen@^1.14.3: +escodegen@^1.11.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== @@ -6435,33 +6416,32 @@ escodegen@^1.11.1, escodegen@^1.14.3: optionalDependencies: source-map "~0.6.1" -escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== +escodegen@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== dependencies: esprima "^4.0.1" estraverse "^5.2.0" esutils "^2.0.2" - optionator "^0.8.1" optionalDependencies: source-map "~0.6.1" eslint-config-prettier@^8.3.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + version "8.10.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" + integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== eslint-import-resolver-node@^0.3.7: - version "0.3.7" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" - integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: debug "^3.2.7" - is-core-module "^2.11.0" - resolve "^1.22.1" + is-core-module "^2.13.0" + resolve "^1.22.4" -eslint-module-utils@^2.7.4: +eslint-module-utils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== @@ -6469,25 +6449,27 @@ eslint-module-utils@^2.7.4: debug "^3.2.7" eslint-plugin-import@^2.22.0: - version "2.27.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" - integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== + version "2.28.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" + integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== dependencies: array-includes "^3.1.6" + array.prototype.findlastindex "^1.2.2" array.prototype.flat "^1.3.1" array.prototype.flatmap "^1.3.1" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.7.4" + eslint-module-utils "^2.8.0" has "^1.0.3" - is-core-module "^2.11.0" + is-core-module "^2.13.0" is-glob "^4.0.3" minimatch "^3.1.2" + object.fromentries "^2.0.6" + object.groupby "^1.0.0" object.values "^1.1.6" - resolve "^1.22.1" - semver "^6.3.0" - tsconfig-paths "^3.14.1" + semver "^6.3.1" + tsconfig-paths "^3.14.2" eslint-plugin-prettier@^3.1.4: version "3.4.1" @@ -6497,19 +6479,20 @@ eslint-plugin-prettier@^3.1.4: prettier-linter-helpers "^1.0.0" eslint-plugin-react-hooks@^4.1.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.4.0.tgz#71c39e528764c848d8253e1aa2c7024ed505f6c4" - integrity sha512-U3RVIfdzJaeKDQKEJbz5p3NW8/L80PCATJAfuojwbaEL+gBjfGdhUcGde+WGUW46Q5sr/NgxevsIiDtNXrvZaQ== + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@^7.20.6: - version "7.32.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" - integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== + version "7.33.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" + integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== dependencies: array-includes "^3.1.6" array.prototype.flatmap "^1.3.1" array.prototype.tosorted "^1.1.1" doctrine "^2.1.0" + es-iterator-helpers "^1.0.12" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" @@ -6519,13 +6502,13 @@ eslint-plugin-react@^7.20.6: object.values "^1.1.6" prop-types "^15.8.1" resolve "^2.0.0-next.4" - semver "^6.3.0" + semver "^6.3.1" string.prototype.matchall "^4.0.8" eslint-plugin-storybook@^0.6.12: - version "0.6.12" - resolved "https://registry.yarnpkg.com/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.12.tgz#7bdb3392bb03bebde40ed19accfd61246e9d6301" - integrity sha512-XbIvrq6hNVG6rpdBr+eBw63QhOMLpZneQVSooEDow8aQCWGCk/5vqtap1yxpVydNfSxi3S/3mBBRLQqKUqQRww== + version "0.6.13" + resolved "https://registry.yarnpkg.com/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.13.tgz#897a9f6a9bb88c63b02f05850f30c28a9848a3f7" + integrity sha512-smd+CS0WH1jBqUEJ3znGS7DU4ayBE9z6lkQAK2yrSUv1+rq8BT/tiI5C/rKE7rmiqiAfojtNYZRhzo5HrulccQ== dependencies: "@storybook/csf" "^0.0.1" "@typescript-eslint/utils" "^5.45.0" @@ -6547,13 +6530,6 @@ eslint-utils@^2.1.0: dependencies: eslint-visitor-keys "^1.1.0" -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" @@ -6564,15 +6540,10 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - eslint-visitor-keys@^3.3.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^7.7.0: version "7.32.0" @@ -6677,7 +6648,7 @@ estree-walker@^1.0.1: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== -estree-walker@^2.0.1: +estree-walker@^2.0.1, estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== @@ -6733,9 +6704,9 @@ execa@^5.0.0, execa@^5.1.1: strip-final-newline "^2.0.0" execa@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" - integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== dependencies: cross-spawn "^7.0.3" get-stream "^6.0.1" @@ -6747,15 +6718,30 @@ execa@^7.0.0: signal-exit "^3.0.7" strip-final-newline "^3.0.0" +execa@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -6765,16 +6751,16 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" - integrity sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg== +expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/expect-utils" "^29.5.0" - jest-get-type "^29.4.3" - jest-matcher-utils "^29.5.0" - jest-message-util "^29.5.0" - jest-util "^29.5.0" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" exponential-backoff@^3.1.1: version "3.1.1" @@ -6821,14 +6807,14 @@ express@^4.17.3: extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" @@ -6874,14 +6860,12 @@ extract-zip@^1.6.6: yauzl "^2.10.0" falafel@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.2.4.tgz#b5d86c060c2412a43166243cb1bce44d1abd2819" - integrity sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ== + version "2.2.5" + resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.2.5.tgz#3ccb4970a09b094e9e54fead2deee64b4a589d56" + integrity sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ== dependencies: acorn "^7.1.1" - foreach "^2.0.5" isarray "^2.0.1" - object-keys "^1.0.6" fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" @@ -6889,16 +6873,16 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-fifo@^1.1.0, fast-fifo@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.0.tgz#03e381bcbfb29932d7c3afde6e15e83e05ab4d8b" - integrity sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw== + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== -fast-glob@3.2.12, fast-glob@^3.2.11: +fast-glob@3.2.12: version "3.2.12" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== @@ -6909,10 +6893,10 @@ fast-glob@3.2.12, fast-glob@^3.2.11: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== +fast-glob@^3.2.9, fast-glob@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -6928,7 +6912,7 @@ fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-url-parser@1.1.3: version "1.1.3" @@ -6943,16 +6927,16 @@ fastest-levenshtein@^1.0.16: integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" @@ -6964,9 +6948,9 @@ fd-slicer@~1.1.0: pend "~1.2.0" fetch-retry@^5.0.2: - version "5.0.5" - resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.5.tgz#61079b816b6651d88a022ebd45d51d83aa72b521" - integrity sha512-q9SvpKH5Ka6h7X2C6r1sP31pQoeDb3o6/R9cg21ahfPAqbIOkW9tus1dXfwYb6G6dOI4F7nVS4Q+LSssBGIz0A== + version "5.0.6" + resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-5.0.6.tgz#17d0bc90423405b7a88b74355bf364acd2a7fa56" + integrity sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ== fflate@^0.6.9: version "0.6.10" @@ -6995,13 +6979,13 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-system-cache@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-2.1.1.tgz#25bb4019f7d62b458f4bed45452b638e41f6412b" - integrity sha512-vgZ1uDsK29DM4pptUOv47zdJO2tYM5M/ERyAE9Jk0QBN6e64Md+a+xJSOp68dCCDH4niFMVD8nC8n8A5ic0bmg== +file-system-cache@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-2.3.0.tgz#201feaf4c8cd97b9d0d608e96861bb6005f46fe6" + integrity sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ== dependencies: - fs-extra "^11.1.0" - ramda "^0.28.0" + fs-extra "11.1.1" + ramda "0.29.0" filelist@^1.0.4: version "1.0.4" @@ -7013,7 +6997,7 @@ filelist@^1.0.4: fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -7066,7 +7050,7 @@ find-root@^1.1.0: find-up@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== dependencies: locate-path "^2.0.0" @@ -7109,22 +7093,23 @@ find-versions@^5.1.0: semver-regex "^4.0.5" flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" + integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== dependencies: - flatted "^3.1.0" + flatted "^3.2.7" + keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.1.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== +flatted@^3.2.7: + version "3.2.9" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== flow-parser@0.*: - version "0.206.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.206.0.tgz#f4f794f8026535278393308e01ea72f31000bfef" - integrity sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w== + version "0.216.1" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.216.1.tgz#eeba9b0b689deeccc34a6b7d2b1f97b8f943afc0" + integrity sha512-wstw46/C/8bRv/8RySCl15lK376j8DHxm41xFjD9eVL+jSS1UmVpbdLdA0LzGuS2v5uGgQiBLEj6mgSJQwW+MA== for-each@^0.3.3: version "0.3.3" @@ -7136,12 +7121,7 @@ for-each@^0.3.3: for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== foreground-child@^2.0.0: version "2.0.0" @@ -7172,10 +7152,10 @@ fork-ts-checker-webpack-plugin@^4.1.0: tapable "^1.0.0" worker-rpc "^0.1.0" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -7189,7 +7169,7 @@ forwarded@0.2.0: fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== dependencies: map-cache "^0.2.2" @@ -7201,7 +7181,7 @@ fresh@0.5.2: from2@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== dependencies: inherits "^2.0.1" readable-stream "^2.0.0" @@ -7211,7 +7191,7 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^11.0.0, fs-extra@^11.1.0: +fs-extra@11.1.1, fs-extra@^11.0.0, fs-extra@^11.1.0: version "11.1.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== @@ -7247,62 +7227,47 @@ fs-minipass@^2.0.0: minipass "^3.0.0" fs-minipass@^3.0.0, fs-minipass@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.2.tgz#5b383858efa8c1eb8c33b39e994f7e8555b8b3a3" - integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g== + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== dependencies: - minipass "^5.0.0" + minipass "^7.0.3" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== +function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== -functions-have-names@^1.2.2, functions-have-names@^1.2.3: +functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" - gauge@^4.0.3: version "4.0.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" @@ -7334,7 +7299,7 @@ gauge@^5.0.0: gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -7355,16 +7320,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== @@ -7374,6 +7330,11 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: has-proto "^1.0.1" has-symbols "^1.0.3" +get-nonce@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" + integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== + get-npm-tarball-url@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/get-npm-tarball-url/-/get-npm-tarball-url-2.0.3.tgz#67dff908d699e9e2182530ae6e939a93e5f8dfdb" @@ -7407,9 +7368,14 @@ get-stream@^6.0.0, get-stream@^6.0.1: integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-stream@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-7.0.0.tgz#f5695721f481f5581beb9d11cb90c41ddfceea18" - integrity sha512-ql6FW5b8tgMYvI4UaoxG3EQN3VyZ6VeQpxNBGg5BZ4xD4u+HJeprzhMMA4OCBEGQgSR+m87pstWMpiVW64W8Fw== + version "7.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-7.0.1.tgz#1664dfe7d1678540ea6a4da3ae7cd59bf4e4a91e" + integrity sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ== + +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== get-symbol-description@^1.0.0: version "1.0.0" @@ -7432,7 +7398,7 @@ get-uri@^6.0.1: get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== giget@^1.0.0: version "1.1.2" @@ -7489,30 +7455,23 @@ glob-promise@^4.2.0: dependencies: "@types/glob" "^7.1.3" -glob-promise@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-6.0.2.tgz#7c7f2a223e3aaa8f7bd7ff5f24d0ab2352724b31" - integrity sha512-Ni2aDyD1ekD6x8/+K4hDriRDbzzfuK4yKpqSymJ4P7IxbtARiOOuU+k40kbHM0sLIlbf1Qh0qdMkAHMZYE6XJQ== - dependencies: - "@types/glob" "^8.0.0" - glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^10.2.2, glob@^10.2.7: - version "10.3.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.1.tgz#9789cb1b994515bedb811a6deca735b5c37d2bf4" - integrity sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw== +glob@^10.0.0, glob@^10.2.2, glob@^10.2.7: + version "10.3.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.4.tgz#c85c9c7ab98669102b6defda76d35c5b1ef9766f" + integrity sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ== dependencies: foreground-child "^3.1.0" jackspeak "^2.0.3" minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2" - path-scurry "^1.10.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" -glob@^7.0.0, glob@^7.1.6, glob@^7.2.0: +glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -7524,33 +7483,10 @@ glob@^7.0.0, glob@^7.1.6, glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.5, glob@^7.1.3, glob@^7.1.4: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - global-dirs@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== dependencies: ini "^1.3.4" @@ -7568,9 +7504,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.6.0, globals@^13.9.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + version "13.21.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.21.0.tgz#163aae12f34ef502f5153cfbdd3600f36c63c571" + integrity sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg== dependencies: type-fest "^0.20.2" @@ -7581,7 +7517,7 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" -globby@^11.0.1, globby@^11.0.2, globby@^11.0.4, globby@^11.1.0: +globby@^11.0.1, globby@^11.0.2, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -7594,20 +7530,20 @@ globby@^11.0.1, globby@^11.0.2, globby@^11.0.4, globby@^11.1.0: slash "^3.0.0" globby@^13.1.4: - version "13.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.0.tgz#7dd5678d765c4680c2e6d106230d86cb727cb1af" - integrity sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ== + version "13.2.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" + integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== dependencies: dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" + fast-glob "^3.3.0" + ignore "^5.2.4" merge2 "^1.4.1" slash "^4.0.0" glsl-inject-defines@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz#dd1aacc2c17fcb2bd3fc32411c6633d0d7b60fd4" - integrity sha1-3RqswsF/yyvT/DJBHGYz0Ne2D9Q= + integrity sha512-W49jIhuDtF6w+7wCMcClk27a2hq8znvHtlGnrYkSWEr8tHe9eA2dcnohlcAmxLYBSpSSdzOkRdyPTrx9fw49+A== dependencies: glsl-token-inject-block "^1.0.0" glsl-token-string "^1.0.1" @@ -7616,12 +7552,12 @@ glsl-inject-defines@^1.0.1: glsl-noise@^0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/glsl-noise/-/glsl-noise-0.0.0.tgz#367745f3a33382c0eeec4cb54b7e99cfc1d7670b" - integrity sha1-NndF86MzgsDu7Ey1S36Zz8HXZws= + integrity sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w== glsl-resolve@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/glsl-resolve/-/glsl-resolve-0.0.1.tgz#894bef73910d792c81b5143180035d0a78af76d3" - integrity sha1-iUvvc5ENeSyBtRQxgANdCnivdtM= + integrity sha512-xxFNsfnhZTK9NBhzJjSBGX6IOqYpvBHxxmo+4vapiljyGNCY0Bekzn0firQkQrazK59c1hYxMDxYS8MDlhw4gA== dependencies: resolve "^0.6.1" xtend "^2.1.2" @@ -7629,24 +7565,24 @@ glsl-resolve@0.0.1: glsl-token-assignments@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz#a5d82ab78499c2e8a6b83cb69495e6e665ce019f" - integrity sha1-pdgqt4SZwuimuDy2lJXm5mXOAZ8= + integrity sha512-OwXrxixCyHzzA0U2g4btSNAyB2Dx8XrztY5aVUCjRSh4/D0WoJn8Qdps7Xub3sz6zE73W3szLrmWtQ7QMpeHEQ== glsl-token-defines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz#cb892aa959936231728470d4f74032489697fa9d" - integrity sha1-y4kqqVmTYjFyhHDU90AySJaX+p0= + integrity sha512-Vb5QMVeLjmOwvvOJuPNg3vnRlffscq2/qvIuTpMzuO/7s5kT+63iL6Dfo2FYLWbzuiycWpbC0/KV0biqFwHxaQ== dependencies: glsl-tokenizer "^2.0.0" glsl-token-depth@^1.1.0, glsl-token-depth@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz#23c5e30ee2bd255884b4a28bc850b8f791e95d84" - integrity sha1-I8XjDuK9JViEtKKLyFC495HpXYQ= + integrity sha512-eQnIBLc7vFf8axF9aoi/xW37LSWd2hCQr/3sZui8aBJnksq9C7zMeUYHVJWMhFzXrBU7fgIqni4EhXVW4/krpg== glsl-token-descope@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz#0fc90ab326186b82f597b2e77dc9e21efcd32076" - integrity sha1-D8kKsyYYa4L1l7LnfcniHvzTIHY= + integrity sha512-kS2PTWkvi/YOeicVjXGgX5j7+8N7e56srNDEHDTVZ1dcESmbmpmgrnpjPcjxJjMxh56mSXYoFdZqb90gXkGjQw== dependencies: glsl-token-assignments "^2.0.0" glsl-token-depth "^1.1.0" @@ -7656,27 +7592,27 @@ glsl-token-descope@^1.0.2: glsl-token-inject-block@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz#e1015f5980c1091824adaa2625f1dfde8bd00034" - integrity sha1-4QFfWYDBCRgkraomJfHf3ovQADQ= + integrity sha512-q/m+ukdUBuHCOtLhSr0uFb/qYQr4/oKrPSdIK2C4TD+qLaJvqM9wfXIF/OOBjuSA3pUoYHurVRNao6LTVVUPWA== glsl-token-properties@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz#483dc3d839f0d4b5c6171d1591f249be53c28a9e" - integrity sha1-SD3D2Dnw1LXGFx0VkfJJvlPCip4= + integrity sha512-dSeW1cOIzbuUoYH0y+nxzwK9S9O3wsjttkq5ij9ZGw0OS41BirKJzzH48VLm8qLg+au6b0sINxGC0IrGwtQUcA== glsl-token-scope@^1.1.0, glsl-token-scope@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz#a1728e78df24444f9cb93fd18ef0f75503a643b1" - integrity sha1-oXKOeN8kRE+cuT/RjvD3VQOmQ7E= + integrity sha512-YKyOMk1B/tz9BwYUdfDoHvMIYTGtVv2vbDSLh94PT4+f87z21FVdou1KNKgF+nECBTo0fJ20dpm0B1vZB1Q03A== glsl-token-string@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/glsl-token-string/-/glsl-token-string-1.0.1.tgz#59441d2f857de7c3449c945666021ece358e48ec" - integrity sha1-WUQdL4V958NEnJRWZgIezjWOSOw= + integrity sha512-1mtQ47Uxd47wrovl+T6RshKGkRRCYWhnELmkEcUAPALWGTFe2XZpH3r45XAwL2B6v+l0KNsCnoaZCSnhzKEksg== glsl-token-whitespace-trim@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz#46d1dfe98c75bd7d504c05d7d11b1b3e9cc93b10" - integrity sha1-RtHf6Yx1vX1QTAXX0RsbPpzJOxA= + integrity sha512-ZJtsPut/aDaUdLUNtmBYhaCmhIjpKNg7IgZSfX5wFReMc2vnj8zok+gB/3Quqs0TsBSX/fGnqUUYZDqyuc2xLQ== glsl-tokenizer@^2.0.0, glsl-tokenizer@^2.0.2: version "2.1.5" @@ -7753,15 +7689,15 @@ graceful-fs@4.2.10: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -graceful-fs@^4.1.11, graceful-fs@^4.2.11, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== gunzip-maybe@^1.4.2: version "1.4.2" @@ -7776,12 +7712,12 @@ gunzip-maybe@^1.4.2: through2 "^2.0.3" handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: minimist "^1.2.5" - neo-async "^2.6.0" + neo-async "^2.6.2" source-map "^0.6.1" wordwrap "^1.0.0" optionalDependencies: @@ -7792,12 +7728,7 @@ hard-rejection@^2.1.0: resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - -has-bigints@^1.0.2: +has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== @@ -7805,7 +7736,7 @@ has-bigints@^1.0.2: has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" @@ -7824,7 +7755,7 @@ has-proto@^1.0.1: resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: +has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== @@ -7839,12 +7770,12 @@ has-tostringtag@^1.0.0: has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -7853,7 +7784,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -7862,12 +7793,12 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== dependencies: is-number "^3.0.0" kind-of "^4.0.0" @@ -7879,7 +7810,7 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -he@^1.1.0: +he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -7915,15 +7846,22 @@ hosted-git-info@^6.0.0, hosted-git-info@^6.1.1: dependencies: lru-cache "^7.5.1" +hosted-git-info@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.1.tgz#9985fcb2700467fecf7f33a4d4874e30680b5322" + integrity sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA== + dependencies: + lru-cache "^10.0.1" + html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== html-tags@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" - integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== http-cache-semantics@^4.1.1: version "4.1.1" @@ -7974,10 +7912,10 @@ https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: agent-base "6" debug "4" -https-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz#75cb70d04811685667183b31ab158d006750418a" - integrity sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw== +https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.1, https-proxy-agent@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" + integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== dependencies: agent-base "^7.0.2" debug "4" @@ -7997,6 +7935,11 @@ human-signals@^4.3.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -8040,12 +7983,12 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.4, ignore@^5.1.8, ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +ignore@^5.1.4, ignore@^5.2.0, ignore@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -8069,7 +8012,7 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" @@ -8084,7 +8027,7 @@ indent-string@^5.0.0: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" @@ -8117,15 +8060,6 @@ init-package-json@^5.0.0: validate-npm-package-license "^3.0.4" validate-npm-package-name "^5.0.0" -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" @@ -8135,11 +8069,6 @@ internal-slot@^1.0.5: has "^1.0.3" side-channel "^1.0.4" -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - into-stream@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-7.0.0.tgz#d1a211e146be8acfdb84dabcbf00fe8205e72936" @@ -8148,6 +8077,13 @@ into-stream@^7.0.0: from2 "^2.3.0" p-is-promise "^3.0.0" +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + ip-regex@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" @@ -8176,7 +8112,7 @@ is-absolute-url@^3.0.0: is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== dependencies: kind-of "^3.0.2" @@ -8207,7 +8143,14 @@ is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" is-bigint@^1.0.1: version "1.0.4" @@ -8243,16 +8186,11 @@ is-builtin-module@^3.1.0: dependencies: builtin-modules "^3.3.0" -is-callable@^1.1.3, is-callable@^1.2.7: +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== - is-cidr@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" @@ -8260,31 +8198,17 @@ is-cidr@^4.0.2: dependencies: cidr-regex "^3.1.1" -is-core-module@^2.11.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" - integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== - dependencies: - has "^1.0.3" - -is-core-module@^2.5.0, is-core-module@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== - dependencies: - has "^1.0.3" - -is-core-module@^2.9.0: - version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== +is-core-module@^2.13.0, is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: has "^1.0.3" is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== dependencies: kind-of "^3.0.2" @@ -8295,7 +8219,7 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-date-object@^1.0.1: +is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -8333,7 +8257,7 @@ is-docker@^2.0.0, is-docker@^2.1.1: is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extendable@^1.0.1: version "1.0.1" @@ -8345,12 +8269,19 @@ is-extendable@^1.0.1: is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== dependencies: number-is-nan "^1.0.0" @@ -8364,7 +8295,7 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-generator-function@^1.0.7: +is-generator-function@^1.0.10, is-generator-function@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== @@ -8383,17 +8314,27 @@ is-gzip@^1.0.0: resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83" integrity sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ== +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-lambda@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== +is-map@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== -is-nan@^1.2.1: +is-nan@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== @@ -8407,16 +8348,16 @@ is-negative-zero@^2.0.2: integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" - integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== dependencies: kind-of "^3.0.2" @@ -8443,7 +8384,7 @@ is-path-inside@^3.0.2: is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-plain-object@5.0.0, is-plain-object@^5.0.0: version "5.0.0" @@ -8477,10 +8418,10 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-shared-array-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" - integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== +is-set@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== is-shared-array-buffer@^1.0.2: version "1.0.2" @@ -8516,26 +8457,39 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: is-text-path@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== dependencies: text-extensions "^1.0.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.3, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== +is-text-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" + integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" + text-extensions "^2.0.0" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-unicode-supported@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -8543,12 +8497,20 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -is-wsl@^2.1.1, is-wsl@^2.2.0: +is-wsl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -8558,14 +8520,14 @@ is-wsl@^2.1.1, is-wsl@^2.2.0: isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -isarray@^2.0.1: +isarray@^2.0.1, isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== @@ -8573,27 +8535,24 @@ isarray@^2.0.1: isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isomorphic-unfetch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" - integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== - dependencies: - node-fetch "^2.6.1" - unfetch "^4.2.0" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== issue-parser@^6.0.0: version "6.0.0" @@ -8612,9 +8571,9 @@ istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== istanbul-lib-instrument@^5.0.4: - version "5.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" - integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" @@ -8622,24 +8581,24 @@ istanbul-lib-instrument@^5.0.4: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" -istanbul-lib-instrument@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== +istanbul-lib-instrument@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz#7a8af094cbfff1d5bb280f62ce043695ae8dd5b8" + integrity sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw== dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" "@istanbuljs/schema" "^0.1.2" istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" + semver "^7.5.4" istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" + make-dir "^4.0.0" supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: @@ -8652,26 +8611,44 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3, istanbul-reports@^3.1.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + version "3.1.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +iterator.prototype@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" + integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== + dependencies: + define-properties "^1.2.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" + +its-fine@^1.0.6: + version "1.1.1" + resolved "https://registry.yarnpkg.com/its-fine/-/its-fine-1.1.1.tgz#e74b93fddd487441f978a50f64f0f5af4d2fc38e" + integrity sha512-v1Ia1xl20KbuSGlwoaGsW0oxsw8Be+TrXweidxD9oT/1lAh6O3K3/GIM95Tt6WCiv6W+h2M7RB1TwdoAjQyyKw== + dependencies: + "@types/react-reconciler" "^0.28.0" + jackspeak@^2.0.3: - version "2.2.1" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" - integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== + version "2.3.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.3.tgz#95e4cbcc03b3eb357bf6bcce14a903fb3d1151e1" + integrity sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: "@pkgjs/parseargs" "^0.11.0" jake@^10.8.5: - version "10.8.6" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.6.tgz#227a96786a1e035214e0ba84b482d6223d41ef04" - integrity sha512-G43Ub9IYEFfu72sua6rzooi8V8Gz2lkfk48rW20vEWCGizeaEPlKB1Kh8JIA84yQbiAEfqlPmSpGgCKKxH3rDA== + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== dependencies: async "^3.2.3" chalk "^4.0.2" @@ -8683,83 +8660,83 @@ java-properties@^1.0.2: resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== -jest-changed-files@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e" - integrity sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag== +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: execa "^5.0.0" + jest-util "^29.7.0" p-limit "^3.1.0" -jest-circus@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.5.0.tgz#b5926989449e75bff0d59944bae083c9d7fb7317" - integrity sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA== +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== dependencies: - "@jest/environment" "^29.5.0" - "@jest/expect" "^29.5.0" - "@jest/test-result" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^29.5.0" - jest-matcher-utils "^29.5.0" - jest-message-util "^29.5.0" - jest-runtime "^29.5.0" - jest-snapshot "^29.5.0" - jest-util "^29.5.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" p-limit "^3.1.0" - pretty-format "^29.5.0" + pretty-format "^29.7.0" pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.5.0.tgz#b34c20a6d35968f3ee47a7437ff8e53e086b4a67" - integrity sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^29.5.0" - "@jest/test-result" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^29.5.0" - jest-util "^29.5.0" - jest-validate "^29.5.0" - prompts "^2.0.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" yargs "^17.3.1" -jest-config@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.5.0.tgz#3cc972faec8c8aaea9ae158c694541b79f3748da" - integrity sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA== +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.5.0" - "@jest/types" "^29.5.0" - babel-jest "^29.5.0" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^29.5.0" - jest-environment-node "^29.5.0" - jest-get-type "^29.4.3" - jest-regex-util "^29.4.3" - jest-resolve "^29.5.0" - jest-runner "^29.5.0" - jest-util "^29.5.0" - jest-validate "^29.5.0" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^29.5.0" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" @@ -8773,285 +8750,281 @@ jest-diff@^26.0.0: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-diff@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" - integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^29.4.3" - jest-get-type "^29.4.3" - pretty-format "^29.5.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-docblock@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.4.3.tgz#90505aa89514a1c7dceeac1123df79e414636ea8" - integrity sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" -jest-each@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.5.0.tgz#fc6e7014f83eac68e22b7195598de8554c2e5c06" - integrity sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^29.4.3" - jest-util "^29.5.0" - pretty-format "^29.5.0" - -jest-environment-node@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.5.0.tgz#f17219d0f0cc0e68e0727c58b792c040e332c967" - integrity sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw== - dependencies: - "@jest/environment" "^29.5.0" - "@jest/fake-timers" "^29.5.0" - "@jest/types" "^29.5.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^29.5.0" - jest-util "^29.5.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" jest-get-type@^26.3.0: version "26.3.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-get-type@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" - integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-haste-map@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.5.0.tgz#69bd67dc9012d6e2723f20a945099e972b2e94de" - integrity sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.3" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" - jest-regex-util "^29.4.3" - jest-util "^29.5.0" - jest-worker "^29.5.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" jest-image-snapshot@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jest-image-snapshot/-/jest-image-snapshot-6.1.0.tgz#96a17b00530e1358eae657f6c9bb948e29ee7510" - integrity sha512-LZYoks6V1HAkYqyi80gUjMWVsa++Oy0fckAGMLBQseVweZT9AmJNKAINwHLqX1fpeMy2hTG5CCEe4IUX2N3Nmg== + version "6.2.0" + resolved "https://registry.yarnpkg.com/jest-image-snapshot/-/jest-image-snapshot-6.2.0.tgz#b6bfc3e1585ec14b2b0595daf537ae1b4d7f8d13" + integrity sha512-9mTHBKiiSIZ26csbLmjKyN+SrVypM93S5y+jULCvn6YItgepvcrJIKGNeSyt9d2EZiutOroLs/UjtrWiBzpHbA== dependencies: chalk "^4.0.0" get-stdin "^5.0.1" glur "^1.1.2" lodash "^4.17.4" - mkdirp "^0.5.1" pixelmatch "^5.1.0" pngjs "^3.4.0" rimraf "^2.6.2" ssim.js "^3.1.1" -jest-leak-detector@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz#cf4bdea9615c72bac4a3a7ba7e7930f9c0610c8c" - integrity sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: - jest-get-type "^29.4.3" - pretty-format "^29.5.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-matcher-utils@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" - integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw== +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^29.5.0" - jest-get-type "^29.4.3" - pretty-format "^29.5.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-message-util@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" - integrity sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.5.0" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.5.0.tgz#26e2172bcc71d8b0195081ff1f146ac7e1518aed" - integrity sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-util "^29.5.0" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== -jest-regex-util@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" - integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-resolve-dependencies@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz#f0ea29955996f49788bf70996052aa98e7befee4" - integrity sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg== +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - jest-regex-util "^29.4.3" - jest-snapshot "^29.5.0" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.5.0.tgz#b053cc95ad1d5f6327f0ac8aae9f98795475ecdc" - integrity sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w== +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^29.5.0" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^29.5.0" - jest-validate "^29.5.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.5.0.tgz#6a57c282eb0ef749778d444c1d758c6a7693b6f8" - integrity sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^29.5.0" - "@jest/environment" "^29.5.0" - "@jest/test-result" "^29.5.0" - "@jest/transform" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^29.4.3" - jest-environment-node "^29.5.0" - jest-haste-map "^29.5.0" - jest-leak-detector "^29.5.0" - jest-message-util "^29.5.0" - jest-resolve "^29.5.0" - jest-runtime "^29.5.0" - jest-util "^29.5.0" - jest-watcher "^29.5.0" - jest-worker "^29.5.0" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.5.0.tgz#c83f943ee0c1da7eb91fa181b0811ebd59b03420" - integrity sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw== - dependencies: - "@jest/environment" "^29.5.0" - "@jest/fake-timers" "^29.5.0" - "@jest/globals" "^29.5.0" - "@jest/source-map" "^29.4.3" - "@jest/test-result" "^29.5.0" - "@jest/transform" "^29.5.0" - "@jest/types" "^29.5.0" +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^29.5.0" - jest-message-util "^29.5.0" - jest-mock "^29.5.0" - jest-regex-util "^29.4.3" - jest-resolve "^29.5.0" - jest-snapshot "^29.5.0" - jest-util "^29.5.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.5.0.tgz#c9c1ce0331e5b63cd444e2f95a55a73b84b1e8ce" - integrity sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" "@babel/plugin-syntax-jsx" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.5.0" - "@jest/transform" "^29.5.0" - "@jest/types" "^29.5.0" - "@types/babel__traverse" "^7.0.6" - "@types/prettier" "^2.1.5" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^29.5.0" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^29.5.0" - jest-get-type "^29.4.3" - jest-matcher-utils "^29.5.0" - jest-message-util "^29.5.0" - jest-util "^29.5.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^29.5.0" - semver "^7.3.5" + pretty-format "^29.7.0" + semver "^7.5.3" -jest-util@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" - integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.5.0.tgz#8e5a8f36178d40e47138dc00866a5f3bd9916ffc" - integrity sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ== +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^29.4.3" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^29.5.0" + pretty-format "^29.7.0" -jest-watcher@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.5.0.tgz#cf7f0f949828ba65ddbbb45c743a382a4d911363" - integrity sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.13.1" - jest-util "^29.5.0" + jest-util "^29.7.0" string-length "^4.0.1" jest-worker@^26.2.1: @@ -9063,25 +9036,25 @@ jest-worker@^26.2.1: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" - integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" - jest-util "^29.5.0" + jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" jest@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e" - integrity sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ== + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^29.5.0" - "@jest/types" "^29.5.0" + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^29.5.0" + jest-cli "^29.7.0" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -9136,7 +9109,12 @@ jsesc@^2.5.1: jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-better-errors@^1.0.1: version "1.0.2" @@ -9166,7 +9144,7 @@ json-schema-traverse@^1.0.0: json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-stringify-nice@^1.1.4: version "1.1.4" @@ -9185,12 +9163,7 @@ json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== - -json5@^2.2.2: +json5@^2.1.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -9219,15 +9192,17 @@ jsonfile@^6.0.1: jsonparse@^1.2.0, jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== "jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" - integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA== + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== dependencies: - array-includes "^3.1.3" - object.assign "^4.1.2" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" just-diff-apply@^5.2.0: version "5.5.0" @@ -9239,17 +9214,24 @@ just-diff@^6.0.0: resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== +keyv@^4.5.3: + version "4.5.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" + integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + dependencies: + json-buffer "3.0.1" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== dependencies: is-buffer "^1.1.5" @@ -9298,7 +9280,7 @@ levn@^0.4.1: levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" @@ -9311,12 +9293,12 @@ libnpmaccess@^7.0.2: npm-package-arg "^10.1.0" npm-registry-fetch "^14.0.3" -libnpmdiff@^5.0.18: - version "5.0.18" - resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-5.0.18.tgz#58dae566f30f4ebcd1de8834530a3da739555623" - integrity sha512-KJeZxdI+tvsJMjFvyDOqg4lkcewRU8njf7N97uJXhW6IWr0w2nvICnHq5jt7gcmo2I9p9Tq6cu+6q+/2DrK9qg== +libnpmdiff@^5.0.19: + version "5.0.19" + resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-5.0.19.tgz#c56a8b1fcd7690f12e527c0ab21dbdbd259c27fe" + integrity sha512-caqIA7SzPeyqOn55GodejyEJRIXaFnzuqxrO9uyXtH4soom4wjDAkU97L1WrBSuVtDk3IZQD72daVeT2GqHSjA== dependencies: - "@npmcli/arborist" "^6.2.10" + "@npmcli/arborist" "^6.3.0" "@npmcli/disparity-colors" "^3.0.0" "@npmcli/installed-package-contents" "^2.0.2" binary-extensions "^2.2.0" @@ -9326,12 +9308,12 @@ libnpmdiff@^5.0.18: pacote "^15.0.8" tar "^6.1.13" -libnpmexec@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-6.0.1.tgz#187aac7f49b5ad4be1c0c446716f74a9adaeae02" - integrity sha512-4CLWMjGSthYC/UED6Z2rNN6oR/5kHqddmfArP4L6mdGefLU3aA7SnjLIGsFmc92Bkj4ktnqj3OwD5mYI81nOkw== +libnpmexec@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-6.0.3.tgz#f7ea9c028443d890297e1bbe2d5605f68b118470" + integrity sha512-E87xEzxChUe0qZgoqht5D5t13B876rPoTD877v9ZUSMztBFpuChQn5UNO3z5NaeBpEwWq/BAnQfMYRWR6sVAZA== dependencies: - "@npmcli/arborist" "^6.2.10" + "@npmcli/arborist" "^6.3.0" "@npmcli/run-script" "^6.0.0" ci-info "^3.7.1" npm-package-arg "^10.1.0" @@ -9343,12 +9325,12 @@ libnpmexec@^6.0.1: semver "^7.3.7" walk-up-path "^3.0.1" -libnpmfund@^4.0.18: - version "4.0.18" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-4.0.18.tgz#30593edfaa4becc51a1df2b7a715a295aa1da327" - integrity sha512-pJaWkHal9/qncuVQWoqzFvZ7vSBz9YvoBO+q/R+Sq4WYZMsB1qrVCzbYCYhLqfVlSUNV/6DH0BF3AUckHHOhIQ== +libnpmfund@^4.0.19: + version "4.1.1" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-4.1.1.tgz#d2093d6e47e3bd1cf34ef5eb01b9bb31db0e027b" + integrity sha512-ILL3sDhEqF2iYFBPqraFW/Ma8cDZbbSAf3NJsGBrmw0i7k5wpC4tjBhBxLy43wzRq/bxnijb3jS7Flq6GwjQDw== dependencies: - "@npmcli/arborist" "^6.2.10" + "@npmcli/arborist" "^7.1.0" libnpmhook@^9.0.3: version "9.0.3" @@ -9366,20 +9348,20 @@ libnpmorg@^5.0.4: aproba "^2.0.0" npm-registry-fetch "^14.0.3" -libnpmpack@^5.0.18: - version "5.0.18" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-5.0.18.tgz#bdabd7798a98a0241a5078df2902cd17049789c0" - integrity sha512-Xvb8FkULAY9VXqMCh+S9bl7bb6l/j+xDXRsfyP0nSezW8QklFA4VWLgZgm9PdGupZWC759CYaIPaaXTkIUPYag== +libnpmpack@^5.0.19: + version "5.0.19" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-5.0.19.tgz#e9790ebbcb078469d59dbb7e5ee7defe3039cc22" + integrity sha512-xxkROnxTZF3imCJ9ve+6ELtRYvOBMwvrKlMGJx6JhmvD5lqIPGOJpY8oY+w8XLmLX1N06scYuLonkFpF2ayrjQ== dependencies: - "@npmcli/arborist" "^6.2.10" + "@npmcli/arborist" "^6.3.0" "@npmcli/run-script" "^6.0.0" npm-package-arg "^10.1.0" pacote "^15.0.8" -libnpmpublish@^7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.4.0.tgz#c396e0a56adc1511105cd4d4dec8798b3a5c2680" - integrity sha512-DoMMLif02eWBRDhKMov2TKFEexYaUD24L4QPfbteND2CdgrxCTRM4o8sj0XKcylcwcRxcp8i/IKeWTq0lPP53g== +libnpmpublish@^7.5.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.5.0.tgz#a118c8fdc680947c960648ed8b4c94d15e42e0ab" + integrity sha512-zctH6QcTJ093lpxmkufr2zr3AJ9V90hcRilDFNin6n91ODj+S28RdyMFFJpa9NwyztmyV2hlWLyZv0GaOQBDyA== dependencies: ci-info "^3.6.1" normalize-package-data "^5.0.0" @@ -9437,9 +9419,9 @@ load-json-file@^4.0.0: strip-bom "^3.0.0" loader-utils@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" - integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" @@ -9448,7 +9430,7 @@ loader-utils@^2.0.0: locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: p-locate "^2.0.0" path-exists "^3.0.0" @@ -9500,7 +9482,7 @@ lodash.clamp@^4.0.3: lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.escaperegexp@^4.1.2: version "4.1.2" @@ -9535,7 +9517,7 @@ lodash.omit@^4.5.0: lodash.pick@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= + integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== lodash.truncate@^4.4.2: version "4.4.2" @@ -9552,13 +9534,26 @@ lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -loose-envify@^1.1.0, loose-envify@^1.4.0: +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" +lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": + version "10.0.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" + integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -9578,15 +9573,10 @@ lru-cache@^7.14.1, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -"lru-cache@^9.1.1 || ^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" - integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== - -maath@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/maath/-/maath-0.6.0.tgz#7841d0fb95bbb37d19b08b7c5458ef70190950d2" - integrity sha512-dSb2xQuP7vDnaYqfoKzlApeRcR2xtN8/f7WV/TMAkBC8552TwTLtOO0JTcSygkYMjNDPoo6V01jTw/aPi4JrMw== +maath@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/maath/-/maath-0.9.0.tgz#425a9600dfc5d0aecfa48029a2e3eea852531b06" + integrity sha512-aAR8hoUqPxlsU8VOxkS9y37jhUzdUxM017NpCuxFU1Gk+nMaZASZxymZrV8LRSHzRk/watlbfyNKu6XPUhCFrQ== magic-string@^0.25.7: version "0.25.9" @@ -9602,6 +9592,13 @@ magic-string@^0.27.0: dependencies: "@jridgewell/sourcemap-codec" "^1.4.13" +magic-string@^0.30.0: + version "0.30.3" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.3.tgz#403755dfd9d6b398dfa40635d52e96c5ac095b85" + integrity sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -9610,13 +9607,20 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: +make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" @@ -9643,6 +9647,23 @@ make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.0.3, socks-proxy-agent "^7.0.0" ssri "^10.0.0" +make-fetch-happen@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz#705d6f6cbd7faecb8eac2432f551e49475bfedf0" + integrity sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A== + dependencies: + "@npmcli/agent" "^2.0.0" + cacache "^18.0.0" + http-cache-semantics "^4.1.1" + is-lambda "^1.0.1" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + ssri "^10.0.0" + makeerror@1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" @@ -9653,19 +9674,19 @@ makeerror@1.0.12: map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== map-limit@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/map-limit/-/map-limit-0.0.1.tgz#eb7961031c0f0e8d001bf2d56fab685d58822f38" - integrity sha1-63lhAxwPDo0AG/LVb6toXViCLzg= + integrity sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg== dependencies: once "~1.3.0" map-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== map-obj@^4.0.0: version "4.3.0" @@ -9675,19 +9696,19 @@ map-obj@^4.0.0: map-or-similar@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" - integrity sha1-beJlMXSt+12e3DPGnT6Sobdvrwg= + integrity sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg== map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== dependencies: object-visit "^1.0.0" markdown-to-jsx@^7.1.8: - version "7.2.0" - resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.2.0.tgz#e7b46b65955f6a04d48a753acd55874a14bdda4b" - integrity sha512-3l4/Bigjm4bEqjCR6Xr+d4DtM1X6vvtGsMGSjJYyep8RjjIvcWtrXBS8Wbfe1/P+atKNMccpsraESIaWVplzVg== + version "7.3.2" + resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.3.2.tgz#f286b4d112dad3028acc1e77dfe1f653b347e131" + integrity sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q== marked-terminal@^5.1.1: version "5.2.0" @@ -9702,9 +9723,9 @@ marked-terminal@^5.1.1: supports-hyperlinks "^2.3.0" marked@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-5.1.0.tgz#cf51f03ba04dfb3469774029fd0106d258658767" - integrity sha512-z3/nBe7aTI8JDszlYLk7dDVNpngjw0o1ZJtrA9kIfkkHcIF+xH7mO23aISl4WxP83elU+MFROgahqdpd05lMEQ== + version "5.1.2" + resolved "https://registry.yarnpkg.com/marked/-/marked-5.1.2.tgz#62b5ccfc75adf72ca3b64b2879b551d89e77677f" + integrity sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg== mdast-util-definitions@^4.0.0: version "4.0.0" @@ -9731,10 +9752,15 @@ memoize-one@^6.0.0: memoizerific@^1.11.3: version "1.11.3" resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" - integrity sha1-fIekZGREwy11Q4VwkF8tvRsagFo= + integrity sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog== dependencies: map-or-similar "^1.5.0" +meow@^12.0.1: + version "12.1.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-12.1.1.tgz#e558dddbab12477b69b2e9a2728c327f191bace6" + integrity sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw== + meow@^8.0.0, meow@^8.1.2: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" @@ -9861,7 +9887,7 @@ mimic-fn@^4.0.0: min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== dependencies: dom-walk "^0.1.0" @@ -9884,10 +9910,10 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.0, minimatch@^9.0.1: - version "9.0.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.2.tgz#397e387fff22f6795844d00badc903a3d5de7057" - integrity sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg== +minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: brace-expansion "^2.0.1" @@ -9900,15 +9926,10 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -minimist@^1.2.5, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^1.0.2: version "1.0.2" @@ -9918,11 +9939,11 @@ minipass-collect@^1.0.2: minipass "^3.0.0" minipass-fetch@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce" - integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ== + version "3.0.4" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" + integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== dependencies: - minipass "^5.0.0" + minipass "^7.0.3" minipass-sized "^1.0.3" minizlib "^2.1.2" optionalDependencies: @@ -9969,10 +9990,10 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" - integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974" + integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg== minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" @@ -10000,7 +10021,7 @@ mkdirp-classic@^0.5.2: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@^0.5.1, mkdirp@^0.5.4: +mkdirp@^0.5.4: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== @@ -10030,7 +10051,7 @@ mri@^1.1.5, mri@^1.2.0: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.1: version "2.1.1" @@ -10061,14 +10082,14 @@ multimatch@^4.0.0: murmurhash-js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" - integrity sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E= + integrity sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw== mute-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== -nanoid@^3.3.1, nanoid@^3.3.6: +nanoid@^3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== @@ -10090,17 +10111,22 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@0.6.3, negotiator@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: +neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -10130,21 +10156,14 @@ node-emoji@^1.11.0: lodash "^4.17.21" node-fetch-native@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.1.1.tgz#b8977dd7fe6c5599e417301ed3987bca787d3d6f" - integrity sha512-9VvspTSUp2Sxbl+9vbZTlFGq9lHwE8GDVVekxx6YsNd1YH59sb3Ba8v3Y3cD8PkLNcileGGcA21PFjVl0jzDaw== - -node-fetch@^2.6.1, node-fetch@^2.6.7: - version "2.6.11" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" - integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== - dependencies: - whatwg-url "^5.0.0" + version "1.4.0" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.4.0.tgz#fbe8ac033cb6aa44bd106b5e4fd2b6277ba70fa1" + integrity sha512-F5kfEj95kX8tkDhUCYdV8dg3/8Olx/94zB8+ZNthFs6Bz31UpUi8Xh40TN3thLwXgrwXry1pEg9lJ++tLWTcqA== -node-fetch@^2.6.11: - version "2.6.12" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" - integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== +node-fetch@^2.0.0, node-fetch@^2.6.12: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" @@ -10168,22 +10187,17 @@ node-gyp@^9.0.0, node-gyp@^9.4.0: node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-releases@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" - integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== +node-releases@^2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== noms@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" - integrity sha1-2o69nzr51nYJGbJ9nNyAkqczKFk= + integrity sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow== dependencies: inherits "^2.0.1" readable-stream "~1.0.31" @@ -10212,7 +10226,7 @@ normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^3.0.0, normalize-package-data@^3.0.2: +normalize-package-data@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== @@ -10232,6 +10246,16 @@ normalize-package-data@^5.0.0: semver "^7.3.5" validate-npm-package-license "^3.0.4" +normalize-package-data@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.0.tgz#68a96b3c11edd462af7189c837b6b1064a484196" + integrity sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg== + dependencies: + hosted-git-info "^7.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -10254,14 +10278,14 @@ npm-bundled@^3.0.0: dependencies: npm-normalize-package-bin "^3.0.0" -npm-install-checks@^6.0.0, npm-install-checks@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.1.1.tgz#b459b621634d06546664207fde16810815808db1" - integrity sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw== +npm-install-checks@^6.0.0, npm-install-checks@^6.1.1, npm-install-checks@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.2.0.tgz#fae55b9967b03ac309695ec96629492d5cedf371" + integrity sha512-744wat5wAAHsxa4590mWO0tJ8PKxR8ORZsH9wGpQc3nWTzozMAgBN/XyqYw7mg3yqLM8dLwEnwSfKMmXAjF69g== dependencies: semver "^7.1.1" -npm-normalize-package-bin@^3.0.0, npm-normalize-package-bin@^3.0.1: +npm-normalize-package-bin@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== @@ -10276,6 +10300,16 @@ npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: semver "^7.3.5" validate-npm-package-name "^5.0.0" +npm-package-arg@^11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.1.tgz#f208b0022c29240a1c532a449bdde3f0a4708ebc" + integrity sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ== + dependencies: + hosted-git-info "^7.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + npm-packlist@^7.0.0: version "7.0.4" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" @@ -10283,16 +10317,33 @@ npm-packlist@^7.0.0: dependencies: ignore-walk "^6.0.0" +npm-packlist@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-8.0.0.tgz#4e7f51fe1d5e69b19508ed8dc6cd3ae2e7b38c17" + integrity sha512-ErAGFB5kJUciPy1mmx/C2YFbvxoJ0QJ9uwkCZOeR6CqLLISPZBOiFModAbSXnjjlwW5lOhuhXva+fURsSGJqyw== + dependencies: + ignore-walk "^6.0.0" + npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz#c6acd97d1ad4c5dbb80eac7b386b03ffeb289e5f" - integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== + version "8.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz#2159778d9c7360420c925c1a2287b5a884c713aa" + integrity sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg== dependencies: npm-install-checks "^6.0.0" npm-normalize-package-bin "^3.0.0" npm-package-arg "^10.0.0" semver "^7.3.5" +npm-pick-manifest@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz#f87a4c134504a2c7931f2bb8733126e3c3bb7e8f" + integrity sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg== + dependencies: + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^11.0.0" + semver "^7.3.5" + npm-profile@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-7.0.1.tgz#a37dae08b22e662ece2c6e08946f9fcd9fdef663" @@ -10314,6 +10365,19 @@ npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0 npm-package-arg "^10.0.0" proc-log "^3.0.0" +npm-registry-fetch@^16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-16.0.0.tgz#7529dd7c64c16a1bc8af72f99df73dfe98bb9549" + integrity sha512-JFCpAPUpvpwfSydv99u85yhP68rNIxSFmDpNbNnRWKSe3gpjHnWL8v320gATwRzjtgmZ9Jfe37+ZPOLZPwz6BQ== + dependencies: + make-fetch-happen "^13.0.0" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^11.0.0" + proc-log "^3.0.0" + npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -10334,20 +10398,22 @@ npm-user-validate@^2.0.0: integrity sha512-sSWeqAYJ2dUPStJB+AEj0DyLRltr/f6YNcvCA7phkB8/RMLMnVsQ41GMwHo/ERZLYNDsyB2wPm7pZo1mqPOl7Q== npm@^9.5.0: - version "9.7.2" - resolved "https://registry.yarnpkg.com/npm/-/npm-9.7.2.tgz#95fdbba1b3b8e918f253cac1a45b38655f324ed5" - integrity sha512-LLoOudiSURxzRxfGj+vsD+hKKv2EfxyshDOznxruIkZMouvbaF5sFm4yAwHqxS8aVaOdRl03pRmGpcrFMqMt3g== + version "9.8.1" + resolved "https://registry.yarnpkg.com/npm/-/npm-9.8.1.tgz#b8f070cc770128b38017160491504184863329f0" + integrity sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw== dependencies: "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^6.2.10" + "@npmcli/arborist" "^6.3.0" "@npmcli/config" "^6.2.1" + "@npmcli/fs" "^3.1.0" "@npmcli/map-workspaces" "^3.0.4" - "@npmcli/package-json" "^3.1.1" + "@npmcli/package-json" "^4.0.1" + "@npmcli/promise-spawn" "^6.0.2" "@npmcli/run-script" "^6.0.2" abbrev "^2.0.0" archy "~1.0.0" cacache "^17.1.3" - chalk "^5.2.0" + chalk "^5.3.0" ci-info "^3.8.0" cli-columns "^4.0.0" cli-table3 "^0.6.3" @@ -10362,18 +10428,18 @@ npm@^9.5.0: is-cidr "^4.0.2" json-parse-even-better-errors "^3.0.0" libnpmaccess "^7.0.2" - libnpmdiff "^5.0.18" - libnpmexec "^6.0.1" - libnpmfund "^4.0.18" + libnpmdiff "^5.0.19" + libnpmexec "^6.0.3" + libnpmfund "^4.0.19" libnpmhook "^9.0.3" libnpmorg "^5.0.4" - libnpmpack "^5.0.18" - libnpmpublish "^7.4.0" + libnpmpack "^5.0.19" + libnpmpublish "^7.5.0" libnpmsearch "^6.0.2" libnpmteam "^5.0.3" libnpmversion "^4.0.2" make-fetch-happen "^11.1.1" - minimatch "^9.0.0" + minimatch "^9.0.3" minipass "^5.0.0" minipass-pipeline "^1.2.4" ms "^2.1.2" @@ -10393,10 +10459,10 @@ npm@^9.5.0: proc-log "^3.0.0" qrcode-terminal "^0.12.0" read "^2.1.0" - semver "^7.5.2" - sigstore "^1.6.0" + semver "^7.5.4" + sigstore "^1.7.0" ssri "^10.0.4" - supports-color "^9.3.1" + supports-color "^9.4.0" tar "^6.1.15" text-table "~0.2.0" tiny-relative-date "^1.3.0" @@ -10415,16 +10481,6 @@ npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - npmlog@^6.0.0: version "6.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" @@ -10448,33 +10504,28 @@ npmlog@^7.0.1: number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.12.0, object-inspect@^1.9.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" - integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== - -object-inspect@^1.12.3: +object-inspect@^1.12.3, object-inspect@^1.9.0: version "1.12.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== -object-is@^1.0.1: +object-is@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== @@ -10482,7 +10533,7 @@ object-is@^1.0.1: call-bind "^1.0.2" define-properties "^1.1.3" -object-keys@^1.0.12, object-keys@^1.0.6, object-keys@^1.1.1: +object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -10490,20 +10541,10 @@ object-keys@^1.0.12, object-keys@^1.0.6, object-keys@^1.1.1: object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== dependencies: isobject "^3.0.0" -object.assign@^4.1.0, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - object.assign@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" @@ -10515,46 +10556,56 @@ object.assign@^4.1.4: object-keys "^1.1.1" object.entries@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" - integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" + integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +object.groupby@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" object.hasown@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" - integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" + integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== dependencies: - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" on-finished@2.4.1: version "2.4.1" @@ -10571,14 +10622,14 @@ on-headers@~1.0.2: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" once@~1.3.0: version "1.3.3" resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" - integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA= + integrity sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w== dependencies: wrappy "1" @@ -10596,15 +10647,7 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" -open@^7.0.3: - version "7.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - -open@^8.4.0: +open@^8.0.4, open@^8.4.0: version "8.4.2" resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== @@ -10645,6 +10688,21 @@ optionator@^0.9.1: prelude-ls "^1.2.1" type-check "^0.4.0" +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + p-each-series@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-3.0.0.tgz#d1aed5e96ef29864c897367a7d2a628fdc960806" @@ -10693,7 +10751,7 @@ p-limit@^4.0.0: p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: p-limit "^1.1.0" @@ -10747,32 +10805,33 @@ p-reduce@^3.0.0: p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pac-proxy-agent@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-6.0.3.tgz#61042187093b67aa7dd05b41e4ec7c241a27c428" - integrity sha512-5Hr1KgPDoc21Vn3rsXBirwwDnF/iac1jN/zkpsOYruyT+ZgsUhUOgVwq3v9+ukjZd/yGm/0nzO1fDfl7rkGoHQ== +pac-proxy-agent@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz#6b9ddc002ec3ff0ba5fdf4a8a21d363bcc612d75" + integrity sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A== dependencies: + "@tootallnate/quickjs-emscripten" "^0.23.0" agent-base "^7.0.2" debug "^4.3.4" get-uri "^6.0.1" http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.0" - pac-resolver "^6.0.1" - socks-proxy-agent "^8.0.1" + https-proxy-agent "^7.0.2" + pac-resolver "^7.0.0" + socks-proxy-agent "^8.0.2" -pac-resolver@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-6.0.2.tgz#742ef24d2805b18c0a684ac02bcb0b5ce9644648" - integrity sha512-EQpuJ2ifOjpZY5sg1Q1ZeAxvtLwR7Mj3RgY8cysPGbsRu3RBXyJFWxnMus9PScjxya/0LzvVDxNh/gl0eXBU4w== +pac-resolver@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.0.tgz#79376f1ca26baf245b96b34c339d79bff25e900c" + integrity sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg== dependencies: - degenerator "^4.0.4" + degenerator "^5.0.0" ip "^1.1.8" netmask "^2.0.2" @@ -10800,6 +10859,30 @@ pacote@^15.0.0, pacote@^15.0.8, pacote@^15.2.0: ssri "^10.0.0" tar "^6.1.11" +pacote@^17.0.0, pacote@^17.0.4: + version "17.0.4" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-17.0.4.tgz#4bac6c0745967bde96985ec12fbbfc8dea7140e8" + integrity sha512-eGdLHrV/g5b5MtD5cTPyss+JxOlaOloSMG3UwPMAvL8ywaLJ6beONPF40K4KKl/UI6q5hTKCJq5rCu8tkF+7Dg== + dependencies: + "@npmcli/git" "^5.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/promise-spawn" "^7.0.0" + "@npmcli/run-script" "^7.0.0" + cacache "^18.0.0" + fs-minipass "^3.0.0" + minipass "^7.0.2" + npm-package-arg "^11.0.0" + npm-packlist "^8.0.0" + npm-pick-manifest "^9.0.0" + npm-registry-fetch "^16.0.0" + proc-log "^3.0.0" + promise-retry "^2.0.1" + read-package-json "^7.0.0" + read-package-json-fast "^3.0.0" + sigstore "^2.0.0" + ssri "^10.0.0" + tar "^6.1.11" + pako@~0.2.0: version "0.2.9" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" @@ -10840,9 +10923,9 @@ parse-json@^5.0.0, parse-json@^5.2.0: lines-and-columns "^1.1.6" parse-json@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-7.0.0.tgz#51c0713f233b804eb5adee3ef1e75d3243e0ff06" - integrity sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw== + version "7.1.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-7.1.0.tgz#4cffd0ee00ffa597b995fd70a9811993c4f95023" + integrity sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg== dependencies: "@babel/code-frame" "^7.21.4" error-ex "^1.3.2" @@ -10858,12 +10941,12 @@ parseurl@~1.3.2, parseurl@~1.3.3: pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" @@ -10878,7 +10961,7 @@ path-exists@^5.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-is-inside@1.0.2: version "1.0.2" @@ -10900,13 +10983,13 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.0.tgz#0ffbd4c1f7de9600f98a1405507d9f9acb438ab3" - integrity sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g== +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== dependencies: lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-to-regexp@0.1.7: version "0.1.7" @@ -10924,9 +11007,9 @@ path-type@^4.0.0: integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pathe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.0.tgz#e2e13f6c62b31a3289af4ba19886c230f295ec03" - integrity sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w== + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" + integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== peek-stream@^1.1.0: version "1.1.3" @@ -10963,9 +11046,9 @@ pify@^4.0.1: integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pirates@^4.0.4, pirates@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pixelmatch@^5.1.0: version "5.3.0" @@ -11023,7 +11106,7 @@ polished@^4.2.2: posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== postcss-selector-parser@^6.0.10: version "6.0.13" @@ -11033,10 +11116,10 @@ postcss-selector-parser@^6.0.10: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss@^8.4.23: - version "8.4.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" - integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== +postcss@^8.4.27: + version "8.4.29" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.29.tgz#33bc121cf3b3688d4ddef50be869b2a54185a1dd" + integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" @@ -11055,7 +11138,7 @@ prelude-ls@^1.2.1: prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== prettier-linter-helpers@^1.0.0: version "1.0.0" @@ -11064,12 +11147,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^2.4.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.1.tgz#d472797e0d7461605c1609808e27b80c0f9cfe17" - integrity sha512-8UVbTBYGwN37Bs9LERmxCPjdvPxlEowx2urIL6urHzdb3SDq4B/Z6xLFCblrSnE4iKWcS6ziJ3aOYrc1kz/E2A== - -prettier@^2.8.0: +prettier@^2.4.1, prettier@^2.8.0: version "2.8.8" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== @@ -11084,19 +11162,19 @@ pretty-format@^26.0.0, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" - integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== +pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - "@jest/schemas" "^29.4.3" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" react-is "^18.0.0" pretty-hrtime@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= + integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== pretty-quick@^3.1.0: version "3.1.3" @@ -11123,7 +11201,7 @@ process-nextick-args@~2.0.0: process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== progress@2.0.3, progress@^2.0.0, progress@^2.0.1: version "2.0.3" @@ -11190,17 +11268,17 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-agent@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.2.1.tgz#062df6609a4012fd1c108974865599b61e77abde" - integrity sha512-OIbBKlRAT+ycCm6wAYIzMwPejzRtjy8F3QiDX0eKOA3e4pe3U9F/IvzcHP42bmgQxVv97juG+J8/gx+JIeCX/Q== +proxy-agent@6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.3.0.tgz#72f7bb20eb06049db79f7f86c49342c34f9ba08d" + integrity sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og== dependencies: agent-base "^7.0.2" debug "^4.3.4" http-proxy-agent "^7.0.0" https-proxy-agent "^7.0.0" lru-cache "^7.14.1" - pac-proxy-agent "^6.0.3" + pac-proxy-agent "^7.0.0" proxy-from-env "^1.1.0" socks-proxy-agent "^8.0.1" @@ -11240,20 +11318,20 @@ punycode@^1.3.2: integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -puppeteer-core@20.7.4: - version "20.7.4" - resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-20.7.4.tgz#4ea245aa8746873584f620222fc31a1781394b32" - integrity sha512-7YZ1LmTo+5yM9uBNFTMJpE+lJjcIoNjKVarsYIk7o5WhgQNI9o5XgiQK5f71y1vWwr7sT/eGG75HXAehjnTBTg== +puppeteer-core@20.9.0: + version "20.9.0" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-20.9.0.tgz#6f4b420001b64419deab38d398a4d9cd071040e6" + integrity sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg== dependencies: - "@puppeteer/browsers" "1.4.3" + "@puppeteer/browsers" "1.4.6" chromium-bidi "0.4.16" - cross-fetch "3.1.6" + cross-fetch "4.0.0" debug "4.3.4" - devtools-protocol "0.0.1135028" + devtools-protocol "0.0.1147663" ws "8.13.0" puppeteer-core@^2.1.1: @@ -11273,23 +11351,23 @@ puppeteer-core@^2.1.1: ws "^6.1.0" puppeteer@^20.7.4: - version "20.7.4" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-20.7.4.tgz#6c27aebcd64d4c1f3b1d79bcd370af8f6490acf4" - integrity sha512-4JLZeRLXQAjQwWa6yv8cpjEgVapgrvDjBBcI/UCJ+EM6na6aR7hQFnQV4ffjFlUKPpvB2Y1vztVqOEhjfC+yUQ== + version "20.9.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-20.9.0.tgz#7bfb9e37deab9728e13b02ea3fb499b5560c79a7" + integrity sha512-kAglT4VZ9fWEGg3oLc4/de+JcONuEJhlh3J6f5R1TLkrY/EHHIHxWXDOzXvaxQCtedmyVXBwg8M+P8YCO/wZjw== dependencies: - "@puppeteer/browsers" "1.4.3" + "@puppeteer/browsers" "1.4.6" cosmiconfig "8.2.0" - puppeteer-core "20.7.4" + puppeteer-core "20.9.0" pure-rand@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.2.tgz#a9c2ddcae9b68d736a8163036f088a2781c8b306" - integrity sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ== + version "6.0.3" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.3.tgz#3c9e6b53c09e52ac3cedffc85ab7c1c7094b38cb" + integrity sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w== q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== qrcode-terminal@^0.12.0: version "0.12.0" @@ -11303,14 +11381,7 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" -qs@^6.10.0: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== - dependencies: - side-channel "^1.0.4" - -qs@^6.11.1: +qs@^6.10.0, qs@^6.11.1: version "6.11.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== @@ -11332,10 +11403,10 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -ramda@^0.28.0: - version "0.28.0" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.28.0.tgz#acd785690100337e8b063cab3470019be427cc97" - integrity sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA== +ramda@0.29.0: + version "0.29.0" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.29.0.tgz#fbbb67a740a754c8a4cbb41e2a6e0eb8507f55fb" + integrity sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA== randombytes@^2.1.0: version "2.1.0" @@ -11374,12 +11445,7 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-colorful@^5.1.2: - version "5.5.1" - resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.5.1.tgz#29d9c4e496f2ca784dd2bb5053a3a4340cfaf784" - integrity sha512-M1TJH2X3RXEt12sWkpa6hLc/bbYS0H6F4rIqjQZ+RxNBstpY67d9TrFXtqdZwhpmBXcCwEi7stKqFue3ZRkiOg== - -react-colorful@^5.6.1: +react-colorful@^5.1.2, react-colorful@^5.6.1: version "5.6.1" resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.6.1.tgz#7dc2aed2d7c72fac89694e834d179e32f3da563b" integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw== @@ -11413,12 +11479,12 @@ react-docgen@6.0.0-alpha.3: strip-indent "^3.0.0" react-dom@^18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.0.0.tgz#26b88534f8f1dbb80853e1eabe752f24100d8023" - integrity sha512-XqX7uzmFo0pUceWFCt7Gff6IyIMzFUn7QMZrbrQfGxtaxXZIcGQzoNpRLE3fQLnS4XzLLPMZX2T9TRcSrasicw== + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - scheduler "^0.21.0" + scheduler "^0.23.0" react-element-to-jsx-string@^15.0.0: version "15.0.0" @@ -11430,9 +11496,9 @@ react-element-to-jsx-string@^15.0.0: react-is "18.1.0" react-inspector@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-6.0.1.tgz#1a37f0165d9df81ee804d63259eaaeabe841287d" - integrity sha512-cxKSeFTf7jpSSVddm66sKdolG90qURAX3g1roTeaN6x0YEbtWc8JpmFN9+yIqLNH2uEkYerWLtJZIXRIFuBKrg== + version "6.0.2" + resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-6.0.2.tgz#aa3028803550cb6dbd7344816d5c80bf39d07e9d" + integrity sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ== react-is@18.1.0: version "18.1.0" @@ -11477,10 +11543,29 @@ react-refresh@^0.14.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== +react-remove-scroll-bar@^2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz#53e272d7a5cb8242990c7f144c44d8bd8ab5afd9" + integrity sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A== + dependencies: + react-style-singleton "^2.2.1" + tslib "^2.0.0" + +react-remove-scroll@2.5.5: + version "2.5.5" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz#1e31a1260df08887a8a0e46d09271b52b3a37e77" + integrity sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw== + dependencies: + react-remove-scroll-bar "^2.3.3" + react-style-singleton "^2.2.1" + tslib "^2.1.0" + use-callback-ref "^1.3.0" + use-sidecar "^1.1.2" + react-select@^5.7.0: - version "5.7.3" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.7.3.tgz#fa0dc9a23cad6ff3871ad3829f6083a4b54961a2" - integrity sha512-z8i3NCuFFWL3w27xq92rBkVI2onT0jzIIPe480HlBjXJ3b5o6Q+Clp4ydyeKrj9DZZ3lrjawwLC5NGl0FSvUDg== + version "5.7.4" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.7.4.tgz#d8cad96e7bc9d6c8e2709bdda8f4363c5dd7ea7d" + integrity sha512-NhuE56X+p9QDFh4BgeygHFIvJJszO1i1KSkg/JPcIJrbovyRtI+GuOEa4XzFCEpZRAEoEI8u/cAHK+jG/PgUzQ== dependencies: "@babel/runtime" "^7.12.0" "@emotion/cache" "^11.4.0" @@ -11492,10 +11577,19 @@ react-select@^5.7.0: react-transition-group "^4.3.0" use-isomorphic-layout-effect "^1.1.2" +react-style-singleton@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4" + integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== + dependencies: + get-nonce "^1.0.0" + invariant "^2.2.4" + tslib "^2.0.0" + react-transition-group@^4.3.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" - integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: "@babel/runtime" "^7.5.5" dom-helpers "^5.0.1" @@ -11510,9 +11604,9 @@ react-use-measure@^2.1.1: debounce "^1.2.1" react@^18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.0.0.tgz#b468736d1f4a5891f38585ba8e8fb29f91c3cb96" - integrity sha512-x+VL6wbT4JRVPm7EGxXhZ8w8LTROaxPXOqhlGyVSrv0sB1jkyFGgXxJ8LVoPRLvPR6/CIZGFmfzqUa2NYeMr2A== + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" @@ -11536,9 +11630,28 @@ read-package-json@^6.0.0: dependencies: glob "^10.2.2" json-parse-even-better-errors "^3.0.0" - normalize-package-data "^5.0.0" + normalize-package-data "^5.0.0" + npm-normalize-package-bin "^3.0.0" + +read-package-json@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-7.0.0.tgz#d605c9dcf6bc5856da24204aa4e9518ee9714be0" + integrity sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg== + dependencies: + glob "^10.2.2" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^6.0.0" npm-normalize-package-bin "^3.0.0" +read-pkg-up@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-10.1.0.tgz#2d13ab732d2f05d6e8094167c2112e2ee50644f4" + integrity sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA== + dependencies: + find-up "^6.3.0" + read-pkg "^8.1.0" + type-fest "^4.2.0" + read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" @@ -11548,15 +11661,6 @@ read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg-up@^9.0.0, read-pkg-up@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-9.1.0.tgz#38ca48e0bc6c6b260464b14aad9bcd4e5b1fbdc3" - integrity sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg== - dependencies: - find-up "^6.3.0" - read-pkg "^7.1.0" - type-fest "^2.5.0" - read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" @@ -11567,25 +11671,15 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read-pkg@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-7.1.0.tgz#438b4caed1ad656ba359b3e00fd094f3c427a43e" - integrity sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg== - dependencies: - "@types/normalize-package-data" "^2.4.1" - normalize-package-data "^3.0.2" - parse-json "^5.2.0" - type-fest "^2.0.0" - -read-pkg@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-8.0.0.tgz#78b93774c15a3f151b56d5790d5127a5cb9fc507" - integrity sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw== +read-pkg@^8.0.0, read-pkg@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-8.1.0.tgz#6cf560b91d90df68bce658527e7e3eee75f7c4c7" + integrity sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ== dependencies: "@types/normalize-package-data" "^2.4.1" - normalize-package-data "^5.0.0" + normalize-package-data "^6.0.0" parse-json "^7.0.0" - type-fest "^3.8.0" + type-fest "^4.2.0" read@^2.0.0, read@^2.1.0: version "2.1.0" @@ -11594,10 +11688,10 @@ read@^2.0.0, read@^2.1.0: dependencies: mute-stream "~1.0.0" -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -11606,27 +11700,14 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.6.0: "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.31: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^2.0.2: +readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -11639,24 +11720,16 @@ readable-stream@^2.0.2: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readable-stream@^4.1.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.1.tgz#fa0f0878c3bc0c12b6a82e4e58c5dc160e1faaa2" - integrity sha512-llAHX9QC25bz5RPIoTeJxPaA/hgryaldValRhVZ2fK9bzbmFiscpz8fw6iBTvJfAk1w4FC1KXQme/nO7fbKyKg== + version "4.4.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.2.tgz#e6aced27ad3b9d726d8308515b9a1b98dc1b9d13" + integrity sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA== dependencies: abort-controller "^3.0.0" buffer "^6.0.3" events "^3.3.0" process "^0.11.10" + string_decoder "^1.3.0" readdirp@~3.6.0: version "3.6.0" @@ -11676,9 +11749,9 @@ recast@^0.21.0: tslib "^2.0.1" recast@^0.23.1: - version "0.23.2" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.2.tgz#d3dda3e8f0a3366860d7508c00e34a338ac52b41" - integrity sha512-Qv6cPfVZyMOtPszK6PgW70pUgm7gPlFitAPf0Q69rlOA0zLw2XdDcNmPbVGYicFGT9O8I7TZ/0ryJD+6COvIPw== + version "0.23.4" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.4.tgz#ca1bac7bfd3011ea5a28dfecb5df678559fb1ddf" + integrity sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw== dependencies: assert "^2.0.0" ast-types "^0.16.1" @@ -11686,13 +11759,6 @@ recast@^0.23.1: source-map "~0.6.1" tslib "^2.0.1" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -11708,17 +11774,22 @@ redeyed@~2.1.0: dependencies: esprima "~4.0.0" -regenerate-unicode-properties@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" - integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== +reflect.getprototypeof@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" + integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== dependencies: - regenerate "^1.4.2" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" regenerate-unicode-properties@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" - integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== dependencies: regenerate "^1.4.2" @@ -11727,20 +11798,20 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.11: +regenerator-runtime@^0.13.3: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== -regenerator-transform@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" - integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== dependencies: "@babel/runtime" "^7.8.4" @@ -11752,32 +11823,20 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.4.3: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== dependencies: call-bind "^1.0.2" define-properties "^1.2.0" - functions-have-names "^1.2.3" + set-function-name "^2.0.0" -regexpp@^3.1.0, regexpp@^3.2.0: +regexpp@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" - integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.0.1" - regjsgen "^0.6.0" - regjsparser "^0.8.2" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - regexpu-core@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" @@ -11812,18 +11871,6 @@ registry-url@3.1.0: dependencies: rc "^1.0.1" -regjsgen@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" - integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== - -regjsparser@^0.8.2: - version "0.8.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" - integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== - dependencies: - jsesc "~0.5.0" - regjsparser@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" @@ -11859,12 +11906,12 @@ repeat-element@^1.1.2: repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" @@ -11903,7 +11950,7 @@ resolve-global@1.0.0, resolve-global@^1.0.0: resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== resolve.exports@^2.0.0: version "2.0.2" @@ -11913,23 +11960,14 @@ resolve.exports@^2.0.0: resolve@^0.6.1: version "0.6.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz#dd957982e7e736debdf53b58a4dd91754575dd46" - integrity sha1-3ZV5gufnNt699TtYpN2RdUV13UY= - -resolve@^1.0.0, resolve@^1.1.5, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" + integrity sha512-UHBY3viPlJKf85YijDUcikKX6tmF4SokIDp518ZDVT92JNDcG5uKIthaT/owt3Sar0lwtOafsQuwrg22/v2Dwg== -resolve@^1.1.6, resolve@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== +resolve@^1.0.0, resolve@^1.1.5, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.4: + version "1.22.6" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" + integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== dependencies: - is-core-module "^2.11.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -11942,6 +11980,14 @@ resolve@^2.0.0-next.4: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -11979,9 +12025,9 @@ rimraf@~2.6.2: glob "^7.1.3" rollup-plugin-glslify@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-glslify/-/rollup-plugin-glslify-1.3.0.tgz#b310ca4b6a446dd83316dcc82d7baaa334dfa58d" - integrity sha512-16YIKDU1NLTUINJgUvz+KRYqtLvCf6RXrRJlxrTOtmA2XKnqrZlwZ2wtzxMhd/5bswofwEZf4p9dIQBu81LWBQ== + version "1.3.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-glslify/-/rollup-plugin-glslify-1.3.1.tgz#0473f463840bc32571110161b8fad32ea9612186" + integrity sha512-LscWH9VwzOlcbZw3upoagIIMzcvRrR55dCgyheYLUlZlxiWRSf1esY37kgguiQi1NWUd5ctIalj/b2foGVND+A== dependencies: glslify "^7.1.1" rollup-pluginutils "^2.8.2" @@ -12010,10 +12056,10 @@ rollup-pluginutils@^2.8.2: dependencies: estree-walker "^0.6.1" -"rollup@^2.25.0 || ^3.3.0", rollup@^3.21.0: - version "3.21.8" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.21.8.tgz#fc768008fe2c953f18210370fd70fe1ffff59e2c" - integrity sha512-SSFV2T2fWtQ/vvBip85u2Nr0GNKireabH9d7nXswBg+XSH+jbVDSYptRAEbCEsquhs503rpPA9POYAp0/Jhasw== +"rollup@^2.25.0 || ^3.3.0", rollup@^3.27.1: + version "3.29.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.2.tgz#cbc76cd5b03b9f9e93be991d23a1dff9c6d5b740" + integrity sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A== optionalDependencies: fsevents "~2.3.2" @@ -12031,6 +12077,16 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -12058,7 +12114,7 @@ safe-regex-test@^1.0.0: safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== dependencies: ret "~0.1.10" @@ -12074,6 +12130,13 @@ scheduler@^0.21.0: dependencies: loose-envify "^1.1.0" +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" @@ -12084,33 +12147,33 @@ schema-utils@^2.6.5: ajv-keywords "^3.5.2" semantic-release@^21.0.6: - version "21.0.6" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-21.0.6.tgz#096fd47630716461f4f634d13c9d7dfea92fe5a1" - integrity sha512-NDyosObAwUNzPpdf+mpL49Xy+5iYHjdWM34LBNdbdYv9vBLbw+eCCDihxcqPh+f9m4ZzlBrYCkHUaZv2vPGW9A== + version "21.1.2" + resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-21.1.2.tgz#f4c5ba7c17b53ce90bac4fa6ccf21178d0384445" + integrity sha512-kz76azHrT8+VEkQjoCBHE06JNQgTgsC4bT8XfCzb7DHcsk9vG3fqeMVik8h5rcWCYi2Fd+M3bwA7BG8Z8cRwtA== dependencies: "@semantic-release/commit-analyzer" "^10.0.0" "@semantic-release/error" "^4.0.0" "@semantic-release/github" "^9.0.0" "@semantic-release/npm" "^10.0.2" "@semantic-release/release-notes-generator" "^11.0.0" - aggregate-error "^4.0.1" + aggregate-error "^5.0.0" cosmiconfig "^8.0.0" debug "^4.0.0" env-ci "^9.0.0" - execa "^7.0.0" + execa "^8.0.0" figures "^5.0.0" find-versions "^5.1.0" get-stream "^6.0.0" git-log-parser "^1.2.0" hook-std "^3.0.0" - hosted-git-info "^6.0.0" + hosted-git-info "^7.0.0" lodash-es "^4.17.21" marked "^5.0.0" marked-terminal "^5.1.1" micromatch "^4.0.2" p-each-series "^3.0.0" p-reduce "^3.0.0" - read-pkg-up "^9.1.0" + read-pkg-up "^10.0.0" resolve-from "^5.0.0" semver "^7.3.2" semver-diff "^4.0.0" @@ -12130,38 +12193,26 @@ semver-regex@^4.0.5: integrity sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw== "semver@2 || 3 || 4 || 5", semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.0.0, semver@~7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.3.5, semver@^7.3.4, semver@^7.3.5: +semver@7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.2.1, semver@^7.3.2, semver@^7.5.2: - version "7.5.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" - integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== - dependencies: - lru-cache "^6.0.0" +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.7: - version "7.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" - integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== +semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" @@ -12227,9 +12278,9 @@ serve-static@1.15.0: send "0.18.0" serve@^14.2.0: - version "14.2.0" - resolved "https://registry.yarnpkg.com/serve/-/serve-14.2.0.tgz#3d768e88fa13ad8644f2393599189707176e66b8" - integrity sha512-+HOw/XK1bW8tw5iBilBz/mJLWRzM8XM6MPxL4J/dKzdxq1vfdEWSwhaR7/yS8EJp5wzvP92p1qirysJvnEtjXg== + version "14.2.1" + resolved "https://registry.yarnpkg.com/serve/-/serve-14.2.1.tgz#3f078d292ed5e7b2c5a64f957af2765b0459798b" + integrity sha512-48er5fzHh7GCShLnNyPBRPEjs2I6QBozeGr02gaacROiyS/8ARADlj595j39iZXAqBbJHH/ivJJyPRWY9sQWZA== dependencies: "@zeit/schemas" "2.29.0" ajv "8.11.0" @@ -12246,7 +12297,16 @@ serve@^14.2.0: set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-name@^2.0.0, set-function-name@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -12273,7 +12333,7 @@ shallow-clone@^3.0.0: shallow-copy@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" - integrity sha1-QV9CcC1z2BAzApLMXuhurhoRoXA= + integrity sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw== shebang-command@^2.0.0: version "2.0.0" @@ -12287,15 +12347,6 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shelljs@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -12310,10 +12361,10 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" - integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== +signal-exit@^4.0.1, signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== signale@^1.2.1: version "1.4.0" @@ -12324,22 +12375,33 @@ signale@^1.2.1: figures "^2.0.0" pkg-conf "^2.1.0" -sigstore@^1.3.0, sigstore@^1.4.0, sigstore@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.6.0.tgz#887a4007c6ee83f3ef3fd844be1a0840e849c301" - integrity sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g== +sigstore@^1.3.0, sigstore@^1.4.0, sigstore@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.9.0.tgz#1e7ad8933aa99b75c6898ddd0eeebc3eb0d59875" + integrity sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A== dependencies: - "@sigstore/protobuf-specs" "^0.1.0" - "@sigstore/tuf" "^1.0.0" + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + "@sigstore/sign" "^1.0.0" + "@sigstore/tuf" "^1.0.3" make-fetch-happen "^11.0.1" - tuf-js "^1.1.3" -simple-update-notifier@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" - integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== +sigstore@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-2.1.0.tgz#c577b596642b3f360dc4135d476466e6edeb2364" + integrity sha512-kPIj+ZLkyI3QaM0qX8V/nSsweYND3W448pwkDgS6CQ74MfhEkIR8ToK5Iyx46KJYRjseVcD3Rp9zAmUAj6ZjPw== + dependencies: + "@sigstore/bundle" "^2.1.0" + "@sigstore/protobuf-specs" "^0.2.1" + "@sigstore/sign" "^2.1.0" + "@sigstore/tuf" "^2.1.0" + +simple-update-notifier@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" + integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== dependencies: - semver "~7.0.0" + semver "^7.5.3" sisteransi@^1.0.5: version "1.0.5" @@ -12409,12 +12471,12 @@ socks-proxy-agent@^7.0.0: debug "^4.3.3" socks "^2.6.2" -socks-proxy-agent@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz#ffc5859a66dac89b0c4dab90253b96705f3e7120" - integrity sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ== +socks-proxy-agent@^8.0.1, socks-proxy-agent@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz#5acbd7be7baf18c46a3f293a840109a430a640ad" + integrity sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g== dependencies: - agent-base "^7.0.1" + agent-base "^7.0.2" debug "^4.3.4" socks "^2.7.1" @@ -12463,10 +12525,10 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" @@ -12489,9 +12551,9 @@ spawn-error-forwarder@~1.0.0: integrity sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g== spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" @@ -12510,9 +12572,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.11" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" - integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + version "3.0.13" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -12521,13 +12583,18 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -split2@^3.0.0, split2@^3.2.2: +split2@^3.0.0: version "3.2.2" resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== dependencies: readable-stream "^3.0.0" +split2@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + split2@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/split2/-/split2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" @@ -12545,24 +12612,24 @@ split@^1.0.1: sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== ssim.js@^3.1.1: version "3.5.0" resolved "https://registry.yarnpkg.com/ssim.js/-/ssim.js-3.5.0.tgz#d7276b9ee99b57a5ff0db34035f02f35197e62df" integrity sha512-Aj6Jl2z6oDmgYFFbQqK7fght19bXdOxY7Tj03nF+03M9gCBAjeIiO8/PlEGMfKDwYpw4q6iBqVq2YuREorGg/g== -ssri@^10.0.0, ssri@^10.0.1, ssri@^10.0.4: - version "10.0.4" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.4.tgz#5a20af378be586df139ddb2dfb3bf992cf0daba6" - integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ== +ssri@^10.0.0, ssri@^10.0.1, ssri@^10.0.4, ssri@^10.0.5: + version "10.0.5" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" + integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== dependencies: - minipass "^5.0.0" + minipass "^7.0.3" stack-trace@0.0.9: version "0.0.9" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" - integrity sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU= + integrity sha512-vjUc6sfgtgY0dxCdnc40mK6Oftjo9+2K8H/NG81TMhgL392FtiPA9tn9RLyTxXmTLPJPjF3VyzFp6bsWFLisMQ== stack-utils@^2.0.3: version "2.0.6" @@ -12581,20 +12648,20 @@ static-eval@^2.0.5: static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== dependencies: define-property "^0.2.5" object-copy "^0.1.0" stats-gl@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/stats-gl/-/stats-gl-1.0.4.tgz#a6fb1a9605545558857895c743978ed44258f0b8" - integrity sha512-oxo13HHonoMWIYcrIu4xCk8IcFEFaqAOkMOMIyfvZFxNZzGy+jnW8sy0W3VfEjKQd5JX0Kp2KhePAKhtI6/TSw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/stats-gl/-/stats-gl-1.0.5.tgz#7f2b6688cc37b3d4bc79749ab122c063528be9c3" + integrity sha512-XimMxvwnf1Qf5KwebhcoA34kcX+fWEkIl0QjNkCbu4IpoyDMMsOajExn7FIq5w569k45+LhmsuRlGSrsvmGdNw== stats.js@^0.17.0: version "0.17.0" resolved "https://registry.yarnpkg.com/stats.js/-/stats.js-0.17.0.tgz#b1c3dc46d94498b578b7fd3985b81ace7131cc7d" - integrity sha1-scPcRtlEmLV4t/05hbgaznExzH0= + integrity sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw== statuses@2.0.1: version "2.0.1" @@ -12607,11 +12674,11 @@ store2@^2.14.2: integrity sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w== storybook@^7.0.12: - version "7.0.12" - resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.0.12.tgz#353f711fd25cff5e93e1b2f85540371ffb860544" - integrity sha512-HKi7NQQTZhBGEU3KUFxTNGtIZcG8+hokiO5TwcIr7s7smAVKdvj9vY5YGsVkiWF39o+5UtafW1B/i9D8lBFsYg== + version "7.4.2" + resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.4.2.tgz#e27fe7915060526db9ed9a72a6108f08df9aee1d" + integrity sha512-UuYmdxEWEQAepfjgQFbbHTq47Xxpw16naAvJ9n/nsjMnOhYupm1ZIdWYaeNjz4LOfz+1WzgU7us0IvaBrxzl4g== dependencies: - "@storybook/cli" "7.0.12" + "@storybook/cli" "7.4.2" stream-combiner2@~1.1.1: version "1.1.1" @@ -12627,9 +12694,9 @@ stream-shift@^1.0.0: integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== streamx@^2.15.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.0.tgz#f58c92e6f726b5390dcabd6dd9094d29a854d698" - integrity sha512-HcxY6ncGjjklGs1xsP1aR71INYcsXFJet5CU1CHqihQ2J5nOsbd4OjgjHO42w/4QNv9gZb3BueV+Vxok5pLEXg== + version "2.15.1" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.1.tgz#396ad286d8bc3eeef8f5cea3f029e81237c024c6" + integrity sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA== dependencies: fast-fifo "^1.1.0" queue-tick "^1.0.1" @@ -12642,7 +12709,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -12654,7 +12721,7 @@ string-length@^4.0.1: string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" @@ -12675,63 +12742,48 @@ string.prototype.codepointat@^0.2.1: integrity sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg== string.prototype.matchall@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== + version "4.0.10" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" + integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" + internal-slot "^1.0.5" + regexp.prototype.flags "^1.5.0" + set-function-name "^2.0.0" side-channel "^1.0.4" -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" + define-properties "^1.2.0" + es-abstract "^1.22.1" -string_decoder@^1.1.1: +string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -12741,7 +12793,7 @@ string_decoder@^1.1.1: string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== string_decoder@~1.1.1: version "1.1.1" @@ -12760,7 +12812,7 @@ string_decoder@~1.1.1: strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" @@ -12774,7 +12826,7 @@ strip-ansi@^7.0.1: strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: version "4.0.0" @@ -12834,7 +12886,7 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -supports-color@^9.3.1: +supports-color@^9.4.0: version "9.4.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== @@ -12852,20 +12904,15 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -suspend-react@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/suspend-react/-/suspend-react-0.0.8.tgz#b0740c1386b4eb652f17affe4339915ee268bd31" - integrity sha512-ZC3r8Hu1y0dIThzsGw0RLZplnX9yXwfItcvaIzJc2VQVi8TGyGDlu92syMB5ulybfvGLHAI5Ghzlk23UBPF8xg== - suspend-react@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/suspend-react/-/suspend-react-0.1.3.tgz#a52f49d21cfae9a2fb70bd0c68413d3f9d90768e" integrity sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ== synchronous-promise@^2.0.15: - version "2.0.15" - resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.15.tgz#07ca1822b9de0001f5ff73595f3d08c4f720eb8e" - integrity sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg== + version "2.0.17" + resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.17.tgz#38901319632f946c982152586f2caf8ddc25c032" + integrity sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g== table@^6.0.9: version "6.8.1" @@ -12883,14 +12930,14 @@ tapable@^1.0.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar-fs@3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.3.tgz#6593e7df92f337e74d755be183a192213d923050" - integrity sha512-ZK36riGYnFI6LujIBfBRoDfeaaWUkStIFKwtPjnDWCKnsDE9kuQthG09aQjLjpzoRtVElEMZ/AIAURNb7N9mkA== +tar-fs@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.4.tgz#a21dc60a2d5d9f55e0089ccd78124f1d3771dbbf" + integrity sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w== dependencies: mkdirp-classic "^0.5.2" pump "^3.0.0" - tar-stream "^3.1.0" + tar-stream "^3.1.5" tar-fs@^2.1.1: version "2.1.1" @@ -12913,31 +12960,19 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -tar-stream@^3.1.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.4.tgz#a06c3cefe558f8a5a6e88ddfbf6471782ad8dd42" - integrity sha512-IlHr7ZOW6XaVBCrSCokUJG4IqUuRcWW76B8XbrtCotbaDh6zVGE7WPCzaSz1CN+acFmWiwoa+cE4RZsom0RzXg== +tar-stream@^3.1.5: + version "3.1.6" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.6.tgz#6520607b55a06f4a2e2e04db360ba7d338cc5bab" + integrity sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg== dependencies: b4a "^1.6.4" fast-fifo "^1.2.0" streamx "^2.15.0" -tar@^6.1.11, tar@^6.1.15, tar@^6.1.2: - version "6.1.15" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" - integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -tar@^6.1.13: - version "6.1.14" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.14.tgz#e87926bec1cfe7c9e783a77a79f3e81c1cfa3b66" - integrity sha512-piERznXu0U7/pW7cdSn7hjqySIVTYT6F76icmFk7ptU7dDYlXTm5r9A6K04R2vU3olYgoKeo1Cg3eeu5nhftAw== +tar@^6.1.11, tar@^6.1.13, tar@^6.1.15, tar@^6.1.2: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -12946,10 +12981,10 @@ tar@^6.1.13: mkdirp "^1.0.3" yallist "^4.0.0" -telejson@^7.0.3: - version "7.1.0" - resolved "https://registry.yarnpkg.com/telejson/-/telejson-7.1.0.tgz#1ef7a0dd57eeb52cde933126f61bcc296c170f52" - integrity sha512-jFJO4P5gPebZAERPkJsqMAQ0IMA1Hi0AoSfxpnUaV6j6R2SZqlpkbS20U6dEUtA3RUYt2Ak/mTlkQzHH9Rv/hA== +telejson@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/telejson/-/telejson-7.2.0.tgz#3994f6c9a8f8d7f2dba9be2c7c5bbb447e876f32" + integrity sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ== dependencies: memoizerific "^1.11.3" @@ -12958,6 +12993,11 @@ temp-dir@^2.0.0: resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== +temp-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-3.0.0.tgz#7f147b42ee41234cc6ba3138cd8e8aa2302acffa" + integrity sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw== + temp@^0.8.4: version "0.8.4" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" @@ -12977,19 +13017,19 @@ tempy@^1.0.1: unique-string "^2.0.0" tempy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-3.0.0.tgz#a6c0a15f5534a820e92c3e1369f1c1e87ebd6b68" - integrity sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-3.1.0.tgz#00958b6df85db8589cb595465e691852aac038e9" + integrity sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g== dependencies: is-stream "^3.0.0" - temp-dir "^2.0.0" + temp-dir "^3.0.0" type-fest "^2.12.2" unique-string "^3.0.0" terser@^5.0.0: - version "5.19.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.0.tgz#7b3137b01226bdd179978207b9c8148754a6da9c" - integrity sha512-JpcpGOQLOXm2jsomozdMDpd5f8ZHh1rR48OFgWUH3QsyZcfPgv2qDCYbcDEAYNd4OZRj2bWYKpwdll/udZCk/Q== + version "5.19.4" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.4.tgz#941426fa482bf9b40a0308ab2b3cd0cf7c775ebd" + integrity sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -13010,20 +13050,25 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== +text-extensions@^2.0.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.4.0.tgz#a1cfcc50cf34da41bfd047cc744f804d1680ea34" + integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== + text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== three-mesh-bvh@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/three-mesh-bvh/-/three-mesh-bvh-0.6.0.tgz#15523c335383df658dc60063a783fdd52d045dc5" - integrity sha512-4/oXeqVMLuN9/P0M3L5ezIVrFiXQXKvjVTErkiSYMjSaPoWfNPAwqulSgLf4bIUPn8/Lq3rmIJwxbCuD8qDobA== + version "0.6.7" + resolved "https://registry.yarnpkg.com/three-mesh-bvh/-/three-mesh-bvh-0.6.7.tgz#6491876f5bf0c0d67be81a4402f2abdbb2266d76" + integrity sha512-RYdjMsH+vZvjLwA+ehI4+ZqTaTehAz4iho2yfL5PdGsIHyxpB78g0iy4Emj8079m/9KBX02TzddkvPSKSruQjg== three-stdlib@^2.25.1: - version "2.25.1" - resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.25.1.tgz#46c6b8bd18659d9d3695237cd92b3d5baee309b4" - integrity sha512-cFlxaTJjlSM10NGoUVEoQkMRpSOftuAh3OCpSKiLTsUfA7/HuhpoBJy3StiOor/LZm5M+onegqsbr5UBCCYYjQ== + version "2.26.0" + resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.26.0.tgz#a9e9ad4098d80ff6764f86e390af081caed2e589" + integrity sha512-zfae1OrUx7cLnH9GGW9PyIKwu7qCfEbWUk/GIT6JmEn7JZOu153mIPQxVXaJCAD6rDxb0Sr14Ab/vOIcJ7RpsA== dependencies: "@types/draco3d" "^1.4.0" "@types/offscreencanvas" "^2019.6.4" @@ -13044,7 +13089,7 @@ three@^0.149.0: through2@^0.6.3: version "0.6.5" resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" - integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg= + integrity sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg== dependencies: readable-stream ">=1.0.33-1 <1.1.0-0" xtend ">=4.0.0 <4.1.0-0" @@ -13067,13 +13112,18 @@ through2@^4.0.0: through@2, "through@>=2.2.7 <3", through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== tiny-inflate@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== +tiny-invariant@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" + integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== + tiny-relative-date@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" @@ -13087,19 +13137,19 @@ tmpl@1.0.5: to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -13121,10 +13171,15 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +tocbot@^4.20.1: + version "4.21.1" + resolved "https://registry.yarnpkg.com/tocbot/-/tocbot-4.21.1.tgz#7b667bef1c3ea1a07e4f400b742aa71e7e7e5ba0" + integrity sha512-IfajhBTeg0HlMXu1f+VMbPef05QpDTsZ9X2Yn1+8npdaXsXg/+wrm9Ze1WG5OS1UDC3qJ5EQN/XOZ3gfXjPFCw== + toggle-selection@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" - integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= + integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== toidentifier@1.0.1: version "1.0.1" @@ -13195,7 +13250,7 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tsconfig-paths@^3.14.1: +tsconfig-paths@^3.14.2: version "3.14.2" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== @@ -13205,15 +13260,15 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.8.1: +tslib@^1.13.0, tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1, tslib@^2.4.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== tsutils@^3.21.0: version "3.21.0" @@ -13222,7 +13277,7 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tuf-js@^1.1.3: +tuf-js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg== @@ -13231,6 +13286,15 @@ tuf-js@^1.1.3: debug "^4.3.4" make-fetch-happen "^11.1.1" +tuf-js@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.1.0.tgz#87aa36d5a166e7522f1e2050eb502a3a9b0bde72" + integrity sha512-eD7YPPjVlMzdggrOeE8zwoegUaG/rt6Bt3jwoQPunRiNVzgcCE009UDFJKJjG+Gk9wFu6W/Vi+P5d/5QpdD9jA== + dependencies: + "@tufjs/models" "2.0.0" + debug "^4.3.4" + make-fetch-happen "^13.0.0" + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -13241,7 +13305,7 @@ type-check@^0.4.0, type-check@~0.4.0: type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" @@ -13285,15 +13349,20 @@ type-fest@^1.0.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== -type-fest@^2.0.0, type-fest@^2.12.2, type-fest@^2.13.0, type-fest@^2.19.0, type-fest@^2.5.0: +type-fest@^2.12.2, type-fest@^2.13.0, type-fest@^2.19.0, type-fest@~2.19: version "2.19.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== type-fest@^3.0.0, type-fest@^3.8.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.12.0.tgz#4ce26edc1ccc59fc171e495887ef391fe1f5280e" - integrity sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA== + version "3.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" + integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== + +type-fest@^4.2.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.3.1.tgz#5cb58cdab5120f7ab0b40cfdc35073fb9adb651d" + integrity sha512-pphNW/msgOUSkJbH58x8sqpq8uQj6b0ZKGxEsLKMUnGorRcDjrUaLS+39+/ub41JNTwrrMyJcUB8+YZs3mbwqw== type-is@~1.6.18: version "1.6.18" @@ -13303,6 +13372,36 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + typed-array-length@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" @@ -13315,27 +13414,17 @@ typed-array-length@^1.0.4: typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@^4.7.4: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== uglify-js@^3.1.4: - version "3.15.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.15.3.tgz#9aa82ca22419ba4c0137642ba0df800cb06e0471" - integrity sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg== - -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== unbox-primitive@^1.0.2: version "1.0.2" @@ -13355,11 +13444,6 @@ unbzip2-stream@1.4.3: buffer "^5.2.1" through "^2.3.8" -unfetch@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" - integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== - unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -13373,20 +13457,15 @@ unicode-match-property-ecmascript@^2.0.0: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== - unicode-match-property-value-ecmascript@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== union-value@^1.0.0: version "1.0.1" @@ -13468,20 +13547,20 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unplugin@^0.10.2: - version "0.10.2" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-0.10.2.tgz#0f7089c3666f592cc448d746e39e7f41e9afb01a" - integrity sha512-6rk7GUa4ICYjae5PrAllvcDeuT8pA9+j5J5EkxbMFaV+SalHhxZ7X2dohMzu6C3XzsMT+6jwR/+pwPNR3uK9MA== +unplugin@^1.3.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.5.0.tgz#8938ae84defe62afc7757df9ca05d27160f6c20c" + integrity sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A== dependencies: - acorn "^8.8.0" + acorn "^8.10.0" chokidar "^3.5.3" webpack-sources "^3.2.3" - webpack-virtual-modules "^0.4.5" + webpack-virtual-modules "^0.5.0" unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -13491,7 +13570,7 @@ untildify@^4.0.0: resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -update-browserslist-db@^1.0.10: +update-browserslist-db@^1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== @@ -13517,13 +13596,20 @@ uri-js@^4.2.2: urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== url-join@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1" integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== +use-callback-ref@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.0.tgz#772199899b9c9a50526fedc4993fc7fa1f7e32d5" + integrity sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w== + dependencies: + tslib "^2.0.0" + use-isomorphic-layout-effect@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" @@ -13536,6 +13622,14 @@ use-resize-observer@^9.1.0: dependencies: "@juggle/resize-observer" "^3.3.1" +use-sidecar@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.2.tgz#2f43126ba2d7d7e117aa5855e5d8f0276dfe73c2" + integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== + dependencies: + detect-node-es "^1.1.0" + tslib "^2.0.0" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -13544,9 +13638,9 @@ use@^3.1.0: util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.0, util@^0.12.4: +util@^0.12.4, util@^0.12.5: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== @@ -13568,9 +13662,9 @@ utils-merge@1.0.1: integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== v8-compile-cache-lib@^3.0.1: version "3.0.1" @@ -13578,9 +13672,9 @@ v8-compile-cache-lib@^3.0.1: integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" + integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== v8-to-istanbul@^9.0.0, v8-to-istanbul@^9.0.1: version "9.1.0" @@ -13622,31 +13716,23 @@ vite-plugin-glslify@^2.0.1: magic-string "^0.25.7" vite@^4.3.6: - version "4.3.6" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.6.tgz#d129487dd9edf10ec79314e2e7891c60a2f86051" - integrity sha512-cqIyLSbA6gornMS659AXTVKF7cvSHMdKmJJwQ9DXq3lwsT1uZSdktuBRlpHQ8VnOWx0QHtjDwxPpGtyo9Fh/Qg== + version "4.4.9" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.9.tgz#1402423f1a2f8d66fd8d15e351127c7236d29d3d" + integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA== dependencies: - esbuild "^0.17.5" - postcss "^8.4.23" - rollup "^3.21.0" + esbuild "^0.18.10" + postcss "^8.4.27" + rollup "^3.27.1" optionalDependencies: fsevents "~2.3.2" -vm2@^3.9.19: - version "3.9.19" - resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.19.tgz#be1e1d7a106122c6c492b4d51c2e8b93d3ed6a4a" - integrity sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg== - dependencies: - acorn "^8.7.0" - acorn-walk "^8.2.0" - vue-template-compiler@^2.6.11: - version "2.6.14" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz#a2f0e7d985670d42c9c9ee0d044fed7690f4f763" - integrity sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g== + version "2.7.14" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz#4545b7dfb88090744c1577ae5ac3f964e61634b1" + integrity sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ== dependencies: de-indent "^1.0.2" - he "^1.1.0" + he "^1.2.0" walk-up-path@^3.0.1: version "3.0.1" @@ -13668,7 +13754,7 @@ watchpack@^2.2.0: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -wcwidth@^1.0.0: +wcwidth@^1.0.0, wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== @@ -13695,10 +13781,10 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack-virtual-modules@^0.4.5: - version "0.4.6" - resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz#3e4008230731f1db078d9cb6f68baf8571182b45" - integrity sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA== +webpack-virtual-modules@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" + integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== whatwg-url@^5.0.0: version "5.0.0" @@ -13719,17 +13805,44 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-typed-array@^1.1.2, which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + dependencies: + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + +which-typed-array@^1.1.11, which-typed-array@^1.1.2, which-typed-array@^1.1.9: + version "1.1.11" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" + integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== dependencies: available-typed-arrays "^1.0.5" call-bind "^1.0.2" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" which@^2.0.1, which@^2.0.2: version "2.0.2" @@ -13745,20 +13858,20 @@ which@^3.0.0, which@^3.0.1: dependencies: isexe "^2.0.0" -wide-align@^1.1.0, wide-align@^1.1.2, wide-align@^1.1.5: +which@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" + integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== + dependencies: + isexe "^3.1.1" + +wide-align@^1.1.0, wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - widest-line@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" @@ -13767,14 +13880,14 @@ widest-line@^4.0.1: string-width "^5.0.1" word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== worker-rpc@^0.1.0: version "0.1.1" @@ -13804,7 +13917,7 @@ wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^2.3.0: version "2.4.3" @@ -13831,7 +13944,7 @@ write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: imurmurhash "^0.1.4" signal-exit "^4.0.1" -ws@8.13.0, ws@^8.2.3: +ws@8.13.0: version "8.13.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== @@ -13843,6 +13956,11 @@ ws@^6.1.0: dependencies: async-limiter "~1.0.0" +ws@^8.2.3: + version "8.14.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.1.tgz#4b9586b4f70f9e6534c7bb1d3dc0baa8b8cf01e0" + integrity sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A== + "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -13851,7 +13969,7 @@ ws@^6.1.0: xtend@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9" - integrity sha1-7vax8ZjByN6vrYsXZaBNrUoBxak= + integrity sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw== y18n@^5.0.5: version "5.0.8" @@ -13923,9 +14041,9 @@ yargs@^17.3.1, yargs@^17.5.1: yargs-parser "^21.1.1" yarn@^1.22.17: - version "1.22.18" - resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.18.tgz#05b822ade8c672987bab8858635145da0850f78a" - integrity sha512-oFffv6Jp2+BTUBItzx1Z0dpikTX+raRdqupfqzeMKnoh7WD6RuPAxcqDkMUy9vafJkrB0YaV708znpuMhEBKGQ== + version "1.22.19" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.19.tgz#4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447" + integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ== yauzl@^2.10.0: version "2.10.0" @@ -13956,6 +14074,6 @@ zstddec@^0.0.2: integrity sha512-DCo0oxvcvOTGP/f5FA6tz2Z6wF+FIcEApSTu0zV5sQgn9hoT5lZ9YRAKUraxt9oP7l4e8TnNdi8IZTCX6WCkwA== zustand@^3.5.13, zustand@^3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.7.1.tgz#7388f0a7175a6c2fd9a2880b383a4bf6cdf6b7c6" - integrity sha512-wHBCZlKj+bg03/hP+Tzv24YhnqqP8MCeN9ECPDXoF01062SIbnfl3j9O0znkDw1lNTY0a8WN3F///a0UhhaEqg== + version "3.7.2" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.7.2.tgz#7b44c4f4a5bfd7a8296a3957b13e1c346f42514d" + integrity sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA== From 7ac8844a874e266f722c35d15fe825ff5f02c2b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Mon, 18 Sep 2023 17:40:15 +0200 Subject: [PATCH 020/103] chore: fix sandbox --- README.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 51bd6787b..db5b75c53 100644 --- a/README.md +++ b/README.md @@ -754,7 +754,7 @@ useFrame((_, delta) => { #### MotionPathControls

      - Demo + Demo

      Motion path controls, it takes a path of bezier curves or catmull-rom curves as input and animates the passed `object` along that path. It can be configured to look upon an external object for staging or presentation purposes by adding a `focusObject` property (ref). @@ -764,7 +764,7 @@ type MotionPathProps = JSX.IntrinsicElements['group'] & { curves?: THREE.Curve[] // The curves from which the curve path is constructed, default: [] debug?: boolean // show the path on which the object animates, default: false object?: React.MutableRefObject // default: default camera - focus?: [x: number, y: number, z: number] | React.MutableRefObject // default: undefined + focus?: [x: number, y: number, z: number] | React.MutableRefObject // default: undefined offset?: number // manually progress the object along the path (0 - 1), default: undefined smooth?: boolean // whether or not to smooth out the curve path, default: false eps?: number // End of animation precision, default: 0.00001 @@ -789,7 +789,7 @@ function Loop({ factor = 0.2 }) {
      - + ``` @@ -813,13 +813,12 @@ const poi = useRef() new THREE.Vector3(5, 3, 5), new THREE.Vector3(5, 5, 5) ), - ]} + ]} /> ``` - # Gizmos #### GizmoHelper @@ -1205,13 +1204,13 @@ export type FacemeshProps = { /** a landmark index (to get the position from) or a vec3 to be the origin of the mesh. default: undefined (ie. the bbox center) */ origin?: number | THREE.Vector3 /** A facial transformation matrix, as returned by FaceLandmarkerResult.facialTransformationMatrixes (see: https://developers.google.com/mediapipe/solutions/vision/face_landmarker/web_js#handle_and_display_results) */ - facialTransformationMatrix?: typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.facialTransformationMatrixes[0] + facialTransformationMatrix?: (typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.facialTransformationMatrixes)[0] /** Apply position offset extracted from `facialTransformationMatrix` */ offset?: boolean /** Offset sensitivity factor, less is more sensible */ offsetScalar?: number /** Fface blendshapes, as returned by FaceLandmarkerResult.faceBlendshapes (see: https://developers.google.com/mediapipe/solutions/vision/face_landmarker/web_js#handle_and_display_results) */ - faceBlendshapes?: typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceBlendshapes[0] + faceBlendshapes?: (typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceBlendshapes)[0] /** whether to enable eyes (nb. `faceBlendshapes` is required for), default: true */ eyes?: boolean /** Force `origin` to be the middle of the 2 eyes (nb. `eyes` is required for), default: false */ @@ -2904,7 +2903,7 @@ function SuzanneFBX() { let fbx = useFBX('suzanne/suzanne.fbx') return } -```` +``` #### useTexture From ea205fc5400bdf4fdaf673257c7bbe7e2add0c9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Tue, 19 Sep 2023 10:08:21 +0200 Subject: [PATCH 021/103] fix: lookupdamping > focusdamping --- README.md | 106 ++++++++++++++++++++++---------- src/core/MotionPathControls.tsx | 29 +++++++-- 2 files changed, 98 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index db5b75c53..e2d2e5162 100644 --- a/README.md +++ b/README.md @@ -761,47 +761,52 @@ Motion path controls, it takes a path of bezier curves or catmull-rom curves as ```tsx type MotionPathProps = JSX.IntrinsicElements['group'] & { - curves?: THREE.Curve[] // The curves from which the curve path is constructed, default: [] - debug?: boolean // show the path on which the object animates, default: false - object?: React.MutableRefObject // default: default camera - focus?: [x: number, y: number, z: number] | React.MutableRefObject // default: undefined - offset?: number // manually progress the object along the path (0 - 1), default: undefined - smooth?: boolean // whether or not to smooth out the curve path, default: false - eps?: number // End of animation precision, default: 0.00001 - damping?: number // Approximate time to reach the target. A smaller value will reach the target faster. default: 0.1 - maxSpeed?: number // Optionally allows you to clamp the maximum speed. default: Infinity + /** An optional array of THREE curves */ + curves?: THREE.Curve[] + /** Show debug helpers */ + debug?: boolean + /** The target object that is moved, default: null (the default camera) */ + object?: React.MutableRefObject + /** An object where the target looks towards, can also be a vector, default: null */ + focus?: [x: number, y: number, z: number] | React.MutableRefObject + /** Position between 0 (start) and end (1), if this is not set useMotion().current must be used, default: null */ + offset?: number + /** Optionally smooth the curve, default: false */ + smooth?: boolean | number + /** Damping tolerance, default: 0.00001 */ + eps?: number + /** Damping factor for movement along the curve, default: 0.1 */ + damping?: number + /** Damping factor for lookAt, default: 0.1 */ + focusDamping?: number + /** Damping maximum speed, default: Infinity */ + maxSpeed?: number } ``` -```jsx -const poi = useRef() - -function Loop({ factor = 0.2 }) { - const motion = useMotion() - useFrame((state, delta) => (motion.current += delta * factor)) -} - - - - - - - - +You can use MotionPathControls with declarative curves. +```jsx +function App() { + const poi = useRef() + return ( + + + + + + ``` -```jsx -const poi = useRef() +Or with imperative curves. +```jsx +``` + +You can exert full control with the `useMotion` hook, it allows you to define the current position along the path for instance, or define your own lookAt. Keep in mind that MotionPathControls will still these values unless you set damping and focusDamping to 0. Then you can also employ your own easing. + +```tsx +type MotionState = { + /** The user-defined, mutable, current goal position along the curve, it may be >1 or <0 */ + current: number + /** The combined curve */ + path: THREE.CurvePath + /** The focus object */ + focus: React.MutableRefObject> | [x: number, y: number, z: number] | undefined + /** The target object that is moved along the curve */ + object: React.MutableRefObject> + /** The automated, 0-1 normalised and damped current goal position along curve */ + offset: number + /** The current point on the curve */ + point: THREE.Vector3 + /** The current tangent on the curve */ + tangent: THREE.Vector3 + /** The next point on the curve */ + next: THREE.Vector3 +} - +const state: MotionState = useMotion() +``` + +```jsx +function Loop() { + const motion = useMotion() + useFrame((state, delta) => { + // Set the current position along the curve, you can increment indiscriminately for a loop + motion.current += delta + // You can define your own lookAt (if no focus was given to MotionPathControls) + motion.object.lookAt(1, 2, 3) + }) +} + + + + ``` # Gizmos diff --git a/src/core/MotionPathControls.tsx b/src/core/MotionPathControls.tsx index a29a97267..fe77a61a5 100644 --- a/src/core/MotionPathControls.tsx +++ b/src/core/MotionPathControls.tsx @@ -5,26 +5,44 @@ import { useFrame, useThree } from '@react-three/fiber' import { easing, misc } from 'maath' type MotionPathProps = JSX.IntrinsicElements['group'] & { + /** An optional array of THREE curves */ curves?: THREE.Curve[] + /** Show debug helpers */ debug?: boolean + /** The target object that is moved, default: null (the default camera) */ object?: React.MutableRefObject + /** An object where the target looks towards, can also be a vector, default: null */ focus?: [x: number, y: number, z: number] | React.MutableRefObject + /** Position between 0 (start) and end (1), if this is not set useMotion().current must be used, default: null */ offset?: number - smooth?: boolean + /** Optionally smooth the curve, default: false */ + smooth?: boolean | number + /** Damping tolerance, default: 0.00001 */ eps?: number + /** Damping factor for movement along the curve, default: 0.1 */ damping?: number + /** Damping factor for lookAt, default: 0.1 */ + focusDamping?: number + /** Damping maximum speed, default: Infinity */ maxSpeed?: number - lookupDamping?: number } type MotionState = { + /** The user-defined, mutable, current goal position along the curve, it may be >1 or <0 */ + current: number + /** The combined curve */ path: THREE.CurvePath + /** The focus object */ focus: React.MutableRefObject> | [x: number, y: number, z: number] | undefined + /** The target object that is moved along the curve */ object: React.MutableRefObject> - current: number + /** The 0-1 normalised and damped current goal position along curve */ offset: number + /** The current point on the curve */ point: THREE.Vector3 + /** The current tangent on the curve */ tangent: THREE.Vector3 + /** The next point on the curve */ next: THREE.Vector3 } @@ -38,7 +56,6 @@ export function useMotion() { } function Debug({ points = 50 }: { points?: number }) { - //@ts-ignore const { path } = useMotion() const [dots, setDots] = React.useState([]) const [material] = React.useState(() => new THREE.MeshBasicMaterial({ color: 'black' })) @@ -71,7 +88,7 @@ export const MotionPathControls = React.forwardRef( offset = undefined, eps = 0.00001, damping = 0.1, - lookupDamping = 0.1, + focusDamping = 0.1, maxSpeed = Infinity, ...props }: MotionPathProps, @@ -145,7 +162,7 @@ export const MotionPathControls = React.forwardRef( easing.dampLookAt( target, isObject3DRef(focus) ? focus.current.getWorldPosition(vec) : focus, - lookupDamping, + focusDamping, delta, maxSpeed, undefined, From 094a0a57317e8ee2d57902c1569f12718bdf1551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Tue, 19 Sep 2023 10:09:16 +0200 Subject: [PATCH 022/103] chore: readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e2d2e5162..514fded73 100644 --- a/README.md +++ b/README.md @@ -853,8 +853,8 @@ function Loop() { useFrame((state, delta) => { // Set the current position along the curve, you can increment indiscriminately for a loop motion.current += delta - // You can define your own lookAt (if no focus was given to MotionPathControls) - motion.object.lookAt(1, 2, 3) + // Look ahead on the curve + motion.object.lookAt(motion.next) }) } From e590f48f697af4f5801f189cb8d161e45d82439d Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Wed, 20 Sep 2023 07:05:22 -0500 Subject: [PATCH 023/103] fix(MeshTransmissionMaterial): set anisotropy for bad chunks (#1657) --- src/core/MeshTransmissionMaterial.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/MeshTransmissionMaterial.tsx b/src/core/MeshTransmissionMaterial.tsx index 09c69c2f4..704934a4c 100644 --- a/src/core/MeshTransmissionMaterial.tsx +++ b/src/core/MeshTransmissionMaterial.tsx @@ -122,6 +122,10 @@ class MeshTransmissionMaterialImpl extends THREE.MeshPhysicalMaterial { ...this.uniforms, } + // Fix for r153-r156 anisotropy chunks + // https://github.com/mrdoob/three.js/pull/26716 + if ((this as any).anisotropy > 0) shader.defines.USE_ANISOTROPY = '' + // If the transmission sampler is active inject a flag if (transmissionSampler) shader.defines.USE_SAMPLER = '' // Otherwise we do use use .transmission and must therefore force USE_TRANSMISSION From 853bc109815dc9e0b04b6d645c62002f8e99c80a Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Sat, 23 Sep 2023 19:38:39 -0500 Subject: [PATCH 024/103] fix(useTexture): support experimental universal backend (#1662) --- src/core/useTexture.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core/useTexture.tsx b/src/core/useTexture.tsx index 964a2fa0b..6bc7911de 100644 --- a/src/core/useTexture.tsx +++ b/src/core/useTexture.tsx @@ -19,9 +19,12 @@ export function useTexture { - const array = Array.isArray(textures) ? textures : [textures] - array.forEach(gl.initTexture) + if ('initTexture' in gl) { + const array = Array.isArray(textures) ? textures : [textures] + array.forEach(gl.initTexture) + } }, [gl, textures]) if (IsObject(input)) { From b29d4cdebf811390e04cf9b8326e47bd22b1c604 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Sat, 23 Sep 2023 19:38:48 -0500 Subject: [PATCH 025/103] fix: tree-shake module side-effects (#1661) --- package.json | 2 +- rollup.config.js | 14 ++++++++++++++ src/core/AccumulativeShadows.tsx | 5 +++-- src/core/Caustics.tsx | 3 ++- src/core/Facemesh.tsx | 6 +++--- src/core/Grid.tsx | 3 ++- src/core/Image.tsx | 3 ++- src/core/Instances.tsx | 22 +++++++++++----------- src/core/MeshPortalMaterial.tsx | 7 +++---- src/core/Outlines.tsx | 3 ++- src/core/PointMaterial.tsx | 5 +++-- src/core/Points.tsx | 14 +++++++------- src/core/Sparkles.tsx | 3 ++- src/core/SpriteAnimator.tsx | 12 +++++++++--- src/core/Stars.tsx | 3 ++- src/helpers/constants.ts | 3 +++ src/materials/ConvolutionMaterial.tsx | 5 ++--- src/materials/MeshRefractionMaterial.tsx | 3 ++- src/materials/SpotLightMaterial.tsx | 3 ++- src/web/KeyboardControls.tsx | 2 +- src/web/useCursor.tsx | 7 ++++++- yarn.lock | 8 ++++---- 22 files changed, 86 insertions(+), 50 deletions(-) create mode 100644 src/helpers/constants.ts diff --git a/package.json b/package.json index 2d8a60c09..8c76e9ffe 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "stats.js": "^0.17.0", "suspend-react": "^0.1.3", "three-mesh-bvh": "^0.6.0", - "three-stdlib": "^2.25.1", + "three-stdlib": "^2.26.6", "troika-three-text": "^0.47.2", "utility-types": "^3.10.0", "zustand": "^3.5.13" diff --git a/rollup.config.js b/rollup.config.js index 96639522e..503192502 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -38,6 +38,20 @@ const getBabelOptions = ({ useESModules }) => ({ plugins: [ '@babel/plugin-proposal-nullish-coalescing-operator', ['@babel/transform-runtime', { regenerator: false, useESModules }], + { + visitor: { + CallExpression(path) { + if (!path.getFunctionParent()) { + path.addComment('leading', '@__PURE__') + } + }, + NewExpression(path) { + if (!path.getFunctionParent()) { + path.addComment('leading', '@__PURE__') + } + }, + }, + }, ], }) diff --git a/src/core/AccumulativeShadows.tsx b/src/core/AccumulativeShadows.tsx index a91f2fe1a..7e7c56e3c 100644 --- a/src/core/AccumulativeShadows.tsx +++ b/src/core/AccumulativeShadows.tsx @@ -4,6 +4,7 @@ import { extend, ReactThreeFiber, useFrame, useThree } from '@react-three/fiber' import { shaderMaterial } from './shaderMaterial' import { DiscardMaterial } from '../materials/DiscardMaterial' import { ForwardRefComponent } from '../helpers/ts-utils' +import { version } from '../helpers/constants' function isLight(object: any): object is THREE.Light { return object.isLight @@ -97,7 +98,7 @@ const SoftShadowMaterial = shaderMaterial( vec4 sampledDiffuseColor = texture2D(map, vUv); gl_FragColor = vec4(color * sampledDiffuseColor.r * blend, max(0.0, (1.0 - (sampledDiffuseColor.r + sampledDiffuseColor.g + sampledDiffuseColor.b) / alphaTest)) * opacity); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) @@ -266,7 +267,7 @@ export const RandomizedLight: ForwardRefComponent< position = [0, 0, 0], radius = 1, amount = 8, - intensity = parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 155 ? Math.PI : 1, + intensity = version >= 155 ? Math.PI : 1, ambient = 0.5, ...props }: JSX.IntrinsicElements['group'] & RandomizedLightProps, diff --git a/src/core/Caustics.tsx b/src/core/Caustics.tsx index fdea4d809..f7b9c8391 100644 --- a/src/core/Caustics.tsx +++ b/src/core/Caustics.tsx @@ -11,6 +11,7 @@ import { shaderMaterial } from './shaderMaterial' import { Edges } from './Edges' import { FullScreenQuad } from 'three-stdlib' import { ForwardRefComponent } from '../helpers/ts-utils' +import { version } from '../helpers/constants' type CausticsMaterialType = THREE.ShaderMaterial & { cameraMatrixWorld?: THREE.Matrix4 @@ -128,7 +129,7 @@ const CausticsProjectionMaterial = shaderMaterial( vec3 back = texture2D(causticsTextureB, lightSpacePos.xy).rgb; gl_FragColor = vec4((front + back) * color, 1.0); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) diff --git a/src/core/Facemesh.tsx b/src/core/Facemesh.tsx index c0da43c69..5aa97bdde 100644 --- a/src/core/Facemesh.tsx +++ b/src/core/Facemesh.tsx @@ -9,7 +9,7 @@ export type MediaPipeFaceMesh = typeof FacemeshDatas.SAMPLE_FACE export type MediaPipePoints = | typeof FacemeshDatas.SAMPLE_FACE.keypoints - | typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceLandmarks[0] + | (typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceLandmarks)[0] export type FacemeshProps = { /** an array of 468+ keypoints as returned by google/mediapipe tasks-vision, default: a sample face */ @@ -27,13 +27,13 @@ export type FacemeshProps = { /** a landmark index (to get the position from) or a vec3 to be the origin of the mesh. default: undefined (ie. the bbox center) */ origin?: number | THREE.Vector3 /** A facial transformation matrix, as returned by FaceLandmarkerResult.facialTransformationMatrixes (see: https://developers.google.com/mediapipe/solutions/vision/face_landmarker/web_js#handle_and_display_results) */ - facialTransformationMatrix?: typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.facialTransformationMatrixes[0] + facialTransformationMatrix?: (typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.facialTransformationMatrixes)[0] /** Apply position offset extracted from `facialTransformationMatrix` */ offset?: boolean /** Offset sensitivity factor, less is more sensible */ offsetScalar?: number /** Fface blendshapes, as returned by FaceLandmarkerResult.faceBlendshapes (see: https://developers.google.com/mediapipe/solutions/vision/face_landmarker/web_js#handle_and_display_results) */ - faceBlendshapes?: typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceBlendshapes[0] + faceBlendshapes?: (typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceBlendshapes)[0] /** whether to enable eyes (nb. `faceBlendshapes` is required for), default: true */ eyes?: boolean /** Force `origin` to be the middle of the 2 eyes (nb. `eyes` is required for), default: false */ diff --git a/src/core/Grid.tsx b/src/core/Grid.tsx index 4b3df2a8e..0149153a9 100644 --- a/src/core/Grid.tsx +++ b/src/core/Grid.tsx @@ -10,6 +10,7 @@ import mergeRefs from 'react-merge-refs' import { extend, useFrame } from '@react-three/fiber' import { shaderMaterial } from './shaderMaterial' import { ForwardRefComponent } from '../helpers/ts-utils' +import { version } from '../helpers/constants' export type GridMaterialType = { /** Cell size, default: 0.5 */ @@ -121,7 +122,7 @@ const GridMaterial = shaderMaterial( if (gl_FragColor.a <= 0.0) discard; #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> } ` ) diff --git a/src/core/Image.tsx b/src/core/Image.tsx index 590cfc8c9..41dce0fb1 100644 --- a/src/core/Image.tsx +++ b/src/core/Image.tsx @@ -4,6 +4,7 @@ import { Color, extend } from '@react-three/fiber' import { shaderMaterial } from './shaderMaterial' import { useTexture } from './useTexture' import { ForwardRefComponent } from '../helpers/ts-utils' +import { version } from '../helpers/constants' export type ImageProps = Omit & { segments?: number @@ -71,7 +72,7 @@ const ImageMaterialImpl = shaderMaterial( gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, opacity), grayscale); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> } ` ) diff --git a/src/core/Instances.tsx b/src/core/Instances.tsx index 9515b2046..0c1d5f981 100644 --- a/src/core/Instances.tsx +++ b/src/core/Instances.tsx @@ -33,10 +33,10 @@ type InstancedMesh = Omit() +const _instanceLocalMatrix = new THREE.Matrix4() +const _instanceWorldMatrix = new THREE.Matrix4() +const _instanceIntersects: THREE.Intersection[] = [] +const _mesh = new THREE.Mesh() class PositionMesh extends THREE.Group { color: THREE.Color @@ -84,13 +84,13 @@ class PositionMesh extends THREE.Group { } } -const globalContext = /*@__PURE__*/ React.createContext(null!) -const parentMatrix = /*@__PURE__*/ new THREE.Matrix4() -const instanceMatrix = /*@__PURE__*/ new THREE.Matrix4() -const tempMatrix = /*@__PURE__*/ new THREE.Matrix4() -const translation = /*@__PURE__*/ new THREE.Vector3() -const rotation = /*@__PURE__*/ new THREE.Quaternion() -const scale = /*@__PURE__*/ new THREE.Vector3() +const globalContext = React.createContext(null!) +const parentMatrix = new THREE.Matrix4() +const instanceMatrix = new THREE.Matrix4() +const tempMatrix = new THREE.Matrix4() +const translation = new THREE.Vector3() +const rotation = new THREE.Quaternion() +const scale = new THREE.Vector3() export const Instance = React.forwardRef(({ context, children, ...props }: InstanceProps, ref) => { React.useMemo(() => extend({ PositionMesh }), []) diff --git a/src/core/MeshPortalMaterial.tsx b/src/core/MeshPortalMaterial.tsx index 87fdfb64c..b6e976766 100644 --- a/src/core/MeshPortalMaterial.tsx +++ b/src/core/MeshPortalMaterial.tsx @@ -11,6 +11,7 @@ import { useFBO } from './useFBO' import { RenderTexture } from './RenderTexture' import { shaderMaterial } from './shaderMaterial' import { FullScreenQuad } from 'three-stdlib' +import { version } from '../helpers/constants' const PortalMaterialImpl = shaderMaterial( { @@ -42,7 +43,7 @@ const PortalMaterialImpl = shaderMaterial( float alpha = 1.0 - smoothstep(0.0, 1.0, clamp(d/k + 1.0, 0.0, 1.0)); gl_FragColor = vec4(t.rgb, blur == 0.0 ? t.a : t.a * alpha); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) @@ -261,9 +262,7 @@ function ManagePortalScene({ vec4 ta = texture2D(a, vUv); vec4 tb = texture2D(b, vUv); gl_FragColor = mix(tb, ta, blend); - #include <${ - parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment' - }> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }`, }) ) diff --git a/src/core/Outlines.tsx b/src/core/Outlines.tsx index 53efe3e58..e46c63573 100644 --- a/src/core/Outlines.tsx +++ b/src/core/Outlines.tsx @@ -3,6 +3,7 @@ import * as React from 'react' import { shaderMaterial } from './shaderMaterial' import { extend, applyProps, ReactThreeFiber, useThree } from '@react-three/fiber' import { toCreasedNormals } from 'three-stdlib' +import { version } from '../helpers/constants' const OutlinesMaterial = shaderMaterial( { screenspace: false, color: new THREE.Color('black'), opacity: 1, thickness: 0.05, size: new THREE.Vector2() }, @@ -46,7 +47,7 @@ const OutlinesMaterial = shaderMaterial( void main(){ gl_FragColor = vec4(color, opacity); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) diff --git a/src/core/PointMaterial.tsx b/src/core/PointMaterial.tsx index 956614c25..39b8bd217 100644 --- a/src/core/PointMaterial.tsx +++ b/src/core/PointMaterial.tsx @@ -2,6 +2,7 @@ import * as THREE from 'three' import * as React from 'react' import { PrimitiveProps } from '@react-three/fiber' import { ForwardRefComponent } from '../helpers/ts-utils' +import { version } from '../helpers/constants' type PointMaterialType = JSX.IntrinsicElements['pointsMaterial'] @@ -13,7 +14,7 @@ declare global { } } -const opaque_fragment = parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'opaque_fragment' : 'output_fragment' +const opaque_fragment = version >= 154 ? 'opaque_fragment' : 'output_fragment' export class PointMaterialImpl extends THREE.PointsMaterial { constructor(props) { @@ -34,7 +35,7 @@ export class PointMaterialImpl extends THREE.PointsMaterial { float mask = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r); gl_FragColor = vec4(gl_FragColor.rgb, mask * gl_FragColor.a ); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> ` ) } diff --git a/src/core/Points.tsx b/src/core/Points.tsx index b293d659a..cd2fa2201 100644 --- a/src/core/Points.tsx +++ b/src/core/Points.tsx @@ -22,10 +22,10 @@ type PointsInstancesProps = JSX.IntrinsicElements['points'] & { limit?: number } -const _inverseMatrix = /*@__PURE__*/ new THREE.Matrix4() -const _ray = /*@__PURE__*/ new THREE.Ray() -const _sphere = /*@__PURE__*/ new THREE.Sphere() -const _position = /*@__PURE__*/ new THREE.Vector3() +const _inverseMatrix = new THREE.Matrix4() +const _ray = new THREE.Ray() +const _sphere = new THREE.Sphere() +const _position = new THREE.Vector3() export class PositionPoint extends THREE.Group { size: number @@ -82,9 +82,9 @@ export class PositionPoint extends THREE.Group { } let i, positionRef -const context = /*@__PURE__*/ React.createContext(null!) -const parentMatrix = /*@__PURE__*/ new THREE.Matrix4() -const position = /*@__PURE__*/ new THREE.Vector3() +const context = React.createContext(null!) +const parentMatrix = new THREE.Matrix4() +const position = new THREE.Vector3() /** * Instance implementation, relies on react + context to update the attributes based on the children of this component diff --git a/src/core/Sparkles.tsx b/src/core/Sparkles.tsx index b68b965ec..a9349d6e8 100644 --- a/src/core/Sparkles.tsx +++ b/src/core/Sparkles.tsx @@ -3,6 +3,7 @@ import * as THREE from 'three' import { PointsProps, useThree, useFrame, extend, Node } from '@react-three/fiber' import { shaderMaterial } from './shaderMaterial' import { ForwardRefComponent } from '../helpers/ts-utils' +import { version } from '../helpers/constants' interface Props { /** Number of particles (default: 100) */ @@ -52,7 +53,7 @@ const SparklesImplMaterial = shaderMaterial( float strength = 0.05 / distanceToCenter - 0.1; gl_FragColor = vec4(vColor, strength * vOpacity); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) diff --git a/src/core/SpriteAnimator.tsx b/src/core/SpriteAnimator.tsx index 8bd848607..ddb460c02 100644 --- a/src/core/SpriteAnimator.tsx +++ b/src/core/SpriteAnimator.tsx @@ -66,7 +66,7 @@ export const SpriteAnimator: React.FC = ( const totalFrames = React.useRef(0) const [aspect, setAspect] = React.useState([1, 1, 1]) const flipOffset = flipX ? -1 : 1 - const [displayAsSprite,setDisplayAsSprite] = React.useState(asSprite ?? true) + const [displayAsSprite, setDisplayAsSprite] = React.useState(asSprite ?? true) function loadJsonAndTextureAndExecuteCallback( jsonUrl: string, @@ -335,9 +335,15 @@ export const SpriteAnimator: React.FC = ( return ( - {displayAsSprite && ( + {displayAsSprite && ( - + )} {!displayAsSprite && ( diff --git a/src/core/Stars.tsx b/src/core/Stars.tsx index a32f4c304..290fac0c4 100644 --- a/src/core/Stars.tsx +++ b/src/core/Stars.tsx @@ -4,6 +4,7 @@ import * as React from 'react' import { ReactThreeFiber, useFrame } from '@react-three/fiber' import { Points, Vector3, Spherical, Color, AdditiveBlending, ShaderMaterial } from 'three' import { ForwardRefComponent } from '../helpers/ts-utils' +import { version } from '../helpers/constants' type Props = { radius?: number @@ -42,7 +43,7 @@ class StarfieldMaterial extends ShaderMaterial { gl_FragColor = vec4(vColor, opacity); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }`, }) } diff --git a/src/helpers/constants.ts b/src/helpers/constants.ts new file mode 100644 index 000000000..1237ca1fe --- /dev/null +++ b/src/helpers/constants.ts @@ -0,0 +1,3 @@ +import { REVISION } from 'three' + +export const version = parseInt(REVISION.replace(/\D+/g, '')) diff --git a/src/materials/ConvolutionMaterial.tsx b/src/materials/ConvolutionMaterial.tsx index 2904c7ad4..525809b62 100644 --- a/src/materials/ConvolutionMaterial.tsx +++ b/src/materials/ConvolutionMaterial.tsx @@ -1,4 +1,5 @@ import * as THREE from 'three' +import { version } from '../helpers/constants' export class ConvolutionMaterial extends THREE.ShaderMaterial { readonly kernel: Float32Array @@ -53,9 +54,7 @@ export class ConvolutionMaterial extends THREE.ShaderMaterial { #include #include - #include <${ - parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment' - }> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }`, vertexShader: `uniform vec2 texelSize; uniform vec2 halfTexelSize; diff --git a/src/materials/MeshRefractionMaterial.tsx b/src/materials/MeshRefractionMaterial.tsx index ceae1c01f..49cadc161 100644 --- a/src/materials/MeshRefractionMaterial.tsx +++ b/src/materials/MeshRefractionMaterial.tsx @@ -4,6 +4,7 @@ import * as THREE from 'three' import { shaderMaterial } from '../core/shaderMaterial' import { MeshBVHUniformStruct, shaderStructs, shaderIntersectFunction } from 'three-mesh-bvh' +import { version } from '../helpers/constants' export const MeshRefractionMaterial = shaderMaterial( { @@ -166,6 +167,6 @@ export const MeshRefractionMaterial = shaderMaterial( float nFresnel = fresnelFunc(viewDirection, normal) * fresnel; gl_FragColor = vec4(mix(finalColor, vec3(1.0), nFresnel), 1.0); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) diff --git a/src/materials/SpotLightMaterial.tsx b/src/materials/SpotLightMaterial.tsx index 2101cc394..e97f02105 100644 --- a/src/materials/SpotLightMaterial.tsx +++ b/src/materials/SpotLightMaterial.tsx @@ -1,4 +1,5 @@ import * as THREE from 'three' +import { version } from '../helpers/constants' export class SpotLightMaterial extends THREE.ShaderMaterial { constructor() { @@ -79,7 +80,7 @@ export class SpotLightMaterial extends THREE.ShaderMaterial { gl_FragColor = vec4(lightColor, intensity * opacity); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }`, }) } diff --git a/src/web/KeyboardControls.tsx b/src/web/KeyboardControls.tsx index 6a9f1c134..ed48b1a54 100644 --- a/src/web/KeyboardControls.tsx +++ b/src/web/KeyboardControls.tsx @@ -51,7 +51,7 @@ type KeyboardControlsApi = [ UseBoundStore> ] -const context = /*@__PURE__*/ React.createContext(null!) +const context = React.createContext(null!) export function KeyboardControls({ map, children, onChange, domElement }: KeyboardControlsProps) { const key = map.map((item) => item.name + item.keys).join('-') diff --git a/src/web/useCursor.tsx b/src/web/useCursor.tsx index 8088e7293..d270325a6 100644 --- a/src/web/useCursor.tsx +++ b/src/web/useCursor.tsx @@ -1,6 +1,11 @@ import * as React from 'react' -export function useCursor(hovered: boolean, onPointerOver = 'pointer', onPointerOut = 'auto', container: HTMLElement = document.body) { +export function useCursor( + hovered: boolean, + onPointerOver = 'pointer', + onPointerOut = 'auto', + container: HTMLElement = document.body +) { React.useEffect(() => { if (hovered) { container.style.cursor = onPointerOver diff --git a/yarn.lock b/yarn.lock index 825cee36b..8558185f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13065,10 +13065,10 @@ three-mesh-bvh@^0.6.0: resolved "https://registry.yarnpkg.com/three-mesh-bvh/-/three-mesh-bvh-0.6.7.tgz#6491876f5bf0c0d67be81a4402f2abdbb2266d76" integrity sha512-RYdjMsH+vZvjLwA+ehI4+ZqTaTehAz4iho2yfL5PdGsIHyxpB78g0iy4Emj8079m/9KBX02TzddkvPSKSruQjg== -three-stdlib@^2.25.1: - version "2.26.0" - resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.26.0.tgz#a9e9ad4098d80ff6764f86e390af081caed2e589" - integrity sha512-zfae1OrUx7cLnH9GGW9PyIKwu7qCfEbWUk/GIT6JmEn7JZOu153mIPQxVXaJCAD6rDxb0Sr14Ab/vOIcJ7RpsA== +three-stdlib@^2.26.6: + version "2.26.6" + resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.26.6.tgz#0ab23a6c4c4a74365e54dc0a69db7bb9589391b4" + integrity sha512-93XercNU5UBVXOXrzekL3eltt4fR0yvXN8r4rPSMNPAjwFdHYgc8o7SqylCNLPNetB9eAHGtI3Tx7WUMRM6lMg== dependencies: "@types/draco3d" "^1.4.0" "@types/offscreencanvas" "^2019.6.4" From dd419c69fa98cd564dc36577e31f38747ac3f5fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Mon, 25 Sep 2023 20:33:46 +0200 Subject: [PATCH 026/103] feat: clouds --- README.md | 49 +++++-- package.json | 1 + src/core/Cloud.tsx | 336 +++++++++++++++++++++++++++++++++++++-------- yarn.lock | 2 +- 4 files changed, 325 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index 514fded73..ccefbae32 100644 --- a/README.md +++ b/README.md @@ -4476,16 +4476,49 @@ attribute vec3 color; Particle based cloud. -👉 Note: `` component is not meant to be used in production environments as it relies on third-party CDN. +```tsx +type CloudsProps = JSX.IntrinsicElements['group'] & { + /** Optional cloud texture, points to a default hosted on rawcdn.githack */ + texture?: string + /** Maximum number of segments, default: 200 (make this tight to save memory!) */ + limit?: number + /** How many segments it renders, default: undefined (all) */ + range?: number + /** Which material it will override, default: MeshLambertMaterial */ + material?: typeof Material +} + +type CloudProps = JSX.IntrinsicElements['group'] & { + /** A seeded random will show the same cloud consistently, default: Math.random() */ + seed?: number + /** How many segments or particles the cloud will have, default: 20 */ + segments?: number + /** The box3 bounds of the cloud, default: [5, 1, 1] */ + bounds?: ReactThreeFiber.Vector3 + /** The general scale of the segments */ + scale?: ReactThreeFiber.Vector3 + /** The volume/thickness of the segments, default: 6 */ + volume?: number + /** Growth factor for animated clouds (speed > 0), default: 4 */ + growth?: number + /** Animation factor, default: 0.1 */ + speed?: number + /** Camera distance until the segments will fade, default: 10 */ + fade?: number + /** Opacity, default: 0.8 */ + opacity?: number + /** Color, default: white */ + color?: ReactThreeFiber.Color +} +``` + +Use the `` provider to glob all clouds into a single, instanced draw call. ```jsx - + + + + ``` #### useEnvironment diff --git a/package.json b/package.json index 2d8a60c09..0381dc62d 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,7 @@ "three-stdlib": "^2.25.1", "troika-three-text": "^0.47.2", "utility-types": "^3.10.0", + "uuid": "^9.0.1", "zustand": "^3.5.13" }, "devDependencies": { diff --git a/src/core/Cloud.tsx b/src/core/Cloud.tsx index 1878d3ff5..93cb7a8d7 100644 --- a/src/core/Cloud.tsx +++ b/src/core/Cloud.tsx @@ -1,61 +1,289 @@ import * as React from 'react' -import { Group, Texture } from 'three' -import { useFrame } from '@react-three/fiber' -import { Billboard } from './Billboard' -import { Plane } from './shapes' +import { + DynamicDrawUsage, + Color, + Group, + Texture, + Vector3, + InstancedMesh, + Material, + MeshLambertMaterial, + Matrix4, + Quaternion, + BufferAttribute, +} from 'three' +import { MaterialNode, extend, applyProps, useFrame, ReactThreeFiber } from '@react-three/fiber' import { useTexture } from './useTexture' +import { v4 } from 'uuid' + +declare global { + namespace JSX { + interface IntrinsicElements { + cloudMaterial: MaterialNode + } + } +} const CLOUD_URL = 'https://rawcdn.githack.com/pmndrs/drei-assets/9225a9f1fbd449d9411125c2f419b843d0308c9f/cloud.png' -export function Cloud({ - opacity = 0.5, - speed = 0.4, - width = 10, - depth = 1.5, - segments = 20, - texture = CLOUD_URL, - color = '#ffffff', - depthTest = true, - ...props -}) { - const group = React.useRef(null!) - const cloudTexture = useTexture(texture) as Texture - const clouds = React.useMemo( - () => - [...new Array(segments)].map((_, index) => ({ - x: width / 2 - Math.random() * width, - y: width / 2 - Math.random() * width, - scale: 0.4 + Math.sin(((index + 1) / segments) * Math.PI) * ((0.2 + Math.random()) * 10), - density: Math.max(0.2, Math.random()), - rotation: Math.max(0.002, 0.005 * Math.random()) * speed, - })), - [width, segments, speed] - ) - useFrame((state) => - group.current?.children.forEach((cloud, index) => { - cloud.children[0].rotation.z += clouds[index].rotation - cloud.children[0].scale.setScalar( - clouds[index].scale + (((1 + Math.sin(state.clock.getElapsedTime() / 10)) / 2) * index) / 10 - ) +type CloudState = { + uuid: string + index: number + segments: number + dist: number + matrix: Matrix4 + bounds: Vector3 + position: Vector3 + volume: number + length: number + ref: React.MutableRefObject + speed: number + growth: number + opacity: number + fade: number + density: number + rotation: number + rotationFactor: number + color: Color +} + +type CloudsProps = JSX.IntrinsicElements['group'] & { + /** Optional cloud texture, points to a default hosted on rawcdn.githack */ + texture?: string + /** Maximum number of segments, default: 200 (make this tight to save memory!) */ + limit?: number + /** How many segments it renders, default: undefined (all) */ + range?: number + /** Which material it will override, default: MeshLambertMaterial */ + material?: typeof Material +} + +type CloudProps = JSX.IntrinsicElements['group'] & { + /** A seeded random will show the same cloud consistently, default: Math.random() */ + seed?: number + /** How many segments or particles the cloud will have, default: 20 */ + segments?: number + /** The box3 bounds of the cloud, default: [5, 1, 1] */ + bounds?: ReactThreeFiber.Vector3 + /** The general scale of the segments */ + scale?: ReactThreeFiber.Vector3 + /** The volume/thickness of the segments, default: 6 */ + volume?: number + /** Growth factor for animated clouds (speed > 0), default: 4 */ + growth?: number + /** Animation factor, default: 0 */ + speed?: number + /** Camera distance until the segments will fade, default: 10 */ + fade?: number + /** Opacity, default: 1 */ + opacity?: number + /** Color, default: white */ + color?: ReactThreeFiber.Color +} + +const parentMatrix = /*@__PURE__*/ new Matrix4() +const translation = /*@__PURE__*/ new Vector3() +const rotation = /*@__PURE__*/ new Quaternion() +const cpos = /*@__PURE__*/ new Vector3() +const cquat = /*@__PURE__*/ new Quaternion() +const scale = /*@__PURE__*/ new Vector3() + +const context = React.createContext>(null!) +export const Clouds = React.forwardRef( + ({ children, material = MeshLambertMaterial, texture = CLOUD_URL, range, limit = 200, ...props }, fref) => { + const CloudMaterial = React.useMemo(() => { + return class extends (material as typeof Material) { + constructor() { + super() + this.onBeforeCompile = (shader) => { + shader.vertexShader = + `attribute float opacity; + varying float vOpacity; + ` + + shader.vertexShader.replace( + '#include ', + `#include + vOpacity = opacity; + ` + ) + shader.fragmentShader = + `varying float vOpacity; + ` + + shader.fragmentShader.replace( + '#include ', + `#include + gl_FragColor = vec4(outgoingLight, diffuseColor.a * vOpacity); + ` + ) + } + } + } + }, [material]) + + extend({ CloudMaterial }) + + const instance = React.useRef(null!) + const clouds = React.useRef([]) + const opacities = React.useMemo(() => new Float32Array(Array.from({ length: limit }, () => 1)), [limit]) + const colors = React.useMemo(() => new Float32Array(Array.from({ length: limit }, () => [1, 1, 1]).flat()), [limit]) + const cloudTexture = useTexture(texture) as Texture + + let t = 0 + let index = 0 + let config: CloudState + const qat = new Quaternion() + const dir = new Vector3(0, 0, 1) + + useFrame((state, delta) => { + t = state.clock.getElapsedTime() + parentMatrix.copy(instance.current.matrixWorld).invert() + state.camera.matrixWorld.decompose(cpos, cquat, scale) + + for (index = 0; index < clouds.current.length; index++) { + config = clouds.current[index] + config.ref.current.matrixWorld.decompose(translation, rotation, scale) + translation.add(config.position).applyQuaternion(rotation) + rotation.copy(cquat).multiply(qat.setFromAxisAngle(dir, (config.rotation += delta * config.rotationFactor))) + scale.addScalar(config.volume + ((1 + Math.sin(t * config.density * config.speed)) / 2) * config.growth) + config.matrix.compose(translation, rotation, scale).premultiply(parentMatrix) + config.dist = translation.distanceTo(cpos) + } + + // Depth-sort. Instances have no specific draw order, w/o sorting z would be random + clouds.current.sort((a, b) => b.dist - a.dist) + for (index = 0; index < clouds.current.length; index++) { + config = clouds.current[index] + opacities[index] = config.opacity * (config.dist < config.fade - 1 ? config.dist / config.fade : 1) + instance.current.setMatrixAt(index, config.matrix) + instance.current.setColorAt(index, config.color) + } + + // Update instance + instance.current.geometry.attributes.opacity.needsUpdate = true + instance.current.instanceMatrix.needsUpdate = true + if (instance.current.instanceColor) instance.current.instanceColor.needsUpdate = true + }) + + React.useLayoutEffect(() => { + const updateRange = Math.min(limit, range !== undefined ? range : limit, clouds.current.length) + instance.current.count = updateRange + instance.current.instanceMatrix.updateRange.count = updateRange * 16 + if (instance.current.instanceColor) instance.current.instanceColor.updateRange.count = updateRange * 3 + ;(instance.current.geometry.attributes.opacity as BufferAttribute).updateRange.count = updateRange }) - ) - return ( - - - {clouds.map(({ x, y, scale, density }, index) => ( - - - - - - ))} + + let imageBounds = [cloudTexture!.image.width ?? 1, cloudTexture!.image.height ?? 1] + let max = Math.max(imageBounds[0], imageBounds[1]) + imageBounds = [imageBounds[0] / max, imageBounds[1] / max] + + return ( + + + {children} + + + + + + + + - - ) -} + ) + } +) + +export const CloudInstance = React.forwardRef( + ( + { + opacity = 1, + speed = 0, + bounds = [5, 1, 1], + segments = 20, + color = '#ffffff', + fade = 10, + volume = 6, + growth = 4, + seed = Math.random(), + ...props + }, + fref + ) => { + function random() { + const x = Math.sin(seed++) * 10000 + return x - Math.floor(x) + } + + const parent = React.useContext(context) + const ref = React.useRef(null!) + const [uuid] = React.useState(() => v4()) + const clouds: CloudState[] = React.useMemo(() => { + return [...new Array(segments)].map( + (_, index) => + ({ + segments, + bounds: new Vector3(1, 1, 1), + position: new Vector3(), + uuid, + index, + ref, + dist: 0, + matrix: new Matrix4(), + color: new Color(), + rotation: index * (Math.PI / segments), + } as CloudState) + ) + }, [segments, uuid]) + + React.useLayoutEffect(() => { + clouds.forEach((cloud, index) => { + applyProps(cloud as any, { + color, + speed, + growth, + opacity, + fade, + bounds, + density: Math.max(0.5, random()), + rotationFactor: Math.max(0.2, 0.5 * random()) * speed, + }) + // Only distribute randomly if there are multiple segments + if (segments > 1) + cloud.position + .copy(cloud.bounds) + .multiply({ x: random() * 2 - 1, y: random() * 2 - 1, z: random() * 2 - 1 } as Vector3) + const xDiff = Math.abs(cloud.position.x) + const yDiff = Math.abs(cloud.position.y) + const zDiff = Math.abs(cloud.position.z) + const max = Math.max(xDiff, yDiff, zDiff) + cloud.length = 1 + if (xDiff === max) cloud.length -= xDiff / cloud.bounds.x + if (yDiff === max) cloud.length -= yDiff / cloud.bounds.y + if (zDiff === max) cloud.length -= zDiff / cloud.bounds.z + cloud.volume = Math.max(0.25, cloud.length) * volume + }) + }, [bounds, fade, color, opacity, growth, volume, seed, segments, speed]) + + React.useLayoutEffect(() => { + const temp = clouds + parent.current = [...parent.current, ...temp] + return () => { + parent.current = parent.current.filter((item) => item.uuid !== uuid) + } + }, [clouds]) + + React.useImperativeHandle(fref, () => ref.current, []) + return + } +) + +export const Cloud = React.forwardRef((props, fref) => { + const parent = React.useContext(context) + if (parent) return + else + return ( + + + + ) +}) diff --git a/yarn.lock b/yarn.lock index 825cee36b..0e44e90be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13661,7 +13661,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^9.0.0: +uuid@^9.0.0, uuid@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== From fcc23bf9242c06ef48a2c0527fd1c38700ef3ab8 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Wed, 27 Sep 2023 01:12:47 -0500 Subject: [PATCH 027/103] fix: update three-mesh-bvh for ANGLE (#1664) --- package.json | 2 +- yarn.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6065acdfd..298bf662a 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "stats-gl": "^1.0.4", "stats.js": "^0.17.0", "suspend-react": "^0.1.3", - "three-mesh-bvh": "^0.6.0", + "three-mesh-bvh": "^0.6.7", "three-stdlib": "^2.26.6", "troika-three-text": "^0.47.2", "utility-types": "^3.10.0", diff --git a/yarn.lock b/yarn.lock index 09ad89f44..c771cda29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13060,7 +13060,7 @@ text-table@^0.2.0, text-table@~0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -three-mesh-bvh@^0.6.0: +three-mesh-bvh@^0.6.7: version "0.6.7" resolved "https://registry.yarnpkg.com/three-mesh-bvh/-/three-mesh-bvh-0.6.7.tgz#6491876f5bf0c0d67be81a4402f2abdbb2266d76" integrity sha512-RYdjMsH+vZvjLwA+ehI4+ZqTaTehAz4iho2yfL5PdGsIHyxpB78g0iy4Emj8079m/9KBX02TzddkvPSKSruQjg== From 2f41da447eed711681d5850272f054bd1e3e3aae Mon Sep 17 00:00:00 2001 From: Davide Cristini Date: Wed, 27 Sep 2023 11:30:16 +0200 Subject: [PATCH 028/103] fix(Shadow): better types (#1665) --- .storybook/stories/Shadow.stories.tsx | 6 +++--- src/core/Shadow.tsx | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.storybook/stories/Shadow.stories.tsx b/.storybook/stories/Shadow.stories.tsx index 0e1583ed1..9fa3d31e1 100644 --- a/.storybook/stories/Shadow.stories.tsx +++ b/.storybook/stories/Shadow.stories.tsx @@ -1,10 +1,10 @@ import * as React from 'react' import { useFrame } from '@react-three/fiber' -import { Mesh } from 'three' import { Setup } from '../Setup' -import { Shadow, Icosahedron, Plane } from '../../src' +import { Shadow, Icosahedron, Plane, type ShadowType } from '../../src' +import { type Mesh } from 'three' export default { title: 'Misc/Shadow', @@ -13,7 +13,7 @@ export default { } function ShadowScene() { - const shadow = React.useRef(null!) + const shadow = React.useRef(null!) const mesh = React.useRef(null!) useFrame(({ clock }) => { diff --git a/src/core/Shadow.tsx b/src/core/Shadow.tsx index 5dfa96285..668530d87 100644 --- a/src/core/Shadow.tsx +++ b/src/core/Shadow.tsx @@ -1,5 +1,5 @@ import * as React from 'react' -import { Mesh, Color, DoubleSide } from 'three' +import { Mesh, Color, DoubleSide, type PlaneGeometry, type MeshBasicMaterial } from 'three' import { ForwardRefComponent } from '../helpers/ts-utils' type Props = JSX.IntrinsicElements['mesh'] & { @@ -10,7 +10,9 @@ type Props = JSX.IntrinsicElements['mesh'] & { depthWrite?: boolean } -export const Shadow: ForwardRefComponent = React.forwardRef( +export type ShadowType = Mesh + +export const Shadow: ForwardRefComponent = React.forwardRef( ( { fog = false, renderOrder, depthWrite = false, colorStop = 0.0, color = 'black', opacity = 0.5, ...props }: Props, ref From 03a76c7a25f97dd84abe22976e740e05d3ec1342 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Wed, 27 Sep 2023 21:02:40 +0200 Subject: [PATCH 029/103] feat: clouds correct rotation --- src/core/Cloud.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/Cloud.tsx b/src/core/Cloud.tsx index 93cb7a8d7..0e855882b 100644 --- a/src/core/Cloud.tsx +++ b/src/core/Cloud.tsx @@ -133,6 +133,7 @@ export const Clouds = React.forwardRef( let config: CloudState const qat = new Quaternion() const dir = new Vector3(0, 0, 1) + const pos = new Vector3() useFrame((state, delta) => { t = state.clock.getElapsedTime() @@ -142,7 +143,7 @@ export const Clouds = React.forwardRef( for (index = 0; index < clouds.current.length; index++) { config = clouds.current[index] config.ref.current.matrixWorld.decompose(translation, rotation, scale) - translation.add(config.position).applyQuaternion(rotation) + translation.add(pos.copy(config.position).applyQuaternion(rotation)) rotation.copy(cquat).multiply(qat.setFromAxisAngle(dir, (config.rotation += delta * config.rotationFactor))) scale.addScalar(config.volume + ((1 + Math.sin(t * config.density * config.speed)) / 2) * config.growth) config.matrix.compose(translation, rotation, scale).premultiply(parentMatrix) From 1279dcf3ef8da6d3d82f5d833ff291b8a51e071d Mon Sep 17 00:00:00 2001 From: drcmda Date: Fri, 29 Sep 2023 10:22:27 +0200 Subject: [PATCH 030/103] chore: Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index ccefbae32..10f3d7cdf 100644 --- a/README.md +++ b/README.md @@ -4471,7 +4471,9 @@ attribute vec3 color; [![](https://img.shields.io/badge/-storybook-%23ff69b4)](https://drei.pmnd.rs/?path=/story/staging-cloud--cloud-st) ![](https://img.shields.io/badge/-suspense-brightgreen)

      + Demo Demo +

      Particle based cloud. From dd9289f8ede33fb1b972a89840cfac7b48a548cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Fri, 29 Sep 2023 10:26:31 +0200 Subject: [PATCH 031/103] fix: cloud concentration --- README.md | 2 ++ src/core/Cloud.tsx | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ccefbae32..28c574256 100644 --- a/README.md +++ b/README.md @@ -4495,6 +4495,8 @@ type CloudProps = JSX.IntrinsicElements['group'] & { segments?: number /** The box3 bounds of the cloud, default: [5, 1, 1] */ bounds?: ReactThreeFiber.Vector3 + /** How to arrange segments inside the bounds, default: inside (cloud are smaller are the edges) */ + concentrate?: 'inside' | 'outside' /** The general scale of the segments */ scale?: ReactThreeFiber.Vector3 /** The volume/thickness of the segments, default: 6 */ diff --git a/src/core/Cloud.tsx b/src/core/Cloud.tsx index 0e855882b..c62344c0a 100644 --- a/src/core/Cloud.tsx +++ b/src/core/Cloud.tsx @@ -65,6 +65,8 @@ type CloudProps = JSX.IntrinsicElements['group'] & { segments?: number /** The box3 bounds of the cloud, default: [5, 1, 1] */ bounds?: ReactThreeFiber.Vector3 + /** How to arrange segments inside the bounds, default: inside (cloud are smaller are the edges) */ + concentrate?: 'inside' | 'outside' /** The general scale of the segments */ scale?: ReactThreeFiber.Vector3 /** The volume/thickness of the segments, default: 6 */ @@ -205,6 +207,7 @@ export const CloudInstance = React.forwardRef( fade = 10, volume = 6, growth = 4, + concentrate = 'inside', seed = Math.random(), ...props }, @@ -257,13 +260,13 @@ export const CloudInstance = React.forwardRef( const yDiff = Math.abs(cloud.position.y) const zDiff = Math.abs(cloud.position.z) const max = Math.max(xDiff, yDiff, zDiff) - cloud.length = 1 + cloud.length = concentrate === 'inside' ? 1 : -1 if (xDiff === max) cloud.length -= xDiff / cloud.bounds.x if (yDiff === max) cloud.length -= yDiff / cloud.bounds.y if (zDiff === max) cloud.length -= zDiff / cloud.bounds.z cloud.volume = Math.max(0.25, cloud.length) * volume }) - }, [bounds, fade, color, opacity, growth, volume, seed, segments, speed]) + }, [concentrate, bounds, fade, color, opacity, growth, volume, seed, segments, speed]) React.useLayoutEffect(() => { const temp = clouds From b66ebaac61742d29320016f01452cf49e1e70fc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Fri, 29 Sep 2023 20:21:01 +0200 Subject: [PATCH 032/103] fix: custom cloud distribution --- README.md | 13 +++++++++---- src/core/Cloud.tsx | 38 ++++++++++++++++++++++++++++++-------- 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index fe985cf61..109eacdb0 100644 --- a/README.md +++ b/README.md @@ -4497,19 +4497,24 @@ type CloudProps = JSX.IntrinsicElements['group'] & { segments?: number /** The box3 bounds of the cloud, default: [5, 1, 1] */ bounds?: ReactThreeFiber.Vector3 - /** How to arrange segments inside the bounds, default: inside (cloud are smaller are the edges) */ - concentrate?: 'inside' | 'outside' + /** How to arrange segment volume inside the bounds, default: inside (cloud are smaller at the edges) */ + concentrate?: 'random' | 'inside' | 'outside' /** The general scale of the segments */ scale?: ReactThreeFiber.Vector3 /** The volume/thickness of the segments, default: 6 */ volume?: number + /** The smallest volume when distributing clouds, default: 0.25 */ + smallestVolume?: number + /** An optional function that allows you to distribute points and volumes (overriding all settings), default: null + * Both point and volume are factors, point x/y/z can be between -1 and 1, volume between 0 and 1 */ + distribute?: (cloud: CloudState, index: number) => { point: Vector3; volume?: number } /** Growth factor for animated clouds (speed > 0), default: 4 */ growth?: number - /** Animation factor, default: 0.1 */ + /** Animation factor, default: 0 */ speed?: number /** Camera distance until the segments will fade, default: 10 */ fade?: number - /** Opacity, default: 0.8 */ + /** Opacity, default: 1 */ opacity?: number /** Color, default: white */ color?: ReactThreeFiber.Color diff --git a/src/core/Cloud.tsx b/src/core/Cloud.tsx index c62344c0a..a30a50196 100644 --- a/src/core/Cloud.tsx +++ b/src/core/Cloud.tsx @@ -65,12 +65,17 @@ type CloudProps = JSX.IntrinsicElements['group'] & { segments?: number /** The box3 bounds of the cloud, default: [5, 1, 1] */ bounds?: ReactThreeFiber.Vector3 - /** How to arrange segments inside the bounds, default: inside (cloud are smaller are the edges) */ - concentrate?: 'inside' | 'outside' + /** How to arrange segment volume inside the bounds, default: inside (cloud are smaller at the edges) */ + concentrate?: 'random' | 'inside' | 'outside' /** The general scale of the segments */ scale?: ReactThreeFiber.Vector3 /** The volume/thickness of the segments, default: 6 */ volume?: number + /** The smallest volume when distributing clouds, default: 0.25 */ + smallestVolume?: number + /** An optional function that allows you to distribute points and volumes (overriding all settings), default: null + * Both point and volume are factors, point x/y/z can be between -1 and 1, volume between 0 and 1 */ + distribute?: (cloud: CloudState, index: number) => { point: Vector3; volume?: number } /** Growth factor for animated clouds (speed > 0), default: 4 */ growth?: number /** Animation factor, default: 0 */ @@ -206,6 +211,8 @@ export const CloudInstance = React.forwardRef( color = '#ffffff', fade = 10, volume = 6, + smallestVolume = 0.25, + distribute = null, growth = 4, concentrate = 'inside', seed = Math.random(), @@ -242,6 +249,7 @@ export const CloudInstance = React.forwardRef( React.useLayoutEffect(() => { clouds.forEach((cloud, index) => { applyProps(cloud as any, { + volume, color, speed, growth, @@ -252,19 +260,33 @@ export const CloudInstance = React.forwardRef( rotationFactor: Math.max(0.2, 0.5 * random()) * speed, }) // Only distribute randomly if there are multiple segments - if (segments > 1) - cloud.position - .copy(cloud.bounds) - .multiply({ x: random() * 2 - 1, y: random() * 2 - 1, z: random() * 2 - 1 } as Vector3) + + const distributed = distribute?.(cloud, index) + + if (distributed || segments > 1) + cloud.position.copy(cloud.bounds).multiply( + distributed?.point ?? + ({ + x: random() * 2 - 1, + y: random() * 2 - 1, + z: random() * 2 - 1, + } as Vector3) + ) const xDiff = Math.abs(cloud.position.x) const yDiff = Math.abs(cloud.position.y) const zDiff = Math.abs(cloud.position.z) const max = Math.max(xDiff, yDiff, zDiff) - cloud.length = concentrate === 'inside' ? 1 : -1 + cloud.length = 1 if (xDiff === max) cloud.length -= xDiff / cloud.bounds.x if (yDiff === max) cloud.length -= yDiff / cloud.bounds.y if (zDiff === max) cloud.length -= zDiff / cloud.bounds.z - cloud.volume = Math.max(0.25, cloud.length) * volume + cloud.volume = + (distributed?.volume !== undefined + ? distributed.volume + : Math.max( + Math.max(0, smallestVolume), + concentrate === 'random' ? random() : concentrate === 'inside' ? cloud.length : 1 - cloud.length + )) * volume }) }, [concentrate, bounds, fade, color, opacity, growth, volume, seed, segments, speed]) From d3282cdd02d170ef603a5e096505d83dc93cd57a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Fri, 29 Sep 2023 23:16:37 +0200 Subject: [PATCH 033/103] fix: cloud scale --- src/core/Cloud.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/Cloud.tsx b/src/core/Cloud.tsx index a30a50196..402fb7b0a 100644 --- a/src/core/Cloud.tsx +++ b/src/core/Cloud.tsx @@ -150,9 +150,9 @@ export const Clouds = React.forwardRef( for (index = 0; index < clouds.current.length; index++) { config = clouds.current[index] config.ref.current.matrixWorld.decompose(translation, rotation, scale) - translation.add(pos.copy(config.position).applyQuaternion(rotation)) + translation.add(pos.copy(config.position).applyQuaternion(rotation).multiply(scale)) rotation.copy(cquat).multiply(qat.setFromAxisAngle(dir, (config.rotation += delta * config.rotationFactor))) - scale.addScalar(config.volume + ((1 + Math.sin(t * config.density * config.speed)) / 2) * config.growth) + scale.multiplyScalar(config.volume + ((1 + Math.sin(t * config.density * config.speed)) / 2) * config.growth) config.matrix.compose(translation, rotation, scale).premultiply(parentMatrix) config.dist = translation.distanceTo(cpos) } From 75d23aef952bb618f444d48015a819771c3b50df Mon Sep 17 00:00:00 2001 From: John Date: Wed, 4 Oct 2023 12:50:00 -0700 Subject: [PATCH 034/103] docs: fix typo, reference the correct/relevant component (#1672) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 109eacdb0..b9397f3de 100644 --- a/README.md +++ b/README.md @@ -298,7 +298,7 @@ A responsive [THREE.OrthographicCamera](https://threejs.org/docs/#api/en/cameras ``` -You can use the OrthographicCamera to film contents into a RenderTarget, it has the same API as OrthographicCamera. +You can use the OrthographicCamera to film contents into a RenderTarget, it has the same API as PerspectiveCamera. ```jsx From 5a15ac8002b4951d6477a4590c1f274a4ef758a3 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Sat, 7 Oct 2023 13:32:31 -0500 Subject: [PATCH 035/103] fix: revert build-time annotations (#1677) --- rollup.config.js | 14 -------------- src/core/AccumulativeShadows.tsx | 5 ++--- src/core/Caustics.tsx | 3 +-- src/core/Facemesh.tsx | 6 +++--- src/core/Grid.tsx | 3 +-- src/core/Image.tsx | 3 +-- src/core/Instances.tsx | 22 +++++++++++----------- src/core/MeshPortalMaterial.tsx | 7 ++++--- src/core/Outlines.tsx | 3 +-- src/core/PointMaterial.tsx | 5 ++--- src/core/Points.tsx | 14 +++++++------- src/core/Sparkles.tsx | 3 +-- src/core/SpriteAnimator.tsx | 12 +++--------- src/core/Stars.tsx | 3 +-- src/helpers/constants.ts | 3 --- src/materials/ConvolutionMaterial.tsx | 5 +++-- src/materials/MeshRefractionMaterial.tsx | 3 +-- src/materials/SpotLightMaterial.tsx | 3 +-- src/web/KeyboardControls.tsx | 2 +- src/web/useCursor.tsx | 7 +------ 20 files changed, 45 insertions(+), 81 deletions(-) delete mode 100644 src/helpers/constants.ts diff --git a/rollup.config.js b/rollup.config.js index 503192502..96639522e 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -38,20 +38,6 @@ const getBabelOptions = ({ useESModules }) => ({ plugins: [ '@babel/plugin-proposal-nullish-coalescing-operator', ['@babel/transform-runtime', { regenerator: false, useESModules }], - { - visitor: { - CallExpression(path) { - if (!path.getFunctionParent()) { - path.addComment('leading', '@__PURE__') - } - }, - NewExpression(path) { - if (!path.getFunctionParent()) { - path.addComment('leading', '@__PURE__') - } - }, - }, - }, ], }) diff --git a/src/core/AccumulativeShadows.tsx b/src/core/AccumulativeShadows.tsx index 7e7c56e3c..a91f2fe1a 100644 --- a/src/core/AccumulativeShadows.tsx +++ b/src/core/AccumulativeShadows.tsx @@ -4,7 +4,6 @@ import { extend, ReactThreeFiber, useFrame, useThree } from '@react-three/fiber' import { shaderMaterial } from './shaderMaterial' import { DiscardMaterial } from '../materials/DiscardMaterial' import { ForwardRefComponent } from '../helpers/ts-utils' -import { version } from '../helpers/constants' function isLight(object: any): object is THREE.Light { return object.isLight @@ -98,7 +97,7 @@ const SoftShadowMaterial = shaderMaterial( vec4 sampledDiffuseColor = texture2D(map, vUv); gl_FragColor = vec4(color * sampledDiffuseColor.r * blend, max(0.0, (1.0 - (sampledDiffuseColor.r + sampledDiffuseColor.g + sampledDiffuseColor.b) / alphaTest)) * opacity); #include - #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) @@ -267,7 +266,7 @@ export const RandomizedLight: ForwardRefComponent< position = [0, 0, 0], radius = 1, amount = 8, - intensity = version >= 155 ? Math.PI : 1, + intensity = parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 155 ? Math.PI : 1, ambient = 0.5, ...props }: JSX.IntrinsicElements['group'] & RandomizedLightProps, diff --git a/src/core/Caustics.tsx b/src/core/Caustics.tsx index f7b9c8391..fdea4d809 100644 --- a/src/core/Caustics.tsx +++ b/src/core/Caustics.tsx @@ -11,7 +11,6 @@ import { shaderMaterial } from './shaderMaterial' import { Edges } from './Edges' import { FullScreenQuad } from 'three-stdlib' import { ForwardRefComponent } from '../helpers/ts-utils' -import { version } from '../helpers/constants' type CausticsMaterialType = THREE.ShaderMaterial & { cameraMatrixWorld?: THREE.Matrix4 @@ -129,7 +128,7 @@ const CausticsProjectionMaterial = shaderMaterial( vec3 back = texture2D(causticsTextureB, lightSpacePos.xy).rgb; gl_FragColor = vec4((front + back) * color, 1.0); #include - #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) diff --git a/src/core/Facemesh.tsx b/src/core/Facemesh.tsx index 5aa97bdde..c0da43c69 100644 --- a/src/core/Facemesh.tsx +++ b/src/core/Facemesh.tsx @@ -9,7 +9,7 @@ export type MediaPipeFaceMesh = typeof FacemeshDatas.SAMPLE_FACE export type MediaPipePoints = | typeof FacemeshDatas.SAMPLE_FACE.keypoints - | (typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceLandmarks)[0] + | typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceLandmarks[0] export type FacemeshProps = { /** an array of 468+ keypoints as returned by google/mediapipe tasks-vision, default: a sample face */ @@ -27,13 +27,13 @@ export type FacemeshProps = { /** a landmark index (to get the position from) or a vec3 to be the origin of the mesh. default: undefined (ie. the bbox center) */ origin?: number | THREE.Vector3 /** A facial transformation matrix, as returned by FaceLandmarkerResult.facialTransformationMatrixes (see: https://developers.google.com/mediapipe/solutions/vision/face_landmarker/web_js#handle_and_display_results) */ - facialTransformationMatrix?: (typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.facialTransformationMatrixes)[0] + facialTransformationMatrix?: typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.facialTransformationMatrixes[0] /** Apply position offset extracted from `facialTransformationMatrix` */ offset?: boolean /** Offset sensitivity factor, less is more sensible */ offsetScalar?: number /** Fface blendshapes, as returned by FaceLandmarkerResult.faceBlendshapes (see: https://developers.google.com/mediapipe/solutions/vision/face_landmarker/web_js#handle_and_display_results) */ - faceBlendshapes?: (typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceBlendshapes)[0] + faceBlendshapes?: typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceBlendshapes[0] /** whether to enable eyes (nb. `faceBlendshapes` is required for), default: true */ eyes?: boolean /** Force `origin` to be the middle of the 2 eyes (nb. `eyes` is required for), default: false */ diff --git a/src/core/Grid.tsx b/src/core/Grid.tsx index 0149153a9..4b3df2a8e 100644 --- a/src/core/Grid.tsx +++ b/src/core/Grid.tsx @@ -10,7 +10,6 @@ import mergeRefs from 'react-merge-refs' import { extend, useFrame } from '@react-three/fiber' import { shaderMaterial } from './shaderMaterial' import { ForwardRefComponent } from '../helpers/ts-utils' -import { version } from '../helpers/constants' export type GridMaterialType = { /** Cell size, default: 0.5 */ @@ -122,7 +121,7 @@ const GridMaterial = shaderMaterial( if (gl_FragColor.a <= 0.0) discard; #include - #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> } ` ) diff --git a/src/core/Image.tsx b/src/core/Image.tsx index 41dce0fb1..590cfc8c9 100644 --- a/src/core/Image.tsx +++ b/src/core/Image.tsx @@ -4,7 +4,6 @@ import { Color, extend } from '@react-three/fiber' import { shaderMaterial } from './shaderMaterial' import { useTexture } from './useTexture' import { ForwardRefComponent } from '../helpers/ts-utils' -import { version } from '../helpers/constants' export type ImageProps = Omit & { segments?: number @@ -72,7 +71,7 @@ const ImageMaterialImpl = shaderMaterial( gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, opacity), grayscale); #include - #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> } ` ) diff --git a/src/core/Instances.tsx b/src/core/Instances.tsx index 0c1d5f981..9515b2046 100644 --- a/src/core/Instances.tsx +++ b/src/core/Instances.tsx @@ -33,10 +33,10 @@ type InstancedMesh = Omit() +const _instanceLocalMatrix = /*@__PURE__*/ new THREE.Matrix4() +const _instanceWorldMatrix = /*@__PURE__*/ new THREE.Matrix4() +const _instanceIntersects: THREE.Intersection[] = /*@__PURE__*/ [] +const _mesh = /*@__PURE__*/ new THREE.Mesh() class PositionMesh extends THREE.Group { color: THREE.Color @@ -84,13 +84,13 @@ class PositionMesh extends THREE.Group { } } -const globalContext = React.createContext(null!) -const parentMatrix = new THREE.Matrix4() -const instanceMatrix = new THREE.Matrix4() -const tempMatrix = new THREE.Matrix4() -const translation = new THREE.Vector3() -const rotation = new THREE.Quaternion() -const scale = new THREE.Vector3() +const globalContext = /*@__PURE__*/ React.createContext(null!) +const parentMatrix = /*@__PURE__*/ new THREE.Matrix4() +const instanceMatrix = /*@__PURE__*/ new THREE.Matrix4() +const tempMatrix = /*@__PURE__*/ new THREE.Matrix4() +const translation = /*@__PURE__*/ new THREE.Vector3() +const rotation = /*@__PURE__*/ new THREE.Quaternion() +const scale = /*@__PURE__*/ new THREE.Vector3() export const Instance = React.forwardRef(({ context, children, ...props }: InstanceProps, ref) => { React.useMemo(() => extend({ PositionMesh }), []) diff --git a/src/core/MeshPortalMaterial.tsx b/src/core/MeshPortalMaterial.tsx index b6e976766..87fdfb64c 100644 --- a/src/core/MeshPortalMaterial.tsx +++ b/src/core/MeshPortalMaterial.tsx @@ -11,7 +11,6 @@ import { useFBO } from './useFBO' import { RenderTexture } from './RenderTexture' import { shaderMaterial } from './shaderMaterial' import { FullScreenQuad } from 'three-stdlib' -import { version } from '../helpers/constants' const PortalMaterialImpl = shaderMaterial( { @@ -43,7 +42,7 @@ const PortalMaterialImpl = shaderMaterial( float alpha = 1.0 - smoothstep(0.0, 1.0, clamp(d/k + 1.0, 0.0, 1.0)); gl_FragColor = vec4(t.rgb, blur == 0.0 ? t.a : t.a * alpha); #include - #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) @@ -262,7 +261,9 @@ function ManagePortalScene({ vec4 ta = texture2D(a, vUv); vec4 tb = texture2D(b, vUv); gl_FragColor = mix(tb, ta, blend); - #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${ + parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment' + }> }`, }) ) diff --git a/src/core/Outlines.tsx b/src/core/Outlines.tsx index e46c63573..53efe3e58 100644 --- a/src/core/Outlines.tsx +++ b/src/core/Outlines.tsx @@ -3,7 +3,6 @@ import * as React from 'react' import { shaderMaterial } from './shaderMaterial' import { extend, applyProps, ReactThreeFiber, useThree } from '@react-three/fiber' import { toCreasedNormals } from 'three-stdlib' -import { version } from '../helpers/constants' const OutlinesMaterial = shaderMaterial( { screenspace: false, color: new THREE.Color('black'), opacity: 1, thickness: 0.05, size: new THREE.Vector2() }, @@ -47,7 +46,7 @@ const OutlinesMaterial = shaderMaterial( void main(){ gl_FragColor = vec4(color, opacity); #include - #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) diff --git a/src/core/PointMaterial.tsx b/src/core/PointMaterial.tsx index 39b8bd217..956614c25 100644 --- a/src/core/PointMaterial.tsx +++ b/src/core/PointMaterial.tsx @@ -2,7 +2,6 @@ import * as THREE from 'three' import * as React from 'react' import { PrimitiveProps } from '@react-three/fiber' import { ForwardRefComponent } from '../helpers/ts-utils' -import { version } from '../helpers/constants' type PointMaterialType = JSX.IntrinsicElements['pointsMaterial'] @@ -14,7 +13,7 @@ declare global { } } -const opaque_fragment = version >= 154 ? 'opaque_fragment' : 'output_fragment' +const opaque_fragment = parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'opaque_fragment' : 'output_fragment' export class PointMaterialImpl extends THREE.PointsMaterial { constructor(props) { @@ -35,7 +34,7 @@ export class PointMaterialImpl extends THREE.PointsMaterial { float mask = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r); gl_FragColor = vec4(gl_FragColor.rgb, mask * gl_FragColor.a ); #include - #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> ` ) } diff --git a/src/core/Points.tsx b/src/core/Points.tsx index cd2fa2201..b293d659a 100644 --- a/src/core/Points.tsx +++ b/src/core/Points.tsx @@ -22,10 +22,10 @@ type PointsInstancesProps = JSX.IntrinsicElements['points'] & { limit?: number } -const _inverseMatrix = new THREE.Matrix4() -const _ray = new THREE.Ray() -const _sphere = new THREE.Sphere() -const _position = new THREE.Vector3() +const _inverseMatrix = /*@__PURE__*/ new THREE.Matrix4() +const _ray = /*@__PURE__*/ new THREE.Ray() +const _sphere = /*@__PURE__*/ new THREE.Sphere() +const _position = /*@__PURE__*/ new THREE.Vector3() export class PositionPoint extends THREE.Group { size: number @@ -82,9 +82,9 @@ export class PositionPoint extends THREE.Group { } let i, positionRef -const context = React.createContext(null!) -const parentMatrix = new THREE.Matrix4() -const position = new THREE.Vector3() +const context = /*@__PURE__*/ React.createContext(null!) +const parentMatrix = /*@__PURE__*/ new THREE.Matrix4() +const position = /*@__PURE__*/ new THREE.Vector3() /** * Instance implementation, relies on react + context to update the attributes based on the children of this component diff --git a/src/core/Sparkles.tsx b/src/core/Sparkles.tsx index a9349d6e8..b68b965ec 100644 --- a/src/core/Sparkles.tsx +++ b/src/core/Sparkles.tsx @@ -3,7 +3,6 @@ import * as THREE from 'three' import { PointsProps, useThree, useFrame, extend, Node } from '@react-three/fiber' import { shaderMaterial } from './shaderMaterial' import { ForwardRefComponent } from '../helpers/ts-utils' -import { version } from '../helpers/constants' interface Props { /** Number of particles (default: 100) */ @@ -53,7 +52,7 @@ const SparklesImplMaterial = shaderMaterial( float strength = 0.05 / distanceToCenter - 0.1; gl_FragColor = vec4(vColor, strength * vOpacity); #include - #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) diff --git a/src/core/SpriteAnimator.tsx b/src/core/SpriteAnimator.tsx index ddb460c02..8bd848607 100644 --- a/src/core/SpriteAnimator.tsx +++ b/src/core/SpriteAnimator.tsx @@ -66,7 +66,7 @@ export const SpriteAnimator: React.FC = ( const totalFrames = React.useRef(0) const [aspect, setAspect] = React.useState([1, 1, 1]) const flipOffset = flipX ? -1 : 1 - const [displayAsSprite, setDisplayAsSprite] = React.useState(asSprite ?? true) + const [displayAsSprite,setDisplayAsSprite] = React.useState(asSprite ?? true) function loadJsonAndTextureAndExecuteCallback( jsonUrl: string, @@ -335,15 +335,9 @@ export const SpriteAnimator: React.FC = ( return ( - {displayAsSprite && ( + {displayAsSprite && ( - + )} {!displayAsSprite && ( diff --git a/src/core/Stars.tsx b/src/core/Stars.tsx index 290fac0c4..a32f4c304 100644 --- a/src/core/Stars.tsx +++ b/src/core/Stars.tsx @@ -4,7 +4,6 @@ import * as React from 'react' import { ReactThreeFiber, useFrame } from '@react-three/fiber' import { Points, Vector3, Spherical, Color, AdditiveBlending, ShaderMaterial } from 'three' import { ForwardRefComponent } from '../helpers/ts-utils' -import { version } from '../helpers/constants' type Props = { radius?: number @@ -43,7 +42,7 @@ class StarfieldMaterial extends ShaderMaterial { gl_FragColor = vec4(vColor, opacity); #include - #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }`, }) } diff --git a/src/helpers/constants.ts b/src/helpers/constants.ts deleted file mode 100644 index 1237ca1fe..000000000 --- a/src/helpers/constants.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { REVISION } from 'three' - -export const version = parseInt(REVISION.replace(/\D+/g, '')) diff --git a/src/materials/ConvolutionMaterial.tsx b/src/materials/ConvolutionMaterial.tsx index 525809b62..2904c7ad4 100644 --- a/src/materials/ConvolutionMaterial.tsx +++ b/src/materials/ConvolutionMaterial.tsx @@ -1,5 +1,4 @@ import * as THREE from 'three' -import { version } from '../helpers/constants' export class ConvolutionMaterial extends THREE.ShaderMaterial { readonly kernel: Float32Array @@ -54,7 +53,9 @@ export class ConvolutionMaterial extends THREE.ShaderMaterial { #include #include - #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${ + parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment' + }> }`, vertexShader: `uniform vec2 texelSize; uniform vec2 halfTexelSize; diff --git a/src/materials/MeshRefractionMaterial.tsx b/src/materials/MeshRefractionMaterial.tsx index 49cadc161..ceae1c01f 100644 --- a/src/materials/MeshRefractionMaterial.tsx +++ b/src/materials/MeshRefractionMaterial.tsx @@ -4,7 +4,6 @@ import * as THREE from 'three' import { shaderMaterial } from '../core/shaderMaterial' import { MeshBVHUniformStruct, shaderStructs, shaderIntersectFunction } from 'three-mesh-bvh' -import { version } from '../helpers/constants' export const MeshRefractionMaterial = shaderMaterial( { @@ -167,6 +166,6 @@ export const MeshRefractionMaterial = shaderMaterial( float nFresnel = fresnelFunc(viewDirection, normal) * fresnel; gl_FragColor = vec4(mix(finalColor, vec3(1.0), nFresnel), 1.0); #include - #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) diff --git a/src/materials/SpotLightMaterial.tsx b/src/materials/SpotLightMaterial.tsx index e97f02105..2101cc394 100644 --- a/src/materials/SpotLightMaterial.tsx +++ b/src/materials/SpotLightMaterial.tsx @@ -1,5 +1,4 @@ import * as THREE from 'three' -import { version } from '../helpers/constants' export class SpotLightMaterial extends THREE.ShaderMaterial { constructor() { @@ -80,7 +79,7 @@ export class SpotLightMaterial extends THREE.ShaderMaterial { gl_FragColor = vec4(lightColor, intensity * opacity); #include - #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }`, }) } diff --git a/src/web/KeyboardControls.tsx b/src/web/KeyboardControls.tsx index ed48b1a54..6a9f1c134 100644 --- a/src/web/KeyboardControls.tsx +++ b/src/web/KeyboardControls.tsx @@ -51,7 +51,7 @@ type KeyboardControlsApi = [ UseBoundStore> ] -const context = React.createContext(null!) +const context = /*@__PURE__*/ React.createContext(null!) export function KeyboardControls({ map, children, onChange, domElement }: KeyboardControlsProps) { const key = map.map((item) => item.name + item.keys).join('-') diff --git a/src/web/useCursor.tsx b/src/web/useCursor.tsx index d270325a6..8088e7293 100644 --- a/src/web/useCursor.tsx +++ b/src/web/useCursor.tsx @@ -1,11 +1,6 @@ import * as React from 'react' -export function useCursor( - hovered: boolean, - onPointerOver = 'pointer', - onPointerOut = 'auto', - container: HTMLElement = document.body -) { +export function useCursor(hovered: boolean, onPointerOver = 'pointer', onPointerOut = 'auto', container: HTMLElement = document.body) { React.useEffect(() => { if (hovered) { container.style.cursor = onPointerOver From 6a88b886446cd0f37e60b047a46ef351d5b48779 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Sun, 8 Oct 2023 14:36:17 +0200 Subject: [PATCH 036/103] feat: rendercubemap --- README.md | 58 +++++++++++++ src/core/RenderCubeTexture.tsx | 149 +++++++++++++++++++++++++++++++++ src/core/index.ts | 1 + 3 files changed, 208 insertions(+) create mode 100644 src/core/RenderCubeTexture.tsx diff --git a/README.md b/README.md index b9397f3de..3ec43601b 100644 --- a/README.md +++ b/README.md @@ -159,6 +159,7 @@ The `native` route of the library **does not** export `Html` or `Loader`. The de
    • Hud
    • View
    • RenderTexture
    • +
    • RenderCubeTexture
    • Mask
    • MeshPortalMaterial
    @@ -3583,6 +3584,63 @@ type Props = JSX.IntrinsicElements['texture'] & { ``` +#### RenderCubeTexture + +

    + Demo +

    + +This component allows you to render a live scene into a cubetexture which you can then apply to a material, for instance as an environment map (via the envMap property). The contents of it run inside a portal and are separate from the rest of the canvas, therefore you can have events in there, environment maps, etc. + +```tsx +export type RenderCubeTextureProps = Omit & { + /** Optional stencil buffer, defaults to false */ + stencilBuffer?: boolean + /** Optional depth buffer, defaults to true */ + depthBuffer?: boolean + /** Optional generate mipmaps, defaults to false */ + generateMipmaps?: boolean + /** Optional render priority, defaults to 0 */ + renderPriority?: number + /** Optional event priority, defaults to 0 */ + eventPriority?: number + /** Optional frame count, defaults to Infinity. If you set it to 1, it would only render a single frame, etc */ + frames?: number + /** Optional event compute, defaults to undefined */ + compute?: (event: any, state: any, previous: any) => false | undefined + /** Flip cubemap, see https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLCubeRenderTarget.js */ + flip?: boolean + /** Cubemap resolution (for each of the 6 takes), null === full screen resolution, default: 896 */ + resolution?: number + /** Children will be rendered into a portal */ + children: React.ReactNode + near?: number + far?: number + position?: ReactThreeFiber.Vector3 + rotation?: ReactThreeFiber.Euler + scale?: ReactThreeFiber.Vector3 + quaternion?: ReactThreeFiber.Quaternion + matrix?: ReactThreeFiber.Matrix4 + matrixAutoUpdate?: boolean +} + +export type RenderCubeTextureApi = { + scene: THREE.Scene + fbo: THREE.WebGLCubeRenderTarget + camera: THREE.CubeCamera +} +``` + +```jsx +const api = useRef(null!) +// ... + + + + + +``` + #### Mask

    diff --git a/src/core/RenderCubeTexture.tsx b/src/core/RenderCubeTexture.tsx new file mode 100644 index 000000000..0021ac868 --- /dev/null +++ b/src/core/RenderCubeTexture.tsx @@ -0,0 +1,149 @@ +import * as THREE from 'three' +import * as React from 'react' +import { ReactThreeFiber, createPortal, useFrame, useThree } from '@react-three/fiber' +import { ForwardRefComponent } from '../helpers/ts-utils' + +export type RenderCubeTextureProps = Omit & { + /** Optional stencil buffer, defaults to false */ + stencilBuffer?: boolean + /** Optional depth buffer, defaults to true */ + depthBuffer?: boolean + /** Optional generate mipmaps, defaults to false */ + generateMipmaps?: boolean + /** Optional render priority, defaults to 0 */ + renderPriority?: number + /** Optional event priority, defaults to 0 */ + eventPriority?: number + /** Optional frame count, defaults to Infinity. If you set it to 1, it would only render a single frame, etc */ + frames?: number + /** Optional event compute, defaults to undefined */ + compute?: (event: any, state: any, previous: any) => false | undefined + /** Flip cubemap, see https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLCubeRenderTarget.js */ + flip?: boolean + /** Cubemap resolution (for each of the 6 takes), null === full screen resolution, default: 896 */ + resolution?: number + /** Children will be rendered into a portal */ + children: React.ReactNode + near?: number + far?: number + position?: ReactThreeFiber.Vector3 + rotation?: ReactThreeFiber.Euler + scale?: ReactThreeFiber.Vector3 + quaternion?: ReactThreeFiber.Quaternion + matrix?: ReactThreeFiber.Matrix4 + matrixAutoUpdate?: boolean +} + +export type RenderCubeTextureApi = { + scene: THREE.Scene + fbo: THREE.WebGLCubeRenderTarget + camera: THREE.CubeCamera +} + +export const RenderCubeTexture: ForwardRefComponent = React.forwardRef( + ( + { + children, + compute, + renderPriority = -1, + eventPriority = 0, + frames = Infinity, + stencilBuffer = false, + depthBuffer = true, + generateMipmaps = false, + resolution = 896, + near = 0.1, + far = 1000, + flip = false, + position, + rotation, + scale, + quaternion, + matrix, + matrixAutoUpdate, + ...props + }, + forwardRef + ) => { + const { size, viewport } = useThree() + + const camera = React.useRef(null!) + const fbo = React.useMemo(() => { + const fbo = new THREE.WebGLCubeRenderTarget( + Math.max((resolution || size.width) * viewport.dpr, (resolution || size.height) * viewport.dpr), + { + stencilBuffer, + depthBuffer, + generateMipmaps, + } + ) + fbo.texture.isRenderTargetTexture = !flip + fbo.texture.flipY = true + fbo.texture.type = THREE.HalfFloatType + return fbo + }, [resolution, flip]) + + React.useEffect(() => { + return () => fbo.dispose() + }, [fbo]) + + const [vScene] = React.useState(() => new THREE.Scene()) + const uvCompute = React.useCallback((event, state, previous) => { + // https://github.com/pmndrs/react-three-fiber/pull/782 + // Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides + state.pointer.set((event.offsetX / state.size.width) * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1) + state.raycaster.setFromCamera(state.pointer, state.camera) + }, []) + + React.useImperativeHandle(forwardRef, () => ({ scene: vScene, fbo, camera: camera.current }), [fbo]) + + return ( + <> + {createPortal( + + {children} + {/* Without an element that receives pointer events state.pointer will always be 0/0 */} + null} /> + , + vScene, + { events: { compute: compute || uvCompute, priority: eventPriority } } + )} + + + + ) + } +) + +// The container component has to be separate, it can not be inlined because "useFrame(state" when run inside createPortal will return +// the portals own state which includes user-land overrides (custom cameras etc), but if it is executed in 's render function +// it would return the default state. +function Container({ + frames, + renderPriority, + children, + camera, +}: { + frames: number + renderPriority: number + children: React.ReactNode + camera: React.MutableRefObject +}) { + let count = 0 + useFrame((state) => { + if (frames === Infinity || count < frames) { + camera.current.update(state.gl, state.scene) + count++ + } + }, renderPriority) + return <>{children} +} diff --git a/src/core/index.ts b/src/core/index.ts index b34aa0df6..15ab3c14a 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -138,6 +138,7 @@ export * from './PerformanceMonitor' // Portals export * from './RenderTexture' +export * from './RenderCubeTexture' export * from './Mask' export * from './Hud' export * from './MeshPortalMaterial' From bc12fe0d34e51a7a28e88e2e4f1367a9bee23517 Mon Sep 17 00:00:00 2001 From: Michael Dobekidis Date: Mon, 9 Oct 2023 11:34:41 +0300 Subject: [PATCH 037/103] fix: support for variable sized sprites (#1678) * feat: added optional Sprite or Plane geometry for SpriteAnimator * fix: support for variable sized sprites * fix: added extra checks to change frames with variable size --- src/core/SpriteAnimator.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/core/SpriteAnimator.tsx b/src/core/SpriteAnimator.tsx index 8bd848607..a509e7410 100644 --- a/src/core/SpriteAnimator.tsx +++ b/src/core/SpriteAnimator.tsx @@ -86,7 +86,9 @@ export const SpriteAnimator: React.FC = ( const calculateAspectRatio = (width: number, height: number): Vector3 => { const aspectRatio = height / width - spriteRef.current.scale.set(1, aspectRatio, 1) + if (spriteRef.current) { + spriteRef.current.scale.set(1, aspectRatio, 1) + } return [1, aspectRatio, 1] } @@ -125,6 +127,12 @@ export const SpriteAnimator: React.FC = ( currentFrame.current = 0 currentFrameName.current = frameName hasEnded.current = false + modifySpritePosition() + if (spriteData.current) { + const { w, h } = getFirstItem(spriteData.current.frames).sourceSize + const _aspect = calculateAspectRatio(w, h) + setAspect(_aspect) + } } }, [frameName]) @@ -326,7 +334,7 @@ export const SpriteAnimator: React.FC = ( return param[0] } else if (typeof param === 'object' && param !== null) { const keys = Object.keys(param) - return param[keys[0]][0] + return frameName ? param[frameName][0] : param[keys[0]][0] } else { return { w: 0, h: 0 } } From ef023594a46e9242b8801f684f0f693d4f1e1d64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Tue, 10 Oct 2023 10:32:08 +0200 Subject: [PATCH 038/103] feat: fisheye --- README.md | 38 ++++++++++-- src/core/Fisheye.tsx | 110 +++++++++++++++++++++++++++++++++ src/core/RenderCubeTexture.tsx | 12 +--- src/core/index.ts | 1 + 4 files changed, 146 insertions(+), 15 deletions(-) create mode 100644 src/core/Fisheye.tsx diff --git a/README.md b/README.md index 3ec43601b..87a78ac2f 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,8 @@ The `native` route of the library **does not** export `Html` or `Loader`. The de

  6. View
  7. RenderTexture
  8. RenderCubeTexture
  9. -
  10. Mask
  11. +
  12. Fisheye
  13. +
  14. Mask
  15. MeshPortalMaterial
  16. Modifiers
  17. @@ -3586,10 +3587,6 @@ type Props = JSX.IntrinsicElements['texture'] & { #### RenderCubeTexture -

    - Demo -

    - This component allows you to render a live scene into a cubetexture which you can then apply to a material, for instance as an environment map (via the envMap property). The contents of it run inside a portal and are separate from the rest of the canvas, therefore you can have events in there, environment maps, etc. ```tsx @@ -3607,7 +3604,7 @@ export type RenderCubeTextureProps = Omit false | undefined + compute?: ComputeFunction /** Flip cubemap, see https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLCubeRenderTarget.js */ flip?: boolean /** Cubemap resolution (for each of the 6 takes), null === full screen resolution, default: 896 */ @@ -3641,6 +3638,35 @@ const api = useRef(null!) ``` +### Fisheye + +

    + Demo +

    + +```tsx +export type FisheyeProps = JSX.IntrinsicElements['mesh'] & { + /** Zoom factor, 0..1, 0 */ + zoom?: number + /** Number of segments, 64 */ + segments?: number + /** Cubemap resolution (for each of the 6 takes), null === full screen resolution, default: 896 */ + resolution?: number + /** Children will be projected into the fisheye */ + children: React.ReactNode + /** Optional render priority, defaults to 1 */ + renderPriority?: number +} +``` + +This component will take over system rendering. It portals its children into a cubemap which is then projected onto a sphere. The sphere is rendered out on the screen, filling it. You can lower the resolution to increase performance. Six renders per frame are necessary to construct a full fisheye view, and since each facet of the cubemap only takes a portion of the screen full resolution is not necessary. You can also reduce the amount of segments (resulting in edgier rounds). + +```jsx + + + +``` + #### Mask

    diff --git a/src/core/Fisheye.tsx b/src/core/Fisheye.tsx new file mode 100644 index 000000000..dfa3c2618 --- /dev/null +++ b/src/core/Fisheye.tsx @@ -0,0 +1,110 @@ +/** + * Event compute by Garrett Johnson https://twitter.com/garrettkjohnson + * https://discourse.threejs.org/t/how-to-use-three-raycaster-with-a-sphere-projected-envmap/56803/10 + */ + +import * as THREE from 'three' +import * as React from 'react' +import { useFrame, useThree } from '@react-three/fiber' +import { RenderCubeTexture, RenderCubeTextureApi } from './RenderCubeTexture' + +export type FisheyeProps = JSX.IntrinsicElements['mesh'] & { + /** Zoom factor, 0..1, 0 */ + zoom?: number + /** Number of segments, 64 */ + segments?: number + /** Cubemap resolution (for each of the 6 takes), null === full screen resolution, default: 896 */ + resolution?: number + /** Children will be projected into the fisheye */ + children: React.ReactNode + /** Optional render priority, defaults to 1 */ + renderPriority?: number +} + +export function Fisheye({ + renderPriority = 1, + zoom = 0, + segments = 64, + children, + resolution = 896, + ...props +}: FisheyeProps) { + const sphere = React.useRef(null!) + const cubeApi = React.useRef(null!) + + // This isn't more than a simple sphere and a fixed orthographc camera + // pointing at it. A virtual scene is portalled into the environment map + // of its material. The cube-camera filming that scene is being synced to + // the portals default camera with the component. + + const { width, height } = useThree((state) => state.size) + const [orthoC] = React.useState(() => new THREE.OrthographicCamera()) + + React.useLayoutEffect(() => { + orthoC.position.set(0, 0, 100) + orthoC.zoom = 100 + orthoC.left = width / -2 + orthoC.right = width / 2 + orthoC.top = height / 2 + orthoC.bottom = height / -2 + orthoC.updateProjectionMatrix() + }, [width, height]) + + const radius = (Math.sqrt(width * width + height * height) / 100) * (0.5 + zoom / 2) + const normal = new THREE.Vector3() + const sph = new THREE.Sphere(new THREE.Vector3(), radius) + const normalMatrix = new THREE.Matrix3() + + const compute = React.useCallback((event, state, prev) => { + // Raycast from the render camera to the sphere and get the surface normal + // of the point hit in world space of the sphere scene + // We have to set the raycaster using the orthocam and pointer + // to perform sphere interscetions. + state.pointer.set((event.offsetX / state.size.width) * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1) + state.raycaster.setFromCamera(state.pointer, orthoC) + if (!state.raycaster.ray.intersectSphere(sph, normal)) return + else normal.normalize() + // Get the matrix for transforming normals into world space + normalMatrix.getNormalMatrix(cubeApi.current.camera.matrixWorld) + // Get the ray + cubeApi.current.camera.getWorldPosition(state.raycaster.ray.origin) + state.raycaster.ray.direction.set(0, 0, 1).reflect(normal) + state.raycaster.ray.direction.x *= -1 // flip across X to accommodate the "flip" of the env map + state.raycaster.ray.direction.applyNormalMatrix(normalMatrix).multiplyScalar(-1) + return undefined + }, []) + + useFrame((state) => { + // Take over rendering + if (renderPriority) state.gl.render(sphere.current, orthoC) + }, renderPriority) + + return ( + <> + + + + + {children} + + + + + + ) +} + +function UpdateCubeCamera({ api }: { api: React.MutableRefObject }) { + const t = new THREE.Vector3() + const r = new THREE.Quaternion() + const s = new THREE.Vector3() + const e = new THREE.Euler(0, Math.PI, 0) + useFrame((state) => { + // Read out the cameras whereabouts, state.camera is the one *within* the portal + state.camera.matrixWorld.decompose(t, r, s) + // Apply its position and rotation, flip the Y axis + api.current.camera.position.copy(t) + api.current.camera.quaternion.setFromEuler(e).premultiply(r) + }) + return null +} diff --git a/src/core/RenderCubeTexture.tsx b/src/core/RenderCubeTexture.tsx index 0021ac868..0a37254a8 100644 --- a/src/core/RenderCubeTexture.tsx +++ b/src/core/RenderCubeTexture.tsx @@ -1,6 +1,6 @@ import * as THREE from 'three' import * as React from 'react' -import { ReactThreeFiber, createPortal, useFrame, useThree } from '@react-three/fiber' +import { ComputeFunction, ReactThreeFiber, createPortal, useFrame, useThree } from '@react-three/fiber' import { ForwardRefComponent } from '../helpers/ts-utils' export type RenderCubeTextureProps = Omit & { @@ -17,7 +17,7 @@ export type RenderCubeTextureProps = Omit false | undefined + compute?: ComputeFunction /** Flip cubemap, see https://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLCubeRenderTarget.js */ flip?: boolean /** Cubemap resolution (for each of the 6 takes), null === full screen resolution, default: 896 */ @@ -88,12 +88,6 @@ export const RenderCubeTexture: ForwardRefComponent new THREE.Scene()) - const uvCompute = React.useCallback((event, state, previous) => { - // https://github.com/pmndrs/react-three-fiber/pull/782 - // Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides - state.pointer.set((event.offsetX / state.size.width) * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1) - state.raycaster.setFromCamera(state.pointer, state.camera) - }, []) React.useImperativeHandle(forwardRef, () => ({ scene: vScene, fbo, camera: camera.current }), [fbo]) @@ -106,7 +100,7 @@ export const RenderCubeTexture: ForwardRefComponent null} /> , vScene, - { events: { compute: compute || uvCompute, priority: eventPriority } } + { events: { compute, priority: eventPriority } } )} Date: Tue, 10 Oct 2023 11:08:32 +0200 Subject: [PATCH 039/103] chore: fisheye docs --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 87a78ac2f..5df55f253 100644 --- a/README.md +++ b/README.md @@ -3662,9 +3662,11 @@ export type FisheyeProps = JSX.IntrinsicElements['mesh'] & { This component will take over system rendering. It portals its children into a cubemap which is then projected onto a sphere. The sphere is rendered out on the screen, filling it. You can lower the resolution to increase performance. Six renders per frame are necessary to construct a full fisheye view, and since each facet of the cubemap only takes a portion of the screen full resolution is not necessary. You can also reduce the amount of segments (resulting in edgier rounds). ```jsx - - - + + + + + ``` #### Mask From 675c30ff9e9be437146554f23cbf10ed74b86d56 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Thu, 12 Oct 2023 17:11:38 -0500 Subject: [PATCH 040/103] fix(OrbitControls): don't use pointer capture (#1683) --- package.json | 2 +- yarn.lock | 45 ++++----------------------------------------- 2 files changed, 5 insertions(+), 42 deletions(-) diff --git a/package.json b/package.json index 298bf662a..9ae8894f0 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "stats.js": "^0.17.0", "suspend-react": "^0.1.3", "three-mesh-bvh": "^0.6.7", - "three-stdlib": "^2.26.6", + "three-stdlib": "^2.27.2", "troika-three-text": "^0.47.2", "utility-types": "^3.10.0", "uuid": "^9.0.1", diff --git a/yarn.lock b/yarn.lock index c771cda29..7afaabf1d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9250,11 +9250,6 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -ktx-parse@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/ktx-parse/-/ktx-parse-0.4.5.tgz#79905e22281a9d3e602b2ff522df1ee7d1813aa6" - integrity sha512-MK3FOody4TXbFf8Yqv7EBbySw7aPvEcPX++Ipt6Sox+/YMFvR5xaTyhfNSk1AEmMy+RYIw81ctN4IMxCB8OAlg== - lazy-universal-dotenv@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz#0b220c264e89a042a37181a4928cdd298af73422" @@ -10033,11 +10028,6 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mmd-parser@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mmd-parser/-/mmd-parser-1.0.4.tgz#87cc05782cb5974ca854f0303fc5147bc9d690e7" - integrity sha512-Qi0VCU46t2IwfGv5KF0+D/t9cizcDug7qnNoy9Ggk7aucp0tssV8IwTMkBlDbm+VqAf3cdQHTCARKSsuS2MYFg== - modify-values@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" @@ -10656,14 +10646,6 @@ open@^8.0.4, open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -opentype.js@^1.3.3: - version "1.3.4" - resolved "https://registry.yarnpkg.com/opentype.js/-/opentype.js-1.3.4.tgz#1c0e72e46288473cc4a4c6a2dc60fd7fe6020d77" - integrity sha512-d2JE9RP/6uagpQAVtJoF0pJJA/fgai89Cc50Yp0EJHk+eLp6QQ7gBoblsnubRULNY132I0J1QKMJ+JTbMqz4sw== - dependencies: - string.prototype.codepointat "^0.2.1" - tiny-inflate "^1.0.3" - optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -12736,11 +12718,6 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.codepointat@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz#004ad44c8afc727527b108cd462b4d971cd469bc" - integrity sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg== - string.prototype.matchall@^4.0.8: version "4.0.10" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" @@ -13065,21 +13042,17 @@ three-mesh-bvh@^0.6.7: resolved "https://registry.yarnpkg.com/three-mesh-bvh/-/three-mesh-bvh-0.6.7.tgz#6491876f5bf0c0d67be81a4402f2abdbb2266d76" integrity sha512-RYdjMsH+vZvjLwA+ehI4+ZqTaTehAz4iho2yfL5PdGsIHyxpB78g0iy4Emj8079m/9KBX02TzddkvPSKSruQjg== -three-stdlib@^2.26.6: - version "2.26.6" - resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.26.6.tgz#0ab23a6c4c4a74365e54dc0a69db7bb9589391b4" - integrity sha512-93XercNU5UBVXOXrzekL3eltt4fR0yvXN8r4rPSMNPAjwFdHYgc8o7SqylCNLPNetB9eAHGtI3Tx7WUMRM6lMg== +three-stdlib@^2.27.2: + version "2.27.2" + resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.27.2.tgz#d9fb6e8341ad93aa12b71bec2b3480528d6e42bf" + integrity sha512-yjHaY4QHRqMi1yGIt5RzWtRFbcCj2YHoCaAY4pldphI5CMf9PoCc9N2UFuVbHqgITQRKnVoCo+OCMU2rIZTXjg== dependencies: "@types/draco3d" "^1.4.0" "@types/offscreencanvas" "^2019.6.4" "@types/webxr" "^0.5.2" draco3d "^1.4.1" fflate "^0.6.9" - ktx-parse "^0.4.5" - mmd-parser "^1.0.4" - opentype.js "^1.3.3" potpack "^1.0.1" - zstddec "^0.0.2" three@^0.149.0: version "0.149.0" @@ -13114,11 +13087,6 @@ through@2, "through@>=2.2.7 <3", through@^2.3.8: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -tiny-inflate@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" - integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== - tiny-invariant@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" @@ -14068,11 +14036,6 @@ yocto-queue@^1.0.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== -zstddec@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/zstddec/-/zstddec-0.0.2.tgz#57e2f28dd1ff56b750e07d158a43f0611ad9eeb4" - integrity sha512-DCo0oxvcvOTGP/f5FA6tz2Z6wF+FIcEApSTu0zV5sQgn9hoT5lZ9YRAKUraxt9oP7l4e8TnNdi8IZTCX6WCkwA== - zustand@^3.5.13, zustand@^3.7.1: version "3.7.2" resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.7.2.tgz#7b44c4f4a5bfd7a8296a3957b13e1c346f42514d" From 8a64fb79e9159b2f87504b18b8881199823b18d5 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Thu, 12 Oct 2023 17:31:03 -0500 Subject: [PATCH 041/103] fix: add annotations for tree-shaking (#1684) --- src/core/AccumulativeShadows.tsx | 17 +- src/core/ArcballControls.tsx | 90 +++--- src/core/BBAnchor.tsx | 4 +- src/core/Billboard.tsx | 35 +-- src/core/Bounds.tsx | 2 +- src/core/CameraControls.tsx | 2 +- src/core/CameraShake.tsx | 130 ++++---- src/core/CatmullRomLine.tsx | 78 ++--- src/core/Caustics.tsx | 27 +- src/core/Center.tsx | 136 +++++---- src/core/Clone.tsx | 2 +- src/core/Cloud.tsx | 20 +- src/core/ContactShadows.tsx | 2 +- src/core/CubicBezierLine.tsx | 2 +- src/core/CurveModifier.tsx | 7 +- src/core/Decal.tsx | 137 ++++----- src/core/Detailed.tsx | 2 +- src/core/DeviceOrientationControls.tsx | 2 +- src/core/Edges.tsx | 2 +- src/core/Effects.tsx | 2 +- src/core/Example.tsx | 2 +- src/core/FaceControls.tsx | 8 +- src/core/FaceLandmarker.tsx | 2 +- src/core/Facemesh.tsx | 210 ++++++------- src/core/FirstPersonControls.tsx | 42 +-- src/core/Float.tsx | 5 +- src/core/FlyControls.tsx | 2 +- src/core/GizmoHelper.tsx | 12 +- src/core/GizmoViewcube.tsx | 6 +- src/core/Gltf.tsx | 2 +- src/core/Grid.tsx | 15 +- src/core/Image.tsx | 36 ++- src/core/Instances.tsx | 79 +++-- src/core/Lightformer.tsx | 2 +- src/core/Line.tsx | 2 +- src/core/MapControls.tsx | 2 +- src/core/MarchingCubes.tsx | 70 ++--- src/core/Mask.tsx | 2 +- src/core/MeshDiscardMaterial.tsx | 10 +- src/core/MeshDistortMaterial.tsx | 2 +- src/core/MeshPortalMaterial.tsx | 13 +- src/core/MeshReflectorMaterial.tsx | 364 ++++++++++++----------- src/core/MeshTransmissionMaterial.tsx | 2 +- src/core/MeshWobbleMaterial.tsx | 2 +- src/core/MotionPathControls.tsx | 4 +- src/core/OrbitControls.tsx | 140 +++++---- src/core/OrthographicCamera.tsx | 2 +- src/core/Outlines.tsx | 13 +- src/core/PerformanceMonitor.tsx | 2 +- src/core/PerspectiveCamera.tsx | 2 +- src/core/PointMaterial.tsx | 7 +- src/core/PointerLockControls.tsx | 2 +- src/core/Points.tsx | 39 ++- src/core/PositionalAudio.tsx | 2 +- src/core/QuadraticBezierLine.tsx | 79 +++-- src/core/Reflector.tsx | 9 +- src/core/RenderCubeTexture.tsx | 145 ++++----- src/core/RenderTexture.tsx | 2 +- src/core/Resize.tsx | 2 +- src/core/RoundedBox.tsx | 82 ++--- src/core/ScreenQuad.tsx | 2 +- src/core/ScreenSpace.tsx | 29 +- src/core/Segments.tsx | 25 +- src/core/Shadow.tsx | 2 +- src/core/Sky.tsx | 2 +- src/core/Sparkles.tsx | 7 +- src/core/Stars.tsx | 5 +- src/core/Svg.tsx | 122 ++++---- src/core/Text.tsx | 2 +- src/core/Text3D.tsx | 2 +- src/core/TrackballControls.tsx | 87 +++--- src/core/Trail.tsx | 8 +- src/core/TransformControls.tsx | 189 ++++++------ src/core/Wireframe.tsx | 7 +- src/core/meshBounds.tsx | 8 +- src/core/shapes.tsx | 38 +-- src/core/useBVH.tsx | 2 +- src/core/useProgress.tsx | 2 +- src/helpers/constants.ts | 5 + src/materials/ConvolutionMaterial.tsx | 5 +- src/materials/DiscardMaterial.tsx | 2 +- src/materials/MeshRefractionMaterial.tsx | 15 +- src/materials/SpotLightMaterial.tsx | 3 +- src/materials/WireframeMaterial.tsx | 8 +- src/web/Html.tsx | 8 +- src/web/KeyboardControls.tsx | 2 +- src/web/ScrollControls.tsx | 6 +- src/web/Select.tsx | 2 +- src/web/View.tsx | 2 +- src/web/pivotControls/AxisArrow.tsx | 8 +- src/web/pivotControls/AxisRotator.tsx | 12 +- src/web/pivotControls/PlaneSlider.tsx | 6 +- src/web/pivotControls/context.ts | 2 +- src/web/pivotControls/index.tsx | 42 +-- 94 files changed, 1419 insertions(+), 1371 deletions(-) create mode 100644 src/helpers/constants.ts diff --git a/src/core/AccumulativeShadows.tsx b/src/core/AccumulativeShadows.tsx index a91f2fe1a..84a76a196 100644 --- a/src/core/AccumulativeShadows.tsx +++ b/src/core/AccumulativeShadows.tsx @@ -4,6 +4,7 @@ import { extend, ReactThreeFiber, useFrame, useThree } from '@react-three/fiber' import { shaderMaterial } from './shaderMaterial' import { DiscardMaterial } from '../materials/DiscardMaterial' import { ForwardRefComponent } from '../helpers/ts-utils' +import { version } from '../helpers/constants' function isLight(object: any): object is THREE.Light { return object.isLight @@ -72,11 +73,13 @@ declare global { } } -export const accumulativeContext = React.createContext(null as unknown as AccumulativeContext) +export const accumulativeContext = /* @__PURE__ */ React.createContext( + null as unknown as AccumulativeContext +) -const SoftShadowMaterial = shaderMaterial( +const SoftShadowMaterial = /* @__PURE__ */ shaderMaterial( { - color: new THREE.Color(), + color: /* @__PURE__ */ new THREE.Color(), blend: 2.0, alphaTest: 0.75, opacity: 0, @@ -97,14 +100,14 @@ const SoftShadowMaterial = shaderMaterial( vec4 sampledDiffuseColor = texture2D(map, vUv); gl_FragColor = vec4(color * sampledDiffuseColor.r * blend, max(0.0, (1.0 - (sampledDiffuseColor.r + sampledDiffuseColor.g + sampledDiffuseColor.b) / alphaTest)) * opacity); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) export const AccumulativeShadows: ForwardRefComponent< JSX.IntrinsicElements['group'] & AccumulativeShadowsProps, AccumulativeContext -> = React.forwardRef( +> = /* @__PURE__ */ React.forwardRef( ( { children, @@ -253,7 +256,7 @@ export type RandomizedLightProps = { export const RandomizedLight: ForwardRefComponent< JSX.IntrinsicElements['group'] & RandomizedLightProps, AccumulativeLightContext -> = React.forwardRef( +> = /* @__PURE__ */ React.forwardRef( ( { castShadow = true, @@ -266,7 +269,7 @@ export const RandomizedLight: ForwardRefComponent< position = [0, 0, 0], radius = 1, amount = 8, - intensity = parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 155 ? Math.PI : 1, + intensity = version >= 155 ? Math.PI : 1, ambient = 0.5, ...props }: JSX.IntrinsicElements['group'] & RandomizedLightProps, diff --git a/src/core/ArcballControls.tsx b/src/core/ArcballControls.tsx index 4c0e79daa..3c8c3eb38 100644 --- a/src/core/ArcballControls.tsx +++ b/src/core/ArcballControls.tsx @@ -23,55 +23,55 @@ export type ArcballControlsProps = Omit< 'ref' > -export const ArcballControls: ForwardRefComponent = forwardRef< - ArcballControlsImpl, - ArcballControlsProps ->(({ camera, makeDefault, regress, domElement, onChange, onStart, onEnd, ...restProps }, ref) => { - const invalidate = useThree((state) => state.invalidate) - const defaultCamera = useThree((state) => state.camera) - const gl = useThree((state) => state.gl) - const events = useThree((state) => state.events) as EventManager - const set = useThree((state) => state.set) - const get = useThree((state) => state.get) - const performance = useThree((state) => state.performance) - const explCamera = camera || defaultCamera - const explDomElement = (domElement || events.connected || gl.domElement) as HTMLElement - const controls = useMemo(() => new ArcballControlsImpl(explCamera), [explCamera]) +export const ArcballControls: ForwardRefComponent = + /* @__PURE__ */ forwardRef( + ({ camera, makeDefault, regress, domElement, onChange, onStart, onEnd, ...restProps }, ref) => { + const invalidate = useThree((state) => state.invalidate) + const defaultCamera = useThree((state) => state.camera) + const gl = useThree((state) => state.gl) + const events = useThree((state) => state.events) as EventManager + const set = useThree((state) => state.set) + const get = useThree((state) => state.get) + const performance = useThree((state) => state.performance) + const explCamera = camera || defaultCamera + const explDomElement = (domElement || events.connected || gl.domElement) as HTMLElement + const controls = useMemo(() => new ArcballControlsImpl(explCamera), [explCamera]) - useFrame(() => { - if (controls.enabled) controls.update() - }, -1) + useFrame(() => { + if (controls.enabled) controls.update() + }, -1) - useEffect(() => { - controls.connect(explDomElement) - return () => void controls.dispose() - }, [explDomElement, regress, controls, invalidate]) + useEffect(() => { + controls.connect(explDomElement) + return () => void controls.dispose() + }, [explDomElement, regress, controls, invalidate]) - useEffect(() => { - const callback = (e: Event) => { - invalidate() - if (regress) performance.regress() - if (onChange) onChange(e) - } + useEffect(() => { + const callback = (e: Event) => { + invalidate() + if (regress) performance.regress() + if (onChange) onChange(e) + } - controls.addEventListener('change', callback) - if (onStart) controls.addEventListener('start', onStart) - if (onEnd) controls.addEventListener('end', onEnd) + controls.addEventListener('change', callback) + if (onStart) controls.addEventListener('start', onStart) + if (onEnd) controls.addEventListener('end', onEnd) - return () => { - controls.removeEventListener('change', callback) - if (onStart) controls.removeEventListener('start', onStart) - if (onEnd) controls.removeEventListener('end', onEnd) - } - }, [onChange, onStart, onEnd]) + return () => { + controls.removeEventListener('change', callback) + if (onStart) controls.removeEventListener('start', onStart) + if (onEnd) controls.removeEventListener('end', onEnd) + } + }, [onChange, onStart, onEnd]) - useEffect(() => { - if (makeDefault) { - const old = get().controls - set({ controls }) - return () => set({ controls: old }) - } - }, [makeDefault, controls]) + useEffect(() => { + if (makeDefault) { + const old = get().controls + set({ controls }) + return () => set({ controls: old }) + } + }, [makeDefault, controls]) - return -}) + return + } + ) diff --git a/src/core/BBAnchor.tsx b/src/core/BBAnchor.tsx index 116fb33ad..a1bcb6e42 100644 --- a/src/core/BBAnchor.tsx +++ b/src/core/BBAnchor.tsx @@ -2,8 +2,8 @@ import * as React from 'react' import * as THREE from 'three' import { useFrame, GroupProps } from '@react-three/fiber' -const boundingBox = new THREE.Box3() -const boundingBoxSize = new THREE.Vector3() +const boundingBox = /* @__PURE__ */ new THREE.Box3() +const boundingBoxSize = /* @__PURE__ */ new THREE.Vector3() export interface BBAnchorProps extends GroupProps { anchor: THREE.Vector3 | [number, number, number] diff --git a/src/core/Billboard.tsx b/src/core/Billboard.tsx index 140bc28aa..8b862fe13 100644 --- a/src/core/Billboard.tsx +++ b/src/core/Billboard.tsx @@ -20,23 +20,24 @@ export type BillboardProps = { * * ``` */ -export const Billboard: ForwardRefComponent = React.forwardRef( - function Billboard({ follow = true, lockX = false, lockY = false, lockZ = false, ...props }, ref) { - const localRef = React.useRef() - useFrame(({ camera }) => { - if (!follow || !localRef.current) return +export const Billboard: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< + Group, + BillboardProps +>(function Billboard({ follow = true, lockX = false, lockY = false, lockZ = false, ...props }, ref) { + const localRef = React.useRef() + useFrame(({ camera }) => { + if (!follow || !localRef.current) return - // save previous rotation in case we're locking an axis - const prevRotation = localRef.current.rotation.clone() + // save previous rotation in case we're locking an axis + const prevRotation = localRef.current.rotation.clone() - // always face the camera - camera.getWorldQuaternion(localRef.current.quaternion) + // always face the camera + camera.getWorldQuaternion(localRef.current.quaternion) - // readjust any axis that is locked - if (lockX) localRef.current.rotation.x = prevRotation.x - if (lockY) localRef.current.rotation.y = prevRotation.y - if (lockZ) localRef.current.rotation.z = prevRotation.z - }) - return - } -) + // readjust any axis that is locked + if (lockX) localRef.current.rotation.x = prevRotation.x + if (lockY) localRef.current.rotation.y = prevRotation.y + if (lockZ) localRef.current.rotation.z = prevRotation.z + }) + return +}) diff --git a/src/core/Bounds.tsx b/src/core/Bounds.tsx index 96b7399c3..1967abc4a 100644 --- a/src/core/Bounds.tsx +++ b/src/core/Bounds.tsx @@ -39,7 +39,7 @@ const isOrthographic = (def: THREE.Camera): def is THREE.OrthographicCamera => def && (def as THREE.OrthographicCamera).isOrthographicCamera const isBox3 = (def: any): def is THREE.Box3 => def && (def as THREE.Box3).isBox3 -const context = React.createContext(null!) +const context = /* @__PURE__ */ React.createContext(null!) export function Bounds({ children, damping = 6, fit, clip, observe, margin = 1.2, eps = 0.01, onFit }: BoundsProps) { const ref = React.useRef(null!) const { camera, invalidate, size, controls: controlsImpl } = useThree() diff --git a/src/core/CameraControls.tsx b/src/core/CameraControls.tsx index cc3375de9..f1bfdc5f7 100644 --- a/src/core/CameraControls.tsx +++ b/src/core/CameraControls.tsx @@ -38,7 +38,7 @@ export type CameraControlsProps = Omit< 'ref' > -export const CameraControls: ForwardRefComponent = forwardRef< +export const CameraControls: ForwardRefComponent = /* @__PURE__ */ forwardRef< CameraControlsImpl, CameraControlsProps >((props, ref) => { diff --git a/src/core/CameraShake.tsx b/src/core/CameraShake.tsx index f356ab3f8..37d23cf48 100644 --- a/src/core/CameraShake.tsx +++ b/src/core/CameraShake.tsx @@ -28,77 +28,75 @@ export interface CameraShakeProps { rollFrequency?: number } -export const CameraShake: ForwardRefComponent = React.forwardRef< - ShakeController | undefined, - CameraShakeProps ->( - ( - { - intensity = 1, - decay, - decayRate = 0.65, - maxYaw = 0.1, - maxPitch = 0.1, - maxRoll = 0.1, - yawFrequency = 0.1, - pitchFrequency = 0.1, - rollFrequency = 0.1, - }, - ref - ) => { - const camera = useThree((state) => state.camera) - const defaultControls = useThree((state) => state.controls) as unknown as ControlsProto - const intensityRef = React.useRef(intensity) - const initialRotation = React.useRef(camera.rotation.clone()) - const [yawNoise] = React.useState(() => new SimplexNoise()) - const [pitchNoise] = React.useState(() => new SimplexNoise()) - const [rollNoise] = React.useState(() => new SimplexNoise()) +export const CameraShake: ForwardRefComponent = + /* @__PURE__ */ React.forwardRef( + ( + { + intensity = 1, + decay, + decayRate = 0.65, + maxYaw = 0.1, + maxPitch = 0.1, + maxRoll = 0.1, + yawFrequency = 0.1, + pitchFrequency = 0.1, + rollFrequency = 0.1, + }, + ref + ) => { + const camera = useThree((state) => state.camera) + const defaultControls = useThree((state) => state.controls) as unknown as ControlsProto + const intensityRef = React.useRef(intensity) + const initialRotation = React.useRef(camera.rotation.clone()) + const [yawNoise] = React.useState(() => new SimplexNoise()) + const [pitchNoise] = React.useState(() => new SimplexNoise()) + const [rollNoise] = React.useState(() => new SimplexNoise()) - const constrainIntensity = () => { - if (intensityRef.current < 0 || intensityRef.current > 1) { - intensityRef.current = intensityRef.current < 0 ? 0 : 1 + const constrainIntensity = () => { + if (intensityRef.current < 0 || intensityRef.current > 1) { + intensityRef.current = intensityRef.current < 0 ? 0 : 1 + } } - } - React.useImperativeHandle( - ref, - () => ({ - getIntensity: (): number => intensityRef.current, - setIntensity: (val: number): void => { - intensityRef.current = val - constrainIntensity() - }, - }), - [] - ) + React.useImperativeHandle( + ref, + () => ({ + getIntensity: (): number => intensityRef.current, + setIntensity: (val: number): void => { + intensityRef.current = val + constrainIntensity() + }, + }), + [] + ) - React.useEffect(() => { - if (defaultControls) { - const callback = () => void (initialRotation.current = camera.rotation.clone()) - defaultControls.addEventListener('change', callback) - callback() - return () => void defaultControls.removeEventListener('change', callback) - } - }, [camera, defaultControls]) + React.useEffect(() => { + if (defaultControls) { + const callback = () => void (initialRotation.current = camera.rotation.clone()) + defaultControls.addEventListener('change', callback) + callback() + return () => void defaultControls.removeEventListener('change', callback) + } + }, [camera, defaultControls]) - useFrame((state, delta) => { - const shake = Math.pow(intensityRef.current, 2) - const yaw = maxYaw * shake * yawNoise.noise(state.clock.elapsedTime * yawFrequency, 1) - const pitch = maxPitch * shake * pitchNoise.noise(state.clock.elapsedTime * pitchFrequency, 1) - const roll = maxRoll * shake * rollNoise.noise(state.clock.elapsedTime * rollFrequency, 1) + useFrame((state, delta) => { + const shake = Math.pow(intensityRef.current, 2) + const yaw = maxYaw * shake * yawNoise.noise(state.clock.elapsedTime * yawFrequency, 1) + const pitch = maxPitch * shake * pitchNoise.noise(state.clock.elapsedTime * pitchFrequency, 1) + const roll = maxRoll * shake * rollNoise.noise(state.clock.elapsedTime * rollFrequency, 1) - camera.rotation.set( - initialRotation.current.x + pitch, - initialRotation.current.y + yaw, - initialRotation.current.z + roll - ) + camera.rotation.set( + initialRotation.current.x + pitch, + initialRotation.current.y + yaw, + initialRotation.current.z + roll + ) - if (decay && intensityRef.current > 0) { - intensityRef.current -= decayRate * delta - constrainIntensity() - } - }) + if (decay && intensityRef.current > 0) { + intensityRef.current -= decayRate * delta + constrainIntensity() + } + }) - return null - } -) + return null + } + ) diff --git a/src/core/CatmullRomLine.tsx b/src/core/CatmullRomLine.tsx index 0d44f41cb..1c3040327 100644 --- a/src/core/CatmullRomLine.tsx +++ b/src/core/CatmullRomLine.tsx @@ -11,41 +11,43 @@ type Props = Omit & { segments?: number } -export const CatmullRomLine: ForwardRefComponent = React.forwardRef(function CatmullRomLine( - { points, closed = false, curveType = 'centripetal', tension = 0.5, segments = 20, vertexColors, ...rest }, - ref -) { - const curve = React.useMemo(() => { - const mappedPoints = points.map((pt) => - pt instanceof Vector3 ? pt : new Vector3(...(pt as [number, number, number])) - ) - - return new CatmullRomCurve3(mappedPoints, closed, curveType, tension) - }, [points, closed, curveType, tension]) - - const segmentedPoints = React.useMemo(() => curve.getPoints(segments), [curve, segments]) - - const interpolatedVertexColors = React.useMemo(() => { - if (!vertexColors || vertexColors.length < 2) return undefined - - if (vertexColors.length === segments + 1) return vertexColors - - const mappedColors = vertexColors.map((color) => - color instanceof Color ? color : new Color(...(color as [number, number, number])) - ) - if (closed) mappedColors.push(mappedColors[0].clone()) - - const iColors: Color[] = [mappedColors[0]] - const divisions = segments / (mappedColors.length - 1) - for (let i = 1; i < segments; i++) { - const alpha = (i % divisions) / divisions - const colorIndex = Math.floor(i / divisions) - iColors.push(mappedColors[colorIndex].clone().lerp(mappedColors[colorIndex + 1], alpha)) - } - iColors.push(mappedColors[mappedColors.length - 1]) - - return iColors - }, [vertexColors, segments]) - - return -}) +export const CatmullRomLine: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( + function CatmullRomLine( + { points, closed = false, curveType = 'centripetal', tension = 0.5, segments = 20, vertexColors, ...rest }, + ref + ) { + const curve = React.useMemo(() => { + const mappedPoints = points.map((pt) => + pt instanceof Vector3 ? pt : new Vector3(...(pt as [number, number, number])) + ) + + return new CatmullRomCurve3(mappedPoints, closed, curveType, tension) + }, [points, closed, curveType, tension]) + + const segmentedPoints = React.useMemo(() => curve.getPoints(segments), [curve, segments]) + + const interpolatedVertexColors = React.useMemo(() => { + if (!vertexColors || vertexColors.length < 2) return undefined + + if (vertexColors.length === segments + 1) return vertexColors + + const mappedColors = vertexColors.map((color) => + color instanceof Color ? color : new Color(...(color as [number, number, number])) + ) + if (closed) mappedColors.push(mappedColors[0].clone()) + + const iColors: Color[] = [mappedColors[0]] + const divisions = segments / (mappedColors.length - 1) + for (let i = 1; i < segments; i++) { + const alpha = (i % divisions) / divisions + const colorIndex = Math.floor(i / divisions) + iColors.push(mappedColors[colorIndex].clone().lerp(mappedColors[colorIndex + 1], alpha)) + } + iColors.push(mappedColors[mappedColors.length - 1]) + + return iColors + }, [vertexColors, segments]) + + return + } +) diff --git a/src/core/Caustics.tsx b/src/core/Caustics.tsx index fdea4d809..e75b36c10 100644 --- a/src/core/Caustics.tsx +++ b/src/core/Caustics.tsx @@ -11,6 +11,7 @@ import { shaderMaterial } from './shaderMaterial' import { Edges } from './Edges' import { FullScreenQuad } from 'three-stdlib' import { ForwardRefComponent } from '../helpers/ts-utils' +import { version } from '../helpers/constants' type CausticsMaterialType = THREE.ShaderMaterial & { cameraMatrixWorld?: THREE.Matrix4 @@ -99,13 +100,13 @@ function createNormalMaterial(side = THREE.FrontSide) { }) } -const CausticsProjectionMaterial = shaderMaterial( +const CausticsProjectionMaterial = /* @__PURE__ */ shaderMaterial( { causticsTexture: null, causticsTextureB: null, - color: new THREE.Color(), - lightProjMatrix: new THREE.Matrix4(), - lightViewMatrix: new THREE.Matrix4(), + color: /* @__PURE__ */ new THREE.Color(), + lightProjMatrix: /* @__PURE__ */ new THREE.Matrix4(), + lightViewMatrix: /* @__PURE__ */ new THREE.Matrix4(), }, `varying vec3 vWorldPosition; void main() { @@ -128,22 +129,22 @@ const CausticsProjectionMaterial = shaderMaterial( vec3 back = texture2D(causticsTextureB, lightSpacePos.xy).rgb; gl_FragColor = vec4((front + back) * color, 1.0); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) -const CausticsMaterial = shaderMaterial( +const CausticsMaterial = /* @__PURE__ */ shaderMaterial( { - cameraMatrixWorld: new THREE.Matrix4(), - cameraProjectionMatrixInv: new THREE.Matrix4(), + cameraMatrixWorld: /* @__PURE__ */ new THREE.Matrix4(), + cameraProjectionMatrixInv: /* @__PURE__ */ new THREE.Matrix4(), normalTexture: null, depthTexture: null, - lightDir: new THREE.Vector3(0, 1, 0), - lightPlaneNormal: new THREE.Vector3(0, 1, 0), + lightDir: /* @__PURE__ */ new THREE.Vector3(0, 1, 0), + lightPlaneNormal: /* @__PURE__ */ new THREE.Vector3(0, 1, 0), lightPlaneConstant: 0, near: 0.1, far: 100, - modelMatrix: new THREE.Matrix4(), + modelMatrix: /* @__PURE__ */ new THREE.Matrix4(), worldRadius: 1 / 40, ior: 1.1, bounces: 0, @@ -276,9 +277,9 @@ const CAUSTICPROPS = { generateMipmaps: true, } -const causticsContext = React.createContext(null) +const causticsContext = /* @__PURE__ */ React.createContext(null) -export const Caustics: ForwardRefComponent = React.forwardRef( +export const Caustics: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ( { debug, diff --git a/src/core/Center.tsx b/src/core/Center.tsx index 654bdb496..cf160816b 100644 --- a/src/core/Center.tsx +++ b/src/core/Center.tsx @@ -42,77 +42,75 @@ export type CenterProps = { cacheKey?: any } -export const Center: ForwardRefComponent = React.forwardRef< - Group, - JSX.IntrinsicElements['group'] & CenterProps ->(function Center( - { - children, - disable, - disableX, - disableY, - disableZ, - left, - right, - top, - bottom, - front, - back, - onCentered, - precise = true, - cacheKey = 0, - ...props - }, - fRef -) { - const ref = React.useRef(null!) - const outer = React.useRef(null!) - const inner = React.useRef(null!) - React.useLayoutEffect(() => { - outer.current.matrixWorld.identity() - const box3 = new Box3().setFromObject(inner.current, precise) - const center = new Vector3() - const sphere = new Sphere() - const width = box3.max.x - box3.min.x - const height = box3.max.y - box3.min.y - const depth = box3.max.z - box3.min.z - box3.getCenter(center) - box3.getBoundingSphere(sphere) - const vAlign = top ? height / 2 : bottom ? -height / 2 : 0 - const hAlign = left ? -width / 2 : right ? width / 2 : 0 - const dAlign = front ? depth / 2 : back ? -depth / 2 : 0 +export const Center: ForwardRefComponent = + /* @__PURE__ */ React.forwardRef(function Center( + { + children, + disable, + disableX, + disableY, + disableZ, + left, + right, + top, + bottom, + front, + back, + onCentered, + precise = true, + cacheKey = 0, + ...props + }, + fRef + ) { + const ref = React.useRef(null!) + const outer = React.useRef(null!) + const inner = React.useRef(null!) + React.useLayoutEffect(() => { + outer.current.matrixWorld.identity() + const box3 = new Box3().setFromObject(inner.current, precise) + const center = new Vector3() + const sphere = new Sphere() + const width = box3.max.x - box3.min.x + const height = box3.max.y - box3.min.y + const depth = box3.max.z - box3.min.z + box3.getCenter(center) + box3.getBoundingSphere(sphere) + const vAlign = top ? height / 2 : bottom ? -height / 2 : 0 + const hAlign = left ? -width / 2 : right ? width / 2 : 0 + const dAlign = front ? depth / 2 : back ? -depth / 2 : 0 - outer.current.position.set( - disable || disableX ? 0 : -center.x + hAlign, - disable || disableY ? 0 : -center.y + vAlign, - disable || disableZ ? 0 : -center.z + dAlign - ) + outer.current.position.set( + disable || disableX ? 0 : -center.x + hAlign, + disable || disableY ? 0 : -center.y + vAlign, + disable || disableZ ? 0 : -center.z + dAlign + ) - // Only fire onCentered if the bounding box has changed - if (typeof onCentered !== 'undefined') { - onCentered({ - parent: ref.current.parent!, - container: ref.current, - width, - height, - depth, - boundingBox: box3, - boundingSphere: sphere, - center: center, - verticalAlignment: vAlign, - horizontalAlignment: hAlign, - depthAlignment: dAlign, - }) - } - }, [cacheKey, onCentered, top, left, front, disable, disableX, disableY, disableZ, precise, right, bottom, back]) + // Only fire onCentered if the bounding box has changed + if (typeof onCentered !== 'undefined') { + onCentered({ + parent: ref.current.parent!, + container: ref.current, + width, + height, + depth, + boundingBox: box3, + boundingSphere: sphere, + center: center, + verticalAlignment: vAlign, + horizontalAlignment: hAlign, + depthAlignment: dAlign, + }) + } + }, [cacheKey, onCentered, top, left, front, disable, disableX, disableY, disableZ, precise, right, bottom, back]) - React.useImperativeHandle(fRef, () => ref.current, []) + React.useImperativeHandle(fRef, () => ref.current, []) - return ( - - - {children} + return ( + + + {children} + - - ) -}) + ) + }) diff --git a/src/core/Clone.tsx b/src/core/Clone.tsx index 6e07c25fd..853d39e61 100644 --- a/src/core/Clone.tsx +++ b/src/core/Clone.tsx @@ -79,7 +79,7 @@ function createSpread( } export const Clone: ForwardRefComponent & CloneProps, THREE.Group> = - React.forwardRef( + /* @__PURE__ */ React.forwardRef( ( { isChild = false, diff --git a/src/core/Cloud.tsx b/src/core/Cloud.tsx index 402fb7b0a..c71c3dd39 100644 --- a/src/core/Cloud.tsx +++ b/src/core/Cloud.tsx @@ -88,15 +88,15 @@ type CloudProps = JSX.IntrinsicElements['group'] & { color?: ReactThreeFiber.Color } -const parentMatrix = /*@__PURE__*/ new Matrix4() -const translation = /*@__PURE__*/ new Vector3() -const rotation = /*@__PURE__*/ new Quaternion() -const cpos = /*@__PURE__*/ new Vector3() -const cquat = /*@__PURE__*/ new Quaternion() -const scale = /*@__PURE__*/ new Vector3() +const parentMatrix = /* @__PURE__ */ new Matrix4() +const translation = /* @__PURE__ */ new Vector3() +const rotation = /* @__PURE__ */ new Quaternion() +const cpos = /* @__PURE__ */ new Vector3() +const cquat = /* @__PURE__ */ new Quaternion() +const scale = /* @__PURE__ */ new Vector3() -const context = React.createContext>(null!) -export const Clouds = React.forwardRef( +const context = /* @__PURE__ */ React.createContext>(null!) +export const Clouds = /* @__PURE__ */ React.forwardRef( ({ children, material = MeshLambertMaterial, texture = CLOUD_URL, range, limit = 200, ...props }, fref) => { const CloudMaterial = React.useMemo(() => { return class extends (material as typeof Material) { @@ -201,7 +201,7 @@ export const Clouds = React.forwardRef( } ) -export const CloudInstance = React.forwardRef( +export const CloudInstance = /* @__PURE__ */ React.forwardRef( ( { opacity = 1, @@ -303,7 +303,7 @@ export const CloudInstance = React.forwardRef( } ) -export const Cloud = React.forwardRef((props, fref) => { +export const Cloud = /* @__PURE__ */ React.forwardRef((props, fref) => { const parent = React.useContext(context) if (parent) return else diff --git a/src/core/ContactShadows.tsx b/src/core/ContactShadows.tsx index e546d01d3..c6d789879 100644 --- a/src/core/ContactShadows.tsx +++ b/src/core/ContactShadows.tsx @@ -25,7 +25,7 @@ export type ContactShadowsProps = { export const ContactShadows: ForwardRefComponent< Omit & ContactShadowsProps, THREE.Group -> = React.forwardRef( +> = /* @__PURE__ */ React.forwardRef( ( { scale = 10, diff --git a/src/core/CubicBezierLine.tsx b/src/core/CubicBezierLine.tsx index 143eb34d3..db1da4c1a 100644 --- a/src/core/CubicBezierLine.tsx +++ b/src/core/CubicBezierLine.tsx @@ -12,7 +12,7 @@ type Props = Omit & { segments?: number } -export const CubicBezierLine: ForwardRefComponent = React.forwardRef( +export const CubicBezierLine: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( function CubicBezierLine({ start, end, midA, midB, segments = 20, ...rest }, ref) { const points = React.useMemo(() => { const startV = start instanceof Vector3 ? start : new Vector3(...start) diff --git a/src/core/CurveModifier.tsx b/src/core/CurveModifier.tsx index d9ca33c08..b6012113d 100644 --- a/src/core/CurveModifier.tsx +++ b/src/core/CurveModifier.tsx @@ -11,8 +11,8 @@ export interface CurveModifierProps { export type CurveModifierRef = Pick -export const CurveModifier: ForwardRefComponent = React.forwardRef( - ({ children, curve }: CurveModifierProps, ref) => { +export const CurveModifier: ForwardRefComponent = + /* @__PURE__ */ React.forwardRef(({ children, curve }: CurveModifierProps, ref) => { const [scene] = React.useState(() => new THREE.Scene()) const [obj, set] = React.useState() const modifier = React.useRef() @@ -40,5 +40,4 @@ export const CurveModifier: ForwardRefComponent} ) - } -) + }) diff --git a/src/core/Decal.tsx b/src/core/Decal.tsx index bd6f60655..77ec4039a 100644 --- a/src/core/Decal.tsx +++ b/src/core/Decal.tsx @@ -31,81 +31,82 @@ function vecToArray(vec: number[] | FIBER.Vector3 | FIBER.Euler | number = [0, 0 } } -export const Decal: ForwardRefComponent = React.forwardRef( - function Decal( - { debug, depthTest = false, polygonOffsetFactor = -10, map, mesh, children, position, rotation, scale, ...props }, - forwardRef - ) { - const ref = React.useRef(null!) - React.useImperativeHandle(forwardRef, () => ref.current) - const helper = React.useRef(null!) +export const Decal: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< + THREE.Mesh, + DecalProps +>(function Decal( + { debug, depthTest = false, polygonOffsetFactor = -10, map, mesh, children, position, rotation, scale, ...props }, + forwardRef +) { + const ref = React.useRef(null!) + React.useImperativeHandle(forwardRef, () => ref.current) + const helper = React.useRef(null!) - React.useLayoutEffect(() => { - const parent = mesh?.current || ref.current.parent - const target = ref.current - if (!(parent instanceof THREE.Mesh)) { - throw new Error('Decal must have a Mesh as parent or specify its "mesh" prop') - } + React.useLayoutEffect(() => { + const parent = mesh?.current || ref.current.parent + const target = ref.current + if (!(parent instanceof THREE.Mesh)) { + throw new Error('Decal must have a Mesh as parent or specify its "mesh" prop') + } - const state = { - position: new THREE.Vector3(), - rotation: new THREE.Euler(), - scale: new THREE.Vector3(1, 1, 1), - } + const state = { + position: new THREE.Vector3(), + rotation: new THREE.Euler(), + scale: new THREE.Vector3(1, 1, 1), + } - if (parent) { - applyProps(state as any, { position, scale }) + if (parent) { + applyProps(state as any, { position, scale }) - // Zero out the parents matrix world for this operation - const matrixWorld = parent.matrixWorld.clone() - parent.matrixWorld.identity() + // Zero out the parents matrix world for this operation + const matrixWorld = parent.matrixWorld.clone() + parent.matrixWorld.identity() - if (!rotation || typeof rotation === 'number') { - const o = new THREE.Object3D() + if (!rotation || typeof rotation === 'number') { + const o = new THREE.Object3D() - o.position.copy(state.position) - o.lookAt(parent.position) - if (typeof rotation === 'number') o.rotateZ(rotation) - applyProps(state as any, { rotation: o.rotation }) - } else { - applyProps(state as any, { rotation }) - } + o.position.copy(state.position) + o.lookAt(parent.position) + if (typeof rotation === 'number') o.rotateZ(rotation) + applyProps(state as any, { rotation: o.rotation }) + } else { + applyProps(state as any, { rotation }) + } - target.geometry = new DecalGeometry(parent, state.position, state.rotation, state.scale) - if (helper.current) { - applyProps(helper.current as any, state) - // Prevent the helpers from blocking rays - helper.current.traverse((child) => (child.raycast = () => null)) - } - // Reset parents matix-world - parent.matrixWorld = matrixWorld + target.geometry = new DecalGeometry(parent, state.position, state.rotation, state.scale) + if (helper.current) { + applyProps(helper.current as any, state) + // Prevent the helpers from blocking rays + helper.current.traverse((child) => (child.raycast = () => null)) + } + // Reset parents matix-world + parent.matrixWorld = matrixWorld - return () => { - target.geometry.dispose() - } + return () => { + target.geometry.dispose() } - }, [mesh, ...vecToArray(position), ...vecToArray(scale), ...vecToArray(rotation)]) + } + }, [mesh, ...vecToArray(position), ...vecToArray(scale), ...vecToArray(rotation)]) - // } - return ( - - {children} - {debug && ( - - - - - - )} - - ) - } -) + // } + return ( + + {children} + {debug && ( + + + + + + )} + + ) +}) diff --git a/src/core/Detailed.tsx b/src/core/Detailed.tsx index efb40f1e8..1cc78b146 100644 --- a/src/core/Detailed.tsx +++ b/src/core/Detailed.tsx @@ -10,7 +10,7 @@ type Props = JSX.IntrinsicElements['lOD'] & { distances: number[] } -export const Detailed: ForwardRefComponent = React.forwardRef( +export const Detailed: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ children, hysteresis = 0, distances, ...props }: Props, ref) => { const lodRef = React.useRef(null!) React.useLayoutEffect(() => { diff --git a/src/core/DeviceOrientationControls.tsx b/src/core/DeviceOrientationControls.tsx index 7f252591a..76ed16056 100644 --- a/src/core/DeviceOrientationControls.tsx +++ b/src/core/DeviceOrientationControls.tsx @@ -16,7 +16,7 @@ export type DeviceOrientationControlsProps = ReactThreeFiber.Object3DNode< export const DeviceOrientationControls: ForwardRefComponent< DeviceOrientationControlsProps, DeviceOrientationControlsImp -> = React.forwardRef( +> = /* @__PURE__ */ React.forwardRef( (props: DeviceOrientationControlsProps, ref) => { const { camera, onChange, makeDefault, ...rest } = props const defaultCamera = useThree((state) => state.camera) diff --git a/src/core/Edges.tsx b/src/core/Edges.tsx index f1983671a..7ffdc3cd1 100644 --- a/src/core/Edges.tsx +++ b/src/core/Edges.tsx @@ -8,7 +8,7 @@ type Props = JSX.IntrinsicElements['lineSegments'] & { color?: ReactThreeFiber.Color } -export const Edges: ForwardRefComponent = React.forwardRef( +export const Edges: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ( { userData, children, geometry, threshold = 15, color = 'black', ...props }: Props, fref: React.ForwardedRef diff --git a/src/core/Effects.tsx b/src/core/Effects.tsx index ea365452f..6da57bacd 100644 --- a/src/core/Effects.tsx +++ b/src/core/Effects.tsx @@ -37,7 +37,7 @@ export const isWebGL2Available = () => { } } -export const Effects: ForwardRefComponent = React.forwardRef( +export const Effects: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ( { children, diff --git a/src/core/Example.tsx b/src/core/Example.tsx index 3d7127170..d2bc14cd5 100644 --- a/src/core/Example.tsx +++ b/src/core/Example.tsx @@ -18,7 +18,7 @@ export type ExampleApi = { decr: (x?: number) => void } -export const Example = React.forwardRef( +export const Example = /* @__PURE__ */ React.forwardRef( ({ font, color = '#cbcbcb', bevelSize = 0.04, debug = false, children, ...props }, fref) => { const [counter, setCounter] = React.useState(0) diff --git a/src/core/FaceControls.tsx b/src/core/FaceControls.tsx index d567715ef..93d1ede8e 100644 --- a/src/core/FaceControls.tsx +++ b/src/core/FaceControls.tsx @@ -91,9 +91,9 @@ export type FaceControlsApi = THREE.EventDispatcher & { pause: () => void } -const FaceControlsContext = createContext({} as FaceControlsApi) +const FaceControlsContext = /* @__PURE__ */ createContext({} as FaceControlsApi) -export const FaceControls = forwardRef( +export const FaceControls = /* @__PURE__ */ forwardRef( ( { camera, @@ -328,7 +328,7 @@ type WebcamProps = { autostart?: boolean } -const Webcam = forwardRef(({ videoTextureSrc, autostart = true }, fref) => { +const Webcam = /* @__PURE__ */ forwardRef(({ videoTextureSrc, autostart = true }, fref) => { const videoTextureApiRef = useRef(null) const faceControls = useFaceControls() @@ -374,7 +374,7 @@ const Webcam = forwardRef(({ videoTextureSrc, autostart type VideoTextureApi = { texture: THREE.VideoTexture } type VideoTextureProps = { src: VideoTextureSrc; start: boolean } -const VideoTexture = forwardRef(({ src, start }, fref) => { +const VideoTexture = /* @__PURE__ */ forwardRef(({ src, start }, fref) => { const texture = useVideoTexture(src, { start }) const video = texture.source.data diff --git a/src/core/FaceLandmarker.tsx b/src/core/FaceLandmarker.tsx index f983da96f..18245aa4a 100644 --- a/src/core/FaceLandmarker.tsx +++ b/src/core/FaceLandmarker.tsx @@ -4,7 +4,7 @@ import { createContext, ReactNode, useContext, useEffect } from 'react' import { FilesetResolver, FaceLandmarker as FaceLandmarkerImpl, FaceLandmarkerOptions } from '@mediapipe/tasks-vision' import { clear, suspend } from 'suspend-react' -const FaceLandmarkerContext = createContext({} as FaceLandmarkerImpl | undefined) +const FaceLandmarkerContext = /* @__PURE__ */ createContext({} as FaceLandmarkerImpl | undefined) type FaceLandmarkerProps = { basePath?: string diff --git a/src/core/Facemesh.tsx b/src/core/Facemesh.tsx index c0da43c69..7890cf007 100644 --- a/src/core/Facemesh.tsx +++ b/src/core/Facemesh.tsx @@ -9,7 +9,7 @@ export type MediaPipeFaceMesh = typeof FacemeshDatas.SAMPLE_FACE export type MediaPipePoints = | typeof FacemeshDatas.SAMPLE_FACE.keypoints - | typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceLandmarks[0] + | (typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceLandmarks)[0] export type FacemeshProps = { /** an array of 468+ keypoints as returned by google/mediapipe tasks-vision, default: a sample face */ @@ -27,13 +27,13 @@ export type FacemeshProps = { /** a landmark index (to get the position from) or a vec3 to be the origin of the mesh. default: undefined (ie. the bbox center) */ origin?: number | THREE.Vector3 /** A facial transformation matrix, as returned by FaceLandmarkerResult.facialTransformationMatrixes (see: https://developers.google.com/mediapipe/solutions/vision/face_landmarker/web_js#handle_and_display_results) */ - facialTransformationMatrix?: typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.facialTransformationMatrixes[0] + facialTransformationMatrix?: (typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.facialTransformationMatrixes)[0] /** Apply position offset extracted from `facialTransformationMatrix` */ offset?: boolean /** Offset sensitivity factor, less is more sensible */ offsetScalar?: number /** Fface blendshapes, as returned by FaceLandmarkerResult.faceBlendshapes (see: https://developers.google.com/mediapipe/solutions/vision/face_landmarker/web_js#handle_and_display_results) */ - faceBlendshapes?: typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceBlendshapes[0] + faceBlendshapes?: (typeof FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceBlendshapes)[0] /** whether to enable eyes (nb. `faceBlendshapes` is required for), default: true */ eyes?: boolean /** Force `origin` to be the middle of the 2 eyes (nb. `eyes` is required for), default: false */ @@ -49,9 +49,9 @@ export type FacemeshApi = { eyeLeftRef: React.RefObject } -const defaultLookAt = new THREE.Vector3(0, 0, -1) +const defaultLookAt = /* @__PURE__ */ new THREE.Vector3(0, 0, -1) -const normal = (function () { +const normal = /* @__PURE__ */ (function () { const a = new THREE.Vector3() const b = new THREE.Vector3() const c = new THREE.Vector3() @@ -79,7 +79,7 @@ function mean(v1: THREE.Vector3, v2: THREE.Vector3) { return v1.clone().add(v2).multiplyScalar(0.5) } -export const Facemesh = React.forwardRef( +export const Facemesh = /* @__PURE__ */ React.forwardRef( ( { points = FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceLandmarks[0], @@ -356,116 +356,118 @@ export const FacemeshEyeDefaults = { }, } -export const FacemeshEye = React.forwardRef(({ side, debug = true }, fref) => { - const eyeMeshRef = React.useRef(null) - const irisDirRef = React.useRef(null) +export const FacemeshEye = /* @__PURE__ */ React.forwardRef( + ({ side, debug = true }, fref) => { + const eyeMeshRef = React.useRef(null) + const irisDirRef = React.useRef(null) - // - // _computeSphere() - // - // Compute eye's sphere .position and .radius - // + // + // _computeSphere() + // + // Compute eye's sphere .position and .radius + // - const [sphere] = React.useState(() => new THREE.Sphere()) - const _computeSphere = React.useCallback( - (faceGeometry) => { - const position = faceGeometry.getAttribute('position') as THREE.BufferAttribute + const [sphere] = React.useState(() => new THREE.Sphere()) + const _computeSphere = React.useCallback( + (faceGeometry) => { + const position = faceGeometry.getAttribute('position') as THREE.BufferAttribute - // get some eye contour landmarks points (from geometry) - const eyeContourLandmarks = FacemeshEyeDefaults.contourLandmarks[side] - const eyeContourPoints = eyeContourLandmarks.map((i) => new THREE.Vector3(position.getX(i), position.getY(i), position.getZ(i))) // prettier-ignore + // get some eye contour landmarks points (from geometry) + const eyeContourLandmarks = FacemeshEyeDefaults.contourLandmarks[side] + const eyeContourPoints = eyeContourLandmarks.map((i) => new THREE.Vector3(position.getX(i), position.getY(i), position.getZ(i))) // prettier-ignore - // compute center (centroid from eyeContourPoints) - sphere.center.set(0, 0, 0) - eyeContourPoints.forEach((v) => sphere.center.add(v)) - sphere.center.divideScalar(eyeContourPoints.length) + // compute center (centroid from eyeContourPoints) + sphere.center.set(0, 0, 0) + eyeContourPoints.forEach((v) => sphere.center.add(v)) + sphere.center.divideScalar(eyeContourPoints.length) - // radius (eye half-width) - sphere.radius = eyeContourPoints[0].sub(eyeContourPoints[1]).length() / 2 + // radius (eye half-width) + sphere.radius = eyeContourPoints[0].sub(eyeContourPoints[1]).length() / 2 - return sphere - }, - [sphere, side] - ) - - // - // _update() - // - // Update: - // - A. eye's mesh (according to sphere) - // - B. iris direction (according to "look*" blendshapes) - // - - const [rotation] = React.useState(() => new THREE.Euler()) - const _update = React.useCallback( - (faceGeometry, faceBlendshapes, sphere) => { - // A. - if (eyeMeshRef.current) { - sphere ??= _computeSphere(faceGeometry) // compute sphere dims (if not passed) - eyeMeshRef.current.position.copy(sphere.center) - eyeMeshRef.current.scale.setScalar(sphere.radius) - } + return sphere + }, + [sphere, side] + ) + + // + // _update() + // + // Update: + // - A. eye's mesh (according to sphere) + // - B. iris direction (according to "look*" blendshapes) + // - // B. - if (faceBlendshapes && irisDirRef.current) { - const blendshapes = FacemeshEyeDefaults.blendshapes[side] + const [rotation] = React.useState(() => new THREE.Euler()) + const _update = React.useCallback( + (faceGeometry, faceBlendshapes, sphere) => { + // A. + if (eyeMeshRef.current) { + sphere ??= _computeSphere(faceGeometry) // compute sphere dims (if not passed) + eyeMeshRef.current.position.copy(sphere.center) + eyeMeshRef.current.scale.setScalar(sphere.radius) + } - const lookIn = faceBlendshapes.categories[blendshapes[0]].score - const lookOut = faceBlendshapes.categories[blendshapes[1]].score - const lookUp = faceBlendshapes.categories[blendshapes[2]].score - const lookDown = faceBlendshapes.categories[blendshapes[3]].score + // B. + if (faceBlendshapes && irisDirRef.current) { + const blendshapes = FacemeshEyeDefaults.blendshapes[side] - const hfov = FacemeshEyeDefaults.fov.horizontal * THREE.MathUtils.DEG2RAD - const vfov = FacemeshEyeDefaults.fov.vertical * THREE.MathUtils.DEG2RAD - const rx = hfov * 0.5 * (lookDown - lookUp) - const ry = vfov * 0.5 * (lookIn - lookOut) * (side === 'left' ? 1 : -1) - rotation.set(rx, ry, 0) + const lookIn = faceBlendshapes.categories[blendshapes[0]].score + const lookOut = faceBlendshapes.categories[blendshapes[1]].score + const lookUp = faceBlendshapes.categories[blendshapes[2]].score + const lookDown = faceBlendshapes.categories[blendshapes[3]].score - irisDirRef.current.setRotationFromEuler(rotation) - } - }, - [_computeSphere, side, rotation] - ) - - // - // API - // - - const api = React.useMemo( - () => ({ - eyeMeshRef: eyeMeshRef, - irisDirRef: irisDirRef, - _computeSphere, - _update, - }), - [_computeSphere, _update] - ) - React.useImperativeHandle(fref, () => api, [api]) - - const color = FacemeshEyeDefaults.color[side] - return ( - - - {debug && } - - - <> - {debug && ( - - )} - + const hfov = FacemeshEyeDefaults.fov.horizontal * THREE.MathUtils.DEG2RAD + const vfov = FacemeshEyeDefaults.fov.vertical * THREE.MathUtils.DEG2RAD + const rx = hfov * 0.5 * (lookDown - lookUp) + const ry = vfov * 0.5 * (lookIn - lookOut) * (side === 'left' ? 1 : -1) + rotation.set(rx, ry, 0) + + irisDirRef.current.setRotationFromEuler(rotation) + } + }, + [_computeSphere, side, rotation] + ) + + // + // API + // + + const api = React.useMemo( + () => ({ + eyeMeshRef: eyeMeshRef, + irisDirRef: irisDirRef, + _computeSphere, + _update, + }), + [_computeSphere, _update] + ) + React.useImperativeHandle(fref, () => api, [api]) + + const color = FacemeshEyeDefaults.color[side] + return ( + + + {debug && } + + + <> + {debug && ( + + )} + + - - ) -}) + ) + } +) // // Sample datas diff --git a/src/core/FirstPersonControls.tsx b/src/core/FirstPersonControls.tsx index 482f2de88..d69c9ff0c 100644 --- a/src/core/FirstPersonControls.tsx +++ b/src/core/FirstPersonControls.tsx @@ -9,26 +9,28 @@ export type FirstPersonControlsProps = Object3DNode = - React.forwardRef(({ domElement, makeDefault, ...props }, ref) => { - const camera = useThree((state) => state.camera) - const gl = useThree((state) => state.gl) - const events = useThree((state) => state.events) as EventManager - const get = useThree((state) => state.get) - const set = useThree((state) => state.set) - const explDomElement = (domElement || events.connected || gl.domElement) as HTMLElement - const [controls] = React.useState(() => new FirstPersonControlImpl(camera, explDomElement)) + /* @__PURE__ */ React.forwardRef( + ({ domElement, makeDefault, ...props }, ref) => { + const camera = useThree((state) => state.camera) + const gl = useThree((state) => state.gl) + const events = useThree((state) => state.events) as EventManager + const get = useThree((state) => state.get) + const set = useThree((state) => state.set) + const explDomElement = (domElement || events.connected || gl.domElement) as HTMLElement + const [controls] = React.useState(() => new FirstPersonControlImpl(camera, explDomElement)) - React.useEffect(() => { - if (makeDefault) { - const old = get().controls - set({ controls }) - return () => set({ controls: old }) - } - }, [makeDefault, controls]) + React.useEffect(() => { + if (makeDefault) { + const old = get().controls + set({ controls }) + return () => set({ controls: old }) + } + }, [makeDefault, controls]) - useFrame((_, delta) => { - controls.update(delta) - }, -1) + useFrame((_, delta) => { + controls.update(delta) + }, -1) - return controls ? : null - }) + return controls ? : null + } + ) diff --git a/src/core/Float.tsx b/src/core/Float.tsx index fe8c3ad87..311df711f 100644 --- a/src/core/Float.tsx +++ b/src/core/Float.tsx @@ -13,7 +13,10 @@ export type FloatProps = JSX.IntrinsicElements['group'] & { floatingRange?: [number?, number?] } -export const Float: ForwardRefComponent = React.forwardRef( +export const Float: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< + THREE.Group, + FloatProps +>( ( { children, diff --git a/src/core/FlyControls.tsx b/src/core/FlyControls.tsx index 46d5ff5d1..081e4378c 100644 --- a/src/core/FlyControls.tsx +++ b/src/core/FlyControls.tsx @@ -10,7 +10,7 @@ export type FlyControlsProps = ReactThreeFiber.Object3DNode = React.forwardRef< +export const FlyControls: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< FlyControlsImpl, FlyControlsProps >(({ domElement, ...props }, fref) => { diff --git a/src/core/GizmoHelper.tsx b/src/core/GizmoHelper.tsx index 69f85ad80..9873a8451 100644 --- a/src/core/GizmoHelper.tsx +++ b/src/core/GizmoHelper.tsx @@ -9,18 +9,18 @@ type GizmoHelperContext = { tweenCamera: (direction: Vector3) => void } -const Context = React.createContext({} as GizmoHelperContext) +const Context = /* @__PURE__ */ React.createContext({} as GizmoHelperContext) export const useGizmoContext = () => { return React.useContext(Context) } const turnRate = 2 * Math.PI // turn rate in angles per second -const dummy = new Object3D() -const matrix = new Matrix4() -const [q1, q2] = [new Quaternion(), new Quaternion()] -const target = new Vector3() -const targetPosition = new Vector3() +const dummy = /* @__PURE__ */ new Object3D() +const matrix = /* @__PURE__ */ new Matrix4() +const [q1, q2] = [/* @__PURE__ */ new Quaternion(), /* @__PURE__ */ new Quaternion()] +const target = /* @__PURE__ */ new Vector3() +const targetPosition = /* @__PURE__ */ new Vector3() type ControlsProto = { update(): void; target: THREE.Vector3 } diff --git a/src/core/GizmoViewcube.tsx b/src/core/GizmoViewcube.tsx index fb46a4b85..44fe74f60 100644 --- a/src/core/GizmoViewcube.tsx +++ b/src/core/GizmoViewcube.tsx @@ -21,7 +21,7 @@ const colors = { bg: '#f0f0f0', hover: '#999', text: 'black', stroke: 'black' } const defaultFaces = ['Right', 'Left', 'Top', 'Bottom', 'Front', 'Back'] const makePositionVector = (xyz: number[]) => new Vector3(...xyz).multiplyScalar(0.38) -const corners: Vector3[] = [ +const corners: Vector3[] = /* @__PURE__ */ [ [1, 1, 1], [1, 1, -1], [1, -1, 1], @@ -34,7 +34,7 @@ const corners: Vector3[] = [ const cornerDimensions: XYZ = [0.25, 0.25, 0.25] -const edges: Vector3[] = [ +const edges: Vector3[] = /* @__PURE__ */ [ [1, 1, 0], [1, 0, 1], [1, 0, -1], @@ -49,7 +49,7 @@ const edges: Vector3[] = [ [-1, -1, 0], ].map(makePositionVector) -const edgeDimensions = edges.map( +const edgeDimensions = /* @__PURE__ */ edges.map( (edge) => edge.toArray().map((axis: number): number => (axis == 0 ? 0.5 : 0.25)) as XYZ ) diff --git a/src/core/Gltf.tsx b/src/core/Gltf.tsx index ce4b605a7..363d0d007 100644 --- a/src/core/Gltf.tsx +++ b/src/core/Gltf.tsx @@ -9,7 +9,7 @@ type GltfProps = Omit & src: string } -export const Gltf: ForwardRefComponent = React.forwardRef( +export const Gltf: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ src, ...props }: GltfProps, ref: React.Ref) => { const { scene } = useGLTF(src) return diff --git a/src/core/Grid.tsx b/src/core/Grid.tsx index 4b3df2a8e..3e82a6344 100644 --- a/src/core/Grid.tsx +++ b/src/core/Grid.tsx @@ -10,6 +10,7 @@ import mergeRefs from 'react-merge-refs' import { extend, useFrame } from '@react-three/fiber' import { shaderMaterial } from './shaderMaterial' import { ForwardRefComponent } from '../helpers/ts-utils' +import { version } from '../helpers/constants' export type GridMaterialType = { /** Cell size, default: 0.5 */ @@ -49,7 +50,7 @@ declare global { } } -const GridMaterial = shaderMaterial( +const GridMaterial = /* @__PURE__ */ shaderMaterial( { cellSize: 0.5, sectionSize: 1, @@ -57,12 +58,12 @@ const GridMaterial = shaderMaterial( fadeStrength: 1, cellThickness: 0.5, sectionThickness: 1, - cellColor: new THREE.Color(), - sectionColor: new THREE.Color(), + cellColor: /* @__PURE__ */ new THREE.Color(), + sectionColor: /* @__PURE__ */ new THREE.Color(), infiniteGrid: false, followCamera: false, - worldCamProjPosition: new THREE.Vector3(), - worldPlanePosition: new THREE.Vector3(), + worldCamProjPosition: /* @__PURE__ */ new THREE.Vector3(), + worldPlanePosition: /* @__PURE__ */ new THREE.Vector3(), }, /* glsl */ ` varying vec3 localPosition; @@ -121,13 +122,13 @@ const GridMaterial = shaderMaterial( if (gl_FragColor.a <= 0.0) discard; #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> } ` ) export const Grid: ForwardRefComponent & GridProps, THREE.Mesh> = - React.forwardRef( + /* @__PURE__ */ React.forwardRef( ( { args, diff --git a/src/core/Image.tsx b/src/core/Image.tsx index 590cfc8c9..675cf209d 100644 --- a/src/core/Image.tsx +++ b/src/core/Image.tsx @@ -4,6 +4,7 @@ import { Color, extend } from '@react-three/fiber' import { shaderMaterial } from './shaderMaterial' import { useTexture } from './useTexture' import { ForwardRefComponent } from '../helpers/ts-utils' +import { version } from '../helpers/constants' export type ImageProps = Omit & { segments?: number @@ -33,8 +34,16 @@ declare global { } } -const ImageMaterialImpl = shaderMaterial( - { color: new THREE.Color('white'), scale: [1, 1], imageBounds: [1, 1], map: null, zoom: 1, grayscale: 0, opacity: 1 }, +const ImageMaterialImpl = /* @__PURE__ */ shaderMaterial( + { + color: /* @__PURE__ */ new THREE.Color('white'), + scale: [1, 1], + imageBounds: [1, 1], + map: null, + zoom: 1, + grayscale: 0, + opacity: 1, + }, /* glsl */ ` varying vec2 vUv; void main() { @@ -71,12 +80,12 @@ const ImageMaterialImpl = shaderMaterial( gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, opacity), grayscale); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> } ` ) -const ImageBase: ForwardRefComponent, THREE.Mesh> = React.forwardRef( +const ImageBase: ForwardRefComponent, THREE.Mesh> = /* @__PURE__ */ React.forwardRef( ( { children, @@ -116,23 +125,24 @@ const ImageBase: ForwardRefComponent, THREE.Mesh> = Reac } ) -const ImageWithUrl: ForwardRefComponent = React.forwardRef( +const ImageWithUrl: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ url, ...props }: ImageProps, ref: React.ForwardedRef) => { const texture = useTexture(url!) return } ) -const ImageWithTexture: ForwardRefComponent = React.forwardRef( +const ImageWithTexture: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ url: _url, ...props }: ImageProps, ref: React.ForwardedRef) => { return } ) -export const Image: ForwardRefComponent = React.forwardRef( - (props, ref) => { - if (props.url) return - else if (props.texture) return - else throw new Error(' requires a url or texture') - } -) +export const Image: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< + THREE.Mesh, + ImageProps +>((props, ref) => { + if (props.url) return + else if (props.texture) return + else throw new Error(' requires a url or texture') +}) diff --git a/src/core/Instances.tsx b/src/core/Instances.tsx index 9515b2046..3ebaf43e9 100644 --- a/src/core/Instances.tsx +++ b/src/core/Instances.tsx @@ -33,10 +33,10 @@ type InstancedMesh = Omit() +const _instanceLocalMatrix = /* @__PURE__ */ new THREE.Matrix4() +const _instanceWorldMatrix = /* @__PURE__ */ new THREE.Matrix4() +const _instanceIntersects: THREE.Intersection[] = [] +const _mesh = /* @__PURE__ */ new THREE.Mesh() class PositionMesh extends THREE.Group { color: THREE.Color @@ -84,15 +84,15 @@ class PositionMesh extends THREE.Group { } } -const globalContext = /*@__PURE__*/ React.createContext(null!) -const parentMatrix = /*@__PURE__*/ new THREE.Matrix4() -const instanceMatrix = /*@__PURE__*/ new THREE.Matrix4() -const tempMatrix = /*@__PURE__*/ new THREE.Matrix4() -const translation = /*@__PURE__*/ new THREE.Vector3() -const rotation = /*@__PURE__*/ new THREE.Quaternion() -const scale = /*@__PURE__*/ new THREE.Vector3() +const globalContext = /* @__PURE__ */ React.createContext(null!) +const parentMatrix = /* @__PURE__ */ new THREE.Matrix4() +const instanceMatrix = /* @__PURE__ */ new THREE.Matrix4() +const tempMatrix = /* @__PURE__ */ new THREE.Matrix4() +const translation = /* @__PURE__ */ new THREE.Vector3() +const rotation = /* @__PURE__ */ new THREE.Quaternion() +const scale = /* @__PURE__ */ new THREE.Vector3() -export const Instance = React.forwardRef(({ context, children, ...props }: InstanceProps, ref) => { +export const Instance = /* @__PURE__ */ React.forwardRef(({ context, children, ...props }: InstanceProps, ref) => { React.useMemo(() => extend({ PositionMesh }), []) const group = React.useRef() const { subscribe, getParent } = React.useContext(context || globalContext) @@ -104,7 +104,7 @@ export const Instance = React.forwardRef(({ context, children, ...props }: Insta ) }) -export const Instances: ForwardRefComponent = React.forwardRef< +export const Instances: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< InstancedMesh, InstancesProps >(({ children, range, limit = 1000, frames = Infinity, ...props }, ref) => { @@ -205,30 +205,29 @@ export interface MergedProps extends InstancesProps { children: React.ReactNode } -export const Merged: ForwardRefComponent = React.forwardRef(function Merged( - { meshes, children, ...props }, - ref -) { - const isArray = Array.isArray(meshes) - // Filter out meshes from collections, which may contain non-meshes - if (!isArray) for (const key of Object.keys(meshes)) if (!meshes[key].isMesh) delete meshes[key] - return ( - - ( - - ))} - > - {(args) => - isArray - ? children(...args) - : children( - Object.keys(meshes) - .filter((key) => meshes[key].isMesh) - .reduce((acc, key, i) => ({ ...acc, [key]: args[i] }), {}) - ) - } - - - ) -}) +export const Merged: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( + function Merged({ meshes, children, ...props }, ref) { + const isArray = Array.isArray(meshes) + // Filter out meshes from collections, which may contain non-meshes + if (!isArray) for (const key of Object.keys(meshes)) if (!meshes[key].isMesh) delete meshes[key] + return ( + + ( + + ))} + > + {(args) => + isArray + ? children(...args) + : children( + Object.keys(meshes) + .filter((key) => meshes[key].isMesh) + .reduce((acc, key, i) => ({ ...acc, [key]: args[i] }), {}) + ) + } + + + ) + } +) diff --git a/src/core/Lightformer.tsx b/src/core/Lightformer.tsx index eb61e85ad..178d51986 100644 --- a/src/core/Lightformer.tsx +++ b/src/core/Lightformer.tsx @@ -15,7 +15,7 @@ export type LightProps = JSX.IntrinsicElements['mesh'] & { target?: [number, number, number] | THREE.Vector3 } -export const Lightformer: ForwardRefComponent = React.forwardRef( +export const Lightformer: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ( { args, diff --git a/src/core/Line.tsx b/src/core/Line.tsx index 99da1ee65..af1c502e0 100644 --- a/src/core/Line.tsx +++ b/src/core/Line.tsx @@ -22,7 +22,7 @@ export type LineProps = { color?: ColorRepresentation } -export const Line: ForwardRefComponent = React.forwardRef< +export const Line: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< Line2 | LineSegments2, LineProps >(function Line({ points, color = 'black', vertexColors, linewidth, lineWidth, segments, dashed, ...rest }, ref) { diff --git a/src/core/MapControls.tsx b/src/core/MapControls.tsx index 00ffc7ba3..83f4f8c1e 100644 --- a/src/core/MapControls.tsx +++ b/src/core/MapControls.tsx @@ -17,7 +17,7 @@ export type MapControlsProps = ReactThreeFiber.Overwrite< } > -export const MapControls: ForwardRefComponent = React.forwardRef< +export const MapControls: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< MapControlsImpl, MapControlsProps >((props = { enableDamping: true }, ref) => { diff --git a/src/core/MarchingCubes.tsx b/src/core/MarchingCubes.tsx index 6fe29ea27..27f661d38 100644 --- a/src/core/MarchingCubes.tsx +++ b/src/core/MarchingCubes.tsx @@ -10,7 +10,7 @@ type Api = { getParent: () => React.MutableRefObject } -const globalContext = React.createContext(null!) +const globalContext = /* @__PURE__ */ React.createContext(null!) export type MarchingCubesProps = { resolution?: number @@ -19,39 +19,41 @@ export type MarchingCubesProps = { enableColors?: boolean } & JSX.IntrinsicElements['group'] -export const MarchingCubes: ForwardRefComponent = React.forwardRef( - ( - { - resolution = 28, - maxPolyCount = 10000, - enableUvs = false, - enableColors = false, - children, - ...props - }: MarchingCubesProps, - ref - ) => { - const marchingCubesRef = React.useRef(null!) - const marchingCubes = React.useMemo( - () => new MarchingCubesImpl(resolution, null as unknown as THREE.Material, enableUvs, enableColors, maxPolyCount), - [resolution, maxPolyCount, enableUvs, enableColors] - ) - const api = React.useMemo(() => ({ getParent: () => marchingCubesRef }), []) +export const MarchingCubes: ForwardRefComponent = + /* @__PURE__ */ React.forwardRef( + ( + { + resolution = 28, + maxPolyCount = 10000, + enableUvs = false, + enableColors = false, + children, + ...props + }: MarchingCubesProps, + ref + ) => { + const marchingCubesRef = React.useRef(null!) + const marchingCubes = React.useMemo( + () => + new MarchingCubesImpl(resolution, null as unknown as THREE.Material, enableUvs, enableColors, maxPolyCount), + [resolution, maxPolyCount, enableUvs, enableColors] + ) + const api = React.useMemo(() => ({ getParent: () => marchingCubesRef }), []) - useFrame(() => { - marchingCubes.update() - marchingCubes.reset() - }, -1) // To make sure the reset runs before the balls or planes are added + useFrame(() => { + marchingCubes.update() + marchingCubes.reset() + }, -1) // To make sure the reset runs before the balls or planes are added - return ( - <> - - {children} - - - ) - } -) + return ( + <> + + {children} + + + ) + } + ) type MarchingCubeProps = { strength?: number @@ -59,7 +61,7 @@ type MarchingCubeProps = { color?: Color } & JSX.IntrinsicElements['group'] -export const MarchingCube: ForwardRefComponent = React.forwardRef( +export const MarchingCube: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ strength = 0.5, subtract = 12, color, ...props }: MarchingCubeProps, ref) => { const { getParent } = React.useContext(globalContext) const parentRef = React.useMemo(() => getParent(), [getParent]) @@ -80,7 +82,7 @@ type MarchingPlaneProps = { subtract?: number } & JSX.IntrinsicElements['group'] -export const MarchingPlane: ForwardRefComponent = React.forwardRef( +export const MarchingPlane: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ planeType: _planeType = 'x', strength = 0.5, subtract = 12, ...props }: MarchingPlaneProps, ref) => { const { getParent } = React.useContext(globalContext) const parentRef = React.useMemo(() => getParent(), [getParent]) diff --git a/src/core/Mask.tsx b/src/core/Mask.tsx index 2ef248e83..4e04769ba 100644 --- a/src/core/Mask.tsx +++ b/src/core/Mask.tsx @@ -11,7 +11,7 @@ type Props = Omit & { depthWrite?: boolean } -export const Mask: ForwardRefComponent = React.forwardRef( +export const Mask: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ id = 1, colorWrite = false, depthWrite = false, ...props }: Props, fref: React.ForwardedRef) => { const ref = React.useRef(null!) const spread = React.useMemo( diff --git a/src/core/MeshDiscardMaterial.tsx b/src/core/MeshDiscardMaterial.tsx index 083cc1aa3..fcd291771 100644 --- a/src/core/MeshDiscardMaterial.tsx +++ b/src/core/MeshDiscardMaterial.tsx @@ -12,7 +12,9 @@ declare global { } export const MeshDiscardMaterial: ForwardRefComponent = - React.forwardRef((props: JSX.IntrinsicElements['shaderMaterial'], fref: React.ForwardedRef) => { - extend({ DiscardMaterialImpl }) - return - }) + /* @__PURE__ */ React.forwardRef( + (props: JSX.IntrinsicElements['shaderMaterial'], fref: React.ForwardedRef) => { + extend({ DiscardMaterialImpl }) + return + } + ) diff --git a/src/core/MeshDistortMaterial.tsx b/src/core/MeshDistortMaterial.tsx index 7ec81a113..0cee69317 100644 --- a/src/core/MeshDistortMaterial.tsx +++ b/src/core/MeshDistortMaterial.tsx @@ -89,7 +89,7 @@ class DistortMaterialImpl extends MeshPhysicalMaterial { } } -export const MeshDistortMaterial: ForwardRefComponent = React.forwardRef( +export const MeshDistortMaterial: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ speed = 1, ...props }: Props, ref) => { const [material] = React.useState(() => new DistortMaterialImpl()) useFrame((state) => material && (material.time = state.clock.getElapsedTime() * speed)) diff --git a/src/core/MeshPortalMaterial.tsx b/src/core/MeshPortalMaterial.tsx index 87fdfb64c..5ec7aa20a 100644 --- a/src/core/MeshPortalMaterial.tsx +++ b/src/core/MeshPortalMaterial.tsx @@ -11,15 +11,16 @@ import { useFBO } from './useFBO' import { RenderTexture } from './RenderTexture' import { shaderMaterial } from './shaderMaterial' import { FullScreenQuad } from 'three-stdlib' +import { version } from '../helpers/constants' -const PortalMaterialImpl = shaderMaterial( +const PortalMaterialImpl = /* @__PURE__ */ shaderMaterial( { blur: 0, map: null, sdf: null, blend: 0, size: 0, - resolution: new THREE.Vector2(), + resolution: /* @__PURE__ */ new THREE.Vector2(), }, `varying vec2 vUv; void main() { @@ -42,7 +43,7 @@ const PortalMaterialImpl = shaderMaterial( float alpha = 1.0 - smoothstep(0.0, 1.0, clamp(d/k + 1.0, 0.0, 1.0)); gl_FragColor = vec4(t.rgb, blur == 0.0 ? t.a : t.a * alpha); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) @@ -81,7 +82,7 @@ export type PortalProps = JSX.IntrinsicElements['shaderMaterial'] & { events?: boolean } -export const MeshPortalMaterial = React.forwardRef( +export const MeshPortalMaterial = /* @__PURE__ */ React.forwardRef( ( { children, @@ -261,9 +262,7 @@ function ManagePortalScene({ vec4 ta = texture2D(a, vUv); vec4 tb = texture2D(b, vUv); gl_FragColor = mix(tb, ta, blend); - #include <${ - parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment' - }> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }`, }) ) diff --git a/src/core/MeshReflectorMaterial.tsx b/src/core/MeshReflectorMaterial.tsx index 001710193..6bec45cfd 100644 --- a/src/core/MeshReflectorMaterial.tsx +++ b/src/core/MeshReflectorMaterial.tsx @@ -47,135 +47,158 @@ declare global { } } -extend({ MeshReflectorMaterialImpl }) - -export const MeshReflectorMaterial: ForwardRefComponent = React.forwardRef< - MeshReflectorMaterialImpl, - Props ->( - ( - { - mixBlur = 0, - mixStrength = 1, - resolution = 256, - blur = [0, 0], - minDepthThreshold = 0.9, - maxDepthThreshold = 1, - depthScale = 0, - depthToBlurRatioBias = 0.25, - mirror = 0, - distortion = 1, - mixContrast = 1, - distortionMap, - reflectorOffset = 0, - ...props - }, - ref - ) => { - const gl = useThree(({ gl }) => gl) - const camera = useThree(({ camera }) => camera) - const scene = useThree(({ scene }) => scene) - blur = Array.isArray(blur) ? blur : [blur, blur] - const hasBlur = blur[0] + blur[1] > 0 - const materialRef = React.useRef(null!) - const [reflectorPlane] = React.useState(() => new Plane()) - const [normal] = React.useState(() => new Vector3()) - const [reflectorWorldPosition] = React.useState(() => new Vector3()) - const [cameraWorldPosition] = React.useState(() => new Vector3()) - const [rotationMatrix] = React.useState(() => new Matrix4()) - const [lookAtPosition] = React.useState(() => new Vector3(0, 0, -1)) - const [clipPlane] = React.useState(() => new Vector4()) - const [view] = React.useState(() => new Vector3()) - const [target] = React.useState(() => new Vector3()) - const [q] = React.useState(() => new Vector4()) - const [textureMatrix] = React.useState(() => new Matrix4()) - const [virtualCamera] = React.useState(() => new PerspectiveCamera()) +export const MeshReflectorMaterial: ForwardRefComponent = + /* @__PURE__ */ React.forwardRef( + ( + { + mixBlur = 0, + mixStrength = 1, + resolution = 256, + blur = [0, 0], + minDepthThreshold = 0.9, + maxDepthThreshold = 1, + depthScale = 0, + depthToBlurRatioBias = 0.25, + mirror = 0, + distortion = 1, + mixContrast = 1, + distortionMap, + reflectorOffset = 0, + ...props + }, + ref + ) => { + extend({ MeshReflectorMaterialImpl }) + const gl = useThree(({ gl }) => gl) + const camera = useThree(({ camera }) => camera) + const scene = useThree(({ scene }) => scene) + blur = Array.isArray(blur) ? blur : [blur, blur] + const hasBlur = blur[0] + blur[1] > 0 + const materialRef = React.useRef(null!) + const [reflectorPlane] = React.useState(() => new Plane()) + const [normal] = React.useState(() => new Vector3()) + const [reflectorWorldPosition] = React.useState(() => new Vector3()) + const [cameraWorldPosition] = React.useState(() => new Vector3()) + const [rotationMatrix] = React.useState(() => new Matrix4()) + const [lookAtPosition] = React.useState(() => new Vector3(0, 0, -1)) + const [clipPlane] = React.useState(() => new Vector4()) + const [view] = React.useState(() => new Vector3()) + const [target] = React.useState(() => new Vector3()) + const [q] = React.useState(() => new Vector4()) + const [textureMatrix] = React.useState(() => new Matrix4()) + const [virtualCamera] = React.useState(() => new PerspectiveCamera()) - const beforeRender = React.useCallback(() => { - // TODO: As of R3f 7-8 this should be __r3f.parent - const parent = (materialRef.current as any).parent || (materialRef.current as any)?.__r3f.parent - if (!parent) return + const beforeRender = React.useCallback(() => { + // TODO: As of R3f 7-8 this should be __r3f.parent + const parent = (materialRef.current as any).parent || (materialRef.current as any)?.__r3f.parent + if (!parent) return - reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld) - cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld) - rotationMatrix.extractRotation(parent.matrixWorld) - normal.set(0, 0, 1) - normal.applyMatrix4(rotationMatrix) - reflectorWorldPosition.addScaledVector(normal, reflectorOffset) - view.subVectors(reflectorWorldPosition, cameraWorldPosition) - // Avoid rendering when reflector is facing away - if (view.dot(normal) > 0) return - view.reflect(normal).negate() - view.add(reflectorWorldPosition) - rotationMatrix.extractRotation(camera.matrixWorld) - lookAtPosition.set(0, 0, -1) - lookAtPosition.applyMatrix4(rotationMatrix) - lookAtPosition.add(cameraWorldPosition) - target.subVectors(reflectorWorldPosition, lookAtPosition) - target.reflect(normal).negate() - target.add(reflectorWorldPosition) - virtualCamera.position.copy(view) - virtualCamera.up.set(0, 1, 0) - virtualCamera.up.applyMatrix4(rotationMatrix) - virtualCamera.up.reflect(normal) - virtualCamera.lookAt(target) - virtualCamera.far = camera.far // Used in WebGLBackground - virtualCamera.updateMatrixWorld() - virtualCamera.projectionMatrix.copy(camera.projectionMatrix) - // Update the texture matrix - textureMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0) - textureMatrix.multiply(virtualCamera.projectionMatrix) - textureMatrix.multiply(virtualCamera.matrixWorldInverse) - textureMatrix.multiply(parent.matrixWorld) - // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html - // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf - reflectorPlane.setFromNormalAndCoplanarPoint(normal, reflectorWorldPosition) - reflectorPlane.applyMatrix4(virtualCamera.matrixWorldInverse) - clipPlane.set(reflectorPlane.normal.x, reflectorPlane.normal.y, reflectorPlane.normal.z, reflectorPlane.constant) - const projectionMatrix = virtualCamera.projectionMatrix - q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0] - q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5] - q.z = -1.0 - q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14] - // Calculate the scaled plane vector - clipPlane.multiplyScalar(2.0 / clipPlane.dot(q)) - // Replacing the third row of the projection matrix - projectionMatrix.elements[2] = clipPlane.x - projectionMatrix.elements[6] = clipPlane.y - projectionMatrix.elements[10] = clipPlane.z + 1.0 - projectionMatrix.elements[14] = clipPlane.w - }, [camera, reflectorOffset]) + reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld) + cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld) + rotationMatrix.extractRotation(parent.matrixWorld) + normal.set(0, 0, 1) + normal.applyMatrix4(rotationMatrix) + reflectorWorldPosition.addScaledVector(normal, reflectorOffset) + view.subVectors(reflectorWorldPosition, cameraWorldPosition) + // Avoid rendering when reflector is facing away + if (view.dot(normal) > 0) return + view.reflect(normal).negate() + view.add(reflectorWorldPosition) + rotationMatrix.extractRotation(camera.matrixWorld) + lookAtPosition.set(0, 0, -1) + lookAtPosition.applyMatrix4(rotationMatrix) + lookAtPosition.add(cameraWorldPosition) + target.subVectors(reflectorWorldPosition, lookAtPosition) + target.reflect(normal).negate() + target.add(reflectorWorldPosition) + virtualCamera.position.copy(view) + virtualCamera.up.set(0, 1, 0) + virtualCamera.up.applyMatrix4(rotationMatrix) + virtualCamera.up.reflect(normal) + virtualCamera.lookAt(target) + virtualCamera.far = camera.far // Used in WebGLBackground + virtualCamera.updateMatrixWorld() + virtualCamera.projectionMatrix.copy(camera.projectionMatrix) + // Update the texture matrix + textureMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0) + textureMatrix.multiply(virtualCamera.projectionMatrix) + textureMatrix.multiply(virtualCamera.matrixWorldInverse) + textureMatrix.multiply(parent.matrixWorld) + // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html + // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf + reflectorPlane.setFromNormalAndCoplanarPoint(normal, reflectorWorldPosition) + reflectorPlane.applyMatrix4(virtualCamera.matrixWorldInverse) + clipPlane.set( + reflectorPlane.normal.x, + reflectorPlane.normal.y, + reflectorPlane.normal.z, + reflectorPlane.constant + ) + const projectionMatrix = virtualCamera.projectionMatrix + q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0] + q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5] + q.z = -1.0 + q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14] + // Calculate the scaled plane vector + clipPlane.multiplyScalar(2.0 / clipPlane.dot(q)) + // Replacing the third row of the projection matrix + projectionMatrix.elements[2] = clipPlane.x + projectionMatrix.elements[6] = clipPlane.y + projectionMatrix.elements[10] = clipPlane.z + 1.0 + projectionMatrix.elements[14] = clipPlane.w + }, [camera, reflectorOffset]) - const [fbo1, fbo2, blurpass, reflectorProps] = React.useMemo(() => { - const parameters = { - minFilter: LinearFilter, - magFilter: LinearFilter, - type: HalfFloatType, - } - const fbo1 = new WebGLRenderTarget(resolution, resolution, parameters) - fbo1.depthBuffer = true - fbo1.depthTexture = new DepthTexture(resolution, resolution) - fbo1.depthTexture.format = DepthFormat - fbo1.depthTexture.type = UnsignedShortType - const fbo2 = new WebGLRenderTarget(resolution, resolution, parameters) - const blurpass = new BlurPass({ + const [fbo1, fbo2, blurpass, reflectorProps] = React.useMemo(() => { + const parameters = { + minFilter: LinearFilter, + magFilter: LinearFilter, + type: HalfFloatType, + } + const fbo1 = new WebGLRenderTarget(resolution, resolution, parameters) + fbo1.depthBuffer = true + fbo1.depthTexture = new DepthTexture(resolution, resolution) + fbo1.depthTexture.format = DepthFormat + fbo1.depthTexture.type = UnsignedShortType + const fbo2 = new WebGLRenderTarget(resolution, resolution, parameters) + const blurpass = new BlurPass({ + gl, + resolution, + width: blur[0], + height: blur[1], + minDepthThreshold, + maxDepthThreshold, + depthScale, + depthToBlurRatioBias, + }) + const reflectorProps = { + mirror, + textureMatrix, + mixBlur, + tDiffuse: fbo1.texture, + tDepth: fbo1.depthTexture, + tDiffuseBlur: fbo2.texture, + hasBlur, + mixStrength, + minDepthThreshold, + maxDepthThreshold, + depthScale, + depthToBlurRatioBias, + distortion, + distortionMap, + mixContrast, + 'defines-USE_BLUR': hasBlur ? '' : undefined, + 'defines-USE_DEPTH': depthScale > 0 ? '' : undefined, + 'defines-USE_DISTORTION': distortionMap ? '' : undefined, + } + return [fbo1, fbo2, blurpass, reflectorProps] + }, [ gl, + blur, + textureMatrix, resolution, - width: blur[0], - height: blur[1], - minDepthThreshold, - maxDepthThreshold, - depthScale, - depthToBlurRatioBias, - }) - const reflectorProps = { mirror, - textureMatrix, - mixBlur, - tDiffuse: fbo1.texture, - tDepth: fbo1.depthTexture, - tDiffuseBlur: fbo2.texture, hasBlur, + mixBlur, mixStrength, minDepthThreshold, maxDepthThreshold, @@ -184,65 +207,44 @@ export const MeshReflectorMaterial: ForwardRefComponent 0 ? '' : undefined, - 'defines-USE_DISTORTION': distortionMap ? '' : undefined, - } - return [fbo1, fbo2, blurpass, reflectorProps] - }, [ - gl, - blur, - textureMatrix, - resolution, - mirror, - hasBlur, - mixBlur, - mixStrength, - minDepthThreshold, - maxDepthThreshold, - depthScale, - depthToBlurRatioBias, - distortion, - distortionMap, - mixContrast, - ]) + ]) - useFrame(() => { - // TODO: As of R3f 7-8 this should be __r3f.parent - const parent = (materialRef.current as any).parent || (materialRef.current as any)?.__r3f.parent - if (!parent) return + useFrame(() => { + // TODO: As of R3f 7-8 this should be __r3f.parent + const parent = (materialRef.current as any).parent || (materialRef.current as any)?.__r3f.parent + if (!parent) return - parent.visible = false - const currentXrEnabled = gl.xr.enabled - const currentShadowAutoUpdate = gl.shadowMap.autoUpdate - beforeRender() - gl.xr.enabled = false - gl.shadowMap.autoUpdate = false - gl.setRenderTarget(fbo1) - gl.state.buffers.depth.setMask(true) - if (!gl.autoClear) gl.clear() - gl.render(scene, virtualCamera) - if (hasBlur) blurpass.render(gl, fbo1, fbo2) - gl.xr.enabled = currentXrEnabled - gl.shadowMap.autoUpdate = currentShadowAutoUpdate - parent.visible = true - gl.setRenderTarget(null) - }) + parent.visible = false + const currentXrEnabled = gl.xr.enabled + const currentShadowAutoUpdate = gl.shadowMap.autoUpdate + beforeRender() + gl.xr.enabled = false + gl.shadowMap.autoUpdate = false + gl.setRenderTarget(fbo1) + gl.state.buffers.depth.setMask(true) + if (!gl.autoClear) gl.clear() + gl.render(scene, virtualCamera) + if (hasBlur) blurpass.render(gl, fbo1, fbo2) + gl.xr.enabled = currentXrEnabled + gl.shadowMap.autoUpdate = currentShadowAutoUpdate + parent.visible = true + gl.setRenderTarget(null) + }) - return ( - - ) - } -) + return ( + + ) + } + ) diff --git a/src/core/MeshTransmissionMaterial.tsx b/src/core/MeshTransmissionMaterial.tsx index 704934a4c..971f43630 100644 --- a/src/core/MeshTransmissionMaterial.tsx +++ b/src/core/MeshTransmissionMaterial.tsx @@ -376,7 +376,7 @@ class MeshTransmissionMaterialImpl extends THREE.MeshPhysicalMaterial { export const MeshTransmissionMaterial: ForwardRefComponent< MeshTransmissionMaterialProps, JSX.IntrinsicElements['meshTransmissionMaterial'] -> = React.forwardRef( +> = /* @__PURE__ */ React.forwardRef( ( { buffer, diff --git a/src/core/MeshWobbleMaterial.tsx b/src/core/MeshWobbleMaterial.tsx index 0d2500e1c..e2062eb58 100644 --- a/src/core/MeshWobbleMaterial.tsx +++ b/src/core/MeshWobbleMaterial.tsx @@ -74,7 +74,7 @@ class WobbleMaterialImpl extends MeshStandardMaterial { } } -export const MeshWobbleMaterial: ForwardRefComponent = React.forwardRef( +export const MeshWobbleMaterial: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ speed = 1, ...props }: Props, ref) => { const [material] = React.useState(() => new WobbleMaterialImpl()) useFrame((state) => material && (material.time = state.clock.getElapsedTime() * speed)) diff --git a/src/core/MotionPathControls.tsx b/src/core/MotionPathControls.tsx index fe77a61a5..a15283ee9 100644 --- a/src/core/MotionPathControls.tsx +++ b/src/core/MotionPathControls.tsx @@ -49,7 +49,7 @@ type MotionState = { const isObject3DRef = (ref: any): ref is React.MutableRefObject => ref?.current instanceof THREE.Object3D -const context = React.createContext(null!) +const context = /* @__PURE__ */ React.createContext(null!) export function useMotion() { return React.useContext(context) as MotionState @@ -76,7 +76,7 @@ function Debug({ points = 50 }: { points?: number }) { ) } -export const MotionPathControls = React.forwardRef( +export const MotionPathControls = /* @__PURE__ */ React.forwardRef( ( { children, diff --git a/src/core/OrbitControls.tsx b/src/core/OrbitControls.tsx index 82e5643e6..c680c5411 100644 --- a/src/core/OrbitControls.tsx +++ b/src/core/OrbitControls.tsx @@ -27,84 +27,82 @@ export type OrbitControlsProps = Omit< 'ref' > -export const OrbitControls: ForwardRefComponent = React.forwardRef< - OrbitControlsImpl, - OrbitControlsProps ->( - ( - { - makeDefault, - camera, - regress, - domElement, - enableDamping = true, - keyEvents = false, - onChange, - onStart, - onEnd, - ...restProps - }, - ref - ) => { - const invalidate = useThree((state) => state.invalidate) - const defaultCamera = useThree((state) => state.camera) - const gl = useThree((state) => state.gl) - const events = useThree((state) => state.events) as EventManager - const setEvents = useThree((state) => state.setEvents) - const set = useThree((state) => state.set) - const get = useThree((state) => state.get) - const performance = useThree((state) => state.performance) - const explCamera = (camera || defaultCamera) as THREE.OrthographicCamera | THREE.PerspectiveCamera - const explDomElement = (domElement || events.connected || gl.domElement) as HTMLElement - const controls = React.useMemo(() => new OrbitControlsImpl(explCamera), [explCamera]) +export const OrbitControls: ForwardRefComponent = + /* @__PURE__ */ React.forwardRef( + ( + { + makeDefault, + camera, + regress, + domElement, + enableDamping = true, + keyEvents = false, + onChange, + onStart, + onEnd, + ...restProps + }, + ref + ) => { + const invalidate = useThree((state) => state.invalidate) + const defaultCamera = useThree((state) => state.camera) + const gl = useThree((state) => state.gl) + const events = useThree((state) => state.events) as EventManager + const setEvents = useThree((state) => state.setEvents) + const set = useThree((state) => state.set) + const get = useThree((state) => state.get) + const performance = useThree((state) => state.performance) + const explCamera = (camera || defaultCamera) as THREE.OrthographicCamera | THREE.PerspectiveCamera + const explDomElement = (domElement || events.connected || gl.domElement) as HTMLElement + const controls = React.useMemo(() => new OrbitControlsImpl(explCamera), [explCamera]) - useFrame(() => { - if (controls.enabled) controls.update() - }, -1) + useFrame(() => { + if (controls.enabled) controls.update() + }, -1) - React.useEffect(() => { - if (keyEvents) { - controls.connect(keyEvents === true ? explDomElement : keyEvents) - } + React.useEffect(() => { + if (keyEvents) { + controls.connect(keyEvents === true ? explDomElement : keyEvents) + } - controls.connect(explDomElement) - return () => void controls.dispose() - }, [keyEvents, explDomElement, regress, controls, invalidate]) + controls.connect(explDomElement) + return () => void controls.dispose() + }, [keyEvents, explDomElement, regress, controls, invalidate]) - React.useEffect(() => { - const callback = (e: OrbitControlsChangeEvent) => { - invalidate() - if (regress) performance.regress() - if (onChange) onChange(e) - } + React.useEffect(() => { + const callback = (e: OrbitControlsChangeEvent) => { + invalidate() + if (regress) performance.regress() + if (onChange) onChange(e) + } - const onStartCb = (e: Event) => { - if (onStart) onStart(e) - } + const onStartCb = (e: Event) => { + if (onStart) onStart(e) + } - const onEndCb = (e: Event) => { - if (onEnd) onEnd(e) - } + const onEndCb = (e: Event) => { + if (onEnd) onEnd(e) + } - controls.addEventListener('change', callback) - controls.addEventListener('start', onStartCb) - controls.addEventListener('end', onEndCb) + controls.addEventListener('change', callback) + controls.addEventListener('start', onStartCb) + controls.addEventListener('end', onEndCb) - return () => { - controls.removeEventListener('start', onStartCb) - controls.removeEventListener('end', onEndCb) - controls.removeEventListener('change', callback) - } - }, [onChange, onStart, onEnd, controls, invalidate, setEvents]) + return () => { + controls.removeEventListener('start', onStartCb) + controls.removeEventListener('end', onEndCb) + controls.removeEventListener('change', callback) + } + }, [onChange, onStart, onEnd, controls, invalidate, setEvents]) - React.useEffect(() => { - if (makeDefault) { - const old = get().controls - set({ controls }) - return () => set({ controls: old }) - } - }, [makeDefault, controls]) + React.useEffect(() => { + if (makeDefault) { + const old = get().controls + set({ controls }) + return () => set({ controls: old }) + } + }, [makeDefault, controls]) - return - } -) + return + } + ) diff --git a/src/core/OrthographicCamera.tsx b/src/core/OrthographicCamera.tsx index 634b0dd08..1844d79be 100644 --- a/src/core/OrthographicCamera.tsx +++ b/src/core/OrthographicCamera.tsx @@ -23,7 +23,7 @@ type Props = Omit & { envMap?: THREE.Texture } -export const OrthographicCamera: ForwardRefComponent = React.forwardRef( +export const OrthographicCamera: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ envMap, resolution = 256, frames = Infinity, children, makeDefault, ...props }: Props, ref) => { const set = useThree(({ set }) => set) const camera = useThree(({ camera }) => camera) diff --git a/src/core/Outlines.tsx b/src/core/Outlines.tsx index 53efe3e58..029c6cf2b 100644 --- a/src/core/Outlines.tsx +++ b/src/core/Outlines.tsx @@ -3,9 +3,16 @@ import * as React from 'react' import { shaderMaterial } from './shaderMaterial' import { extend, applyProps, ReactThreeFiber, useThree } from '@react-three/fiber' import { toCreasedNormals } from 'three-stdlib' +import { version } from '../helpers/constants' -const OutlinesMaterial = shaderMaterial( - { screenspace: false, color: new THREE.Color('black'), opacity: 1, thickness: 0.05, size: new THREE.Vector2() }, +const OutlinesMaterial = /* @__PURE__ */ shaderMaterial( + { + screenspace: false, + color: /* @__PURE__ */ new THREE.Color('black'), + opacity: 1, + thickness: 0.05, + size: /* @__PURE__ */ new THREE.Vector2(), + }, `#include #include #include @@ -46,7 +53,7 @@ const OutlinesMaterial = shaderMaterial( void main(){ gl_FragColor = vec4(color, opacity); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) diff --git a/src/core/PerformanceMonitor.tsx b/src/core/PerformanceMonitor.tsx index 9b87a20e8..1e49a29f7 100644 --- a/src/core/PerformanceMonitor.tsx +++ b/src/core/PerformanceMonitor.tsx @@ -54,7 +54,7 @@ type PerformanceMonitorProps = { children?: React.ReactNode } -const context = createContext(null!) +const context = /* @__PURE__ */ createContext(null!) export function PerformanceMonitor({ iterations = 10, diff --git a/src/core/PerspectiveCamera.tsx b/src/core/PerspectiveCamera.tsx index dee24a757..0cedd5f62 100644 --- a/src/core/PerspectiveCamera.tsx +++ b/src/core/PerspectiveCamera.tsx @@ -23,7 +23,7 @@ type Props = Omit & { envMap?: THREE.Texture } -export const PerspectiveCamera: ForwardRefComponent = React.forwardRef( +export const PerspectiveCamera: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ envMap, resolution = 256, frames = Infinity, makeDefault, children, ...props }: Props, ref) => { const set = useThree(({ set }) => set) const camera = useThree(({ camera }) => camera) diff --git a/src/core/PointMaterial.tsx b/src/core/PointMaterial.tsx index 956614c25..083d5faf0 100644 --- a/src/core/PointMaterial.tsx +++ b/src/core/PointMaterial.tsx @@ -2,6 +2,7 @@ import * as THREE from 'three' import * as React from 'react' import { PrimitiveProps } from '@react-three/fiber' import { ForwardRefComponent } from '../helpers/ts-utils' +import { version } from '../helpers/constants' type PointMaterialType = JSX.IntrinsicElements['pointsMaterial'] @@ -13,7 +14,7 @@ declare global { } } -const opaque_fragment = parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'opaque_fragment' : 'output_fragment' +const opaque_fragment = version >= 154 ? 'opaque_fragment' : 'output_fragment' export class PointMaterialImpl extends THREE.PointsMaterial { constructor(props) { @@ -34,7 +35,7 @@ export class PointMaterialImpl extends THREE.PointsMaterial { float mask = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r); gl_FragColor = vec4(gl_FragColor.rgb, mask * gl_FragColor.a ); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> ` ) } @@ -44,7 +45,7 @@ export class PointMaterialImpl extends THREE.PointsMaterial { export const PointMaterial: ForwardRefComponent< Omit, PointMaterialImpl -> = React.forwardRef>((props, ref) => { +> = /* @__PURE__ */ React.forwardRef>((props, ref) => { const [material] = React.useState(() => new PointMaterialImpl(null)) return }) diff --git a/src/core/PointerLockControls.tsx b/src/core/PointerLockControls.tsx index 1695a3e2d..5666c76d9 100644 --- a/src/core/PointerLockControls.tsx +++ b/src/core/PointerLockControls.tsx @@ -20,7 +20,7 @@ export type PointerLockControlsProps = ReactThreeFiber.Object3DNode< } export const PointerLockControls: ForwardRefComponent = - React.forwardRef( + /* @__PURE__ */ React.forwardRef( ({ domElement, selector, onChange, onLock, onUnlock, enabled = true, makeDefault, ...props }, ref) => { const { camera, ...rest } = props const setEvents = useThree((state) => state.setEvents) diff --git a/src/core/Points.tsx b/src/core/Points.tsx index b293d659a..5e217d0e7 100644 --- a/src/core/Points.tsx +++ b/src/core/Points.tsx @@ -22,10 +22,10 @@ type PointsInstancesProps = JSX.IntrinsicElements['points'] & { limit?: number } -const _inverseMatrix = /*@__PURE__*/ new THREE.Matrix4() -const _ray = /*@__PURE__*/ new THREE.Ray() -const _sphere = /*@__PURE__*/ new THREE.Sphere() -const _position = /*@__PURE__*/ new THREE.Vector3() +const _inverseMatrix = /* @__PURE__ */ new THREE.Matrix4() +const _ray = /* @__PURE__ */ new THREE.Ray() +const _sphere = /* @__PURE__ */ new THREE.Sphere() +const _position = /* @__PURE__ */ new THREE.Vector3() export class PositionPoint extends THREE.Group { size: number @@ -82,14 +82,14 @@ export class PositionPoint extends THREE.Group { } let i, positionRef -const context = /*@__PURE__*/ React.createContext(null!) -const parentMatrix = /*@__PURE__*/ new THREE.Matrix4() -const position = /*@__PURE__*/ new THREE.Vector3() +const context = /* @__PURE__ */ React.createContext(null!) +const parentMatrix = /* @__PURE__ */ new THREE.Matrix4() +const position = /* @__PURE__ */ new THREE.Vector3() /** * Instance implementation, relies on react + context to update the attributes based on the children of this component */ -const PointsInstances: ForwardRefComponent = React.forwardRef< +const PointsInstances: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< THREE.Points, PointsInstancesProps >(({ children, range, limit = 1000, ...props }, ref) => { @@ -173,8 +173,8 @@ const PointsInstances: ForwardRefComponent = ) }) -export const Point: ForwardRefComponent = React.forwardRef( - ({ children, ...props }: JSX.IntrinsicElements['positionPoint'], ref) => { +export const Point: ForwardRefComponent = + /* @__PURE__ */ React.forwardRef(({ children, ...props }: JSX.IntrinsicElements['positionPoint'], ref) => { React.useMemo(() => extend({ PositionPoint }), []) const group = React.useRef() const { subscribe, getParent } = React.useContext(context) @@ -184,8 +184,7 @@ export const Point: ForwardRefComponent ) - } -) + }) /** * Buffer implementation, relies on complete buffers of the correct number, leaves it to the user to update them @@ -199,7 +198,7 @@ type PointsBuffersProps = JSX.IntrinsicElements['points'] & { stride?: 2 | 3 } -export const PointsBuffer: ForwardRefComponent = React.forwardRef< +export const PointsBuffer: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< THREE.Points, PointsBuffersProps >(({ children, positions, colors, sizes, stride = 3, ...props }, forwardedRef) => { @@ -246,11 +245,9 @@ export const PointsBuffer: ForwardRefComponent ) }) -export const Points: ForwardRefComponent = React.forwardRef< - THREE.Points, - PointsBuffersProps | PointsInstancesProps ->((props, forwardedRef) => { - if ((props as PointsBuffersProps).positions instanceof Float32Array) { - return - } else return -}) +export const Points: ForwardRefComponent = + /* @__PURE__ */ React.forwardRef((props, forwardedRef) => { + if ((props as PointsBuffersProps).positions instanceof Float32Array) { + return + } else return + }) diff --git a/src/core/PositionalAudio.tsx b/src/core/PositionalAudio.tsx index 709912cf6..659806b72 100644 --- a/src/core/PositionalAudio.tsx +++ b/src/core/PositionalAudio.tsx @@ -10,7 +10,7 @@ type Props = JSX.IntrinsicElements['positionalAudio'] & { loop?: boolean } -export const PositionalAudio: ForwardRefComponent = React.forwardRef( +export const PositionalAudio: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ url, distance = 1, loop = true, autoplay, ...props }: Props, ref) => { const sound = React.useRef() const camera = useThree(({ camera }) => camera) diff --git a/src/core/QuadraticBezierLine.tsx b/src/core/QuadraticBezierLine.tsx index 522cba2dd..b15440068 100644 --- a/src/core/QuadraticBezierLine.tsx +++ b/src/core/QuadraticBezierLine.tsx @@ -21,45 +21,44 @@ export type Line2Props = Object3DNode & { ) => void } -const v = new Vector3() -export const QuadraticBezierLine: ForwardRefComponent = React.forwardRef( - function QuadraticBezierLine({ start = [0, 0, 0], end = [0, 0, 0], mid, segments = 20, ...rest }, forwardref) { - const ref = React.useRef(null!) - const [curve] = React.useState( - () => new QuadraticBezierCurve3(undefined as any, undefined as any, undefined as any) - ) - const getPoints = React.useCallback((start, end, mid, segments = 20) => { - if (start instanceof Vector3) curve.v0.copy(start) - else curve.v0.set(...(start as [number, number, number])) - if (end instanceof Vector3) curve.v2.copy(end) - else curve.v2.set(...(end as [number, number, number])) - if (mid instanceof Vector3) { - curve.v1.copy(mid) - } else if (Array.isArray(mid)) { - curve.v1.set(...(mid as [number, number, number])) - } else { - curve.v1.copy( - curve.v0 - .clone() - .add(curve.v2.clone().sub(curve.v0)) - .add(v.set(0, curve.v0.y - curve.v2.y, 0)) - ) - } - return curve.getPoints(segments) - }, []) +const v = /* @__PURE__ */ new Vector3() +export const QuadraticBezierLine: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< + Line2Props, + Props +>(function QuadraticBezierLine({ start = [0, 0, 0], end = [0, 0, 0], mid, segments = 20, ...rest }, forwardref) { + const ref = React.useRef(null!) + const [curve] = React.useState(() => new QuadraticBezierCurve3(undefined as any, undefined as any, undefined as any)) + const getPoints = React.useCallback((start, end, mid, segments = 20) => { + if (start instanceof Vector3) curve.v0.copy(start) + else curve.v0.set(...(start as [number, number, number])) + if (end instanceof Vector3) curve.v2.copy(end) + else curve.v2.set(...(end as [number, number, number])) + if (mid instanceof Vector3) { + curve.v1.copy(mid) + } else if (Array.isArray(mid)) { + curve.v1.set(...(mid as [number, number, number])) + } else { + curve.v1.copy( + curve.v0 + .clone() + .add(curve.v2.clone().sub(curve.v0)) + .add(v.set(0, curve.v0.y - curve.v2.y, 0)) + ) + } + return curve.getPoints(segments) + }, []) - React.useLayoutEffect(() => { - ref.current.setPoints = ( - start: Vector3 | [number, number, number], - end: Vector3 | [number, number, number], - mid: Vector3 | [number, number, number] - ) => { - const points = getPoints(start, end, mid) - if (ref.current.geometry) ref.current.geometry.setPositions(points.map((p) => p.toArray()).flat()) - } - }, []) + React.useLayoutEffect(() => { + ref.current.setPoints = ( + start: Vector3 | [number, number, number], + end: Vector3 | [number, number, number], + mid: Vector3 | [number, number, number] + ) => { + const points = getPoints(start, end, mid) + if (ref.current.geometry) ref.current.geometry.setPositions(points.map((p) => p.toArray()).flat()) + } + }, []) - const points = React.useMemo(() => getPoints(start, end, mid, segments), [start, end, mid, segments]) - return - } -) + const points = React.useMemo(() => getPoints(start, end, mid, segments), [start, end, mid, segments]) + return +}) diff --git a/src/core/Reflector.tsx b/src/core/Reflector.tsx index 60cd60aa2..67f8c3fcc 100644 --- a/src/core/Reflector.tsx +++ b/src/core/Reflector.tsx @@ -52,12 +52,13 @@ declare global { } } -extend({ MeshReflectorMaterial }) - /** * @deprecated Use MeshReflectorMaterial instead */ -export const Reflector: ForwardRefComponent = React.forwardRef( +export const Reflector: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< + Mesh, + ReflectorProps +>( ( { mixBlur = 0, @@ -79,6 +80,8 @@ export const Reflector: ForwardRefComponent = React.forwar }, ref ) => { + extend({ MeshReflectorMaterial }) + React.useEffect(() => { console.warn( 'Reflector has been deprecated and will be removed next major. Replace it with !' diff --git a/src/core/RenderCubeTexture.tsx b/src/core/RenderCubeTexture.tsx index 0a37254a8..2bebd43a3 100644 --- a/src/core/RenderCubeTexture.tsx +++ b/src/core/RenderCubeTexture.tsx @@ -40,83 +40,84 @@ export type RenderCubeTextureApi = { camera: THREE.CubeCamera } -export const RenderCubeTexture: ForwardRefComponent = React.forwardRef( - ( - { - children, - compute, - renderPriority = -1, - eventPriority = 0, - frames = Infinity, - stencilBuffer = false, - depthBuffer = true, - generateMipmaps = false, - resolution = 896, - near = 0.1, - far = 1000, - flip = false, - position, - rotation, - scale, - quaternion, - matrix, - matrixAutoUpdate, - ...props - }, - forwardRef - ) => { - const { size, viewport } = useThree() +export const RenderCubeTexture: ForwardRefComponent = + /* @__PURE__ */ React.forwardRef( + ( + { + children, + compute, + renderPriority = -1, + eventPriority = 0, + frames = Infinity, + stencilBuffer = false, + depthBuffer = true, + generateMipmaps = false, + resolution = 896, + near = 0.1, + far = 1000, + flip = false, + position, + rotation, + scale, + quaternion, + matrix, + matrixAutoUpdate, + ...props + }, + forwardRef + ) => { + const { size, viewport } = useThree() - const camera = React.useRef(null!) - const fbo = React.useMemo(() => { - const fbo = new THREE.WebGLCubeRenderTarget( - Math.max((resolution || size.width) * viewport.dpr, (resolution || size.height) * viewport.dpr), - { - stencilBuffer, - depthBuffer, - generateMipmaps, - } - ) - fbo.texture.isRenderTargetTexture = !flip - fbo.texture.flipY = true - fbo.texture.type = THREE.HalfFloatType - return fbo - }, [resolution, flip]) + const camera = React.useRef(null!) + const fbo = React.useMemo(() => { + const fbo = new THREE.WebGLCubeRenderTarget( + Math.max((resolution || size.width) * viewport.dpr, (resolution || size.height) * viewport.dpr), + { + stencilBuffer, + depthBuffer, + generateMipmaps, + } + ) + fbo.texture.isRenderTargetTexture = !flip + fbo.texture.flipY = true + fbo.texture.type = THREE.HalfFloatType + return fbo + }, [resolution, flip]) - React.useEffect(() => { - return () => fbo.dispose() - }, [fbo]) + React.useEffect(() => { + return () => fbo.dispose() + }, [fbo]) - const [vScene] = React.useState(() => new THREE.Scene()) + const [vScene] = React.useState(() => new THREE.Scene()) - React.useImperativeHandle(forwardRef, () => ({ scene: vScene, fbo, camera: camera.current }), [fbo]) + React.useImperativeHandle(forwardRef, () => ({ scene: vScene, fbo, camera: camera.current }), [fbo]) - return ( - <> - {createPortal( - - {children} - {/* Without an element that receives pointer events state.pointer will always be 0/0 */} - null} /> - , - vScene, - { events: { compute, priority: eventPriority } } - )} - - - - ) - } -) + return ( + <> + {createPortal( + + {children} + {/* Without an element that receives pointer events state.pointer will always be 0/0 */} + null} /> + , + vScene, + { events: { compute, priority: eventPriority } } + )} + + + + ) + } + ) // The container component has to be separate, it can not be inlined because "useFrame(state" when run inside createPortal will return // the portals own state which includes user-land overrides (custom cameras etc), but if it is executed in 's render function diff --git a/src/core/RenderTexture.tsx b/src/core/RenderTexture.tsx index 8d5c9ae1b..8d7f7384c 100644 --- a/src/core/RenderTexture.tsx +++ b/src/core/RenderTexture.tsx @@ -29,7 +29,7 @@ type Props = JSX.IntrinsicElements['texture'] & { children: React.ReactNode } -export const RenderTexture: ForwardRefComponent = React.forwardRef( +export const RenderTexture: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ( { children, diff --git a/src/core/Resize.tsx b/src/core/Resize.tsx index 67e2c8c32..4f11343e7 100644 --- a/src/core/Resize.tsx +++ b/src/core/Resize.tsx @@ -14,7 +14,7 @@ export type ResizeProps = JSX.IntrinsicElements['group'] & { precise?: boolean } -export const Resize = React.forwardRef( +export const Resize = /* @__PURE__ */ React.forwardRef( ({ children, width, height, depth, box3, precise = true, ...props }, fRef) => { const ref = React.useRef(null!) const outer = React.useRef(null!) diff --git a/src/core/RoundedBox.tsx b/src/core/RoundedBox.tsx index e662b120a..3c688f7e6 100644 --- a/src/core/RoundedBox.tsx +++ b/src/core/RoundedBox.tsx @@ -24,45 +24,47 @@ type Props = { creaseAngle?: number } & Omit -export const RoundedBox: ForwardRefComponent = React.forwardRef(function RoundedBox( - { - args: [width = 1, height = 1, depth = 1] = [], - radius = 0.05, - steps = 1, - smoothness = 4, - bevelSegments = 4, - creaseAngle = 0.4, - children, - ...rest - }, - ref -) { - const shape = React.useMemo(() => createShape(width, height, radius), [width, height, radius]) - const params = React.useMemo( - () => ({ - depth: depth - radius * 2, - bevelEnabled: true, - bevelSegments: bevelSegments * 2, - steps, - bevelSize: radius - eps, - bevelThickness: radius, - curveSegments: smoothness, - }), - [depth, radius, smoothness] - ) - const geomRef = React.useRef(null!) +export const RoundedBox: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( + function RoundedBox( + { + args: [width = 1, height = 1, depth = 1] = [], + radius = 0.05, + steps = 1, + smoothness = 4, + bevelSegments = 4, + creaseAngle = 0.4, + children, + ...rest + }, + ref + ) { + const shape = React.useMemo(() => createShape(width, height, radius), [width, height, radius]) + const params = React.useMemo( + () => ({ + depth: depth - radius * 2, + bevelEnabled: true, + bevelSegments: bevelSegments * 2, + steps, + bevelSize: radius - eps, + bevelThickness: radius, + curveSegments: smoothness, + }), + [depth, radius, smoothness] + ) + const geomRef = React.useRef(null!) - React.useLayoutEffect(() => { - if (geomRef.current) { - geomRef.current.center() - toCreasedNormals(geomRef.current, creaseAngle) - } - }, [shape, params]) + React.useLayoutEffect(() => { + if (geomRef.current) { + geomRef.current.center() + toCreasedNormals(geomRef.current, creaseAngle) + } + }, [shape, params]) - return ( - - - {children} - - ) -}) + return ( + + + {children} + + ) + } +) diff --git a/src/core/ScreenQuad.tsx b/src/core/ScreenQuad.tsx index 1bff5f645..78f481531 100644 --- a/src/core/ScreenQuad.tsx +++ b/src/core/ScreenQuad.tsx @@ -15,7 +15,7 @@ function createScreenQuadGeometry() { type Props = Omit -export const ScreenQuad: ForwardRefComponent = React.forwardRef( +export const ScreenQuad: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( function ScreenQuad({ children, ...restProps }, ref) { const geometry = React.useMemo(createScreenQuadGeometry, []) diff --git a/src/core/ScreenSpace.tsx b/src/core/ScreenSpace.tsx index 66b98a02e..b95996d66 100644 --- a/src/core/ScreenSpace.tsx +++ b/src/core/ScreenSpace.tsx @@ -8,18 +8,19 @@ export type ScreenSpaceProps = { depth?: number } & JSX.IntrinsicElements['group'] -export const ScreenSpace: ForwardRefComponent = React.forwardRef( - ({ children, depth = -1, ...rest }, ref) => { - const localRef = React.useRef(null!) +export const ScreenSpace: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< + Group, + ScreenSpaceProps +>(({ children, depth = -1, ...rest }, ref) => { + const localRef = React.useRef(null!) - useFrame(({ camera }) => { - localRef.current.quaternion.copy(camera.quaternion) - localRef.current.position.copy(camera.position) - }) - return ( - - {children} - - ) - } -) + useFrame(({ camera }) => { + localRef.current.quaternion.copy(camera.quaternion) + localRef.current.position.copy(camera.position) + }) + return ( + + {children} + + ) +}) diff --git a/src/core/Segments.tsx b/src/core/Segments.tsx index 3ec7d21ce..ba16ed7c9 100644 --- a/src/core/Segments.tsx +++ b/src/core/Segments.tsx @@ -22,9 +22,9 @@ type SegmentProps = Omit(null!) +const context = /* @__PURE__ */ React.createContext(null!) -const Segments: ForwardRefComponent = React.forwardRef( +const Segments: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( (props, forwardedRef) => { React.useMemo(() => extend({ SegmentObject }), []) @@ -114,16 +114,15 @@ export class SegmentObject { const normPos = (pos: SegmentProps['start']): SegmentObject['start'] => pos instanceof THREE.Vector3 ? pos : new THREE.Vector3(...(typeof pos === 'number' ? [pos, pos, pos] : pos)) -const Segment: ForwardRefComponent = React.forwardRef( - ({ color, start, end }, forwardedRef) => { - const api = React.useContext(context) - if (!api) throw 'Segment must used inside Segments component.' - const ref = React.useRef(null) - React.useLayoutEffect(() => api.subscribe(ref), []) - return ( - - ) - } -) +const Segment: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< + SegmentObject, + SegmentProps +>(({ color, start, end }, forwardedRef) => { + const api = React.useContext(context) + if (!api) throw 'Segment must used inside Segments component.' + const ref = React.useRef(null) + React.useLayoutEffect(() => api.subscribe(ref), []) + return +}) export { Segments, Segment } diff --git a/src/core/Shadow.tsx b/src/core/Shadow.tsx index 668530d87..81e71bf18 100644 --- a/src/core/Shadow.tsx +++ b/src/core/Shadow.tsx @@ -12,7 +12,7 @@ type Props = JSX.IntrinsicElements['mesh'] & { export type ShadowType = Mesh -export const Shadow: ForwardRefComponent = React.forwardRef( +export const Shadow: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ( { fog = false, renderOrder, depthWrite = false, colorStop = 0.0, color = 'black', opacity = 0.5, ...props }: Props, ref diff --git a/src/core/Sky.tsx b/src/core/Sky.tsx index 3e14a9bcc..677e0aed0 100644 --- a/src/core/Sky.tsx +++ b/src/core/Sky.tsx @@ -26,7 +26,7 @@ export function calcPosFromAngles(inclination: number, azimuth: number, vector: return vector } -export const Sky: ForwardRefComponent = React.forwardRef( +export const Sky: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ( { inclination = 0.6, diff --git a/src/core/Sparkles.tsx b/src/core/Sparkles.tsx index b68b965ec..301d5fc8d 100644 --- a/src/core/Sparkles.tsx +++ b/src/core/Sparkles.tsx @@ -3,6 +3,7 @@ import * as THREE from 'three' import { PointsProps, useThree, useFrame, extend, Node } from '@react-three/fiber' import { shaderMaterial } from './shaderMaterial' import { ForwardRefComponent } from '../helpers/ts-utils' +import { version } from '../helpers/constants' interface Props { /** Number of particles (default: 100) */ @@ -21,7 +22,7 @@ interface Props { noise?: number | [number, number, number] | THREE.Vector3 | Float32Array } -const SparklesImplMaterial = shaderMaterial( +const SparklesImplMaterial = /* @__PURE__ */ shaderMaterial( { time: 0, pixelRatio: 1 }, ` uniform float pixelRatio; uniform float time; @@ -52,7 +53,7 @@ const SparklesImplMaterial = shaderMaterial( float strength = 0.05 / distanceToCenter - 0.1; gl_FragColor = vec4(vColor, strength * vOpacity); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) @@ -100,7 +101,7 @@ function usePropAsIsOrAsAttribute( }, [prop]) } -export const Sparkles: ForwardRefComponent = React.forwardRef< +export const Sparkles: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< THREE.Points, Props & PointsProps >(({ noise = 1, count = 100, speed = 1, opacity = 1, scale = 1, size, color, children, ...props }, forwardRef) => { diff --git a/src/core/Stars.tsx b/src/core/Stars.tsx index a32f4c304..9cfd2bd46 100644 --- a/src/core/Stars.tsx +++ b/src/core/Stars.tsx @@ -4,6 +4,7 @@ import * as React from 'react' import { ReactThreeFiber, useFrame } from '@react-three/fiber' import { Points, Vector3, Spherical, Color, AdditiveBlending, ShaderMaterial } from 'three' import { ForwardRefComponent } from '../helpers/ts-utils' +import { version } from '../helpers/constants' type Props = { radius?: number @@ -42,7 +43,7 @@ class StarfieldMaterial extends ShaderMaterial { gl_FragColor = vec4(vColor, opacity); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }`, }) } @@ -60,7 +61,7 @@ const genStar = (r: number) => { return new Vector3().setFromSpherical(new Spherical(r, Math.acos(1 - Math.random() * 2), Math.random() * 2 * Math.PI)) } -export const Stars: ForwardRefComponent = React.forwardRef( +export const Stars: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ radius = 100, depth = 50, count = 5000, saturation = 0, factor = 4, fade = false, speed = 1 }: Props, ref) => { const material = React.useRef() const [position, color, size] = React.useMemo(() => { diff --git a/src/core/Svg.tsx b/src/core/Svg.tsx index f9a9af762..983298161 100644 --- a/src/core/Svg.tsx +++ b/src/core/Svg.tsx @@ -16,67 +16,69 @@ export interface SvgProps extends Omit { strokeMeshProps?: MeshProps } -export const Svg: ForwardRefComponent = forwardRef(function R3FSvg( - { src, skipFill, skipStrokes, fillMaterial, strokeMaterial, fillMeshProps, strokeMeshProps, ...props }, - ref -) { - const svg = useLoader(SVGLoader, !src.startsWith(' = /* @__PURE__ */ forwardRef( + function R3FSvg( + { src, skipFill, skipStrokes, fillMaterial, strokeMaterial, fillMeshProps, strokeMeshProps, ...props }, + ref + ) { + const svg = useLoader(SVGLoader, !src.startsWith(' - skipStrokes - ? [] - : svg.paths.map((path) => - path.userData?.style.stroke === undefined || path.userData.style.stroke === 'none' - ? null - : path.subPaths.map((subPath) => SVGLoader.pointsToStroke(subPath.getPoints(), path.userData!.style)) - ), - [svg, skipStrokes] - ) + const strokeGeometries = useMemo( + () => + skipStrokes + ? [] + : svg.paths.map((path) => + path.userData?.style.stroke === undefined || path.userData.style.stroke === 'none' + ? null + : path.subPaths.map((subPath) => SVGLoader.pointsToStroke(subPath.getPoints(), path.userData!.style)) + ), + [svg, skipStrokes] + ) - useEffect(() => { - return () => strokeGeometries.forEach((group) => group && group.map((g) => g.dispose())) - }, [strokeGeometries]) + useEffect(() => { + return () => strokeGeometries.forEach((group) => group && group.map((g) => g.dispose())) + }, [strokeGeometries]) - return ( - - - {svg.paths.map((path, p) => ( - - {!skipFill && - path.userData?.style.fill !== undefined && - path.userData.style.fill !== 'none' && - SVGLoader.createShapes(path).map((shape, s) => ( - - - - - ))} - {!skipStrokes && - path.userData?.style.stroke !== undefined && - path.userData.style.stroke !== 'none' && - path.subPaths.map((_subPath, s) => ( - - - - ))} - - ))} + return ( + + + {svg.paths.map((path, p) => ( + + {!skipFill && + path.userData?.style.fill !== undefined && + path.userData.style.fill !== 'none' && + SVGLoader.createShapes(path).map((shape, s) => ( + + + + + ))} + {!skipStrokes && + path.userData?.style.stroke !== undefined && + path.userData.style.stroke !== 'none' && + path.subPaths.map((_subPath, s) => ( + + + + ))} + + ))} + - - ) -}) + ) + } +) diff --git a/src/core/Text.tsx b/src/core/Text.tsx index 48ef07c21..e7669d13c 100644 --- a/src/core/Text.tsx +++ b/src/core/Text.tsx @@ -39,7 +39,7 @@ type Props = JSX.IntrinsicElements['mesh'] & { } // eslint-disable-next-line prettier/prettier -export const Text: ForwardRefComponent = React.forwardRef( +export const Text: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ( { sdfGlyphSize = 64, diff --git a/src/core/Text3D.tsx b/src/core/Text3D.tsx index 7842e345c..1aa809b9a 100644 --- a/src/core/Text3D.tsx +++ b/src/core/Text3D.tsx @@ -36,7 +36,7 @@ const getTextFromChildren = (children) => { export const Text3D: ForwardRefComponent< React.PropsWithChildren, THREE.Mesh -> = React.forwardRef< +> = /* @__PURE__ */ React.forwardRef< THREE.Mesh, React.PropsWithChildren >( diff --git a/src/core/TrackballControls.tsx b/src/core/TrackballControls.tsx index 6e90351e2..377c30659 100644 --- a/src/core/TrackballControls.tsx +++ b/src/core/TrackballControls.tsx @@ -18,51 +18,54 @@ export type TrackballControlsProps = ReactThreeFiber.Overwrite< } > -export const TrackballControls: ForwardRefComponent = React.forwardRef< - TrackballControlsImpl, - TrackballControlsProps ->(({ makeDefault, camera, domElement, regress, onChange, onStart, onEnd, ...restProps }, ref) => { - const { invalidate, camera: defaultCamera, gl, events, set, get, performance, viewport } = useThree() - const explCamera = camera || defaultCamera - const explDomElement = (domElement || events.connected || gl.domElement) as HTMLElement - const controls = React.useMemo(() => new TrackballControlsImpl(explCamera as THREE.PerspectiveCamera), [explCamera]) +export const TrackballControls: ForwardRefComponent = + /* @__PURE__ */ React.forwardRef( + ({ makeDefault, camera, domElement, regress, onChange, onStart, onEnd, ...restProps }, ref) => { + const { invalidate, camera: defaultCamera, gl, events, set, get, performance, viewport } = useThree() + const explCamera = camera || defaultCamera + const explDomElement = (domElement || events.connected || gl.domElement) as HTMLElement + const controls = React.useMemo( + () => new TrackballControlsImpl(explCamera as THREE.PerspectiveCamera), + [explCamera] + ) - useFrame(() => { - if (controls.enabled) controls.update() - }, -1) + useFrame(() => { + if (controls.enabled) controls.update() + }, -1) - React.useEffect(() => { - controls.connect(explDomElement) - return () => void controls.dispose() - }, [explDomElement, regress, controls, invalidate]) + React.useEffect(() => { + controls.connect(explDomElement) + return () => void controls.dispose() + }, [explDomElement, regress, controls, invalidate]) - React.useEffect(() => { - const callback = (e: THREE.Event) => { - invalidate() - if (regress) performance.regress() - if (onChange) onChange(e) - } - controls.addEventListener('change', callback) - if (onStart) controls.addEventListener('start', onStart) - if (onEnd) controls.addEventListener('end', onEnd) - return () => { - if (onStart) controls.removeEventListener('start', onStart) - if (onEnd) controls.removeEventListener('end', onEnd) - controls.removeEventListener('change', callback) - } - }, [onChange, onStart, onEnd, controls, invalidate]) + React.useEffect(() => { + const callback = (e: THREE.Event) => { + invalidate() + if (regress) performance.regress() + if (onChange) onChange(e) + } + controls.addEventListener('change', callback) + if (onStart) controls.addEventListener('start', onStart) + if (onEnd) controls.addEventListener('end', onEnd) + return () => { + if (onStart) controls.removeEventListener('start', onStart) + if (onEnd) controls.removeEventListener('end', onEnd) + controls.removeEventListener('change', callback) + } + }, [onChange, onStart, onEnd, controls, invalidate]) - React.useEffect(() => { - controls.handleResize() - }, [viewport]) + React.useEffect(() => { + controls.handleResize() + }, [viewport]) - React.useEffect(() => { - if (makeDefault) { - const old = get().controls - set({ controls }) - return () => set({ controls: old }) - } - }, [makeDefault, controls]) + React.useEffect(() => { + if (makeDefault) { + const old = get().controls + set({ controls }) + return () => set({ controls: old }) + } + }, [makeDefault, controls]) - return -}) + return + } + ) diff --git a/src/core/Trail.tsx b/src/core/Trail.tsx index 8b3f178de..a131330cb 100644 --- a/src/core/Trail.tsx +++ b/src/core/Trail.tsx @@ -88,10 +88,10 @@ export function useTrail(target: Object3D, settings: Partial) { export type MeshLineGeometry = THREE.Mesh & MeshLineGeometryImpl -export const Trail: ForwardRefComponent, MeshLineGeometry> = React.forwardRef< - MeshLineGeometry, - React.PropsWithChildren ->((props, forwardRef) => { +export const Trail: ForwardRefComponent< + React.PropsWithChildren, + MeshLineGeometry +> = /* @__PURE__ */ React.forwardRef>((props, forwardRef) => { const { children } = props const { width, length, decay, local, stride, interval } = { ...defaults, diff --git a/src/core/TransformControls.tsx b/src/core/TransformControls.tsx index d44133d70..c1526aa34 100644 --- a/src/core/TransformControls.tsx +++ b/src/core/TransformControls.tsx @@ -34,108 +34,111 @@ export type TransformControlsProps = ReactThreeFiber.Object3DNode = React.forwardRef< - TransformControlsImpl, - TransformControlsProps ->(({ children, domElement, onChange, onMouseDown, onMouseUp, onObjectChange, object, makeDefault, ...props }, ref) => { - const transformOnlyPropNames = [ - 'enabled', - 'axis', - 'mode', - 'translationSnap', - 'rotationSnap', - 'scaleSnap', - 'space', - 'size', - 'showX', - 'showY', - 'showZ', - ] +export const TransformControls: ForwardRefComponent = + /* @__PURE__ */ React.forwardRef( + ( + { children, domElement, onChange, onMouseDown, onMouseUp, onObjectChange, object, makeDefault, ...props }, + ref + ) => { + const transformOnlyPropNames = [ + 'enabled', + 'axis', + 'mode', + 'translationSnap', + 'rotationSnap', + 'scaleSnap', + 'space', + 'size', + 'showX', + 'showY', + 'showZ', + ] - const { camera, ...rest } = props - const transformProps = pick(rest, transformOnlyPropNames) - const objectProps = omit(rest, transformOnlyPropNames) - // @ts-expect-error new in @react-three/fiber@7.0.5 - const defaultControls = useThree((state) => state.controls) as ControlsProto - const gl = useThree((state) => state.gl) - const events = useThree((state) => state.events) - const defaultCamera = useThree((state) => state.camera) - const invalidate = useThree((state) => state.invalidate) - const get = useThree((state) => state.get) - const set = useThree((state) => state.set) - const explCamera = camera || defaultCamera - const explDomElement = (domElement || events.connected || gl.domElement) as HTMLElement - const controls = React.useMemo( - () => new TransformControlsImpl(explCamera, explDomElement), - [explCamera, explDomElement] - ) - const group = React.useRef() + const { camera, ...rest } = props + const transformProps = pick(rest, transformOnlyPropNames) + const objectProps = omit(rest, transformOnlyPropNames) + // @ts-expect-error new in @react-three/fiber@7.0.5 + const defaultControls = useThree((state) => state.controls) as ControlsProto + const gl = useThree((state) => state.gl) + const events = useThree((state) => state.events) + const defaultCamera = useThree((state) => state.camera) + const invalidate = useThree((state) => state.invalidate) + const get = useThree((state) => state.get) + const set = useThree((state) => state.set) + const explCamera = camera || defaultCamera + const explDomElement = (domElement || events.connected || gl.domElement) as HTMLElement + const controls = React.useMemo( + () => new TransformControlsImpl(explCamera, explDomElement), + [explCamera, explDomElement] + ) + const group = React.useRef() - React.useLayoutEffect(() => { - if (object) { - controls.attach(object instanceof THREE.Object3D ? object : object.current) - } else if (group.current instanceof THREE.Object3D) { - controls.attach(group.current) - } + React.useLayoutEffect(() => { + if (object) { + controls.attach(object instanceof THREE.Object3D ? object : object.current) + } else if (group.current instanceof THREE.Object3D) { + controls.attach(group.current) + } - return () => void controls.detach() - }, [object, children, controls]) + return () => void controls.detach() + }, [object, children, controls]) - React.useEffect(() => { - if (defaultControls) { - const callback = (event) => (defaultControls.enabled = !event.value) - controls.addEventListener('dragging-changed', callback) - return () => controls.removeEventListener('dragging-changed', callback) - } - }, [controls, defaultControls]) + React.useEffect(() => { + if (defaultControls) { + const callback = (event) => (defaultControls.enabled = !event.value) + controls.addEventListener('dragging-changed', callback) + return () => controls.removeEventListener('dragging-changed', callback) + } + }, [controls, defaultControls]) - const onChangeRef = React.useRef<(e?: THREE.Event) => void>() - const onMouseDownRef = React.useRef<(e?: THREE.Event) => void>() - const onMouseUpRef = React.useRef<(e?: THREE.Event) => void>() - const onObjectChangeRef = React.useRef<(e?: THREE.Event) => void>() + const onChangeRef = React.useRef<(e?: THREE.Event) => void>() + const onMouseDownRef = React.useRef<(e?: THREE.Event) => void>() + const onMouseUpRef = React.useRef<(e?: THREE.Event) => void>() + const onObjectChangeRef = React.useRef<(e?: THREE.Event) => void>() - React.useLayoutEffect(() => void (onChangeRef.current = onChange), [onChange]) - React.useLayoutEffect(() => void (onMouseDownRef.current = onMouseDown), [onMouseDown]) - React.useLayoutEffect(() => void (onMouseUpRef.current = onMouseUp), [onMouseUp]) - React.useLayoutEffect(() => void (onObjectChangeRef.current = onObjectChange), [onObjectChange]) + React.useLayoutEffect(() => void (onChangeRef.current = onChange), [onChange]) + React.useLayoutEffect(() => void (onMouseDownRef.current = onMouseDown), [onMouseDown]) + React.useLayoutEffect(() => void (onMouseUpRef.current = onMouseUp), [onMouseUp]) + React.useLayoutEffect(() => void (onObjectChangeRef.current = onObjectChange), [onObjectChange]) - React.useEffect(() => { - const onChange = (e: THREE.Event) => { - invalidate() - onChangeRef.current?.(e) - } + React.useEffect(() => { + const onChange = (e: THREE.Event) => { + invalidate() + onChangeRef.current?.(e) + } - const onMouseDown = (e: THREE.Event) => onMouseDownRef.current?.(e) - const onMouseUp = (e: THREE.Event) => onMouseUpRef.current?.(e) - const onObjectChange = (e: THREE.Event) => onObjectChangeRef.current?.(e) + const onMouseDown = (e: THREE.Event) => onMouseDownRef.current?.(e) + const onMouseUp = (e: THREE.Event) => onMouseUpRef.current?.(e) + const onObjectChange = (e: THREE.Event) => onObjectChangeRef.current?.(e) - controls.addEventListener('change', onChange) - controls.addEventListener('mouseDown', onMouseDown) - controls.addEventListener('mouseUp', onMouseUp) - controls.addEventListener('objectChange', onObjectChange) + controls.addEventListener('change', onChange) + controls.addEventListener('mouseDown', onMouseDown) + controls.addEventListener('mouseUp', onMouseUp) + controls.addEventListener('objectChange', onObjectChange) - return () => { - controls.removeEventListener('change', onChange) - controls.removeEventListener('mouseDown', onMouseDown) - controls.removeEventListener('mouseUp', onMouseUp) - controls.removeEventListener('objectChange', onObjectChange) - } - }, [invalidate, controls]) + return () => { + controls.removeEventListener('change', onChange) + controls.removeEventListener('mouseDown', onMouseDown) + controls.removeEventListener('mouseUp', onMouseUp) + controls.removeEventListener('objectChange', onObjectChange) + } + }, [invalidate, controls]) - React.useEffect(() => { - if (makeDefault) { - const old = get().controls - set({ controls }) - return () => set({ controls: old }) - } - }, [makeDefault, controls]) + React.useEffect(() => { + if (makeDefault) { + const old = get().controls + set({ controls }) + return () => set({ controls: old }) + } + }, [makeDefault, controls]) - return controls ? ( - <> - - - {children} - - - ) : null -}) + return controls ? ( + <> + + + {children} + + + ) : null + } + ) diff --git a/src/core/Wireframe.tsx b/src/core/Wireframe.tsx index c51643181..30e011064 100644 --- a/src/core/Wireframe.tsx +++ b/src/core/Wireframe.tsx @@ -1,6 +1,6 @@ import * as React from 'react' import * as THREE from 'three' -import * as FIBER from '@react-three/fiber' +import { MaterialNode, extend } from '@react-three/fiber' import { WireframeMaterial, WireframeMaterialProps, @@ -12,13 +12,11 @@ import { declare global { namespace JSX { interface IntrinsicElements { - meshWireframeMaterial: FIBER.MaterialNode + meshWireframeMaterial: MaterialNode } } } -FIBER.extend({ MeshWireframeMaterial: WireframeMaterial }) - interface WireframeProps { geometry?: THREE.BufferGeometry | React.RefObject simplify?: boolean @@ -120,6 +118,7 @@ function WireframeWithCustomGeo({ simplify = false, ...props }: WireframeProps & WireframeMaterialProps) { + extend({ MeshWireframeMaterial: WireframeMaterial }) const [geometry, setGeometry] = React.useState(null!) React.useLayoutEffect(() => { diff --git a/src/core/meshBounds.tsx b/src/core/meshBounds.tsx index 4e882488a..185d4ecf4 100644 --- a/src/core/meshBounds.tsx +++ b/src/core/meshBounds.tsx @@ -1,9 +1,9 @@ import { Raycaster, Matrix4, Ray, Sphere, Vector3, Intersection } from 'three' -const _inverseMatrix = new Matrix4() -const _ray = new Ray() -const _sphere = new Sphere() -const _vA = new Vector3() +const _inverseMatrix = /* @__PURE__ */ new Matrix4() +const _ray = /* @__PURE__ */ new Ray() +const _sphere = /* @__PURE__ */ new Sphere() +const _vA = /* @__PURE__ */ new Vector3() export function meshBounds(raycaster: Raycaster, intersects: Intersection[]) { const geometry = this.geometry diff --git a/src/core/shapes.tsx b/src/core/shapes.tsx index 0bd8a2ad4..2a1bdb308 100644 --- a/src/core/shapes.tsx +++ b/src/core/shapes.tsx @@ -20,25 +20,25 @@ function create(type: string, effect?: (mesh: THREE.Mesh) => void): ForwardRe }) } -export const Box = create('box') -export const Circle = create('circle') -export const Cone = create('cone') -export const Cylinder = create('cylinder') -export const Sphere = create('sphere') -export const Plane = create('plane') -export const Tube = create('tube') -export const Torus = create('torus') -export const TorusKnot = create('torusKnot') -export const Tetrahedron = create('tetrahedron') -export const Ring = create('ring') -export const Polyhedron = create('polyhedron') -export const Icosahedron = create('icosahedron') -export const Octahedron = create('octahedron') -export const Dodecahedron = create('dodecahedron') -export const Extrude = create('extrude') -export const Lathe = create('lathe') -export const Capsule = create('capsule') -export const Shape = create('shape', ({ geometry }) => { +export const Box = /* @__PURE__ */ create('box') +export const Circle = /* @__PURE__ */ create('circle') +export const Cone = /* @__PURE__ */ create('cone') +export const Cylinder = /* @__PURE__ */ create('cylinder') +export const Sphere = /* @__PURE__ */ create('sphere') +export const Plane = /* @__PURE__ */ create('plane') +export const Tube = /* @__PURE__ */ create('tube') +export const Torus = /* @__PURE__ */ create('torus') +export const TorusKnot = /* @__PURE__ */ create('torusKnot') +export const Tetrahedron = /* @__PURE__ */ create('tetrahedron') +export const Ring = /* @__PURE__ */ create('ring') +export const Polyhedron = /* @__PURE__ */ create('polyhedron') +export const Icosahedron = /* @__PURE__ */ create('icosahedron') +export const Octahedron = /* @__PURE__ */ create('octahedron') +export const Dodecahedron = /* @__PURE__ */ create('dodecahedron') +export const Extrude = /* @__PURE__ */ create('extrude') +export const Lathe = /* @__PURE__ */ create('lathe') +export const Capsule = /* @__PURE__ */ create('capsule') +export const Shape = /* @__PURE__ */ create('shape', ({ geometry }) => { // Calculate UVs (by https://discourse.threejs.org/u/prisoner849) // https://discourse.threejs.org/t/custom-shape-in-image-not-working/49348/10 const pos = geometry.attributes.position as THREE.BufferAttribute diff --git a/src/core/useBVH.tsx b/src/core/useBVH.tsx index d68243201..1e346e698 100644 --- a/src/core/useBVH.tsx +++ b/src/core/useBVH.tsx @@ -56,7 +56,7 @@ export function useBVH(mesh: React.MutableRefObject, options?: }, [mesh, JSON.stringify(options)]) } -export const Bvh: ForwardRefComponent = React.forwardRef( +export const Bvh: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ( { enabled = true, diff --git a/src/core/useProgress.tsx b/src/core/useProgress.tsx index 7868057b2..5713831c4 100644 --- a/src/core/useProgress.tsx +++ b/src/core/useProgress.tsx @@ -11,7 +11,7 @@ type Data = { } let saveLastTotalLoaded = 0 -const useProgress = create((set) => { +const useProgress = /* @__PURE__ */ create((set) => { DefaultLoadingManager.onStart = (item, loaded, total) => { set({ active: true, diff --git a/src/helpers/constants.ts b/src/helpers/constants.ts new file mode 100644 index 000000000..e1889ba63 --- /dev/null +++ b/src/helpers/constants.ts @@ -0,0 +1,5 @@ +import { REVISION } from 'three' + +const getVersion = () => parseInt(REVISION.replace(/\D+/g, '')) + +export const version = /* @__PURE__ */ getVersion() diff --git a/src/materials/ConvolutionMaterial.tsx b/src/materials/ConvolutionMaterial.tsx index 2904c7ad4..525809b62 100644 --- a/src/materials/ConvolutionMaterial.tsx +++ b/src/materials/ConvolutionMaterial.tsx @@ -1,4 +1,5 @@ import * as THREE from 'three' +import { version } from '../helpers/constants' export class ConvolutionMaterial extends THREE.ShaderMaterial { readonly kernel: Float32Array @@ -53,9 +54,7 @@ export class ConvolutionMaterial extends THREE.ShaderMaterial { #include #include - #include <${ - parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment' - }> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }`, vertexShader: `uniform vec2 texelSize; uniform vec2 halfTexelSize; diff --git a/src/materials/DiscardMaterial.tsx b/src/materials/DiscardMaterial.tsx index f94d19b97..909fd5087 100644 --- a/src/materials/DiscardMaterial.tsx +++ b/src/materials/DiscardMaterial.tsx @@ -1,6 +1,6 @@ import { shaderMaterial } from '../core/shaderMaterial' -export const DiscardMaterial = shaderMaterial( +export const DiscardMaterial = /* @__PURE__ */ shaderMaterial( {}, 'void main() { }', 'void main() { gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); discard; }' diff --git a/src/materials/MeshRefractionMaterial.tsx b/src/materials/MeshRefractionMaterial.tsx index ceae1c01f..337190cb4 100644 --- a/src/materials/MeshRefractionMaterial.tsx +++ b/src/materials/MeshRefractionMaterial.tsx @@ -4,8 +4,9 @@ import * as THREE from 'three' import { shaderMaterial } from '../core/shaderMaterial' import { MeshBVHUniformStruct, shaderStructs, shaderIntersectFunction } from 'three-mesh-bvh' +import { version } from '../helpers/constants' -export const MeshRefractionMaterial = shaderMaterial( +export const MeshRefractionMaterial = /* @__PURE__ */ shaderMaterial( { envMap: null, bounces: 3, @@ -13,11 +14,11 @@ export const MeshRefractionMaterial = shaderMaterial( correctMips: true, aberrationStrength: 0.01, fresnel: 0, - bvh: new MeshBVHUniformStruct(), - color: new THREE.Color('white'), - resolution: new THREE.Vector2(), - viewMatrixInverse: new THREE.Matrix4(), - projectionMatrixInverse: new THREE.Matrix4(), + bvh: /* @__PURE__ */ new MeshBVHUniformStruct(), + color: /* @__PURE__ */ new THREE.Color('white'), + resolution: /* @__PURE__ */ new THREE.Vector2(), + viewMatrixInverse: /* @__PURE__ */ new THREE.Matrix4(), + projectionMatrixInverse: /* @__PURE__ */ new THREE.Matrix4(), }, /*glsl*/ ` uniform mat4 viewMatrixInverse; @@ -166,6 +167,6 @@ export const MeshRefractionMaterial = shaderMaterial( float nFresnel = fresnelFunc(viewDirection, normal) * fresnel; gl_FragColor = vec4(mix(finalColor, vec3(1.0), nFresnel), 1.0); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }` ) diff --git a/src/materials/SpotLightMaterial.tsx b/src/materials/SpotLightMaterial.tsx index 2101cc394..e97f02105 100644 --- a/src/materials/SpotLightMaterial.tsx +++ b/src/materials/SpotLightMaterial.tsx @@ -1,4 +1,5 @@ import * as THREE from 'three' +import { version } from '../helpers/constants' export class SpotLightMaterial extends THREE.ShaderMaterial { constructor() { @@ -79,7 +80,7 @@ export class SpotLightMaterial extends THREE.ShaderMaterial { gl_FragColor = vec4(lightColor, intensity * opacity); #include - #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> + #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }`, }) } diff --git a/src/materials/WireframeMaterial.tsx b/src/materials/WireframeMaterial.tsx index 4cd8e14f3..3db27c28c 100644 --- a/src/materials/WireframeMaterial.tsx +++ b/src/materials/WireframeMaterial.tsx @@ -34,9 +34,9 @@ export const WireframeMaterialShaders = { squeeze: false, squeezeMin: 0.2, squeezeMax: 1, - stroke: new THREE.Color('#ff0000'), - backfaceStroke: new THREE.Color('#0000ff'), - fill: new THREE.Color('#00ff00'), + stroke: /* @__PURE__ */ new THREE.Color('#ff0000'), + backfaceStroke: /* @__PURE__ */ new THREE.Color('#0000ff'), + fill: /* @__PURE__ */ new THREE.Color('#00ff00'), }, vertex: /* glsl */ ` attribute vec3 barycentric; @@ -137,7 +137,7 @@ export const WireframeMaterialShaders = { `, } -export const WireframeMaterial = shaderMaterial( +export const WireframeMaterial = /* @__PURE__ */ shaderMaterial( WireframeMaterialShaders.uniforms, WireframeMaterialShaders.vertex + /* glsl */ ` diff --git a/src/web/Html.tsx b/src/web/Html.tsx index b7e6864b8..77d4f3bfc 100644 --- a/src/web/Html.tsx +++ b/src/web/Html.tsx @@ -17,9 +17,9 @@ import { Assign } from 'utility-types' import { MaterialProps, ReactThreeFiber, useFrame, useThree } from '@react-three/fiber' import { ForwardRefComponent } from '../helpers/ts-utils' -const v1 = new Vector3() -const v2 = new Vector3() -const v3 = new Vector3() +const v1 = /* @__PURE__ */ new Vector3() +const v2 = /* @__PURE__ */ new Vector3() +const v3 = /* @__PURE__ */ new Vector3() function defaultCalculatePosition(el: Object3D, camera: Camera, size: { width: number; height: number }) { const objectPos = v1.setFromMatrixPosition(el.matrixWorld) @@ -142,7 +142,7 @@ export interface HtmlProps receiveShadow?: boolean // Receive shadow for occlusion plane } -export const Html: ForwardRefComponent = React.forwardRef( +export const Html: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ( { children, diff --git a/src/web/KeyboardControls.tsx b/src/web/KeyboardControls.tsx index 6a9f1c134..34f3ad2c4 100644 --- a/src/web/KeyboardControls.tsx +++ b/src/web/KeyboardControls.tsx @@ -51,7 +51,7 @@ type KeyboardControlsApi = [ UseBoundStore> ] -const context = /*@__PURE__*/ React.createContext(null!) +const context = /* @__PURE__ */ React.createContext(null!) export function KeyboardControls({ map, children, onChange, domElement }: KeyboardControlsProps) { const key = map.map((item) => item.name + item.keys).join('-') diff --git a/src/web/ScrollControls.tsx b/src/web/ScrollControls.tsx index b292d51b5..b8437665c 100644 --- a/src/web/ScrollControls.tsx +++ b/src/web/ScrollControls.tsx @@ -45,7 +45,7 @@ export type ScrollControlsState = { visible(from: number, distance: number, margin?: number): boolean } -const context = React.createContext(null!) +const context = /* @__PURE__ */ React.createContext(null!) export function useScroll() { return React.useContext(context) @@ -210,7 +210,7 @@ export function ScrollControls({ return {children} } -const ScrollCanvas: ForwardRefComponent<{}, THREE.Group> = React.forwardRef(({ children }, ref) => { +const ScrollCanvas: ForwardRefComponent<{}, THREE.Group> = /* @__PURE__ */ React.forwardRef(({ children }, ref) => { const group = React.useRef(null!) const state = useScroll() const { width, height } = useThree((state) => state.viewport) @@ -256,7 +256,7 @@ type ScrollProps = { children?: React.ReactNode } -export const Scroll: ForwardRefComponent = React.forwardRef( +export const Scroll: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ html, ...props }: ScrollProps, ref) => { const El = html ? ScrollHtml : ScrollCanvas return diff --git a/src/web/Select.tsx b/src/web/Select.tsx index 23bc745be..008ae1a36 100644 --- a/src/web/Select.tsx +++ b/src/web/Select.tsx @@ -4,7 +4,7 @@ import { SelectionBox } from 'three-stdlib' import { useThree } from '@react-three/fiber' import shallow from 'zustand/shallow' -const context = React.createContext([]) +const context = /* @__PURE__ */ React.createContext([]) type Props = JSX.IntrinsicElements['group'] & { /** Allow multi select, default: false */ diff --git a/src/web/View.tsx b/src/web/View.tsx index ca11e5c9f..c8cf6aea0 100644 --- a/src/web/View.tsx +++ b/src/web/View.tsx @@ -4,7 +4,7 @@ import { createPortal, useFrame, useThree } from '@react-three/fiber' const isOrthographicCamera = (def: any): def is THREE.OrthographicCamera => def && (def as THREE.OrthographicCamera).isOrthographicCamera -const col = new THREE.Color() +const col = /* @__PURE__ */ new THREE.Color() /** * In `@react-three/fiber` after `v8.0.0` but prior to `v8.1.0`, `state.size` contained only dimension diff --git a/src/web/pivotControls/AxisArrow.tsx b/src/web/pivotControls/AxisArrow.tsx index fef0bf1bf..b9737bc7c 100644 --- a/src/web/pivotControls/AxisArrow.tsx +++ b/src/web/pivotControls/AxisArrow.tsx @@ -5,8 +5,8 @@ import { Line } from '../../core/Line' import { Html } from '../Html' import { context } from './context' -const vec1 = new THREE.Vector3() -const vec2 = new THREE.Vector3() +const vec1 = /* @__PURE__ */ new THREE.Vector3() +const vec2 = /* @__PURE__ */ new THREE.Vector3() export const calculateOffset = ( clickPoint: THREE.Vector3, @@ -36,8 +36,8 @@ export const calculateOffset = ( return offset } -const upV = new THREE.Vector3(0, 1, 0) -const offsetMatrix = new THREE.Matrix4() +const upV = /* @__PURE__ */ new THREE.Vector3(0, 1, 0) +const offsetMatrix = /* @__PURE__ */ new THREE.Matrix4() export const AxisArrow: React.FC<{ direction: THREE.Vector3; axis: 0 | 1 | 2 }> = ({ direction, axis }) => { const { diff --git a/src/web/pivotControls/AxisRotator.tsx b/src/web/pivotControls/AxisRotator.tsx index 73038d42b..5aba33652 100644 --- a/src/web/pivotControls/AxisRotator.tsx +++ b/src/web/pivotControls/AxisRotator.tsx @@ -6,8 +6,8 @@ import { Html } from '../Html' import clamp from 'lodash.clamp' import { context } from './context' -const clickDir = new THREE.Vector3() -const intersectionDir = new THREE.Vector3() +const clickDir = /* @__PURE__ */ new THREE.Vector3() +const intersectionDir = /* @__PURE__ */ new THREE.Vector3() const toDegrees = (radians: number) => (radians * 180) / Math.PI const toRadians = (degrees: number) => (degrees * Math.PI) / 180 @@ -53,10 +53,10 @@ const minimizeAngle = (angle: number) => { return result } -const rotMatrix = new THREE.Matrix4() -const posNew = new THREE.Vector3() -const ray = new THREE.Ray() -const intersection = new THREE.Vector3() +const rotMatrix = /* @__PURE__ */ new THREE.Matrix4() +const posNew = /* @__PURE__ */ new THREE.Vector3() +const ray = /* @__PURE__ */ new THREE.Ray() +const intersection = /* @__PURE__ */ new THREE.Vector3() export const AxisRotator: React.FC<{ dir1: THREE.Vector3; dir2: THREE.Vector3; axis: 0 | 1 | 2 }> = ({ dir1, diff --git a/src/web/pivotControls/PlaneSlider.tsx b/src/web/pivotControls/PlaneSlider.tsx index 572f827f4..3c483992d 100644 --- a/src/web/pivotControls/PlaneSlider.tsx +++ b/src/web/pivotControls/PlaneSlider.tsx @@ -27,9 +27,9 @@ const decomposeIntoBasis = (e1: THREE.Vector3, e2: THREE.Vector3, offset: THREE. return [x, y] } -const ray = new THREE.Ray() -const intersection = new THREE.Vector3() -const offsetMatrix = new THREE.Matrix4() +const ray = /* @__PURE__ */ new THREE.Ray() +const intersection = /* @__PURE__ */ new THREE.Vector3() +const offsetMatrix = /* @__PURE__ */ new THREE.Matrix4() export const PlaneSlider: React.FC<{ dir1: THREE.Vector3; dir2: THREE.Vector3; axis: 0 | 1 | 2 }> = ({ dir1, diff --git a/src/web/pivotControls/context.ts b/src/web/pivotControls/context.ts index ad36b710c..5b1349624 100644 --- a/src/web/pivotControls/context.ts +++ b/src/web/pivotControls/context.ts @@ -27,4 +27,4 @@ export type PivotContext = { annotationsClass?: string } -export const context = React.createContext(null!) +export const context = /* @__PURE__ */ React.createContext(null!) diff --git a/src/web/pivotControls/index.tsx b/src/web/pivotControls/index.tsx index 305f62a67..f0de05258 100644 --- a/src/web/pivotControls/index.tsx +++ b/src/web/pivotControls/index.tsx @@ -8,9 +8,9 @@ import { AxisRotator } from './AxisRotator' import { context, OnDragStartProps } from './context' import { ForwardRefComponent } from '../../helpers/ts-utils' -const tV0 = new THREE.Vector3() -const tV1 = new THREE.Vector3() -const tV2 = new THREE.Vector3() +const tV0 = /* @__PURE__ */ new THREE.Vector3() +const tV1 = /* @__PURE__ */ new THREE.Vector3() +const tV2 = /* @__PURE__ */ new THREE.Vector3() const getPoint2 = (point3: THREE.Vector3, camera: THREE.Camera, size: Size) => { const widthHalf = size.width / 2 @@ -39,25 +39,25 @@ export const calculateScaleFactor = (point3: THREE.Vector3, radiusPx: number, ca return scale } -const mL0 = new THREE.Matrix4() -const mW0 = new THREE.Matrix4() -const mP = new THREE.Matrix4() -const mPInv = new THREE.Matrix4() -const mW = new THREE.Matrix4() -const mL = new THREE.Matrix4() -const mL0Inv = new THREE.Matrix4() -const mdL = new THREE.Matrix4() +const mL0 = /* @__PURE__ */ new THREE.Matrix4() +const mW0 = /* @__PURE__ */ new THREE.Matrix4() +const mP = /* @__PURE__ */ new THREE.Matrix4() +const mPInv = /* @__PURE__ */ new THREE.Matrix4() +const mW = /* @__PURE__ */ new THREE.Matrix4() +const mL = /* @__PURE__ */ new THREE.Matrix4() +const mL0Inv = /* @__PURE__ */ new THREE.Matrix4() +const mdL = /* @__PURE__ */ new THREE.Matrix4() -const bb = new THREE.Box3() -const bbObj = new THREE.Box3() -const vCenter = new THREE.Vector3() -const vSize = new THREE.Vector3() -const vAnchorOffset = new THREE.Vector3() -const vPosition = new THREE.Vector3() +const bb = /* @__PURE__ */ new THREE.Box3() +const bbObj = /* @__PURE__ */ new THREE.Box3() +const vCenter = /* @__PURE__ */ new THREE.Vector3() +const vSize = /* @__PURE__ */ new THREE.Vector3() +const vAnchorOffset = /* @__PURE__ */ new THREE.Vector3() +const vPosition = /* @__PURE__ */ new THREE.Vector3() -const xDir = new THREE.Vector3(1, 0, 0) -const yDir = new THREE.Vector3(0, 1, 0) -const zDir = new THREE.Vector3(0, 0, 1) +const xDir = /* @__PURE__ */ new THREE.Vector3(1, 0, 0) +const yDir = /* @__PURE__ */ new THREE.Vector3(0, 1, 0) +const zDir = /* @__PURE__ */ new THREE.Vector3(0, 0, 1) type PivotControlsProps = { /** Scale of the gizmo, 1 */ @@ -110,7 +110,7 @@ type PivotControlsProps = { children?: React.ReactNode } -export const PivotControls: ForwardRefComponent = React.forwardRef< +export const PivotControls: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< THREE.Group, PivotControlsProps >( From e409c1805d490913513e8baef39737333901486b Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Tue, 17 Oct 2023 07:29:10 -0500 Subject: [PATCH 042/103] fix: lazy import mediapipe (#1688) --- src/core/FaceControls.tsx | 2 +- src/core/FaceLandmarker.tsx | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/FaceControls.tsx b/src/core/FaceControls.tsx index 93d1ede8e..e672b0da8 100644 --- a/src/core/FaceControls.tsx +++ b/src/core/FaceControls.tsx @@ -15,7 +15,7 @@ import { useContext, } from 'react' import { useFrame, useThree } from '@react-three/fiber' -import { FaceLandmarkerResult } from '@mediapipe/tasks-vision' +import type { FaceLandmarkerResult } from '@mediapipe/tasks-vision' import { easing } from 'maath' import { suspend, clear } from 'suspend-react' diff --git a/src/core/FaceLandmarker.tsx b/src/core/FaceLandmarker.tsx index 18245aa4a..bab5f8fef 100644 --- a/src/core/FaceLandmarker.tsx +++ b/src/core/FaceLandmarker.tsx @@ -1,7 +1,7 @@ /* eslint react-hooks/exhaustive-deps: 1 */ import * as React from 'react' import { createContext, ReactNode, useContext, useEffect } from 'react' -import { FilesetResolver, FaceLandmarker as FaceLandmarkerImpl, FaceLandmarkerOptions } from '@mediapipe/tasks-vision' +import type { FaceLandmarker as FaceLandmarkerImpl, FaceLandmarkerOptions } from '@mediapipe/tasks-vision' import { clear, suspend } from 'suspend-react' const FaceLandmarkerContext = /* @__PURE__ */ createContext({} as FaceLandmarkerImpl | undefined) @@ -34,9 +34,9 @@ export function FaceLandmarker({ const opts = JSON.stringify(options) const faceLandmarker = suspend(async () => { - return await FilesetResolver.forVisionTasks(basePath).then((vision) => - FaceLandmarkerImpl.createFromOptions(vision, options) - ) + const { FilesetResolver, FaceLandmarker } = await import('@mediapipe/tasks-vision') + const vision = await FilesetResolver.forVisionTasks(basePath) + return FaceLandmarker.createFromOptions(vision, options) }, [basePath, opts]) useEffect(() => { From de048b7544634783f838bd71516bbc91836324c9 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Tue, 17 Oct 2023 07:35:42 -0500 Subject: [PATCH 043/103] fix: upgrade deps for tree-shaking (#1689) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 9ae8894f0..c3ac6a74e 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "stats.js": "^0.17.0", "suspend-react": "^0.1.3", "three-mesh-bvh": "^0.6.7", - "three-stdlib": "^2.27.2", + "three-stdlib": "^2.27.3", "troika-three-text": "^0.47.2", "utility-types": "^3.10.0", "uuid": "^9.0.1", diff --git a/yarn.lock b/yarn.lock index 7afaabf1d..7524ff3a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13042,10 +13042,10 @@ three-mesh-bvh@^0.6.7: resolved "https://registry.yarnpkg.com/three-mesh-bvh/-/three-mesh-bvh-0.6.7.tgz#6491876f5bf0c0d67be81a4402f2abdbb2266d76" integrity sha512-RYdjMsH+vZvjLwA+ehI4+ZqTaTehAz4iho2yfL5PdGsIHyxpB78g0iy4Emj8079m/9KBX02TzddkvPSKSruQjg== -three-stdlib@^2.27.2: - version "2.27.2" - resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.27.2.tgz#d9fb6e8341ad93aa12b71bec2b3480528d6e42bf" - integrity sha512-yjHaY4QHRqMi1yGIt5RzWtRFbcCj2YHoCaAY4pldphI5CMf9PoCc9N2UFuVbHqgITQRKnVoCo+OCMU2rIZTXjg== +three-stdlib@^2.27.3: + version "2.27.3" + resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.27.3.tgz#28964e121ecf50d4fcd19203d090f79c8afa9001" + integrity sha512-HA3LDEGnrbahOMGMk4HTfCClr/oKQnwvnvNR2gOMytvHg7nk8SIiABl/qgol2xDVp/Lf7MEbeq5ZjzjajuZxpw== dependencies: "@types/draco3d" "^1.4.0" "@types/offscreencanvas" "^2019.6.4" From 86fac1e330aab288e45b71ffc9c9ea1959a1c6fe Mon Sep 17 00:00:00 2001 From: Cody Bennett <23324155+CodyJasonBennett@users.noreply.github.com> Date: Wed, 18 Oct 2023 13:09:53 -0500 Subject: [PATCH 044/103] fix: update deps for CSB --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c3ac6a74e..9c2943630 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "stats.js": "^0.17.0", "suspend-react": "^0.1.3", "three-mesh-bvh": "^0.6.7", - "three-stdlib": "^2.27.3", + "three-stdlib": "^2.28.0", "troika-three-text": "^0.47.2", "utility-types": "^3.10.0", "uuid": "^9.0.1", From 870d7427eb18f28d255c79b2cf44270c557d2956 Mon Sep 17 00:00:00 2001 From: sean tai <105983513+seantai@users.noreply.github.com> Date: Thu, 19 Oct 2023 16:50:13 +0200 Subject: [PATCH 045/103] docs: fix spelling of castShadow in Stage/README (#1692) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5df55f253..97b25c6c6 100644 --- a/README.md +++ b/README.md @@ -4071,7 +4071,7 @@ For a little more realistic results enable accumulative shadows, which requires ```jsx - + ``` From 59d679c5f204b85a959cf06f3e2e16b467158152 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Mon, 23 Oct 2023 08:07:47 -0500 Subject: [PATCH 046/103] fix: add react-native package key for peer resolution --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 9c2943630..e2a4ab76e 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "main": "index.cjs.js", "module": "index.js", "types": "index.d.ts", + "react-native": "native/index.cjs.js", "sideEffects": false, "commitlint": { "extends": [ From 65a65dc9b73f3a3ec2566d26a6a7f5d68c24d746 Mon Sep 17 00:00:00 2001 From: Nathan Bierema Date: Wed, 25 Oct 2023 05:19:45 -0400 Subject: [PATCH 047/103] fix: remove problematic Object3D generic (#1696) --- src/core/MotionPathControls.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/MotionPathControls.tsx b/src/core/MotionPathControls.tsx index a15283ee9..ef45f2f9b 100644 --- a/src/core/MotionPathControls.tsx +++ b/src/core/MotionPathControls.tsx @@ -33,9 +33,9 @@ type MotionState = { /** The combined curve */ path: THREE.CurvePath /** The focus object */ - focus: React.MutableRefObject> | [x: number, y: number, z: number] | undefined + focus: React.MutableRefObject | [x: number, y: number, z: number] | undefined /** The target object that is moved along the curve */ - object: React.MutableRefObject> + object: React.MutableRefObject /** The 0-1 normalised and damped current goal position along curve */ offset: number /** The current point on the curve */ From 4aa04c93e4e86711f0a5a6777482a92d52988253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Wed, 25 Oct 2023 15:02:23 +0200 Subject: [PATCH 048/103] fix: outlines, changing geometry would break it --- src/core/Outlines.tsx | 76 ++++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 33 deletions(-) diff --git a/src/core/Outlines.tsx b/src/core/Outlines.tsx index 029c6cf2b..0d1cbe667 100644 --- a/src/core/Outlines.tsx +++ b/src/core/Outlines.tsx @@ -94,32 +94,42 @@ export function Outlines({ const { gl } = useThree() const contextSize = gl.getDrawingBufferSize(new THREE.Vector2()) React.useMemo(() => extend({ OutlinesMaterial }), []) + + const oldAngle = React.useRef(0) + const oldGeometry = React.useRef(null!) React.useLayoutEffect(() => { const group = ref.current const parent = group.parent as THREE.Mesh & THREE.SkinnedMesh & THREE.InstancedMesh if (parent && parent.geometry) { - let mesh - if (parent.skeleton) { - mesh = new THREE.SkinnedMesh() - mesh.material = material - mesh.bind(parent.skeleton, parent.bindMatrix) - group.add(mesh) - } else if (parent.isInstancedMesh) { - mesh = new THREE.InstancedMesh(parent.geometry, material, parent.count) - mesh.instanceMatrix = parent.instanceMatrix - group.add(mesh) - } else { - mesh = new THREE.Mesh() - mesh.material = material - group.add(mesh) - } - mesh.geometry = angle ? toCreasedNormals(parent.geometry, angle) : parent.geometry - return () => { - if (angle) mesh.geometry.dispose() - group.remove(mesh) + if (oldAngle.current !== angle || oldGeometry.current !== parent.geometry) { + oldAngle.current = angle + oldGeometry.current = parent.geometry + + // Remove old mesh + let mesh = group.children[0] as any + if (mesh) { + if (angle) mesh.geometry.dispose() + group.remove(mesh) + } + + if (parent.skeleton) { + mesh = new THREE.SkinnedMesh() + mesh.material = material + mesh.bind(parent.skeleton, parent.bindMatrix) + group.add(mesh) + } else if (parent.isInstancedMesh) { + mesh = new THREE.InstancedMesh(parent.geometry, material, parent.count) + mesh.instanceMatrix = parent.instanceMatrix + group.add(mesh) + } else { + mesh = new THREE.Mesh() + mesh.material = material + group.add(mesh) + } + mesh.geometry = angle ? toCreasedNormals(parent.geometry, angle) : parent.geometry } } - }, [angle, (ref.current as any)?.parent?.geometry]) + }) React.useLayoutEffect(() => { const group = ref.current @@ -138,19 +148,19 @@ export function Outlines({ polygonOffsetFactor, }) } - }, [ - angle, - transparent, - thickness, - color, - opacity, - screenspace, - toneMapped, - polygonOffset, - polygonOffsetFactor, - contextSize, - renderOrder, - ]) + }) + + React.useEffect(() => { + return () => { + // Dispose everything on unmount + const group = ref.current + let mesh = group.children[0] as THREE.Mesh + if (mesh) { + if (angle) mesh.geometry.dispose() + group.remove(mesh) + } + } + }, []) return } From 4c75f7d96f9918e3cae01a06079ff28cf739e3e3 Mon Sep 17 00:00:00 2001 From: Michael Dobekidis Date: Sun, 29 Oct 2023 11:37:18 +0200 Subject: [PATCH 049/103] feat(SpriteAnimator) `resetOnEnd` for reset with replay (#1698) --- README.md | 6 ++-- src/core/SpriteAnimator.tsx | 69 ++++++++++++++++++++++++++----------- 2 files changed, 53 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 97b25c6c6..9bc47afb7 100644 --- a/README.md +++ b/README.md @@ -2467,8 +2467,8 @@ type Props = { onLoopEnd?: Function /** Event callback when each frame changes */ onFrame?: Function - /** Control when the animation runs */ - play?: boolean + /** @deprecated Control when the animation runs*/ + play?: boolean /** Control when the animation pauses */ pause?: boolean /** Whether or not the Sprite should flip sides on the x-axis */ @@ -2477,6 +2477,8 @@ type Props = { alphaTest?: number /** Displays the texture on a SpriteGeometry always facing the camera, if set to false, it renders on a PlaneGeometry */ asSprite?: boolean + /** Allows the animation to be paused after it ended so it can be restarted on demand via auto */ + resetOnEnd?: boolean } ``` diff --git a/src/core/SpriteAnimator.tsx b/src/core/SpriteAnimator.tsx index a509e7410..326f2bdd7 100644 --- a/src/core/SpriteAnimator.tsx +++ b/src/core/SpriteAnimator.tsx @@ -23,6 +23,7 @@ export type SpriteAnimatorProps = { position?: Array alphaTest?: number asSprite?: boolean + resetOnEnd?: boolean } & JSX.IntrinsicElements['group'] export const SpriteAnimator: React.FC = ( @@ -47,6 +48,7 @@ export const SpriteAnimator: React.FC = ( alphaTest, children, asSprite, + resetOnEnd, ...props }, fref @@ -66,7 +68,8 @@ export const SpriteAnimator: React.FC = ( const totalFrames = React.useRef(0) const [aspect, setAspect] = React.useState([1, 1, 1]) const flipOffset = flipX ? -1 : 1 - const [displayAsSprite,setDisplayAsSprite] = React.useState(asSprite ?? true) + const [displayAsSprite, setDisplayAsSprite] = React.useState(asSprite ?? true) + const pauseRef = React.useRef(pause) function loadJsonAndTextureAndExecuteCallback( jsonUrl: string, @@ -122,6 +125,12 @@ export const SpriteAnimator: React.FC = ( } }, [pause]) + React.useEffect(() => { + if (autoPlay) { + pauseRef.current = false + } + }, [autoPlay]) + React.useEffect(() => { if (currentFrameName.current !== frameName && frameName) { currentFrame.current = 0 @@ -152,8 +161,8 @@ export const SpriteAnimator: React.FC = ( meta: { version: '1.0', size: { w: width, h: height }, - scale: '1', - }, + scale: '1' + } } if (parseInt(frameWidth.toString(), 10) === frameWidth) { @@ -164,7 +173,7 @@ export const SpriteAnimator: React.FC = ( rotated: false, trimmed: false, spriteSourceSize: { x: 0, y: 0, w: frameWidth, h: frameHeight }, - sourceSize: { w: frameWidth, h: height }, + sourceSize: { w: frameWidth, h: height } }) } } @@ -215,14 +224,20 @@ export const SpriteAnimator: React.FC = ( w: width, h: height, frame: frameData, - sourceSize: { w: sourceWidth, h: sourceHeight }, + sourceSize: { w: sourceWidth, h: sourceHeight } }) } } } - } + return sprites + } else if (frameName) { + const spritesArr: any[] = [] + for (const key in data.frames) { + spritesArr.push(data.frames[key]) + } - return sprites + return spritesArr + } } // modify the sprite material after json is parsed and state updated @@ -230,7 +245,7 @@ export const SpriteAnimator: React.FC = ( if (!spriteData.current) return const { meta: { size: metaInfo }, - frames, + frames } = spriteData.current const { w: frameW, h: frameH } = Array.isArray(frames) @@ -262,7 +277,7 @@ export const SpriteAnimator: React.FC = ( const diff = now - timerOffset.current const { meta: { size: metaInfo }, - frames, + frames } = spriteData.current const { w: frameW, h: frameH } = getFirstItem(frames).sourceSize const spriteFrames = Array.isArray(frames) ? frames : frameName ? frames[frameName] : [] @@ -276,40 +291,54 @@ export const SpriteAnimator: React.FC = ( if (loop) { onLoopEnd?.({ currentFrameName: frameName, - currentFrame: currentFrame.current, + currentFrame: currentFrame.current }) } else { onEnd?.({ currentFrameName: frameName, - currentFrame: currentFrame.current, + currentFrame: currentFrame.current }) - hasEnded.current = true + hasEnded.current = resetOnEnd ? false : true + if (resetOnEnd) { + pauseRef.current = true + //calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames) + } } + if (!loop) return } if (diff <= fpsInterval) return timerOffset.current = now - (diff % fpsInterval) + calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames) + + currentFrame.current += 1 + } + + const calculateFinalPosition = ( + frameW: number, + frameH: number, + metaInfo: { w: number; h: number }, + spriteFrames: { frame: { x: any; y: any }; sourceSize: { w: any; h: any } }[] + ) => { + let finalValX = 0 + let finalValY = 0 calculateAspectRatio(frameW, frameH) const framesH = (metaInfo.w - 1) / frameW const framesV = (metaInfo.h - 1) / frameH const { frame: { x: frameX, y: frameY }, - sourceSize: { w: originalSizeX, h: originalSizeY }, + sourceSize: { w: originalSizeX, h: originalSizeY } } = spriteFrames[currentFrame.current] const frameOffsetX = 1 / framesH const frameOffsetY = 1 / framesV finalValX = - flipOffset > 0 - ? frameOffsetX * (frameX / originalSizeX) - : frameOffsetX * (frameX / originalSizeX) - matRef.current.map.repeat.x + flipOffset > 0 ? frameOffsetX * (frameX / originalSizeX) : frameOffsetX * (frameX / originalSizeX) - matRef.current.map.repeat.x finalValY = Math.abs(1 - frameOffsetY) - frameOffsetY * (frameY / originalSizeY) matRef.current.map.offset.x = finalValX matRef.current.map.offset.y = finalValY - - currentFrame.current += 1 } // *** Warning! It runs on every frame! *** @@ -318,7 +347,7 @@ export const SpriteAnimator: React.FC = ( return } - if (pause) { + if (pauseRef.current) { return } @@ -343,7 +372,7 @@ export const SpriteAnimator: React.FC = ( return ( - {displayAsSprite && ( + {displayAsSprite && ( From 04d35820e8b70c2d972236602bfa6edd97f5f357 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Mon, 30 Oct 2023 05:45:10 -0500 Subject: [PATCH 050/103] fix: update CI --- .prettierrc | 3 ++- src/core/SpriteAnimator.tsx | 54 ++++++++++++++++++------------------- 2 files changed, 28 insertions(+), 29 deletions(-) diff --git a/.prettierrc b/.prettierrc index 8599b1aa9..4c11c7ad4 100644 --- a/.prettierrc +++ b/.prettierrc @@ -4,5 +4,6 @@ "singleQuote": true, "tabWidth": 2, "printWidth": 120, - "useTabs": false + "useTabs": false, + "endOfLine": "auto" } diff --git a/src/core/SpriteAnimator.tsx b/src/core/SpriteAnimator.tsx index 326f2bdd7..8f456df4c 100644 --- a/src/core/SpriteAnimator.tsx +++ b/src/core/SpriteAnimator.tsx @@ -1,5 +1,5 @@ import * as React from 'react' -import { useFrame, useThree, Vector3 } from '@react-three/fiber' +import { useFrame, Vector3 } from '@react-three/fiber' import * as THREE from 'three' export type SpriteAnimatorProps = { @@ -53,7 +53,6 @@ export const SpriteAnimator: React.FC = ( }, fref ) => { - const v = useThree((state) => state.viewport) const spriteData = React.useRef(null) const [isJsonReady, setJsonReady] = React.useState(false) const hasEnded = React.useRef(false) @@ -118,13 +117,6 @@ export const SpriteAnimator: React.FC = ( modifySpritePosition() }, [spriteTexture, flipX]) - React.useEffect(() => { - if (autoPlay === false) { - if (play) { - } - } - }, [pause]) - React.useEffect(() => { if (autoPlay) { pauseRef.current = false @@ -148,7 +140,7 @@ export const SpriteAnimator: React.FC = ( const parseSpriteData = (json: any, _spriteTexture: THREE.Texture): void => { // sprite only case if (json === null) { - if (_spriteTexture && numberOfFrames) { + if (numberOfFrames) { //get size from texture const width = _spriteTexture.image.width const height = _spriteTexture.image.height @@ -161,8 +153,8 @@ export const SpriteAnimator: React.FC = ( meta: { version: '1.0', size: { w: width, h: height }, - scale: '1' - } + scale: '1', + }, } if (parseInt(frameWidth.toString(), 10) === frameWidth) { @@ -173,12 +165,12 @@ export const SpriteAnimator: React.FC = ( rotated: false, trimmed: false, spriteSourceSize: { x: 0, y: 0, w: frameWidth, h: frameHeight }, - sourceSize: { w: frameWidth, h: height } + sourceSize: { w: frameWidth, h: height }, }) } } } - } else if (_spriteTexture) { + } else { spriteData.current = json spriteData.current.frames = Array.isArray(json.frames) ? json.frames : parseFrames() totalFrames.current = Array.isArray(json.frames) ? json.frames.length : Object.keys(json.frames).length @@ -207,7 +199,7 @@ export const SpriteAnimator: React.FC = ( for (let i = 0; i < delimiters.length; i++) { sprites[delimiters[i]] = [] - for (let innerKey in data['frames']) { + for (const innerKey in data['frames']) { const value = data['frames'][innerKey] const frameData = value['frame'] const x = frameData['x'] @@ -217,14 +209,14 @@ export const SpriteAnimator: React.FC = ( const sourceWidth = value['sourceSize']['w'] const sourceHeight = value['sourceSize']['h'] - if (typeof innerKey === 'string' && innerKey.toLowerCase().indexOf(delimiters[i].toLowerCase()) !== -1) { + if (innerKey.toLowerCase().indexOf(delimiters[i].toLowerCase()) !== -1) { sprites[delimiters[i]].push({ x: x, y: y, w: width, h: height, frame: frameData, - sourceSize: { w: sourceWidth, h: sourceHeight } + sourceSize: { w: sourceWidth, h: sourceHeight }, }) } } @@ -245,7 +237,7 @@ export const SpriteAnimator: React.FC = ( if (!spriteData.current) return const { meta: { size: metaInfo }, - frames + frames, } = spriteData.current const { w: frameW, h: frameH } = Array.isArray(frames) @@ -277,13 +269,11 @@ export const SpriteAnimator: React.FC = ( const diff = now - timerOffset.current const { meta: { size: metaInfo }, - frames + frames, } = spriteData.current const { w: frameW, h: frameH } = getFirstItem(frames).sourceSize const spriteFrames = Array.isArray(frames) ? frames : frameName ? frames[frameName] : [] - let finalValX = 0 - let finalValY = 0 const _endFrame = endFrame || spriteFrames.length - 1 if (currentFrame.current > _endFrame) { @@ -291,12 +281,12 @@ export const SpriteAnimator: React.FC = ( if (loop) { onLoopEnd?.({ currentFrameName: frameName, - currentFrame: currentFrame.current + currentFrame: currentFrame.current, }) } else { onEnd?.({ currentFrameName: frameName, - currentFrame: currentFrame.current + currentFrame: currentFrame.current, }) hasEnded.current = resetOnEnd ? false : true if (resetOnEnd) { @@ -329,12 +319,14 @@ export const SpriteAnimator: React.FC = ( const framesV = (metaInfo.h - 1) / frameH const { frame: { x: frameX, y: frameY }, - sourceSize: { w: originalSizeX, h: originalSizeY } + sourceSize: { w: originalSizeX, h: originalSizeY }, } = spriteFrames[currentFrame.current] const frameOffsetX = 1 / framesH const frameOffsetY = 1 / framesV finalValX = - flipOffset > 0 ? frameOffsetX * (frameX / originalSizeX) : frameOffsetX * (frameX / originalSizeX) - matRef.current.map.repeat.x + flipOffset > 0 + ? frameOffsetX * (frameX / originalSizeX) + : frameOffsetX * (frameX / originalSizeX) - matRef.current.map.repeat.x finalValY = Math.abs(1 - frameOffsetY) - frameOffsetY * (frameY / originalSizeY) matRef.current.map.offset.x = finalValX @@ -342,7 +334,7 @@ export const SpriteAnimator: React.FC = ( } // *** Warning! It runs on every frame! *** - useFrame((state, delta) => { + useFrame((_state, _delta) => { if (!spriteData.current?.frames || !matRef.current?.map) { return } @@ -370,11 +362,17 @@ export const SpriteAnimator: React.FC = ( } return ( - + {displayAsSprite && ( - + )} {!displayAsSprite && ( From db1b93f0274a7ab473594ef67389201cd5b913c5 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Mon, 30 Oct 2023 06:00:27 -0500 Subject: [PATCH 051/103] fix: forward SpriteAnimator --- src/core/SpriteAnimator.tsx | 658 ++++++++++++++++++------------------ 1 file changed, 330 insertions(+), 328 deletions(-) diff --git a/src/core/SpriteAnimator.tsx b/src/core/SpriteAnimator.tsx index 8f456df4c..d56aaae46 100644 --- a/src/core/SpriteAnimator.tsx +++ b/src/core/SpriteAnimator.tsx @@ -26,370 +26,372 @@ export type SpriteAnimatorProps = { resetOnEnd?: boolean } & JSX.IntrinsicElements['group'] -export const SpriteAnimator: React.FC = ( - { - startFrame, - endFrame, - fps, - frameName, - textureDataURL, - textureImageURL, - loop, - numberOfFrames, - autoPlay, - animationNames, - onStart, - onEnd, - onLoopEnd, - onFrame, - play, - pause, - flipX, - alphaTest, - children, - asSprite, - resetOnEnd, - ...props - }, - fref -) => { - const spriteData = React.useRef(null) - const [isJsonReady, setJsonReady] = React.useState(false) - const hasEnded = React.useRef(false) - const matRef = React.useRef() - const spriteRef = React.useRef() - const timerOffset = React.useRef(window.performance.now()) - const textureData = React.useRef() - const currentFrame = React.useRef(startFrame || 0) - const currentFrameName = React.useRef(frameName || '') - const fpsInterval = 1000 / (fps || 30) - const [spriteTexture, setSpriteTexture] = React.useState(new THREE.Texture()) - const totalFrames = React.useRef(0) - const [aspect, setAspect] = React.useState([1, 1, 1]) - const flipOffset = flipX ? -1 : 1 - const [displayAsSprite, setDisplayAsSprite] = React.useState(asSprite ?? true) - const pauseRef = React.useRef(pause) - - function loadJsonAndTextureAndExecuteCallback( - jsonUrl: string, - textureUrl: string, - callback: (json: any, texture: THREE.Texture) => void - ): void { - const textureLoader = new THREE.TextureLoader() - const jsonPromise = fetch(jsonUrl).then((response) => response.json()) - const texturePromise = new Promise((resolve) => { - textureLoader.load(textureUrl, resolve) - }) - - Promise.all([jsonPromise, texturePromise]).then((response) => { - callback(response[0], response[1]) - }) - } - - const calculateAspectRatio = (width: number, height: number): Vector3 => { - const aspectRatio = height / width - if (spriteRef.current) { - spriteRef.current.scale.set(1, aspectRatio, 1) - } - return [1, aspectRatio, 1] - } - - // initial loads - React.useEffect(() => { - if (textureDataURL && textureImageURL) { - loadJsonAndTextureAndExecuteCallback(textureDataURL, textureImageURL, parseSpriteData) - } else if (textureImageURL) { - // only load the texture, this is an image sprite only +export const SpriteAnimator: React.FC = /* @__PURE__ */ React.forwardRef( + ( + { + startFrame, + endFrame, + fps, + frameName, + textureDataURL, + textureImageURL, + loop, + numberOfFrames, + autoPlay, + animationNames, + onStart, + onEnd, + onLoopEnd, + onFrame, + play, + pause, + flipX, + alphaTest, + children, + asSprite, + resetOnEnd, + ...props + }, + fref + ) => { + const spriteData = React.useRef(null) + const [isJsonReady, setJsonReady] = React.useState(false) + const hasEnded = React.useRef(false) + const matRef = React.useRef() + const spriteRef = React.useRef() + const timerOffset = React.useRef(window.performance.now()) + const textureData = React.useRef() + const currentFrame = React.useRef(startFrame || 0) + const currentFrameName = React.useRef(frameName || '') + const fpsInterval = 1000 / (fps || 30) + const [spriteTexture, setSpriteTexture] = React.useState(new THREE.Texture()) + const totalFrames = React.useRef(0) + const [aspect, setAspect] = React.useState([1, 1, 1]) + const flipOffset = flipX ? -1 : 1 + const [displayAsSprite, setDisplayAsSprite] = React.useState(asSprite ?? true) + const pauseRef = React.useRef(pause) + + function loadJsonAndTextureAndExecuteCallback( + jsonUrl: string, + textureUrl: string, + callback: (json: any, texture: THREE.Texture) => void + ): void { const textureLoader = new THREE.TextureLoader() - new Promise((resolve) => { - textureLoader.load(textureImageURL, resolve) - }).then((texture) => { - parseSpriteData(null, texture) + const jsonPromise = fetch(jsonUrl).then((response) => response.json()) + const texturePromise = new Promise((resolve) => { + textureLoader.load(textureUrl, resolve) + }) + + Promise.all([jsonPromise, texturePromise]).then((response) => { + callback(response[0], response[1]) }) } - }, []) - React.useEffect(() => { - setDisplayAsSprite(asSprite ?? true) - }, [asSprite]) + const calculateAspectRatio = (width: number, height: number): Vector3 => { + const aspectRatio = height / width + if (spriteRef.current) { + spriteRef.current.scale.set(1, aspectRatio, 1) + } + return [1, aspectRatio, 1] + } - React.useLayoutEffect(() => { - modifySpritePosition() - }, [spriteTexture, flipX]) + // initial loads + React.useEffect(() => { + if (textureDataURL && textureImageURL) { + loadJsonAndTextureAndExecuteCallback(textureDataURL, textureImageURL, parseSpriteData) + } else if (textureImageURL) { + // only load the texture, this is an image sprite only + const textureLoader = new THREE.TextureLoader() + new Promise((resolve) => { + textureLoader.load(textureImageURL, resolve) + }).then((texture) => { + parseSpriteData(null, texture) + }) + } + }, []) - React.useEffect(() => { - if (autoPlay) { - pauseRef.current = false - } - }, [autoPlay]) + React.useEffect(() => { + setDisplayAsSprite(asSprite ?? true) + }, [asSprite]) - React.useEffect(() => { - if (currentFrameName.current !== frameName && frameName) { - currentFrame.current = 0 - currentFrameName.current = frameName - hasEnded.current = false + React.useLayoutEffect(() => { modifySpritePosition() - if (spriteData.current) { - const { w, h } = getFirstItem(spriteData.current.frames).sourceSize - const _aspect = calculateAspectRatio(w, h) - setAspect(_aspect) + }, [spriteTexture, flipX]) + + React.useEffect(() => { + if (autoPlay) { + pauseRef.current = false } - } - }, [frameName]) - - const parseSpriteData = (json: any, _spriteTexture: THREE.Texture): void => { - // sprite only case - if (json === null) { - if (numberOfFrames) { - //get size from texture - const width = _spriteTexture.image.width - const height = _spriteTexture.image.height - const frameWidth = width / numberOfFrames - const frameHeight = height - textureData.current = _spriteTexture - totalFrames.current = numberOfFrames - spriteData.current = { - frames: [], - meta: { - version: '1.0', - size: { w: width, h: height }, - scale: '1', - }, + }, [autoPlay]) + + React.useEffect(() => { + if (currentFrameName.current !== frameName && frameName) { + currentFrame.current = 0 + currentFrameName.current = frameName + hasEnded.current = false + modifySpritePosition() + if (spriteData.current) { + const { w, h } = getFirstItem(spriteData.current.frames).sourceSize + const _aspect = calculateAspectRatio(w, h) + setAspect(_aspect) } + } + }, [frameName]) + + const parseSpriteData = (json: any, _spriteTexture: THREE.Texture): void => { + // sprite only case + if (json === null) { + if (numberOfFrames) { + //get size from texture + const width = _spriteTexture.image.width + const height = _spriteTexture.image.height + const frameWidth = width / numberOfFrames + const frameHeight = height + textureData.current = _spriteTexture + totalFrames.current = numberOfFrames + spriteData.current = { + frames: [], + meta: { + version: '1.0', + size: { w: width, h: height }, + scale: '1', + }, + } - if (parseInt(frameWidth.toString(), 10) === frameWidth) { - // if it fits - for (let i = 0; i < numberOfFrames; i++) { - spriteData.current.frames.push({ - frame: { x: i * frameWidth, y: 0, w: frameWidth, h: frameHeight }, - rotated: false, - trimmed: false, - spriteSourceSize: { x: 0, y: 0, w: frameWidth, h: frameHeight }, - sourceSize: { w: frameWidth, h: height }, - }) + if (parseInt(frameWidth.toString(), 10) === frameWidth) { + // if it fits + for (let i = 0; i < numberOfFrames; i++) { + spriteData.current.frames.push({ + frame: { x: i * frameWidth, y: 0, w: frameWidth, h: frameHeight }, + rotated: false, + trimmed: false, + spriteSourceSize: { x: 0, y: 0, w: frameWidth, h: frameHeight }, + sourceSize: { w: frameWidth, h: height }, + }) + } } } + } else { + spriteData.current = json + spriteData.current.frames = Array.isArray(json.frames) ? json.frames : parseFrames() + totalFrames.current = Array.isArray(json.frames) ? json.frames.length : Object.keys(json.frames).length + textureData.current = _spriteTexture + + const { w, h } = getFirstItem(json.frames).sourceSize + const aspect = calculateAspectRatio(w, h) + + setAspect(aspect) + if (matRef.current) { + matRef.current.map = _spriteTexture + } } - } else { - spriteData.current = json - spriteData.current.frames = Array.isArray(json.frames) ? json.frames : parseFrames() - totalFrames.current = Array.isArray(json.frames) ? json.frames.length : Object.keys(json.frames).length - textureData.current = _spriteTexture - - const { w, h } = getFirstItem(json.frames).sourceSize - const aspect = calculateAspectRatio(w, h) - - setAspect(aspect) - if (matRef.current) { - matRef.current.map = _spriteTexture - } - } - _spriteTexture.premultiplyAlpha = false + _spriteTexture.premultiplyAlpha = false - setSpriteTexture(_spriteTexture) - } + setSpriteTexture(_spriteTexture) + } - // for frame based JSON Hash sprite data - const parseFrames = (): any => { - const sprites: any = {} - const data = spriteData.current - const delimiters = animationNames - if (delimiters) { - for (let i = 0; i < delimiters.length; i++) { - sprites[delimiters[i]] = [] - - for (const innerKey in data['frames']) { - const value = data['frames'][innerKey] - const frameData = value['frame'] - const x = frameData['x'] - const y = frameData['y'] - const width = frameData['w'] - const height = frameData['h'] - const sourceWidth = value['sourceSize']['w'] - const sourceHeight = value['sourceSize']['h'] - - if (innerKey.toLowerCase().indexOf(delimiters[i].toLowerCase()) !== -1) { - sprites[delimiters[i]].push({ - x: x, - y: y, - w: width, - h: height, - frame: frameData, - sourceSize: { w: sourceWidth, h: sourceHeight }, - }) + // for frame based JSON Hash sprite data + const parseFrames = (): any => { + const sprites: any = {} + const data = spriteData.current + const delimiters = animationNames + if (delimiters) { + for (let i = 0; i < delimiters.length; i++) { + sprites[delimiters[i]] = [] + + for (const innerKey in data['frames']) { + const value = data['frames'][innerKey] + const frameData = value['frame'] + const x = frameData['x'] + const y = frameData['y'] + const width = frameData['w'] + const height = frameData['h'] + const sourceWidth = value['sourceSize']['w'] + const sourceHeight = value['sourceSize']['h'] + + if (innerKey.toLowerCase().indexOf(delimiters[i].toLowerCase()) !== -1) { + sprites[delimiters[i]].push({ + x: x, + y: y, + w: width, + h: height, + frame: frameData, + sourceSize: { w: sourceWidth, h: sourceHeight }, + }) + } } } - } - return sprites - } else if (frameName) { - const spritesArr: any[] = [] - for (const key in data.frames) { - spritesArr.push(data.frames[key]) - } + return sprites + } else if (frameName) { + const spritesArr: any[] = [] + for (const key in data.frames) { + spritesArr.push(data.frames[key]) + } - return spritesArr + return spritesArr + } } - } - // modify the sprite material after json is parsed and state updated - const modifySpritePosition = (): void => { - if (!spriteData.current) return - const { - meta: { size: metaInfo }, - frames, - } = spriteData.current - - const { w: frameW, h: frameH } = Array.isArray(frames) - ? frames[0].sourceSize - : frameName - ? frames[frameName] - ? frames[frameName][0].sourceSize + // modify the sprite material after json is parsed and state updated + const modifySpritePosition = (): void => { + if (!spriteData.current) return + const { + meta: { size: metaInfo }, + frames, + } = spriteData.current + + const { w: frameW, h: frameH } = Array.isArray(frames) + ? frames[0].sourceSize + : frameName + ? frames[frameName] + ? frames[frameName][0].sourceSize + : { w: 0, h: 0 } : { w: 0, h: 0 } - : { w: 0, h: 0 } - matRef.current.map.wrapS = matRef.current.map.wrapT = THREE.RepeatWrapping - matRef.current.map.center.set(0, 0) - matRef.current.map.repeat.set((1 * flipOffset) / (metaInfo.w / frameW), 1 / (metaInfo.h / frameH)) + matRef.current.map.wrapS = matRef.current.map.wrapT = THREE.RepeatWrapping + matRef.current.map.center.set(0, 0) + matRef.current.map.repeat.set((1 * flipOffset) / (metaInfo.w / frameW), 1 / (metaInfo.h / frameH)) - //const framesH = (metaInfo.w - 1) / frameW - const framesV = (metaInfo.h - 1) / frameH - const frameOffsetY = 1 / framesV - matRef.current.map.offset.x = 0.0 //-matRef.current.map.repeat.x - matRef.current.map.offset.y = 1 - frameOffsetY + //const framesH = (metaInfo.w - 1) / frameW + const framesV = (metaInfo.h - 1) / frameH + const frameOffsetY = 1 / framesV + matRef.current.map.offset.x = 0.0 //-matRef.current.map.repeat.x + matRef.current.map.offset.y = 1 - frameOffsetY - setJsonReady(true) - if (onStart) onStart({ currentFrameName: frameName, currentFrame: currentFrame.current }) - } + setJsonReady(true) + if (onStart) onStart({ currentFrameName: frameName, currentFrame: currentFrame.current }) + } - // run the animation on each frame - const runAnimation = (): void => { - //if (!frameName) return - const now = window.performance.now() - const diff = now - timerOffset.current - const { - meta: { size: metaInfo }, - frames, - } = spriteData.current - const { w: frameW, h: frameH } = getFirstItem(frames).sourceSize - const spriteFrames = Array.isArray(frames) ? frames : frameName ? frames[frameName] : [] - - const _endFrame = endFrame || spriteFrames.length - 1 - - if (currentFrame.current > _endFrame) { - currentFrame.current = loop ? startFrame ?? 0 : 0 - if (loop) { - onLoopEnd?.({ - currentFrameName: frameName, - currentFrame: currentFrame.current, - }) - } else { - onEnd?.({ - currentFrameName: frameName, - currentFrame: currentFrame.current, - }) - hasEnded.current = resetOnEnd ? false : true - if (resetOnEnd) { - pauseRef.current = true - //calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames) + // run the animation on each frame + const runAnimation = (): void => { + //if (!frameName) return + const now = window.performance.now() + const diff = now - timerOffset.current + const { + meta: { size: metaInfo }, + frames, + } = spriteData.current + const { w: frameW, h: frameH } = getFirstItem(frames).sourceSize + const spriteFrames = Array.isArray(frames) ? frames : frameName ? frames[frameName] : [] + + const _endFrame = endFrame || spriteFrames.length - 1 + + if (currentFrame.current > _endFrame) { + currentFrame.current = loop ? startFrame ?? 0 : 0 + if (loop) { + onLoopEnd?.({ + currentFrameName: frameName, + currentFrame: currentFrame.current, + }) + } else { + onEnd?.({ + currentFrameName: frameName, + currentFrame: currentFrame.current, + }) + hasEnded.current = resetOnEnd ? false : true + if (resetOnEnd) { + pauseRef.current = true + //calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames) + } } + + if (!loop) return } - if (!loop) return - } + if (diff <= fpsInterval) return + timerOffset.current = now - (diff % fpsInterval) - if (diff <= fpsInterval) return - timerOffset.current = now - (diff % fpsInterval) + calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames) - calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames) + currentFrame.current += 1 + } - currentFrame.current += 1 - } + const calculateFinalPosition = ( + frameW: number, + frameH: number, + metaInfo: { w: number; h: number }, + spriteFrames: { frame: { x: any; y: any }; sourceSize: { w: any; h: any } }[] + ) => { + let finalValX = 0 + let finalValY = 0 + calculateAspectRatio(frameW, frameH) + const framesH = (metaInfo.w - 1) / frameW + const framesV = (metaInfo.h - 1) / frameH + const { + frame: { x: frameX, y: frameY }, + sourceSize: { w: originalSizeX, h: originalSizeY }, + } = spriteFrames[currentFrame.current] + const frameOffsetX = 1 / framesH + const frameOffsetY = 1 / framesV + finalValX = + flipOffset > 0 + ? frameOffsetX * (frameX / originalSizeX) + : frameOffsetX * (frameX / originalSizeX) - matRef.current.map.repeat.x + finalValY = Math.abs(1 - frameOffsetY) - frameOffsetY * (frameY / originalSizeY) + + matRef.current.map.offset.x = finalValX + matRef.current.map.offset.y = finalValY + } - const calculateFinalPosition = ( - frameW: number, - frameH: number, - metaInfo: { w: number; h: number }, - spriteFrames: { frame: { x: any; y: any }; sourceSize: { w: any; h: any } }[] - ) => { - let finalValX = 0 - let finalValY = 0 - calculateAspectRatio(frameW, frameH) - const framesH = (metaInfo.w - 1) / frameW - const framesV = (metaInfo.h - 1) / frameH - const { - frame: { x: frameX, y: frameY }, - sourceSize: { w: originalSizeX, h: originalSizeY }, - } = spriteFrames[currentFrame.current] - const frameOffsetX = 1 / framesH - const frameOffsetY = 1 / framesV - finalValX = - flipOffset > 0 - ? frameOffsetX * (frameX / originalSizeX) - : frameOffsetX * (frameX / originalSizeX) - matRef.current.map.repeat.x - finalValY = Math.abs(1 - frameOffsetY) - frameOffsetY * (frameY / originalSizeY) - - matRef.current.map.offset.x = finalValX - matRef.current.map.offset.y = finalValY - } + // *** Warning! It runs on every frame! *** + useFrame((_state, _delta) => { + if (!spriteData.current?.frames || !matRef.current?.map) { + return + } - // *** Warning! It runs on every frame! *** - useFrame((_state, _delta) => { - if (!spriteData.current?.frames || !matRef.current?.map) { - return - } + if (pauseRef.current) { + return + } - if (pauseRef.current) { - return - } + if (!hasEnded.current && (autoPlay || play)) { + runAnimation() + onFrame && onFrame({ currentFrameName: currentFrameName.current, currentFrame: currentFrame.current }) + } + }) - if (!hasEnded.current && (autoPlay || play)) { - runAnimation() - onFrame && onFrame({ currentFrameName: currentFrameName.current, currentFrame: currentFrame.current }) - } - }) - - // utils - const getFirstItem = (param: any): any => { - if (Array.isArray(param)) { - return param[0] - } else if (typeof param === 'object' && param !== null) { - const keys = Object.keys(param) - return frameName ? param[frameName][0] : param[keys[0]][0] - } else { - return { w: 0, h: 0 } + // utils + const getFirstItem = (param: any): any => { + if (Array.isArray(param)) { + return param[0] + } else if (typeof param === 'object' && param !== null) { + const keys = Object.keys(param) + return frameName ? param[frameName][0] : param[keys[0]][0] + } else { + return { w: 0, h: 0 } + } } - } - return ( - - - {displayAsSprite && ( - - - - )} - {!displayAsSprite && ( - - - - - )} - - {children} - - ) -} + return ( + + + {displayAsSprite && ( + + + + )} + {!displayAsSprite && ( + + + + + )} + + {children} + + ) + } +) From 7335645e4c8f76fccfba4bf9f8ca464715315ae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Tue, 31 Oct 2023 14:18:27 +0100 Subject: [PATCH 052/103] fix: tonemapping issues with latest three and meshportalmaterial --- src/core/MeshPortalMaterial.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/MeshPortalMaterial.tsx b/src/core/MeshPortalMaterial.tsx index 5ec7aa20a..12f3806e5 100644 --- a/src/core/MeshPortalMaterial.tsx +++ b/src/core/MeshPortalMaterial.tsx @@ -185,7 +185,6 @@ export const MeshPortalMaterial = /* @__PURE__ */ React.forwardRef( blur={blur} blend={0} resolution={[size.width * viewport.dpr, size.height * viewport.dpr]} - toneMapped={false} attach="material" {...props} > @@ -262,6 +261,7 @@ function ManagePortalScene({ vec4 ta = texture2D(a, vUv); vec4 tb = texture2D(b, vUv); gl_FragColor = mix(tb, ta, blend); + #include #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> }`, }) From 1169c02fcfd1151fa08effb4ca7215f91b140f53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Thu, 2 Nov 2023 09:35:40 +0100 Subject: [PATCH 053/103] fix: cloud opacity --- src/core/Cloud.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/Cloud.tsx b/src/core/Cloud.tsx index c71c3dd39..46f1d38ad 100644 --- a/src/core/Cloud.tsx +++ b/src/core/Cloud.tsx @@ -117,8 +117,8 @@ export const Clouds = /* @__PURE__ */ React.forwardRef( `varying float vOpacity; ` + shader.fragmentShader.replace( - '#include ', - `#include + '#include ', + `#include gl_FragColor = vec4(outgoingLight, diffuseColor.a * vOpacity); ` ) From 5846a4ec585f29304946d4bb4dcdc9bc904a629e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Thu, 9 Nov 2023 15:10:57 +0100 Subject: [PATCH 054/103] fix: 1711 --- src/core/Cloud.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/core/Cloud.tsx b/src/core/Cloud.tsx index 46f1d38ad..8b42b52c7 100644 --- a/src/core/Cloud.tsx +++ b/src/core/Cloud.tsx @@ -1,5 +1,6 @@ import * as React from 'react' import { + REVISION, DynamicDrawUsage, Color, Group, @@ -102,6 +103,7 @@ export const Clouds = /* @__PURE__ */ React.forwardRef( return class extends (material as typeof Material) { constructor() { super() + const opaque_fragment = parseInt(REVISION.replace(/\D+/g, '')) >= 154 ? 'opaque_fragment' : 'output_fragment' this.onBeforeCompile = (shader) => { shader.vertexShader = `attribute float opacity; @@ -117,8 +119,8 @@ export const Clouds = /* @__PURE__ */ React.forwardRef( `varying float vOpacity; ` + shader.fragmentShader.replace( - '#include ', - `#include + `#include <${opaque_fragment}>`, + `#include <${opaque_fragment}> gl_FragColor = vec4(outgoingLight, diffuseColor.a * vOpacity); ` ) From 7bf7bf6fa25ec617839e6fdb10873e424ec844e4 Mon Sep 17 00:00:00 2001 From: Ethan Crann Date: Fri, 10 Nov 2023 00:42:39 -0330 Subject: [PATCH 055/103] fix: Changed addEventListener to removeEventListener on unmount (#1703) --- src/core/PointerLockControls.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/PointerLockControls.tsx b/src/core/PointerLockControls.tsx index 5666c76d9..a34e5c110 100644 --- a/src/core/PointerLockControls.tsx +++ b/src/core/PointerLockControls.tsx @@ -73,8 +73,8 @@ export const PointerLockControls: ForwardRefComponent { controls.removeEventListener('change', callback) - if (onLock) controls.addEventListener('lock', onLock) - if (onUnlock) controls.addEventListener('unlock', onUnlock) + if (onLock) controls.removeEventListener('lock', onLock) + if (onUnlock) controls.removeEventListener('unlock', onUnlock) elements.forEach((element) => (element ? element.removeEventListener('click', handler) : undefined)) } }, [onChange, onLock, onUnlock, selector, controls, invalidate]) From 3a3e3ec9c5292144df8e12ec3759af46ffdca74a Mon Sep 17 00:00:00 2001 From: David Reed Date: Thu, 9 Nov 2023 23:13:31 -0500 Subject: [PATCH 056/103] fix: add material parameters to `SegmentsProps` (#1708) --- README.md | 9 +++++++-- src/core/Segments.tsx | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9bc47afb7..beac45e5b 100644 --- a/README.md +++ b/README.md @@ -2468,7 +2468,7 @@ type Props = { /** Event callback when each frame changes */ onFrame?: Function /** @deprecated Control when the animation runs*/ - play?: boolean + play?: boolean /** Control when the animation pauses */ pause?: boolean /** Whether or not the Sprite should flip sides on the x-axis */ @@ -3234,7 +3234,12 @@ A wrapper around [THREE.LineSegments](https://threejs.org/docs/#api/en/objects/L ##### Prop based: ```jsx - + diff --git a/src/core/Segments.tsx b/src/core/Segments.tsx index ba16ed7c9..1cea63267 100644 --- a/src/core/Segments.tsx +++ b/src/core/Segments.tsx @@ -2,10 +2,10 @@ import * as THREE from 'three' import * as React from 'react' import mergeRefs from 'react-merge-refs' import { extend, useFrame, ReactThreeFiber } from '@react-three/fiber' -import { Line2, LineSegmentsGeometry, LineMaterial } from 'three-stdlib' +import { Line2, LineSegmentsGeometry, LineMaterial, LineMaterialParameters } from 'three-stdlib' import { ForwardRefComponent } from '../helpers/ts-utils' -type SegmentsProps = { +type SegmentsProps = LineMaterialParameters & { limit?: number lineWidth?: number children: React.ReactNode From 6591c01019b67ad0f11c0486a2d429fca48eb352 Mon Sep 17 00:00:00 2001 From: Nathan Bierema Date: Tue, 14 Nov 2023 12:00:11 -0500 Subject: [PATCH 057/103] fix(types): update @mediapipe/tasks-vision (#1716) --- package.json | 2 +- src/core/FaceLandmarker.tsx | 2 +- yarn.lock | 16 ++++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index e2a4ab76e..3509b38c6 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ }, "dependencies": { "@babel/runtime": "^7.11.2", - "@mediapipe/tasks-vision": "0.10.2", + "@mediapipe/tasks-vision": "0.10.8", "@react-spring/three": "~9.6.1", "@use-gesture/react": "^10.2.24", "camera-controls": "^2.4.2", diff --git a/src/core/FaceLandmarker.tsx b/src/core/FaceLandmarker.tsx index bab5f8fef..1300be983 100644 --- a/src/core/FaceLandmarker.tsx +++ b/src/core/FaceLandmarker.tsx @@ -13,7 +13,7 @@ type FaceLandmarkerProps = { } export const FaceLandmarkerDefaults = { - basePath: 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.2/wasm', + basePath: 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.8/wasm', options: { baseOptions: { modelAssetPath: diff --git a/yarn.lock b/yarn.lock index 7524ff3a5..b9efbeffe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1875,10 +1875,10 @@ "@types/mdx" "^2.0.0" "@types/react" ">=16" -"@mediapipe/tasks-vision@0.10.2": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@mediapipe/tasks-vision/-/tasks-vision-0.10.2.tgz#eae193cf4a5c57baf2b235decde288b5152ee433" - integrity sha512-d8Q9uRK89ZRWmED2JLI9/blpJcfdbh0iEUuMo8TgkMzNfQBY1/GC0FEJWrairTwHkxIf6Oud1vFBP+aHicWqJA== +"@mediapipe/tasks-vision@0.10.8": + version "0.10.8" + resolved "https://registry.yarnpkg.com/@mediapipe/tasks-vision/-/tasks-vision-0.10.8.tgz#a78e137018a19933b7a1d0e887d553d4ab833d10" + integrity sha512-Rp7ll8BHrKB3wXaRFKhrltwZl1CiXGdibPxuWXvqGnKTnv8fqa/nvftYNuSbf+pbJWKYCXdBtYTITdAUTGGh0Q== "@ndelangen/get-tarball@^3.0.7": version "3.0.9" @@ -13042,10 +13042,10 @@ three-mesh-bvh@^0.6.7: resolved "https://registry.yarnpkg.com/three-mesh-bvh/-/three-mesh-bvh-0.6.7.tgz#6491876f5bf0c0d67be81a4402f2abdbb2266d76" integrity sha512-RYdjMsH+vZvjLwA+ehI4+ZqTaTehAz4iho2yfL5PdGsIHyxpB78g0iy4Emj8079m/9KBX02TzddkvPSKSruQjg== -three-stdlib@^2.27.3: - version "2.27.3" - resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.27.3.tgz#28964e121ecf50d4fcd19203d090f79c8afa9001" - integrity sha512-HA3LDEGnrbahOMGMk4HTfCClr/oKQnwvnvNR2gOMytvHg7nk8SIiABl/qgol2xDVp/Lf7MEbeq5ZjzjajuZxpw== +three-stdlib@^2.28.0: + version "2.28.5" + resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.28.5.tgz#8184f5bacc90c2eec6ed36a861224e18799226fd" + integrity sha512-JdLMhkpT+1ZWeQPyKQNW1zqUwISI2hsUljS6u3vB9lp5EvwsayaAzGnbVeR35895udOF+zxcTiQY3psk+qqlxg== dependencies: "@types/draco3d" "^1.4.0" "@types/offscreencanvas" "^2019.6.4" From 651dd999cd5349dc61c9a337fbe827b8925447b8 Mon Sep 17 00:00:00 2001 From: Kris Date: Wed, 15 Nov 2023 07:24:15 -0800 Subject: [PATCH 058/103] [fix] bvh doesn't recompute every rerender (#1718) Co-authored-by: Kris Baumgartner --- src/core/useBVH.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/useBVH.tsx b/src/core/useBVH.tsx index 1e346e698..502a4a342 100644 --- a/src/core/useBVH.tsx +++ b/src/core/useBVH.tsx @@ -103,7 +103,7 @@ export const Bvh: ForwardRefComponent = /* @__PURE__ */ React.f }) } } - }) + }, []) return ( From 990eae125231afd9c8a8cd0264e87377992c2dc8 Mon Sep 17 00:00:00 2001 From: Wassim SAMAD Date: Thu, 16 Nov 2023 00:25:10 +0900 Subject: [PATCH 059/103] docs(Decal): Moving polygonOffset to the Material (#1714) --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index beac45e5b..0ba2a98a8 100644 --- a/README.md +++ b/README.md @@ -1769,10 +1769,12 @@ The decal box has to intersect the surface, otherwise it will not be visible. if position={[0, 0, 0]} // Position of the decal rotation={[0, 0, 0]} // Rotation of the decal (can be a vector or a degree in radians) scale={1} // Scale of the decal - polygonOffset - polygonOffsetFactor={-1} // The mesh should take precedence over the original > - + ``` From b2fadaa0916a4ba583e0c374f52f0ad9c2f02fa5 Mon Sep 17 00:00:00 2001 From: giusepperaso <54646766+giusepperaso@users.noreply.github.com> Date: Wed, 15 Nov 2023 16:29:30 +0100 Subject: [PATCH 060/103] docs(Html): add details about the scaling of Html in transform mode (#1702) * docs: give more info about the size of the Html component in transform mode Updates the part of the readme about the Html helper in transform mode: - explains how the size works - explains the possibility of a blurry rendering on some browsers and gives a possible workaround * docs: minor changes on the part about the scaling of Html --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 0ba2a98a8..0220ac16b 100644 --- a/README.md +++ b/README.md @@ -2371,6 +2371,16 @@ Enable shadows using the `castShadow` and `recieveShadow` prop. > Note: Html 'blending' mode only correctly occludes rectangular HTML elements by default. Use the `geometry` prop to swap the backing geometry to a custom one if your Html has a different shape. +If transform mode is enabled, the dimensions of the rendered html will depend on the position relative to the camera, the camera fov and the distanceFactor. For example, an Html component placed at (0,0,0) and with a distanceFactor of 10, rendered inside a scene with a perspective camera positioned at (0,0,2.45) and a FOV of 75, will have the same dimensions as a "plain" html element like in [this example](https://codesandbox.io/s/drei-html-magic-number-6mzt6m). + +A caveat of transform mode is that on some devices and browsers, the rendered html may appear blurry, as discussed in [#859](https://github.com/pmndrs/drei/issues/859). The issue can be at least mitigated by scaling down the Html parent and scaling up the html children: + +```jsx + +

    Some text
    + +``` + #### CycleRaycast ![](https://img.shields.io/badge/-Dom only-red) From a4cc4382248215b03c3f5b8b035c4bdfe80318b1 Mon Sep 17 00:00:00 2001 From: Geoff Harper Date: Wed, 15 Nov 2023 10:31:56 -0500 Subject: [PATCH 061/103] fix: include indirect BVH option (#1697) Co-authored-by: Geoff Harper --- README.md | 8 ++++++++ src/core/useBVH.tsx | 13 ++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0220ac16b..169b68299 100644 --- a/README.md +++ b/README.md @@ -3363,6 +3363,14 @@ export interface BVHOptions { maxDepth?: number /** The number of triangles to aim for in a leaf node, default: 10 */ maxLeafTris?: number + /** If false then an index buffer is created if it does not exist and is rearranged */ + /** to hold the bvh structure. If false then a separate buffer is created to store the */ + /** structure and the index buffer (or lack thereof) is retained. This can be used */ + /** when the existing index layout is important or groups are being used so a */ + /** single BVH hierarchy can be created to improve performance. */ + /** default: false */ + /** Note: This setting is experimental */ + indirect?: boolean } export type BvhProps = BVHOptions & diff --git a/src/core/useBVH.tsx b/src/core/useBVH.tsx index 502a4a342..4cb2b6e39 100644 --- a/src/core/useBVH.tsx +++ b/src/core/useBVH.tsx @@ -15,6 +15,15 @@ export interface BVHOptions { maxDepth?: number /** The number of triangles to aim for in a leaf node, default: 10 */ maxLeafTris?: number + + /** If false then an index buffer is created if it does not exist and is rearranged */ + /** to hold the bvh structure. If false then a separate buffer is created to store the */ + /** structure and the index buffer (or lack thereof) is retained. This can be used */ + /** when the existing index layout is important or groups are being used so a */ + /** single BVH hierarchy can be created to improve performance. */ + /** default: false */ + /** Note: This setting is experimental */ + indirect?: boolean } export type BvhProps = BVHOptions & @@ -37,6 +46,7 @@ export function useBVH(mesh: React.MutableRefObject, options?: setBoundingBox: true, maxDepth: 40, maxLeafTris: 10, + indirect: false, ...options, } React.useEffect(() => { @@ -67,6 +77,7 @@ export const Bvh: ForwardRefComponent = /* @__PURE__ */ React.f setBoundingBox = true, maxDepth = 40, maxLeafTris = 10, + indirect = false, ...props }: BvhProps, fref @@ -78,7 +89,7 @@ export const Bvh: ForwardRefComponent = /* @__PURE__ */ React.f React.useEffect(() => { if (enabled) { - const options = { strategy, verbose, setBoundingBox, maxDepth, maxLeafTris } + const options = { strategy, verbose, setBoundingBox, maxDepth, maxLeafTris, indirect } const group = ref.current // This can only safely work if the component is used once, but there is no alternative. // Hijacking the raycast method to do it for individual meshes is not an option as it would From d34816aeae3770b4b6d4a468489cc747022a14c8 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Wed, 15 Nov 2023 09:32:39 -0600 Subject: [PATCH 062/103] fix(Html): use transform for perspective browser issues (#1695) --- src/web/Html.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/Html.tsx b/src/web/Html.tsx index 77d4f3bfc..ca0b4b173 100644 --- a/src/web/Html.tsx +++ b/src/web/Html.tsx @@ -341,7 +341,7 @@ export const Html: ForwardRefComponent = /* @__PURE__ } el.style.width = size.width + 'px' el.style.height = size.height + 'px' - el.style.perspective = isOrthographicCamera ? '' : `${fov}px` + el.style.transform = isOrthographicCamera ? '' : `perspective(${fov}px)` if (transformOuterRef.current && transformInnerRef.current) { transformOuterRef.current.style.transform = `${cameraTransform}${cameraMatrix}translate(${widthHalf}px,${heightHalf}px)` transformInnerRef.current.style.transform = getObjectCSSMatrix(matrix, 1 / ((distanceFactor || 10) / 400)) From c000f729ec9548116ddd955b973f550ac2bba098 Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Wed, 15 Nov 2023 10:33:04 -0500 Subject: [PATCH 063/103] fix: cycle raycast keycode (#1693) --- src/web/CycleRaycast.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/CycleRaycast.tsx b/src/web/CycleRaycast.tsx index 4b48fdb00..73774b072 100644 --- a/src/web/CycleRaycast.tsx +++ b/src/web/CycleRaycast.tsx @@ -66,7 +66,7 @@ export function CycleRaycast({ // Key events const tabEvent = (event: KeyboardEvent) => { - if (event.keyCode || event.which === keyCode) { + if ((event.keyCode || event.which) === keyCode) { if (preventDefault) event.preventDefault() if (hits.length > 1) refresh((current) => current + 1) } From f788dbbb948f45647ca448cceb45eff5ca238c6f Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Thu, 16 Nov 2023 16:18:11 -0600 Subject: [PATCH 064/103] Revert "fix(Html): use transform for perspective browser issues (#1695)" (#1724) This reverts commit d34816aeae3770b4b6d4a468489cc747022a14c8. --- src/web/Html.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/web/Html.tsx b/src/web/Html.tsx index ca0b4b173..77d4f3bfc 100644 --- a/src/web/Html.tsx +++ b/src/web/Html.tsx @@ -341,7 +341,7 @@ export const Html: ForwardRefComponent = /* @__PURE__ } el.style.width = size.width + 'px' el.style.height = size.height + 'px' - el.style.transform = isOrthographicCamera ? '' : `perspective(${fov}px)` + el.style.perspective = isOrthographicCamera ? '' : `${fov}px` if (transformOuterRef.current && transformInnerRef.current) { transformOuterRef.current.style.transform = `${cameraTransform}${cameraMatrix}translate(${widthHalf}px,${heightHalf}px)` transformInnerRef.current.style.transform = getObjectCSSMatrix(matrix, 1 / ((distanceFactor || 10) / 400)) From a4da55745c23cb815d015e5a91026dc53cca2c4f Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Sun, 19 Nov 2023 15:17:19 -0600 Subject: [PATCH 065/103] fix(Text): lazy import Troika for Next issue (#1726) --- src/core/Text.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/Text.tsx b/src/core/Text.tsx index e7669d13c..55e38f2b0 100644 --- a/src/core/Text.tsx +++ b/src/core/Text.tsx @@ -1,6 +1,4 @@ import * as React from 'react' -// @ts-ignore -import { Text as TextMeshImpl, preloadFont } from 'troika-three-text' import { ReactThreeFiber, useThree } from '@react-three/fiber' import { suspend } from 'suspend-react' import { ForwardRefComponent } from '../helpers/ts-utils' @@ -54,6 +52,9 @@ export const Text: ForwardRefComponent = /* @__PURE__ */ React.forwa }: Props, ref: React.ForwardedRef ) => { + // https://github.com/pmndrs/drei/issues/1725 + const { Text: TextMeshImpl, preloadFont } = suspend(async () => import('troika-three-text'), []) + const invalidate = useThree(({ invalidate }) => invalidate) const [troikaMesh] = React.useState(() => new TextMeshImpl()) From 10509c33f4887d80d39b3dad9bc63041b6f8a603 Mon Sep 17 00:00:00 2001 From: STINGNAILS Date: Tue, 28 Nov 2023 21:06:26 +0700 Subject: [PATCH 066/103] feat: Bounds update (#1638) * feat: updated bounds * fix: re-added to-function for better backward compatibility * fix: removed min and max checks from clip --------- Co-authored-by: drcmda --- src/core/Bounds.tsx | 350 ++++++++++++++++++++++++++++---------------- 1 file changed, 225 insertions(+), 125 deletions(-) diff --git a/src/core/Bounds.tsx b/src/core/Bounds.tsx index 1967abc4a..ee08392be 100644 --- a/src/core/Bounds.tsx +++ b/src/core/Bounds.tsx @@ -1,5 +1,6 @@ import * as React from 'react' import * as THREE from 'three' + import { useFrame, useThree } from '@react-three/fiber' export type SizeProps = { @@ -12,18 +13,27 @@ export type SizeProps = { export type BoundsApi = { getSize: () => SizeProps refresh(object?: THREE.Object3D | THREE.Box3): any - clip(): any + reset(): any + moveTo(position: THREE.Vector3 | [number, number, number]): any + lookAt({ + target, + up, + }: { + target?: THREE.Vector3 | [number, number, number] + up?: THREE.Vector3 | [number, number, number] + }): any + to({ position, target }: { position: [number, number, number]; target: [number, number, number] }): any fit(): any - to: ({ position, target }: { position: [number, number, number]; target?: [number, number, number] }) => any + clip(): any } export type BoundsProps = JSX.IntrinsicElements['group'] & { - damping?: number + maxDuration?: number + margin?: number + observe?: boolean fit?: boolean clip?: boolean - observe?: boolean - margin?: number - eps?: number + interpolateFunc?: (t: number) => number onFit?: (data: SizeProps) => void } @@ -35,49 +45,83 @@ type ControlsProto = { removeEventListener: (event: string, callback: (event: any) => void) => void } +type OriginT = { + camPos: THREE.Vector3 + camRot: THREE.Quaternion + camZoom: number +} + +type GoalT = { + camPos: THREE.Vector3 | undefined + camRot: THREE.Quaternion | undefined + camZoom: number | undefined + camUp: THREE.Vector3 | undefined + target: THREE.Vector3 | undefined +} + +// eslint-disable-next-line no-shadow +enum AnimationState { + NONE = 0, + START = 1, + ACTIVE = 2, +} + const isOrthographic = (def: THREE.Camera): def is THREE.OrthographicCamera => def && (def as THREE.OrthographicCamera).isOrthographicCamera const isBox3 = (def: any): def is THREE.Box3 => def && (def as THREE.Box3).isBox3 -const context = /* @__PURE__ */ React.createContext(null!) -export function Bounds({ children, damping = 6, fit, clip, observe, margin = 1.2, eps = 0.01, onFit }: BoundsProps) { +const interpolateFuncDefault = (t: number) => { + // Imitates the previously used THREE.MathUtils.damp + return 1 - Math.exp(-5 * t) + 0.007 * t +} + +const context = React.createContext(null!) +export function Bounds({ + children, + maxDuration = 1.0, + margin = 1.2, + observe, + fit, + clip, + interpolateFunc = interpolateFuncDefault, + onFit, +}: BoundsProps) { const ref = React.useRef(null!) - const { camera, invalidate, size, controls: controlsImpl } = useThree() - const controls = controlsImpl as unknown as ControlsProto + + const { camera, size, invalidate } = useThree() + const controls = useThree((state) => state.controls as unknown as ControlsProto) const onFitRef = React.useRef<((data: SizeProps) => void) | undefined>(onFit) onFitRef.current = onFit - function equals(a, b) { - return Math.abs(a.x - b.x) < eps && Math.abs(a.y - b.y) < eps && Math.abs(a.z - b.z) < eps - } - - function damp(v, t, lambda, delta) { - v.x = THREE.MathUtils.damp(v.x, t.x, lambda, delta) - v.y = THREE.MathUtils.damp(v.y, t.y, lambda, delta) - v.z = THREE.MathUtils.damp(v.z, t.z, lambda, delta) - } - - const [current] = React.useState(() => ({ - animating: false, - focus: new THREE.Vector3(), - camera: new THREE.Vector3(), - zoom: 1, - })) - const [goal] = React.useState(() => ({ focus: new THREE.Vector3(), camera: new THREE.Vector3(), zoom: 1 })) + const origin = React.useRef({ + camPos: new THREE.Vector3(), + camRot: new THREE.Quaternion(), + camZoom: 1, + }) + const goal = React.useRef({ + camPos: undefined, + camRot: undefined, + camZoom: undefined, + camUp: undefined, + target: undefined, + }) + const animationState = React.useRef(AnimationState.NONE) + const t = React.useRef(0) // represent animation state from 0 to 1 const [box] = React.useState(() => new THREE.Box3()) const api: BoundsApi = React.useMemo(() => { function getSize() { - const size = box.getSize(new THREE.Vector3()) + const boxSize = box.getSize(new THREE.Vector3()) const center = box.getCenter(new THREE.Vector3()) - const maxSize = Math.max(size.x, size.y, size.z) + const maxSize = Math.max(boxSize.x, boxSize.y, boxSize.z) const fitHeightDistance = isOrthographic(camera) ? maxSize * 4 : maxSize / (2 * Math.atan((Math.PI * camera.fov) / 360)) const fitWidthDistance = isOrthographic(camera) ? maxSize * 4 : fitHeightDistance / camera.aspect const distance = margin * Math.max(fitHeightDistance, fitWidthDistance) - return { box, size, center, distance } + + return { box, size: boxSize, center, distance } } return { @@ -95,109 +139,152 @@ export function Bounds({ children, damping = 6, fit, clip, observe, margin = 1.2 box.setFromCenterAndSize(new THREE.Vector3(), new THREE.Vector3(max, max, max)) } - if (controls?.constructor.name === 'OrthographicTrackballControls') { - // Put camera on a sphere along which it should move - const { distance } = getSize() - const direction = camera.position.clone().sub(controls.target).normalize().multiplyScalar(distance) - const newPos = controls.target.clone().add(direction) - camera.position.copy(newPos) - } + origin.current.camPos.copy(camera.position) + origin.current.camRot.copy(camera.quaternion) + isOrthographic(camera) && (origin.current.camZoom = camera.zoom) + + goal.current.camPos = undefined + goal.current.camRot = undefined + goal.current.camZoom = undefined + goal.current.camUp = undefined + goal.current.target = undefined return this }, - clip() { - const { distance } = getSize() - if (controls) controls.maxDistance = distance * 10 - camera.near = distance / 100 - camera.far = distance * 100 - camera.updateProjectionMatrix() - if (controls) controls.update() - invalidate() + reset() { + const { center, distance } = getSize() + + const direction = camera.position.clone().sub(center).normalize() + goal.current.camPos = center.clone().addScaledVector(direction, distance) + goal.current.target = center.clone() + const mCamRot = new THREE.Matrix4().lookAt(goal.current.camPos, goal.current.target, camera.up) + goal.current.camRot = new THREE.Quaternion().setFromRotationMatrix(mCamRot) + + animationState.current = AnimationState.START + t.current = 0 + return this }, - to({ position, target }: { position: [number, number, number]; target?: [number, number, number] }) { - current.camera.copy(camera.position) - const { center } = getSize() - goal.camera.set(...position) + moveTo(position: THREE.Vector3 | [number, number, number]) { + goal.current.camPos = Array.isArray(position) ? new THREE.Vector3(...position) : position.clone() - if (target) { - goal.focus.set(...target) - } else { - goal.focus.copy(center) - } + animationState.current = AnimationState.START + t.current = 0 - if (damping) { - current.animating = true + return this + }, + lookAt({ + target, + up, + }: { + target: THREE.Vector3 | [number, number, number] + up?: THREE.Vector3 | [number, number, number] + }) { + goal.current.target = Array.isArray(target) ? new THREE.Vector3(...target) : target.clone() + if (up) { + goal.current.camUp = Array.isArray(up) ? new THREE.Vector3(...up) : up.clone() } else { - camera.position.set(...position) + goal.current.camUp = camera.up.clone() } + const mCamRot = new THREE.Matrix4().lookAt( + goal.current.camPos || camera.position, + goal.current.target, + goal.current.camUp + ) + goal.current.camRot = new THREE.Quaternion().setFromRotationMatrix(mCamRot) + + animationState.current = AnimationState.START + t.current = 0 return this }, + /** + * @deprecated Use moveTo and lookAt instead + */ + to({ position, target }: { position: [number, number, number]; target?: [number, number, number] }) { + return this.moveTo(position).lookAt({ target }) + }, fit() { - current.camera.copy(camera.position) - if (controls) current.focus.copy(controls.target) + if (!isOrthographic(camera)) { + // Fit should only modify zoom now. Thus avoid executing it if the camera isn't orthographic + return this + } - const { center, distance } = getSize() - const direction = center.clone().sub(camera.position).normalize().multiplyScalar(distance) - - goal.camera.copy(center).sub(direction) - goal.focus.copy(center) - - if (isOrthographic(camera)) { - current.zoom = camera.zoom - - let maxHeight = 0, - maxWidth = 0 - const vertices = [ - new THREE.Vector3(box.min.x, box.min.y, box.min.z), - new THREE.Vector3(box.min.x, box.max.y, box.min.z), - new THREE.Vector3(box.min.x, box.min.y, box.max.z), - new THREE.Vector3(box.min.x, box.max.y, box.max.z), - new THREE.Vector3(box.max.x, box.max.y, box.max.z), - new THREE.Vector3(box.max.x, box.max.y, box.min.z), - new THREE.Vector3(box.max.x, box.min.y, box.max.z), - new THREE.Vector3(box.max.x, box.min.y, box.min.z), - ] - // Transform the center and each corner to camera space - center.applyMatrix4(camera.matrixWorldInverse) - for (const v of vertices) { - v.applyMatrix4(camera.matrixWorldInverse) - maxHeight = Math.max(maxHeight, Math.abs(v.y - center.y)) - maxWidth = Math.max(maxWidth, Math.abs(v.x - center.x)) - } - maxHeight *= 2 - maxWidth *= 2 - const zoomForHeight = (camera.top - camera.bottom) / maxHeight - const zoomForWidth = (camera.right - camera.left) / maxWidth - goal.zoom = Math.min(zoomForHeight, zoomForWidth) / margin - if (!damping) { - camera.zoom = goal.zoom - camera.updateProjectionMatrix() - } + let maxHeight = 0, + maxWidth = 0 + const vertices = [ + new THREE.Vector3(box.min.x, box.min.y, box.min.z), + new THREE.Vector3(box.min.x, box.max.y, box.min.z), + new THREE.Vector3(box.min.x, box.min.y, box.max.z), + new THREE.Vector3(box.min.x, box.max.y, box.max.z), + new THREE.Vector3(box.max.x, box.max.y, box.max.z), + new THREE.Vector3(box.max.x, box.max.y, box.min.z), + new THREE.Vector3(box.max.x, box.min.y, box.max.z), + new THREE.Vector3(box.max.x, box.min.y, box.min.z), + ] + + // Transform the center and each corner to camera space + const pos = goal.current.camPos || camera.position + const target = goal.current.target || controls?.target + const up = goal.current.camUp || camera.up + const mCamWInv = target + ? new THREE.Matrix4().lookAt(pos, target, up).setPosition(pos).invert() + : camera.matrixWorldInverse + for (const v of vertices) { + v.applyMatrix4(mCamWInv) + maxHeight = Math.max(maxHeight, Math.abs(v.y)) + maxWidth = Math.max(maxWidth, Math.abs(v.x)) } + maxHeight *= 2 + maxWidth *= 2 + const zoomForHeight = (camera.top - camera.bottom) / maxHeight + const zoomForWidth = (camera.right - camera.left) / maxWidth - if (damping) { - current.animating = true - } else { - camera.position.copy(goal.camera) - camera.lookAt(goal.focus) - if (controls) { - controls.target.copy(goal.focus) - controls.update() - } + goal.current.camZoom = Math.min(zoomForHeight, zoomForWidth) / margin + + animationState.current = AnimationState.START + t.current = 0 + + onFitRef.current && onFitRef.current(this.getSize()) + + return this + }, + clip() { + const { distance } = getSize() + + camera.near = distance / 100 + camera.far = distance * 100 + camera.updateProjectionMatrix() + + if (controls) { + controls.maxDistance = distance * 10 + controls.update() } - if (onFitRef.current) onFitRef.current(this.getSize()) + invalidate() + return this }, } - }, [box, camera, controls, margin, damping, invalidate]) + }, [box, camera, controls, margin, invalidate]) React.useLayoutEffect(() => { if (controls) { // Try to prevent drag hijacking - const callback = () => (current.animating = false) + const callback = () => { + if (controls && goal.current.target && animationState.current !== AnimationState.NONE) { + const front = new THREE.Vector3().setFromMatrixColumn(camera.matrix, 2) + const d0 = origin.current.camPos.distanceTo(controls.target) + const d1 = (goal.current.camPos || origin.current.camPos).distanceTo(goal.current.target) + const d = (1 - t.current) * d0 + t.current * d1 + + controls.target.copy(camera.position).addScaledVector(front, -d) + controls.update() + } + + animationState.current = AnimationState.NONE + } + controls.addEventListener('start', callback) return () => controls.removeEventListener('start', callback) } @@ -214,29 +301,42 @@ export function Bounds({ children, damping = 6, fit, clip, observe, margin = 1.2 }, [size, clip, fit, observe, camera, controls]) useFrame((state, delta) => { - if (current.animating) { - damp(current.focus, goal.focus, damping, delta) - damp(current.camera, goal.camera, damping, delta) - current.zoom = THREE.MathUtils.damp(current.zoom, goal.zoom, damping, delta) - camera.position.copy(current.camera) - - if (isOrthographic(camera)) { - camera.zoom = current.zoom + // This [additional animation step START] is needed to guarantee that delta used in animation isn't absurdly high (2-3 seconds) which is actually possible if rendering happens on demand... + if (animationState.current === AnimationState.START) { + animationState.current = AnimationState.ACTIVE + invalidate() + } else if (animationState.current === AnimationState.ACTIVE) { + t.current += delta / maxDuration + + if (t.current >= 1) { + goal.current.camPos && camera.position.copy(goal.current.camPos) + goal.current.camRot && camera.quaternion.copy(goal.current.camRot) + goal.current.camUp && camera.up.copy(goal.current.camUp) + goal.current.camZoom && isOrthographic(camera) && (camera.zoom = goal.current.camZoom) + + camera.updateMatrixWorld() camera.updateProjectionMatrix() - } - if (!controls) { - camera.lookAt(current.focus) + if (controls && goal.current.target) { + controls.target.copy(goal.current.target) + controls.update() + } + + animationState.current = AnimationState.NONE } else { - controls.target.copy(current.focus) - controls.update() + const k = interpolateFunc(t.current) + + goal.current.camPos && camera.position.lerpVectors(origin.current.camPos, goal.current.camPos, k) + goal.current.camRot && camera.quaternion.slerpQuaternions(origin.current.camRot, goal.current.camRot, k) + goal.current.camZoom && + isOrthographic(camera) && + (camera.zoom = (1 - k) * origin.current.camZoom + k * goal.current.camZoom) + + camera.updateMatrixWorld() + camera.updateProjectionMatrix() } invalidate() - if (isOrthographic(camera) && !(Math.abs(current.zoom - goal.zoom) < eps)) return - if (!isOrthographic(camera) && !equals(current.camera, goal.camera)) return - if (controls && !equals(current.focus, goal.focus)) return - current.animating = false } }) From e4ceaf00832483a31e8e25068da5bd5fb571e9ba Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Sun, 3 Dec 2023 06:01:19 -0600 Subject: [PATCH 067/103] fix(Outlines): conservative check for null ref (#1735) --- src/core/Outlines.tsx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/core/Outlines.tsx b/src/core/Outlines.tsx index 0d1cbe667..15dfd3349 100644 --- a/src/core/Outlines.tsx +++ b/src/core/Outlines.tsx @@ -89,16 +89,18 @@ export function Outlines({ angle = Math.PI, ...props }: OutlinesProps) { - const ref = React.useRef(null!) + const ref = React.useRef() const [material] = React.useState(() => new OutlinesMaterial({ side: THREE.BackSide })) const { gl } = useThree() const contextSize = gl.getDrawingBufferSize(new THREE.Vector2()) React.useMemo(() => extend({ OutlinesMaterial }), []) const oldAngle = React.useRef(0) - const oldGeometry = React.useRef(null!) + const oldGeometry = React.useRef() React.useLayoutEffect(() => { const group = ref.current + if (!group) return + const parent = group.parent as THREE.Mesh & THREE.SkinnedMesh & THREE.InstancedMesh if (parent && parent.geometry) { if (oldAngle.current !== angle || oldGeometry.current !== parent.geometry) { @@ -133,6 +135,8 @@ export function Outlines({ React.useLayoutEffect(() => { const group = ref.current + if (!group) return + const mesh = group.children[0] as THREE.Mesh if (mesh) { mesh.renderOrder = renderOrder @@ -154,7 +158,9 @@ export function Outlines({ return () => { // Dispose everything on unmount const group = ref.current - let mesh = group.children[0] as THREE.Mesh + if (!group) return + + const mesh = group.children[0] as THREE.Mesh if (mesh) { if (angle) mesh.geometry.dispose() group.remove(mesh) @@ -162,5 +168,5 @@ export function Outlines({ } }, []) - return + return } {...props} /> } From 481b3275617aaa648da0592a5ef8ef153dbeae47 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Sun, 3 Dec 2023 06:01:26 -0600 Subject: [PATCH 068/103] fix(useGLTF): mirror inferred ObjectMap types (#1734) --- src/core/useGLTF.tsx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/core/useGLTF.tsx b/src/core/useGLTF.tsx index 62cdeaaa4..00f70d978 100644 --- a/src/core/useGLTF.tsx +++ b/src/core/useGLTF.tsx @@ -1,7 +1,6 @@ -import { Loader } from 'three' -// @ts-ignore -import { GLTFLoader, DRACOLoader, MeshoptDecoder } from 'three-stdlib' -import { useLoader } from '@react-three/fiber' +import { type Loader } from 'three' +import { type GLTF, GLTFLoader, DRACOLoader, MeshoptDecoder } from 'three-stdlib' +import { type ObjectMap, useLoader } from '@react-three/fiber' let dracoLoader: DRACOLoader | null = null @@ -32,9 +31,8 @@ export function useGLTF( useDraco: boolean | string = true, useMeshOpt: boolean = true, extendLoader?: (loader: GLTFLoader) => void -) { - const gltf = useLoader(GLTFLoader, path, extensions(useDraco, useMeshOpt, extendLoader)) - return gltf +): T extends any[] ? (GLTF & ObjectMap)[] : GLTF & ObjectMap { + return useLoader(GLTFLoader, path, extensions(useDraco, useMeshOpt, extendLoader)) } useGLTF.preload = ( From 73002bce49b5b3ee0663375a692ab787b70b3f8e Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Sun, 3 Dec 2023 14:14:28 -0600 Subject: [PATCH 069/103] fix(useTexture): harden onLoad types (#1736) --- src/core/useTexture.tsx | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/core/useTexture.tsx b/src/core/useTexture.tsx index 6bc7911de..a99f7288e 100644 --- a/src/core/useTexture.tsx +++ b/src/core/useTexture.tsx @@ -1,17 +1,22 @@ import { Texture, TextureLoader } from 'three' import { useLoader, useThree } from '@react-three/fiber' -import { useEffect } from 'react' -import { useLayoutEffect } from 'react' +import { useLayoutEffect, useEffect } from 'react' export const IsObject = (url: any): url is Record => url === Object(url) && !Array.isArray(url) && typeof url !== 'function' +export type MappedTextureType> = T extends any[] + ? Texture[] + : T extends Record + ? { [key in keyof T]: Texture } + : Texture + export function useTexture>( input: Url, - onLoad?: (texture: Texture | Texture[]) => void -): Url extends any[] ? Texture[] : Url extends object ? { [key in keyof Url]: Texture } : Texture { + onLoad?: (texture: MappedTextureType) => void +): MappedTextureType { const gl = useThree((state) => state.gl) - const textures = useLoader(TextureLoader, IsObject(input) ? Object.values(input) : (input as any)) + const textures = useLoader(TextureLoader, IsObject(input) ? Object.values(input) : input) as MappedTextureType useLayoutEffect(() => { onLoad?.(textures) @@ -28,12 +33,12 @@ export function useTexture Object.assign(keyed, { [key]: textures[keys.indexOf(key)] })) + const keyed = {} as MappedTextureType + let i = 0 + for (const key in input) keyed[key] = textures[i++] return keyed } else { - return textures as any + return textures } } From daeb964fea96393bf5160ebaea481e84960ac53b Mon Sep 17 00:00:00 2001 From: Jin Date: Mon, 4 Dec 2023 05:51:02 +0900 Subject: [PATCH 070/103] fix: pause video when component unmount (#1730) --- src/core/useVideoTexture.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/core/useVideoTexture.tsx b/src/core/useVideoTexture.tsx index 93c734723..21fa0be30 100644 --- a/src/core/useVideoTexture.tsx +++ b/src/core/useVideoTexture.tsx @@ -38,6 +38,11 @@ export function useVideoTexture(src: string | MediaStream, props?: Partial From 5c4f60e3e47d8a98ece700c7e2b0b5d70955ac02 Mon Sep 17 00:00:00 2001 From: STINGNAILS Date: Thu, 14 Dec 2023 15:39:16 +0700 Subject: [PATCH 080/103] fix: call reset from fit and update camera.up when animating (#1753) --- src/core/Bounds.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/core/Bounds.tsx b/src/core/Bounds.tsx index ee08392be..fc117467b 100644 --- a/src/core/Bounds.tsx +++ b/src/core/Bounds.tsx @@ -206,10 +206,11 @@ export function Bounds({ }, fit() { if (!isOrthographic(camera)) { - // Fit should only modify zoom now. Thus avoid executing it if the camera isn't orthographic - return this + // For non-orthographic cameras, fit should behave exactly like reset + return this.reset() } + // For orthographic cameras, fit should only modify the zoom value let maxHeight = 0, maxWidth = 0 const vertices = [ @@ -328,6 +329,7 @@ export function Bounds({ goal.current.camPos && camera.position.lerpVectors(origin.current.camPos, goal.current.camPos, k) goal.current.camRot && camera.quaternion.slerpQuaternions(origin.current.camRot, goal.current.camRot, k) + goal.current.camUp && camera.up.set(0, 1, 0).applyQuaternion(camera.quaternion) goal.current.camZoom && isOrthographic(camera) && (camera.zoom = (1 - k) * origin.current.camZoom + k * goal.current.camZoom) From 272b015db10edc08770d9a1e9e8032f38f29750f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Thu, 14 Dec 2023 13:51:50 +0100 Subject: [PATCH 081/103] fix: billboard --- src/core/Billboard.tsx | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/core/Billboard.tsx b/src/core/Billboard.tsx index 8b862fe13..b5b10e714 100644 --- a/src/core/Billboard.tsx +++ b/src/core/Billboard.tsx @@ -1,7 +1,6 @@ import * as React from 'react' -import { Group } from 'three' +import { Group, Quaternion } from 'three' import { useFrame } from '@react-three/fiber' -import mergeRefs from 'react-merge-refs' import { ForwardRefComponent } from '../helpers/ts-utils' export type BillboardProps = { @@ -23,8 +22,11 @@ export type BillboardProps = { export const Billboard: ForwardRefComponent = /* @__PURE__ */ React.forwardRef< Group, BillboardProps ->(function Billboard({ follow = true, lockX = false, lockY = false, lockZ = false, ...props }, ref) { - const localRef = React.useRef() +>(function Billboard({ children, follow = true, lockX = false, lockY = false, lockZ = false, ...props }, fref) { + const inner = React.useRef(null!) + const localRef = React.useRef(null!) + const q = new Quaternion() + useFrame(({ camera }) => { if (!follow || !localRef.current) return @@ -32,12 +34,21 @@ export const Billboard: ForwardRefComponent = /* @__PURE_ const prevRotation = localRef.current.rotation.clone() // always face the camera - camera.getWorldQuaternion(localRef.current.quaternion) + localRef.current.updateMatrix() + localRef.current.updateWorldMatrix(false, false) + localRef.current.getWorldQuaternion(q) + camera.getWorldQuaternion(inner.current.quaternion).premultiply(q.invert()) // readjust any axis that is locked if (lockX) localRef.current.rotation.x = prevRotation.x if (lockY) localRef.current.rotation.y = prevRotation.y if (lockZ) localRef.current.rotation.z = prevRotation.z }) - return + + React.useImperativeHandle(fref, () => localRef.current, []) + return ( + + {children} + + ) }) From 7847b75ea1884dab38cb52b14ef3312eb57d331e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Sat, 16 Dec 2023 21:58:08 +0100 Subject: [PATCH 082/103] fix: allow images to receive custom planes --- README.md | 14 ++++++++++++++ package.json | 2 +- src/core/Image.tsx | 21 ++++++++++++++++++--- yarn.lock | 8 ++++---- 4 files changed, 37 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 74307e1ef..3b49ecee9 100644 --- a/README.md +++ b/README.md @@ -1328,6 +1328,20 @@ To make the material transparent: ``` +You can have custom planes, for instance a rounded-corner plane. + +```jsx +import { extend } from '@react-three/fiber' +import { Image } from '@react-three/drei' +import { easing, geometry } from 'maath' + +extend({ RoundedPlaneGeometry: geometry.RoundedPlaneGeometry }) + + + + +``` + #### Text [![](https://img.shields.io/badge/-storybook-%23ff69b4)](https://drei.vercel.app/?path=/story/abstractions-text--text-st) ![](https://img.shields.io/badge/-suspense-brightgreen) diff --git a/package.json b/package.json index a11b5036d..83c3f6f71 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "lodash.clamp": "^4.0.3", "lodash.omit": "^4.5.0", "lodash.pick": "^4.4.0", - "maath": "^0.9.0", + "maath": "^0.10.7", "meshline": "^3.1.6", "react-composer": "^5.0.3", "react-merge-refs": "^1.1.0", diff --git a/src/core/Image.tsx b/src/core/Image.tsx index 4f55561a6..c44b54d31 100644 --- a/src/core/Image.tsx +++ b/src/core/Image.tsx @@ -38,8 +38,8 @@ declare global { const ImageMaterialImpl = /* @__PURE__ */ shaderMaterial( { color: /* @__PURE__ */ new THREE.Color('white'), - scale: [1, 1], - imageBounds: [1, 1], + scale: /* @__PURE__ */ new THREE.Vector2(1, 1), + imageBounds: /* @__PURE__ */ new THREE.Vector2(1, 1), map: null, zoom: 1, grayscale: 0, @@ -102,11 +102,26 @@ const ImageBase: ForwardRefComponent, THREE.Mesh> = /* @ side, ...props }: Omit, - ref: React.ForwardedRef + fref: React.ForwardedRef ) => { extend({ ImageMaterial: ImageMaterialImpl }) + const ref = React.useRef(null!) const planeBounds = Array.isArray(scale) ? [scale[0], scale[1]] : [scale, scale] const imageBounds = [texture!.image.width, texture!.image.height] + React.useImperativeHandle(fref, () => ref.current, []) + React.useLayoutEffect(() => { + // Support arbitrary plane geometries (for instance with rounded corners) + // @ts-ignore + if (ref.current.geometry.parameters) { + // @ts-ignore + ref.current.material.scale.set( + // @ts-ignore + planeBounds[0] * ref.current.geometry.parameters.width, + // @ts-ignore + planeBounds[1] * ref.current.geometry.parameters.height + ) + } + }, []) return ( diff --git a/yarn.lock b/yarn.lock index 1197d2083..34a7e2c8d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9568,10 +9568,10 @@ lru-cache@^7.14.1, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -maath@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/maath/-/maath-0.9.0.tgz#425a9600dfc5d0aecfa48029a2e3eea852531b06" - integrity sha512-aAR8hoUqPxlsU8VOxkS9y37jhUzdUxM017NpCuxFU1Gk+nMaZASZxymZrV8LRSHzRk/watlbfyNKu6XPUhCFrQ== +maath@^0.10.7: + version "0.10.7" + resolved "https://registry.yarnpkg.com/maath/-/maath-0.10.7.tgz#9289b42a5db8ac5b26407b3bfca4e3bebefe50b4" + integrity sha512-zQ2xd7dNOIVTjAS+hj22fyj1EFYmOJX6tzKjZ92r6WDoq8hyFxjuGA2q950tmR4iC/EKXoMQdSipkaJVuUHDTg== magic-string@^0.25.7: version "0.25.9" From 17191c87cde7f6f3ff1712257c2f9a239a5cf5fa Mon Sep 17 00:00:00 2001 From: STINGNAILS Date: Mon, 18 Dec 2023 14:23:07 +0700 Subject: [PATCH 083/103] Docs: Bounds docs update (#1755) * docs: updated Bounds description * fix: added reset() call to fit effect and adjusted types --- README.md | 21 ++++++++++++++++----- src/core/Bounds.tsx | 16 ++++++++-------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 3b49ecee9..eae1391b0 100644 --- a/README.md +++ b/README.md @@ -4012,15 +4012,19 @@ For instance, one could want the Html component to be pinned to `positive x`, `p Demo

    -Calculates a boundary box and centers the camera accordingly. If you are using camera controls, make sure to pass them the `makeDefault` prop. `fit` fits the current view on first render. `clip` sets the cameras near/far planes. `observe` will trigger on window resize. +Calculates a boundary box and centers the camera accordingly. If you are using camera controls, make sure to pass them the `makeDefault` prop. `fit` fits the current view on first render. `clip` sets the cameras near/far planes. `observe` will trigger on window resize. To control the damping animation, use `maxDuration` to set the animation length in seconds, and `interpolateFunc` to define how the animation changes over time (should be an increasing function in [0, 1] interval, `interpolateFunc(0) === 0`, `interpolateFunc(1) === 1`). ```jsx - +const interpolateFunc = (t: number) => 1 - Math.exp(-5 * t) + 0.007 * t // Matches the default Bounds behavior +const interpolateFunc1 = (t: number) => -t * t * t + 2 * t * t // Start smoothly, finish linearly +const interpolateFunc2 = (t: number) => -t * t * t + t * t + t // Start linearly, finish smoothly + + ``` -The Bounds component also acts as a context provider, use the `useBounds` hook to refresh the bounds, fit the camera, clip near/far planes, go to camera orientations or focus objects. `refresh(object?: THREE.Object3D | THREE.Box3)` will recalculate bounds, since this can be expensive only call it when you know the view has changed. `clip` sets the cameras near/far planes. `to` sets a position and target for the camera. `fit` zooms and centers the view. +The Bounds component also acts as a context provider, use the `useBounds` hook to refresh the bounds, fit the camera, clip near/far planes, go to camera orientations or focus objects. `refresh(object?: THREE.Object3D | THREE.Box3)` will recalculate bounds, since this can be expensive only call it when you know the view has changed. `reset` centers the view. `moveTo` changes the camera position. `lookAt` changes the camera orientation, with the respect to up-vector, if specified. `clip` sets the cameras near/far planes. `fit` centers the view for non-orthographic cameras (same as reset) or zooms the view for orthographic cameras. ```jsx function Foo() { @@ -4033,10 +4037,17 @@ function Foo() { // bounds.refresh(ref.current).clip().fit() // bounds.refresh(new THREE.Box3()).clip().fit() - // Or, send the camera to a specific orientatin - // bounds.to({position: [0, 10, 10], target: {[5, 5, 0]}}) + // Or, move the camera to a specific position, and change its orientation + // bounds.moveTo([0, 10, 10]).lookAt({ target: [5, 5, 0], up: [0, -1, 0] }) + + // For orthographic cameras, reset has to be used to center the view (fit would only change its zoom to match the bounding box) + // bounds.refresh().reset().clip().fit() + }, [...]) +} + + ``` #### CameraShake diff --git a/src/core/Bounds.tsx b/src/core/Bounds.tsx index fc117467b..73a1b38cd 100644 --- a/src/core/Bounds.tsx +++ b/src/core/Bounds.tsx @@ -12,19 +12,19 @@ export type SizeProps = { export type BoundsApi = { getSize: () => SizeProps - refresh(object?: THREE.Object3D | THREE.Box3): any - reset(): any - moveTo(position: THREE.Vector3 | [number, number, number]): any + refresh(object?: THREE.Object3D | THREE.Box3): BoundsApi + reset(): BoundsApi + moveTo(position: THREE.Vector3 | [number, number, number]): BoundsApi lookAt({ target, up, }: { target?: THREE.Vector3 | [number, number, number] up?: THREE.Vector3 | [number, number, number] - }): any - to({ position, target }: { position: [number, number, number]; target: [number, number, number] }): any - fit(): any - clip(): any + }): BoundsApi + to({ position, target }: { position: [number, number, number]; target: [number, number, number] }): BoundsApi + fit(): BoundsApi + clip(): BoundsApi } export type BoundsProps = JSX.IntrinsicElements['group'] & { @@ -296,7 +296,7 @@ export function Bounds({ React.useLayoutEffect(() => { if (observe || count.current++ === 0) { api.refresh() - if (fit) api.fit() + if (fit) api.reset().fit() if (clip) api.clip() } }, [size, clip, fit, observe, camera, controls]) From 30108d20621c6bb813eff7defd0e73004e92acc8 Mon Sep 17 00:00:00 2001 From: sean tai <105983513+seantai@users.noreply.github.com> Date: Sun, 17 Dec 2023 23:23:52 -0800 Subject: [PATCH 084/103] docs(MotionPathControls): useMotion example (#1748) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eae1391b0..66b437249 100644 --- a/README.md +++ b/README.md @@ -858,7 +858,7 @@ function Loop() { // Set the current position along the curve, you can increment indiscriminately for a loop motion.current += delta // Look ahead on the curve - motion.object.lookAt(motion.next) + motion.object.current.lookAt(motion.next) }) } From 8da6b24ca57e26935278e90f32f8646593de1357 Mon Sep 17 00:00:00 2001 From: GroG Date: Sun, 17 Dec 2023 23:24:36 -0800 Subject: [PATCH 085/103] AccumulatedShadows NPE protection (#1701) * AccumulatedShadows NPE protection * Update AccumulativeShadows.tsx * Update AccumulativeShadows.tsx * Update AccumulativeShadows.tsx * Update AccumulativeShadows.tsx --------- Co-authored-by: greg perry --- src/core/AccumulativeShadows.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/AccumulativeShadows.tsx b/src/core/AccumulativeShadows.tsx index 84a76a196..5d7786d37 100644 --- a/src/core/AccumulativeShadows.tsx +++ b/src/core/AccumulativeShadows.tsx @@ -307,8 +307,8 @@ export const RandomizedLight: ForwardRefComponent< React.useImperativeHandle(forwardRef, () => api, [api]) React.useLayoutEffect(() => { const group = gLights.current - if (parent) parent.lights.set(group.uuid, api) - return () => void parent.lights.delete(group.uuid) + if (parent) parent.lights?.set(group.uuid, api) + return () => void parent?.lights?.delete(group.uuid) }, [parent, api]) return ( From 8f0a04581327a5c6c7da9ea80d408c9bbdbf5bda Mon Sep 17 00:00:00 2001 From: Kash Lingat Date: Mon, 18 Dec 2023 16:02:41 -0800 Subject: [PATCH 086/103] docs(ScrollControls): fix typo and default value decription (#1757) --- src/web/ScrollControls.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/web/ScrollControls.tsx b/src/web/ScrollControls.tsx index b8437665c..efec23830 100644 --- a/src/web/ScrollControls.tsx +++ b/src/web/ScrollControls.tsx @@ -10,7 +10,7 @@ import { ForwardRefComponent } from '../helpers/ts-utils' export type ScrollControlsProps = { /** Precision, default 0.00001 */ eps?: number - /** Horontal scroll, default false (vertical) */ + /** Horizontal scroll, default false (vertical) */ horizontal?: boolean /** Infinite scroll, default false (experimental!) */ infinite?: boolean @@ -18,7 +18,7 @@ export type ScrollControlsProps = { pages?: number /** A factor that increases scroll bar travel,default: 1 */ distance?: number - /** Friction in seconds, default: 0.2 (1/5 second) */ + /** Friction in seconds, default: 0.25 (1/4 second) */ damping?: number /** maxSpeed optionally allows you to clamp the maximum speed. If damping is 0.2s and looks OK * going between, say, page 1 and 2, but not for pages far apart as it'll move very rapid, From cc8ea5674c4a79ed10ee7733309c9bc86f606d17 Mon Sep 17 00:00:00 2001 From: Michael Le Date: Tue, 19 Dec 2023 00:20:40 -0800 Subject: [PATCH 087/103] fix(Outlines): Mark all Outlines props as optional (#1758) --- src/core/Outlines.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/core/Outlines.tsx b/src/core/Outlines.tsx index 15dfd3349..0541878e5 100644 --- a/src/core/Outlines.tsx +++ b/src/core/Outlines.tsx @@ -59,17 +59,17 @@ const OutlinesMaterial = /* @__PURE__ */ shaderMaterial( type OutlinesProps = JSX.IntrinsicElements['group'] & { /** Outline color, default: black */ - color: ReactThreeFiber.Color + color?: ReactThreeFiber.Color /** Line thickness is independent of zoom, default: false */ - screenspace: boolean + screenspace?: boolean /** Outline opacity, default: 1 */ - opacity: number + opacity?: number /** Outline transparency, default: false */ - transparent: boolean + transparent?: boolean /** Outline thickness, default 0.05 */ - thickness: number + thickness?: number /** Geometry crease angle (0 === no crease), default: Math.PI */ - angle: number + angle?: number toneMapped?: boolean polygonOffset?: boolean polygonOffsetFactor?: number From a82d0d4b185c03b22b71f9a1d43906bd9be605a9 Mon Sep 17 00:00:00 2001 From: Nathan Bierema Date: Sat, 23 Dec 2023 04:16:34 -0500 Subject: [PATCH 088/103] fix(types): remove references to Shader type (#1765) --- src/core/MeshDistortMaterial.tsx | 5 +++-- src/core/MeshWobbleMaterial.tsx | 5 +++-- src/core/useBoxProjectedEnv.tsx | 14 +++++++++++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/core/MeshDistortMaterial.tsx b/src/core/MeshDistortMaterial.tsx index 0cee69317..29f180c94 100644 --- a/src/core/MeshDistortMaterial.tsx +++ b/src/core/MeshDistortMaterial.tsx @@ -1,5 +1,5 @@ import * as React from 'react' -import { MeshPhysicalMaterial, MeshPhysicalMaterialParameters, Shader } from 'three' +import { IUniform, MeshPhysicalMaterial, MeshPhysicalMaterialParameters } from 'three' import { useFrame } from '@react-three/fiber' // eslint-disable-next-line // @ts-ignore @@ -42,7 +42,8 @@ class DistortMaterialImpl extends MeshPhysicalMaterial { this._radius = { value: 1 } } - onBeforeCompile(shader: Shader) { + // FIXME Use `THREE.WebGLProgramParametersWithUniforms` type when able to target @types/three@0.160.0 + onBeforeCompile(shader: { vertexShader: string; uniforms: { [uniform: string]: IUniform } }) { shader.uniforms.time = this._time shader.uniforms.radius = this._radius shader.uniforms.distort = this._distort diff --git a/src/core/MeshWobbleMaterial.tsx b/src/core/MeshWobbleMaterial.tsx index e2062eb58..09e17fde3 100644 --- a/src/core/MeshWobbleMaterial.tsx +++ b/src/core/MeshWobbleMaterial.tsx @@ -1,5 +1,5 @@ import * as React from 'react' -import { MeshStandardMaterial, MeshStandardMaterialParameters, Shader } from 'three' +import { IUniform, MeshStandardMaterial, MeshStandardMaterialParameters } from 'three' import { useFrame } from '@react-three/fiber' import { ForwardRefComponent } from '../helpers/ts-utils' @@ -37,7 +37,8 @@ class WobbleMaterialImpl extends MeshStandardMaterial { this._factor = { value: 1 } } - onBeforeCompile(shader: Shader) { + // FIXME Use `THREE.WebGLProgramParametersWithUniforms` type when able to target @types/three@0.160.0 + onBeforeCompile(shader: { vertexShader: string; uniforms: { [uniform: string]: IUniform } }) { shader.uniforms.time = this._time shader.uniforms.factor = this._factor diff --git a/src/core/useBoxProjectedEnv.tsx b/src/core/useBoxProjectedEnv.tsx index 568d9c273..1b821e76e 100644 --- a/src/core/useBoxProjectedEnv.tsx +++ b/src/core/useBoxProjectedEnv.tsx @@ -49,9 +49,17 @@ const getIBLRadiance_patch = /* glsl */ ` #endif ` -function boxProjectedEnvMap(shader: THREE.Shader, envMapPosition: THREE.Vector3, envMapSize: THREE.Vector3) { +// FIXME Replace with `THREE.WebGLProgramParametersWithUniforms` type when able to target @types/three@0.160.0 +interface MaterialShader { + vertexShader: string + fragmentShader: string + defines: { [define: string]: string | number | boolean } | undefined + uniforms: { [uniform: string]: THREE.IUniform } +} + +function boxProjectedEnvMap(shader: MaterialShader, envMapPosition: THREE.Vector3, envMapSize: THREE.Vector3) { // defines - ;(shader as any).defines.BOX_PROJECTED_ENV_MAP = true + shader.defines!.BOX_PROJECTED_ENV_MAP = true // uniforms shader.uniforms.envMapPosition = { value: envMapPosition } shader.uniforms.envMapSize = { value: envMapSize } @@ -89,7 +97,7 @@ export function useBoxProjectedEnv( const spread = React.useMemo( () => ({ ref, - onBeforeCompile: (shader: THREE.Shader) => boxProjectedEnvMap(shader, config.position, config.size), + onBeforeCompile: (shader: MaterialShader) => boxProjectedEnvMap(shader, config.position, config.size), customProgramCacheKey: () => JSON.stringify(config.position.toArray()) + JSON.stringify(config.size.toArray()), }), [...config.position.toArray(), ...config.size.toArray()] From a8da89ccd3e3de097a519705a2abc28cbc5a23c6 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Tue, 26 Dec 2023 02:49:35 -0600 Subject: [PATCH 089/103] Revert "fix(Text): lazy import Troika for Next issue (#1726)" (#1767) --- src/core/Text.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/core/Text.tsx b/src/core/Text.tsx index 55e38f2b0..e7669d13c 100644 --- a/src/core/Text.tsx +++ b/src/core/Text.tsx @@ -1,4 +1,6 @@ import * as React from 'react' +// @ts-ignore +import { Text as TextMeshImpl, preloadFont } from 'troika-three-text' import { ReactThreeFiber, useThree } from '@react-three/fiber' import { suspend } from 'suspend-react' import { ForwardRefComponent } from '../helpers/ts-utils' @@ -52,9 +54,6 @@ export const Text: ForwardRefComponent = /* @__PURE__ */ React.forwa }: Props, ref: React.ForwardedRef ) => { - // https://github.com/pmndrs/drei/issues/1725 - const { Text: TextMeshImpl, preloadFont } = suspend(async () => import('troika-three-text'), []) - const invalidate = useThree(({ invalidate }) => invalidate) const [troikaMesh] = React.useState(() => new TextMeshImpl()) From 639fca1f16f74b16714097ea66f2fcb7b1e02604 Mon Sep 17 00:00:00 2001 From: Bhavishya Sahdev <44098372+bhavishya-sahdev@users.noreply.github.com> Date: Tue, 26 Dec 2023 14:20:11 +0530 Subject: [PATCH 090/103] fix: missing style prop from type in ScrollControls (#1766) --- src/web/ScrollControls.tsx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/web/ScrollControls.tsx b/src/web/ScrollControls.tsx index efec23830..ea94281e8 100644 --- a/src/web/ScrollControls.tsx +++ b/src/web/ScrollControls.tsx @@ -251,10 +251,14 @@ const ScrollHtml: ForwardRefComponent<{ children?: React.ReactNode; style?: Reac } ) -type ScrollProps = { - html?: boolean - children?: React.ReactNode -} +type ScrollProps = + | { children?: React.ReactNode } & ( + | { + html?: false + style?: never + } + | { html: true; style?: React.CSSProperties } + ) export const Scroll: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ html, ...props }: ScrollProps, ref) => { From aa2dd0f99fcb33562eff69b57fcb51dbe1d65ff3 Mon Sep 17 00:00:00 2001 From: Michael Dobekidis Date: Fri, 5 Jan 2024 10:14:54 +0200 Subject: [PATCH 091/103] feat: spriteanimator manual progression (#1669) * feat: added optional Sprite or Plane geometry for SpriteAnimator * feat: added manual progression to spriteanimator * fix: support for variable sized sprites * fix: to come in-sync with #1678 --- README.md | 39 ++++++ src/core/SpriteAnimator.tsx | 247 ++++++++++++++++++++++++++++++------ 2 files changed, 247 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 66b437249..e546740e6 100644 --- a/README.md +++ b/README.md @@ -2545,8 +2545,16 @@ type Props = { alphaTest?: number /** Displays the texture on a SpriteGeometry always facing the camera, if set to false, it renders on a PlaneGeometry */ asSprite?: boolean + /** Allows for manual update of the sprite animation e.g: via ScrollControls */ + offset?: number + /** Allows the sprite animation to start from the end towards the start */ + playBackwards: boolean /** Allows the animation to be paused after it ended so it can be restarted on demand via auto */ resetOnEnd?: boolean + /** An array of items to create instances from */ + instanceItems?: any[] + /** The max number of items to instance (optional) */ + maxItems?: number } ``` @@ -2570,6 +2578,37 @@ Notes: /> ``` +ScrollControls example + +```jsx +; + + + + + +function FireScroll() { + const sprite = useSpriteAnimator() + const scroll = useScroll() + const ref = React.useRef() + useFrame(() => { + if (sprite && scroll) { + sprite.current = scroll.offset + } + }) + + return null +} +``` + #### Stats [![](https://img.shields.io/badge/-storybook-%23ff69b4)](https://drei.vercel.app/?path=/story/misc-stats--default-story) diff --git a/src/core/SpriteAnimator.tsx b/src/core/SpriteAnimator.tsx index d56aaae46..7b31f075c 100644 --- a/src/core/SpriteAnimator.tsx +++ b/src/core/SpriteAnimator.tsx @@ -1,6 +1,7 @@ import * as React from 'react' import { useFrame, Vector3 } from '@react-three/fiber' import * as THREE from 'three' +import { Instances, Instance } from './Instances' export type SpriteAnimatorProps = { startFrame?: number @@ -23,9 +24,28 @@ export type SpriteAnimatorProps = { position?: Array alphaTest?: number asSprite?: boolean + offset?: number + playBackwards?: boolean resetOnEnd?: boolean + maxItems?: number + instanceItems?: any[] } & JSX.IntrinsicElements['group'] +type SpriteAnimatorState = { + /** The user-defined, mutable, current goal position along the curve, it may be >1 or <0 */ + current: number | undefined + /** The 0-1 normalised and damped current goal position along curve */ + offset: number | undefined + hasEnded: boolean | undefined + ref: React.MutableRefObject | undefined | null | ((instance: any) => void) +} + +const context = React.createContext(null!) + +export function useSpriteAnimator() { + return React.useContext(context) as SpriteAnimatorState +} + export const SpriteAnimator: React.FC = /* @__PURE__ */ React.forwardRef( ( { @@ -49,14 +69,18 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea alphaTest, children, asSprite, + offset, + playBackwards, resetOnEnd, + maxItems, + instanceItems, ...props }, fref ) => { + const ref = React.useRef() const spriteData = React.useRef(null) - const [isJsonReady, setJsonReady] = React.useState(false) - const hasEnded = React.useRef(false) + //const hasEnded = React.useRef(false) const matRef = React.useRef() const spriteRef = React.useRef() const timerOffset = React.useRef(window.performance.now()) @@ -70,6 +94,30 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea const flipOffset = flipX ? -1 : 1 const [displayAsSprite, setDisplayAsSprite] = React.useState(asSprite ?? true) const pauseRef = React.useRef(pause) + const pos = React.useRef(offset) + const softEnd = React.useRef(false) + const frameBuffer = React.useRef([]) + // + + function reset() {} + + const state = React.useMemo( + () => ({ + current: pos.current, + offset: pos.current, + imageUrl: textureImageURL, + reset: reset, + hasEnded: false, + ref: fref, + }), + [textureImageURL] + ) + + React.useImperativeHandle(fref, () => ref.current, []) + + React.useLayoutEffect(() => { + pos.current = offset + }, [offset]) function loadJsonAndTextureAndExecuteCallback( jsonUrl: string, @@ -114,6 +162,16 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea setDisplayAsSprite(asSprite ?? true) }, [asSprite]) + // support backwards play + React.useEffect(() => { + state.hasEnded = false + if (spriteData.current && playBackwards === true) { + currentFrame.current = spriteData.current.frames.length - 1 + } else { + currentFrame.current = 0 + } + }, [playBackwards]) + React.useLayoutEffect(() => { modifySpritePosition() }, [spriteTexture, flipX]) @@ -128,7 +186,7 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea if (currentFrameName.current !== frameName && frameName) { currentFrame.current = 0 currentFrameName.current = frameName - hasEnded.current = false + state.hasEnded = false modifySpritePosition() if (spriteData.current) { const { w, h } = getFirstItem(spriteData.current.frames).sourceSize @@ -138,6 +196,7 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea } }, [frameName]) + // parse sprite-data from JSON file (jsonHash or jsonArray) const parseSpriteData = (json: any, _spriteTexture: THREE.Texture): void => { // sprite only case if (json === null) { @@ -149,6 +208,11 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea const frameHeight = height textureData.current = _spriteTexture totalFrames.current = numberOfFrames + + if (playBackwards) { + currentFrame.current = numberOfFrames - 1 + } + spriteData.current = { frames: [], meta: { @@ -177,6 +241,10 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea totalFrames.current = Array.isArray(json.frames) ? json.frames.length : Object.keys(json.frames).length textureData.current = _spriteTexture + if (playBackwards) { + currentFrame.current = totalFrames.current - 1 + } + const { w, h } = getFirstItem(json.frames).sourceSize const aspect = calculateAspectRatio(w, h) @@ -186,6 +254,21 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea } } + // buffer for instanced + if (instanceItems) { + for (var i = 0; i < instanceItems.length; i++) { + const keys = Object.keys(spriteData.current.frames) + const randomKey = keys[Math.floor(Math.random() * keys.length)] + + frameBuffer.current.push({ + key: i, + frames: spriteData.current.frames, + selectedFrame: randomKey, + offset: { x: 0, y: 0 }, + }) + } + } + _spriteTexture.premultiplyAlpha = false setSpriteTexture(_spriteTexture) @@ -259,7 +342,6 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea matRef.current.map.offset.x = 0.0 //-matRef.current.map.repeat.x matRef.current.map.offset.y = 1 - frameOffsetY - setJsonReady(true) if (onStart) onStart({ currentFrameName: frameName, currentFrame: currentFrame.current }) } @@ -274,11 +356,22 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea } = spriteData.current const { w: frameW, h: frameH } = getFirstItem(frames).sourceSize const spriteFrames = Array.isArray(frames) ? frames : frameName ? frames[frameName] : [] - const _endFrame = endFrame || spriteFrames.length - 1 - if (currentFrame.current > _endFrame) { + var _offset = offset === undefined ? state.current : offset + + // conditionals to support backwards play + var endCondition = playBackwards ? currentFrame.current < 0 : currentFrame.current > _endFrame + var onStartCondition = playBackwards ? currentFrame.current === _endFrame : currentFrame.current === 0 + var manualProgressEndCondition = playBackwards ? currentFrame.current < 0 : currentFrame.current >= _endFrame + + if (endCondition) { currentFrame.current = loop ? startFrame ?? 0 : 0 + + if (playBackwards) { + currentFrame.current = _endFrame + } + if (loop) { onLoopEnd?.({ currentFrameName: frameName, @@ -289,7 +382,12 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea currentFrameName: frameName, currentFrame: currentFrame.current, }) - hasEnded.current = resetOnEnd ? false : true + + if (!_offset) { + console.log('will end') + } + + state.hasEnded = resetOnEnd ? false : true if (resetOnEnd) { pauseRef.current = true //calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames) @@ -297,14 +395,32 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea } if (!loop) return + } else if (onStartCondition) { + onStart?.({ + currentFrameName: frameName, + currentFrame: currentFrame.current, + }) + } + + // for manual update + if (_offset !== undefined && manualProgressEndCondition) { + if (softEnd.current === false) { + onEnd?.({ + currentFrameName: frameName, + currentFrame: currentFrame.current, + }) + softEnd.current = true + } + } else { + // same for start? + softEnd.current = false } + // clock to limit fps if (diff <= fpsInterval) return timerOffset.current = now - (diff % fpsInterval) calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames) - - currentFrame.current += 1 } const calculateFinalPosition = ( @@ -313,15 +429,23 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea metaInfo: { w: number; h: number }, spriteFrames: { frame: { x: any; y: any }; sourceSize: { w: any; h: any } }[] ) => { + // get the manual update offset to find the next frame + var _offset = offset === undefined ? state.current : offset + const targetFrame = currentFrame.current let finalValX = 0 let finalValY = 0 calculateAspectRatio(frameW, frameH) const framesH = (metaInfo.w - 1) / frameW const framesV = (metaInfo.h - 1) / frameH + if (!spriteFrames[targetFrame]) { + return + } + const { frame: { x: frameX, y: frameY }, sourceSize: { w: originalSizeX, h: originalSizeY }, - } = spriteFrames[currentFrame.current] + } = spriteFrames[targetFrame] + const frameOffsetX = 1 / framesH const frameOffsetY = 1 / framesV finalValX = @@ -332,6 +456,28 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea matRef.current.map.offset.x = finalValX matRef.current.map.offset.y = finalValY + + // if manual update is active + if (_offset !== undefined && _offset !== null) { + // Calculate the frame index, based on offset given from the provider + let frameIndex = Math.floor(_offset * spriteFrames.length) + + // Ensure the frame index is within the valid range + frameIndex = Math.max(0, Math.min(frameIndex, spriteFrames.length - 1)) + + if (isNaN(frameIndex)) { + console.log('nan frame detected') + frameIndex = 0 //fallback + } + currentFrame.current = frameIndex + } else { + // auto update + if (playBackwards) { + currentFrame.current -= 1 + } else { + currentFrame.current += 1 + } + } } // *** Warning! It runs on every frame! *** @@ -344,7 +490,7 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea return } - if (!hasEnded.current && (autoPlay || play)) { + if (!state.hasEnded && (autoPlay || play)) { runAnimation() onFrame && onFrame({ currentFrameName: currentFrameName.current, currentFrame: currentFrame.current }) } @@ -363,34 +509,57 @@ export const SpriteAnimator: React.FC = /* @__PURE__ */ Rea } return ( - - - {displayAsSprite && ( - - - - )} - {!displayAsSprite && ( - - - - - )} - - {children} + + + + {displayAsSprite && ( + + + + )} + {!displayAsSprite && ( + + + + + {(instanceItems ?? [0]).map((item, index) => { + const texture = spriteTexture.clone() + if (matRef.current && frameBuffer.current[index]) { + texture.offset.set(frameBuffer.current[index].offset.x, frameBuffer.current[index].offset.y) // Set the offset for this item + } + + return ( + + + + ) + })} + + )} + + {children} + ) } From 3db2ed1c9edf17ad7d23283b6b51a9d909e7b587 Mon Sep 17 00:00:00 2001 From: Dennis Smolek Date: Tue, 16 Jan 2024 03:42:06 +0900 Subject: [PATCH 092/103] fix(Lines): accept Vector4 for points prop (#1782) --- src/core/Line.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/Line.tsx b/src/core/Line.tsx index af1c502e0..583dcef9b 100644 --- a/src/core/Line.tsx +++ b/src/core/Line.tsx @@ -1,5 +1,5 @@ import * as React from 'react' -import { Vector2, Vector3, Color, ColorRepresentation } from 'three' +import { Vector2, Vector3, Vector4, Color, ColorRepresentation } from 'three' import { ReactThreeFiber, useThree } from '@react-three/fiber' import { LineGeometry, @@ -33,7 +33,7 @@ export const Line: ForwardRefComponent = /* @_ const geom = segments ? new LineSegmentsGeometry() : new LineGeometry() const pValues = points.map((p) => { const isArray = Array.isArray(p) - return p instanceof Vector3 + return p instanceof Vector3 || p instanceof Vector4 ? [p.x, p.y, p.z] : p instanceof Vector2 ? [p.x, p.y, 0] From c9657626c56422aa9e28d7e49db8b2740ded37d6 Mon Sep 17 00:00:00 2001 From: drcmda Date: Tue, 16 Jan 2024 14:41:47 +0100 Subject: [PATCH 093/103] feat: inline views (#1784) * feat: inline views * fix: view unmount gl.clear * fix: clean up, fix visible * fix: instances + scrollcontrols TS issue * chore: readme --- README.md | 47 ++++-- package.json | 7 +- src/core/Instances.tsx | 10 +- src/web/ScrollControls.tsx | 24 +-- src/web/View.tsx | 302 ++++++++++++++++++++++++------------- yarn.lock | 39 +++-- 6 files changed, 288 insertions(+), 141 deletions(-) diff --git a/README.md b/README.md index e546740e6..80c6939e8 100644 --- a/README.md +++ b/README.md @@ -3638,30 +3638,53 @@ integrations into your view. > versions of `@react-three/fiber`. ```tsx - +export type ViewProps = { + /** Root element type, default: div */ + as?: string + /** CSS id prop */ + id?: string + /** CSS classname prop */ + className?: string + /** CSS style prop */ + style?: React.CSSProperties + /** If the view is visible or not, default: true */ + visible?: boolean /** Views take over the render loop, optional render index (1 by default) */ index?: number - /** If you know your view is always at the same place set this to 1 to avoid needless getBoundingClientRect overhead. The default is Infinity, which is best for css animations */ + /** If you know your view is always at the same place set this to 1 to avoid needless getBoundingClientRect overhead */ frames?: number /** The scene to render, if you leave this undefined it will render the default scene */ children?: React.ReactNode -/> + /** The tracking element, the view will be cut according to its whereabouts + * @deprecated + */ + track: React.MutableRefObject +} + +export type ViewportProps = { Port: () => React.ReactNode } & React.ForwardRefExoticComponent< + ViewProps & React.RefAttributes +> ``` +You can define as many views as you like, directly mix them into your dom graph, right where you want them to appear. `View` is an unstyled HTML DOM element (by default a div, and it takes the same properties as one). Use `View.Port` inside the canvas to output them. The canvas should ideally fill the entire screen with absolute positioning, underneath HTML or on top of it, as you prefer. + ```jsx -const container = useRef() -const tracking = useRef() return (

    Html content here

    -
    + + + + + + + + - - - - + + +
    +) ``` #### RenderTexture diff --git a/package.json b/package.json index 83c3f6f71..e9f82a07f 100644 --- a/package.json +++ b/package.json @@ -77,9 +77,10 @@ "three-mesh-bvh": "^0.6.7", "three-stdlib": "^2.28.0", "troika-three-text": "^0.47.2", + "tunnel-rat": "^0.1.2", "utility-types": "^3.10.0", "uuid": "^9.0.1", - "zustand": "^3.5.13" + "zustand": "^3.7.1" }, "devDependencies": { "@babel/core": "^7.14.3", @@ -107,8 +108,8 @@ "@storybook/theming": "^7.0.12", "@types/jest": "^26.0.10", "@types/lodash-es": "^4.17.3", - "@types/react": "^17.0.5", - "@types/react-dom": "^17.0.5", + "@types/react": "^18.0.0", + "@types/react-dom": "^18.0.0", "@types/three": "^0.149.0", "@typescript-eslint/eslint-plugin": "^5.4.0", "@typescript-eslint/parser": "^5.4.0", diff --git a/src/core/Instances.tsx b/src/core/Instances.tsx index 113ceb1da..9a7817cbc 100644 --- a/src/core/Instances.tsx +++ b/src/core/Instances.tsx @@ -34,6 +34,14 @@ type InstancedMesh = Omit & React.RefAttributes> +) => React.ReactNode { + return typeof value === 'function' +} + const _instanceLocalMatrix = /* @__PURE__ */ new THREE.Matrix4() const _instanceWorldMatrix = /* @__PURE__ */ new THREE.Matrix4() const _instanceIntersects: THREE.Intersection[] = [] @@ -192,7 +200,7 @@ export const Instances: ForwardRefComponent = /* itemSize={3} usage={THREE.DynamicDrawUsage} /> - {typeof children === 'function' ? ( + {isFunctionChild(children) ? ( {children(instance)} ) : ( {children} diff --git a/src/web/ScrollControls.tsx b/src/web/ScrollControls.tsx index ea94281e8..d8d4921c7 100644 --- a/src/web/ScrollControls.tsx +++ b/src/web/ScrollControls.tsx @@ -210,16 +210,18 @@ export function ScrollControls({ return {children} } -const ScrollCanvas: ForwardRefComponent<{}, THREE.Group> = /* @__PURE__ */ React.forwardRef(({ children }, ref) => { - const group = React.useRef(null!) - const state = useScroll() - const { width, height } = useThree((state) => state.viewport) - useFrame(() => { - group.current.position.x = state.horizontal ? -width * (state.pages - 1) * state.offset : 0 - group.current.position.y = state.horizontal ? 0 : height * (state.pages - 1) * state.offset - }) - return {children} -}) +const ScrollCanvas = /* @__PURE__ */ React.forwardRef( + ({ children }: ScrollProps, ref: React.ForwardedRef) => { + const group = React.useRef(null!) + const state = useScroll() + const { width, height } = useThree((state) => state.viewport) + useFrame(() => { + group.current.position.x = state.horizontal ? -width * (state.pages - 1) * state.offset : 0 + group.current.position.y = state.horizontal ? 0 : height * (state.pages - 1) * state.offset + }) + return {children} + } +) const ScrollHtml: ForwardRefComponent<{ children?: React.ReactNode; style?: React.CSSProperties }, HTMLDivElement> = React.forwardRef( @@ -263,6 +265,6 @@ type ScrollProps = export const Scroll: ForwardRefComponent = /* @__PURE__ */ React.forwardRef( ({ html, ...props }: ScrollProps, ref) => { const El = html ? ScrollHtml : ScrollCanvas - return + return } ) diff --git a/src/web/View.tsx b/src/web/View.tsx index c8cf6aea0..cf35339b6 100644 --- a/src/web/View.tsx +++ b/src/web/View.tsx @@ -1,10 +1,12 @@ import * as React from 'react' import * as THREE from 'three' -import { createPortal, useFrame, useThree } from '@react-three/fiber' +import { RootState, context, createPortal, useFrame, useThree } from '@react-three/fiber' +import tunnel from 'tunnel-rat' const isOrthographicCamera = (def: any): def is THREE.OrthographicCamera => def && (def as THREE.OrthographicCamera).isOrthographicCamera -const col = /* @__PURE__ */ new THREE.Color() +const col = new THREE.Color() +const tracked = tunnel() /** * In `@react-three/fiber` after `v8.0.0` but prior to `v8.1.0`, `state.size` contained only dimension @@ -27,6 +29,7 @@ function isNonLegacyCanvasSize(size: Record): size is CanvasSize } export type ContainerProps = { + visible: boolean scene: THREE.Scene index: number children?: React.ReactNode @@ -37,45 +40,85 @@ export type ContainerProps = { } export type ViewProps = { - /** The tracking element, the view will be cut according to its whereabouts */ - track: React.MutableRefObject + /** Root element type, default: div */ + as?: string + /** CSS id prop */ + id?: string + /** CSS classname prop */ + className?: string + /** CSS style prop */ + style?: React.CSSProperties + /** If the view is visible or not, default: true */ + visible?: boolean /** Views take over the render loop, optional render index (1 by default) */ index?: number /** If you know your view is always at the same place set this to 1 to avoid needless getBoundingClientRect overhead */ frames?: number /** The scene to render, if you leave this undefined it will render the default scene */ children?: React.ReactNode + /** The tracking element, the view will be cut according to its whereabouts + * @deprecated + */ + track: React.MutableRefObject } -function computeContainerPosition( - canvasSize: LegacyCanvasSize | CanvasSize, - trackRect: DOMRect -): { - position: CanvasSize & { bottom: number; right: number } - isOffscreen: boolean -} { +function computeContainerPosition(canvasSize: LegacyCanvasSize | CanvasSize, trackRect: DOMRect) { const { right, top, left: trackLeft, bottom: trackBottom, width, height } = trackRect const isOffscreen = trackRect.bottom < 0 || top > canvasSize.height || right < 0 || trackRect.left > canvasSize.width - if (isNonLegacyCanvasSize(canvasSize)) { const canvasBottom = canvasSize.top + canvasSize.height const bottom = canvasBottom - trackBottom const left = trackLeft - canvasSize.left - return { position: { width, height, left, top, bottom, right }, isOffscreen } } - // Fall back on old behavior if r3f < 8.1.0 const bottom = canvasSize.height - trackBottom - return { position: { width, height, top, left: trackLeft, bottom, right }, isOffscreen } } -function Container({ canvasSize, scene, index, children, frames, rect, track }: ContainerProps) { - const get = useThree((state) => state.get) - const camera = useThree((state) => state.camera) - const virtualScene = useThree((state) => state.scene) - const setEvents = useThree((state) => state.setEvents) +function prepareSkissor( + state: RootState, + { left, bottom, width, height }: LegacyCanvasSize & { top: number; left: number } & { bottom: number; right: number } +) { + let autoClear + const aspect = width / height + if (isOrthographicCamera(state.camera)) { + if ( + state.camera.left !== width / -2 || + state.camera.right !== width / 2 || + state.camera.top !== height / 2 || + state.camera.bottom !== height / -2 + ) { + Object.assign(state.camera, { left: width / -2, right: width / 2, top: height / 2, bottom: height / -2 }) + state.camera.updateProjectionMatrix() + } + } else if (state.camera.aspect !== aspect) { + state.camera.aspect = aspect + state.camera.updateProjectionMatrix() + } + autoClear = state.gl.autoClear + state.gl.autoClear = false + state.gl.setViewport(left, bottom, width, height) + state.gl.setScissor(left, bottom, width, height) + state.gl.setScissorTest(true) + return autoClear +} + +function finishSkissor(state: RootState, autoClear: boolean) { + // Restore the default state + state.gl.setScissorTest(false) + state.gl.autoClear = autoClear +} + +function clear(state: RootState) { + state.gl.getClearColor(col) + state.gl.setClearColor(col, state.gl.getClearAlpha()) + state.gl.clear(true, true) +} + +function Container({ visible = true, canvasSize, scene, index, children, frames, rect, track }: ContainerProps) { + const rootState = useThree() + const [isOffscreen, setOffscreen] = React.useState(false) let frameCount = 0 useFrame((state) => { @@ -83,52 +126,37 @@ function Container({ canvasSize, scene, index, children, frames, rect, track }: rect.current = track.current?.getBoundingClientRect() frameCount++ } - - if (rect.current) { - const { - position: { left, bottom, width, height }, - isOffscreen, - } = computeContainerPosition(canvasSize, rect.current) - - const aspect = width / height - - if (isOrthographicCamera(camera)) { - if ( - camera.left !== width / -2 || - camera.right !== width / 2 || - camera.top !== height / 2 || - camera.bottom !== height / -2 - ) { - Object.assign(camera, { left: width / -2, right: width / 2, top: height / 2, bottom: height / -2 }) - camera.updateProjectionMatrix() - } - } else if (camera.aspect !== aspect) { - camera.aspect = aspect - camera.updateProjectionMatrix() - } - - state.gl.setViewport(left, bottom, width, height) - state.gl.setScissor(left, bottom, width, height) - state.gl.setScissorTest(true) - - if (isOffscreen) { - state.gl.getClearColor(col) - state.gl.setClearColor(col, state.gl.getClearAlpha()) - state.gl.clear(true, true) - } else { - // When children are present render the portalled scene, otherwise the default scene - state.gl.render(children ? virtualScene : scene, camera) - } - // Restore the default state - state.gl.setScissorTest(true) + const { position, isOffscreen: _isOffscreen } = computeContainerPosition(canvasSize, rect.current) + if (isOffscreen !== _isOffscreen) setOffscreen(_isOffscreen) + if (visible && !isOffscreen && rect.current) { + const autoClear = prepareSkissor(state, position) + // When children are present render the portalled scene, otherwise the default scene + state.gl.render(children ? state.scene : scene, state.camera) + finishSkissor(state, autoClear) } }, index) + React.useLayoutEffect(() => { + if (!visible || !isOffscreen) { + // If the view is not visible clear it once, but stop rendering afterwards! + const { position } = computeContainerPosition(canvasSize, rect.current) + const autoClear = prepareSkissor(rootState, position) + clear(rootState) + finishSkissor(rootState, autoClear) + } + }, [visible, isOffscreen]) + React.useEffect(() => { // Connect the event layer to the tracking element - const old = get().events.connected - setEvents({ connected: track.current }) - return () => setEvents({ connected: old }) + const old = rootState.get().events.connected + rootState.setEvents({ connected: track.current }) + return () => { + const { position } = computeContainerPosition(canvasSize, rect.current) + const autoClear = prepareSkissor(rootState, position) + clear(rootState) + finishSkissor(rootState, autoClear) + rootState.setEvents({ connected: old }) + } }, []) React.useEffect(() => { @@ -144,47 +172,113 @@ function Container({ canvasSize, scene, index, children, frames, rect, track }: return <>{children} } -export const View = ({ track, index = 1, frames = Infinity, children }: ViewProps) => { - const rect = React.useRef(null!) - const { size, scene } = useThree() - const [virtualScene] = React.useState(() => new THREE.Scene()) - - const compute = React.useCallback( - (event, state) => { - if (rect.current && track.current && event.target === track.current) { - const { width, height, left, top } = rect.current - const x = event.clientX - left - const y = event.clientY - top - state.pointer.set((x / width) * 2 - 1, -(y / height) * 2 + 1) - state.raycaster.setFromCamera(state.pointer, state.camera) - } - }, - [rect, track] - ) - - const [ready, toggle] = React.useReducer(() => true, false) - React.useEffect(() => { - // We need the tracking elements bounds beforehand in order to inject it into the portal - rect.current = track.current?.getBoundingClientRect() - // And now we can proceed - toggle() - }, [track]) - - return ( - <> - {ready && - createPortal( - +const CanvasView = React.forwardRef( + ( + { track, visible = true, index = 1, id, style, className, frames = Infinity, children, ...props }: ViewProps, + fref: React.ForwardedRef + ) => { + const rect = React.useRef(null!) + const { size, scene } = useThree() + const [virtualScene] = React.useState(() => new THREE.Scene()) + const [ready, toggle] = React.useReducer(() => true, false) + + const compute = React.useCallback( + (event, state) => { + if (rect.current && track.current && event.target === track.current) { + const { width, height, left, top } = rect.current + const x = event.clientX - left + const y = event.clientY - top + state.pointer.set((x / width) * 2 - 1, -(y / height) * 2 + 1) + state.raycaster.setFromCamera(state.pointer, state.camera) + } + }, + [rect, track] + ) + + React.useEffect(() => { + // We need the tracking elements bounds beforehand in order to inject it into the portal + rect.current = track.current?.getBoundingClientRect() + // And now we can proceed + toggle() + }, [track]) + + return ( + + {ready && + createPortal( + + {children} + , + virtualScene, + { + events: { compute, priority: index }, + size: { + width: rect.current?.width, + height: rect.current?.height, + // @ts-ignore + top: rect.current?.top, + // @ts-ignore + left: rect.current?.left, + }, + } + )} + + ) + } +) + +const HtmlView = React.forwardRef( + ( + { + as: El = 'div', + id, + visible, + className, + style, + index = 1, + track, + frames = Infinity, + children, + ...props + }: ViewProps, + fref: React.ForwardedRef + ) => { + const uuid = React.useId() + const ref = React.useRef(null!) + React.useImperativeHandle(fref, () => ref.current) + return ( + <> + {/** @ts-ignore */} + + + {children} - {/* Without an element that receives pointer events state.pointer will always be 0/0 */} - null} /> - , - virtualScene, - { - events: { compute, priority: index }, - size: { width: rect.current?.width, height: rect.current?.height } as any, - } - )} - - ) -} + + + + ) + } +) + +export type ViewportProps = { Port: () => React.ReactNode } & React.ForwardRefExoticComponent< + ViewProps & React.RefAttributes +> + +export const View = React.forwardRef((props: ViewProps, fref: React.ForwardedRef) => { + // If we're inside a canvas we should be able to access the context store + const store = React.useContext(context) + // If that's not the case we render a tunnel + if (!store) return } {...props} /> + // Otherwise a plain canvas-view + else return } {...props} /> +}) as ViewportProps + +View.Port = () => diff --git a/yarn.lock b/yarn.lock index 34a7e2c8d..02a83af14 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3906,12 +3906,12 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/react-dom@^17.0.5": - version "17.0.20" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.20.tgz#e0c8901469d732b36d8473b40b679ad899da1b53" - integrity sha512-4pzIjSxDueZZ90F52mU3aPoogkHIoSIDG+oQ+wQK7Cy2B9S+MvOqY0uEA/qawKz381qrEDkvpwyt8Bm31I8sbA== +"@types/react-dom@^18.0.0": + version "18.2.18" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.18.tgz#16946e6cd43971256d874bc3d0a72074bb8571dd" + integrity sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw== dependencies: - "@types/react" "^17" + "@types/react" "*" "@types/react-reconciler@^0.26.7": version "0.26.7" @@ -3943,10 +3943,10 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/react@^17", "@types/react@^17.0.5": - version "17.0.65" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.65.tgz#95f6a2ab61145ffb69129d07982d047f9e0870cd" - integrity sha512-oxur785xZYHvnI7TRS61dXbkIhDPnGfsXKv0cNXR/0ml4SipRIFpSMzA7HMEfOywFwJ5AOnPrXYTEiTRUQeGlQ== +"@types/react@^18.0.0": + version "18.2.48" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.48.tgz#11df5664642d0bd879c1f58bc1d37205b064e8f1" + integrity sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -13263,6 +13263,13 @@ tuf-js@^2.1.0: debug "^4.3.4" make-fetch-happen "^13.0.0" +tunnel-rat@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/tunnel-rat/-/tunnel-rat-0.1.2.tgz#1717efbc474ea2d8aa05a91622457a6e201c0aeb" + integrity sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ== + dependencies: + zustand "^4.3.2" + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -13598,6 +13605,11 @@ use-sidecar@^1.1.2: detect-node-es "^1.1.0" tslib "^2.0.0" +use-sync-external-store@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -14036,7 +14048,14 @@ yocto-queue@^1.0.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== -zustand@^3.5.13, zustand@^3.7.1: +zustand@^3.7.1: version "3.7.2" resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.7.2.tgz#7b44c4f4a5bfd7a8296a3957b13e1c346f42514d" integrity sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA== + +zustand@^4.3.2: + version "4.4.7" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.7.tgz#355406be6b11ab335f59a66d2cf9815e8f24038c" + integrity sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw== + dependencies: + use-sync-external-store "1.2.0" From db00fa0d769cec60204cc2fadca022c5ef9eeb26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Tue, 16 Jan 2024 15:04:06 +0100 Subject: [PATCH 094/103] chore: view examples --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 80c6939e8..e65dd2d01 100644 --- a/README.md +++ b/README.md @@ -3623,6 +3623,7 @@ type HudProps = {

    Demo + Demo Demo Demo

    From de94ed24360385b770d0eac82c81beae441797fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Tue, 16 Jan 2024 15:21:54 +0100 Subject: [PATCH 095/103] fix: safeguard rect.current in view --- src/web/View.tsx | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/web/View.tsx b/src/web/View.tsx index cf35339b6..2352fb643 100644 --- a/src/web/View.tsx +++ b/src/web/View.tsx @@ -126,20 +126,23 @@ function Container({ visible = true, canvasSize, scene, index, children, frames, rect.current = track.current?.getBoundingClientRect() frameCount++ } - const { position, isOffscreen: _isOffscreen } = computeContainerPosition(canvasSize, rect.current) - if (isOffscreen !== _isOffscreen) setOffscreen(_isOffscreen) - if (visible && !isOffscreen && rect.current) { - const autoClear = prepareSkissor(state, position) - // When children are present render the portalled scene, otherwise the default scene - state.gl.render(children ? state.scene : scene, state.camera) - finishSkissor(state, autoClear) + if (rect.current) { + const { position, isOffscreen: _isOffscreen } = computeContainerPosition(canvasSize, rect.current) + if (isOffscreen !== _isOffscreen) setOffscreen(_isOffscreen) + if (visible && !isOffscreen && rect.current) { + const autoClear = prepareSkissor(state, position) + // When children are present render the portalled scene, otherwise the default scene + state.gl.render(children ? state.scene : scene, state.camera) + finishSkissor(state, autoClear) + } } }, index) React.useLayoutEffect(() => { - if (!visible || !isOffscreen) { + const curRect = rect.current + if (curRect && (!visible || !isOffscreen)) { // If the view is not visible clear it once, but stop rendering afterwards! - const { position } = computeContainerPosition(canvasSize, rect.current) + const { position } = computeContainerPosition(canvasSize, curRect) const autoClear = prepareSkissor(rootState, position) clear(rootState) finishSkissor(rootState, autoClear) @@ -147,22 +150,23 @@ function Container({ visible = true, canvasSize, scene, index, children, frames, }, [visible, isOffscreen]) React.useEffect(() => { + const curRect = rect.current // Connect the event layer to the tracking element const old = rootState.get().events.connected rootState.setEvents({ connected: track.current }) return () => { - const { position } = computeContainerPosition(canvasSize, rect.current) - const autoClear = prepareSkissor(rootState, position) - clear(rootState) - finishSkissor(rootState, autoClear) + if (curRect) { + const { position } = computeContainerPosition(canvasSize, curRect) + const autoClear = prepareSkissor(rootState, position) + clear(rootState) + finishSkissor(rootState, autoClear) + } rootState.setEvents({ connected: old }) } }, []) React.useEffect(() => { - if (isNonLegacyCanvasSize(canvasSize)) { - return - } + if (isNonLegacyCanvasSize(canvasSize)) return console.warn( 'Detected @react-three/fiber canvas size does not include position information. may not work as expected. ' + 'Upgrade to @react-three/fiber ^8.1.0 for support.\n See https://github.com/pmndrs/drei/issues/944' From 71b7757d6741051350b974a42080ab8409cac27c Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Thu, 18 Jan 2024 00:33:51 -0600 Subject: [PATCH 096/103] feat(Line): vertex alpha colors (#1787) --- .storybook/stories/useBVH.stories.tsx | 4 ++-- package.json | 4 ++-- src/core/Line.tsx | 8 +++++--- yarn.lock | 18 +++++++++--------- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/.storybook/stories/useBVH.stories.tsx b/.storybook/stories/useBVH.stories.tsx index c9e7b018b..98fc13229 100644 --- a/.storybook/stories/useBVH.stories.tsx +++ b/.storybook/stories/useBVH.stories.tsx @@ -1,7 +1,7 @@ import * as React from 'react' import { Setup } from '../Setup' -import { MeshBVHVisualizer } from 'three-mesh-bvh' +import { MeshBVHHelper } from 'three-mesh-bvh' import { useHelper, useBVH, TorusKnot, OrbitControls } from '../../src' import { useFrame, useThree } from '@react-three/fiber' @@ -24,7 +24,7 @@ function TorusBVH({ bvh, ...props }) { }) const debug = boolean('vizualize bounds', true) - useHelper(debug ? mesh : dummy, MeshBVHVisualizer) + useHelper(debug ? mesh : dummy, MeshBVHHelper) const [hovered, setHover] = React.useState(false) return ( diff --git a/package.json b/package.json index e9f82a07f..6208c503c 100644 --- a/package.json +++ b/package.json @@ -74,8 +74,8 @@ "stats-gl": "^2.0.0", "stats.js": "^0.17.0", "suspend-react": "^0.1.3", - "three-mesh-bvh": "^0.6.7", - "three-stdlib": "^2.28.0", + "three-mesh-bvh": "^0.7.0", + "three-stdlib": "^2.29.4", "troika-three-text": "^0.47.2", "tunnel-rat": "^0.1.2", "utility-types": "^3.10.0", diff --git a/src/core/Line.tsx b/src/core/Line.tsx index 583dcef9b..965c69dbb 100644 --- a/src/core/Line.tsx +++ b/src/core/Line.tsx @@ -13,7 +13,7 @@ import { ForwardRefComponent } from '../helpers/ts-utils' export type LineProps = { points: Array - vertexColors?: Array + vertexColors?: Array lineWidth?: number segments?: boolean } & Omit & @@ -29,6 +29,7 @@ export const Line: ForwardRefComponent = /* @_ const size = useThree((state) => state.size) const line2 = React.useMemo(() => (segments ? new LineSegments2() : new Line2()), [segments]) const [lineMaterial] = React.useState(() => new LineMaterial()) + const itemSize = (vertexColors?.[0] as number[] | undefined)?.length === 4 ? 4 : 3 const lineGeom = React.useMemo(() => { const geom = segments ? new LineSegmentsGeometry() : new LineGeometry() const pValues = points.map((p) => { @@ -48,11 +49,11 @@ export const Line: ForwardRefComponent = /* @_ if (vertexColors) { const cValues = vertexColors.map((c) => (c instanceof Color ? c.toArray() : c)) - geom.setColors(cValues.flat()) + geom.setColors(cValues.flat(), itemSize) } return geom - }, [points, segments, vertexColors]) + }, [points, segments, vertexColors, itemSize]) React.useLayoutEffect(() => { line2.computeLineDistances() @@ -83,6 +84,7 @@ export const Line: ForwardRefComponent = /* @_ resolution={[size.width, size.height]} linewidth={linewidth ?? lineWidth} dashed={dashed} + transparent={itemSize === 4} {...rest} /> diff --git a/yarn.lock b/yarn.lock index 02a83af14..96424091c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13037,15 +13037,15 @@ text-table@^0.2.0, text-table@~0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -three-mesh-bvh@^0.6.7: - version "0.6.7" - resolved "https://registry.yarnpkg.com/three-mesh-bvh/-/three-mesh-bvh-0.6.7.tgz#6491876f5bf0c0d67be81a4402f2abdbb2266d76" - integrity sha512-RYdjMsH+vZvjLwA+ehI4+ZqTaTehAz4iho2yfL5PdGsIHyxpB78g0iy4Emj8079m/9KBX02TzddkvPSKSruQjg== - -three-stdlib@^2.28.0: - version "2.28.5" - resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.28.5.tgz#8184f5bacc90c2eec6ed36a861224e18799226fd" - integrity sha512-JdLMhkpT+1ZWeQPyKQNW1zqUwISI2hsUljS6u3vB9lp5EvwsayaAzGnbVeR35895udOF+zxcTiQY3psk+qqlxg== +three-mesh-bvh@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/three-mesh-bvh/-/three-mesh-bvh-0.7.0.tgz#8327c3483060bb7fe3e0151d7863d338095527d4" + integrity sha512-Hj0Z1Rp02yy5H+/xtMBu/dYAeRsSONaBaVLZoST9sMpZxycHypRiUeMHucPOLWFHnpc5hwelOnONcLpkfhDg0Q== + +three-stdlib@^2.29.4: + version "2.29.4" + resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.29.4.tgz#6e8741f6a2d435d15ed73f3a14dd149660d4ce51" + integrity sha512-XNzGCrz/uAk9XoLwd35eN7dQyI4ggXZTeqjcN034YdYBpBlNO9kmLHehl/0Nw9jCelblB7jla+unHAOIyLyV6Q== dependencies: "@types/draco3d" "^1.4.0" "@types/offscreencanvas" "^2019.6.4" From 4d741a20c9dceb3da132e25dccb83ed4120fd168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Thu, 18 Jan 2024 14:03:05 +0100 Subject: [PATCH 097/103] feat: image border radius --- README.md | 16 ++++++++++++++++ src/core/Image.tsx | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e65dd2d01..0437a87a4 100644 --- a/README.md +++ b/README.md @@ -1310,10 +1310,26 @@ api.eyeRightRef.current.irisDirRef.current.localToWorld(new THREE.Vector3(0, 0, A shader-based image component with auto-cover (similar to css/background: cover). +```tsx +export type ImageProps = Omit & { + segments?: number + scale?: number | [number, number] + color?: Color + zoom?: number + radius?: number + grayscale?: number + toneMapped?: boolean + transparent?: boolean + opacity?: number + side?: THREE.Side +} +``` + ```jsx function Foo() { const ref = useRef() useFrame(() => { + ref.current.material.radius = ... // between 0 and 1 ref.current.material.zoom = ... // 1 and higher ref.current.material.grayscale = ... // between 0 and 1 ref.current.material.color.set(...) // mix-in color diff --git a/src/core/Image.tsx b/src/core/Image.tsx index c44b54d31..71c395a5d 100644 --- a/src/core/Image.tsx +++ b/src/core/Image.tsx @@ -1,6 +1,6 @@ import * as React from 'react' import * as THREE from 'three' -import { Color, extend } from '@react-three/fiber' +import { Color, extend, useThree } from '@react-three/fiber' import { shaderMaterial } from './shaderMaterial' import { useTexture } from './useTexture' import { ForwardRefComponent } from '../helpers/ts-utils' @@ -11,6 +11,7 @@ export type ImageProps = Omit & { scale?: number | [number, number] color?: Color zoom?: number + radius?: number grayscale?: number toneMapped?: boolean transparent?: boolean @@ -21,6 +22,8 @@ export type ImageProps = Omit & { type ImageMaterialType = JSX.IntrinsicElements['shaderMaterial'] & { scale?: number[] imageBounds?: number[] + radius?: number + resolution?: number color?: Color map: THREE.Texture zoom?: number @@ -40,25 +43,32 @@ const ImageMaterialImpl = /* @__PURE__ */ shaderMaterial( color: /* @__PURE__ */ new THREE.Color('white'), scale: /* @__PURE__ */ new THREE.Vector2(1, 1), imageBounds: /* @__PURE__ */ new THREE.Vector2(1, 1), + resolution: 1024, map: null, zoom: 1, + radius: 0, grayscale: 0, opacity: 1, }, /* glsl */ ` varying vec2 vUv; + varying vec2 vPos; void main() { gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.); vUv = uv; + vPos = position.xy; } `, /* glsl */ ` // mostly from https://gist.github.com/statico/df64c5d167362ecf7b34fca0b1459a44 varying vec2 vUv; + varying vec2 vPos; uniform vec2 scale; uniform vec2 imageBounds; + uniform float resolution; uniform vec3 color; uniform sampler2D map; + uniform float radius; uniform float zoom; uniform float grayscale; uniform float opacity; @@ -69,6 +79,14 @@ const ImageMaterialImpl = /* @__PURE__ */ shaderMaterial( vec2 aspect(vec2 size) { return size / min(size.x, size.y); } + + const float PI = 3.14159265; + + // from https://iquilezles.org/articles/distfunctions + float udRoundBox( vec2 p, vec2 b, float r ) { + return length(max(abs(p)-b+r,0.0))-r; + } + void main() { vec2 s = aspect(scale); vec2 i = aspect(imageBounds); @@ -78,7 +96,12 @@ const ImageMaterialImpl = /* @__PURE__ */ shaderMaterial( vec2 offset = (rs < ri ? vec2((new.x - s.x) / 2.0, 0.0) : vec2(0.0, (new.y - s.y) / 2.0)) / new; vec2 uv = vUv * s / new + offset; vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5); - gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, opacity), grayscale); + + vec2 res = vec2(scale * resolution); + vec2 halfRes = 0.5 * res; + float b = udRoundBox(vUv.xy * res - halfRes, halfRes, resolution * radius); + vec3 a = mix(vec3(1.0,0.0,0.0), vec3(0.0,0.0,0.0), smoothstep(0.0, 1.0, b)); + gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, opacity * a), grayscale); #include #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}> @@ -96,6 +119,7 @@ const ImageBase: ForwardRefComponent, THREE.Mesh> = /* @ zoom = 1, grayscale = 0, opacity = 1, + radius = 0, texture, toneMapped, transparent, @@ -106,8 +130,10 @@ const ImageBase: ForwardRefComponent, THREE.Mesh> = /* @ ) => { extend({ ImageMaterial: ImageMaterialImpl }) const ref = React.useRef(null!) + const size = useThree((state) => state.size) const planeBounds = Array.isArray(scale) ? [scale[0], scale[1]] : [scale, scale] const imageBounds = [texture!.image.width, texture!.image.height] + const resolution = Math.max(size.width, size.height) React.useImperativeHandle(fref, () => ref.current, []) React.useLayoutEffect(() => { // Support arbitrary plane geometries (for instance with rounded corners) @@ -133,9 +159,12 @@ const ImageBase: ForwardRefComponent, THREE.Mesh> = /* @ opacity={opacity} scale={planeBounds} imageBounds={imageBounds} + resolution={resolution} + radius={radius} toneMapped={toneMapped} transparent={transparent} side={side} + key={ImageMaterialImpl.key} /> {children}
    From dae9abd36123f7768969b469bb698ebac4ee31eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Thu, 18 Jan 2024 14:21:07 +0100 Subject: [PATCH 098/103] chore: readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0437a87a4..1e1ec5aa1 100644 --- a/README.md +++ b/README.md @@ -1302,6 +1302,7 @@ api.eyeRightRef.current.irisDirRef.current.localToWorld(new THREE.Vector3(0, 0, #### Image

    + Horizontal tiles Horizontal tiles useIntersect Infinite scroll From 9c5300c243d275d49a39bcf2bf2ea81ac3b84e49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pi=C3=A9rre=20Reimertz?= Date: Fri, 19 Jan 2024 05:05:22 +0100 Subject: [PATCH 099/103] fix(native): move MediaPipe components to web --- src/core/index.ts | 3 --- src/{core => web}/FaceControls.tsx | 2 +- src/{core => web}/FaceLandmarker.tsx | 0 src/{core => web}/Facemesh.tsx | 2 +- src/web/index.ts | 9 +++++++++ 5 files changed, 11 insertions(+), 5 deletions(-) rename src/{core => web}/FaceControls.tsx (99%) rename src/{core => web}/FaceLandmarker.tsx (100%) rename src/{core => web}/Facemesh.tsx (99%) diff --git a/src/core/index.ts b/src/core/index.ts index 758467753..ce07c133c 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -40,7 +40,6 @@ export * from './TransformControls' export * from './PointerLockControls' export * from './FirstPersonControls' export * from './CameraControls' -export * from './FaceControls' export * from './MotionPathControls' // Gizmos @@ -78,7 +77,6 @@ export * from './useTrailTexture' export * from './useCubeCamera' export * from './Example' export * from './SpriteAnimator' -export * from './FaceLandmarker' // Modifiers export * from './CurveModifier' @@ -96,7 +94,6 @@ export * from './softShadows' // Shapes export * from './shapes' -export * from './Facemesh' export * from './RoundedBox' export * from './ScreenQuad' diff --git a/src/core/FaceControls.tsx b/src/web/FaceControls.tsx similarity index 99% rename from src/core/FaceControls.tsx rename to src/web/FaceControls.tsx index e672b0da8..f30b9353c 100644 --- a/src/core/FaceControls.tsx +++ b/src/web/FaceControls.tsx @@ -19,7 +19,7 @@ import type { FaceLandmarkerResult } from '@mediapipe/tasks-vision' import { easing } from 'maath' import { suspend, clear } from 'suspend-react' -import { useVideoTexture } from './useVideoTexture' +import { useVideoTexture } from '../core/useVideoTexture' import { Facemesh, FacemeshApi, FacemeshProps } from './Facemesh' import { useFaceLandmarker } from './FaceLandmarker' diff --git a/src/core/FaceLandmarker.tsx b/src/web/FaceLandmarker.tsx similarity index 100% rename from src/core/FaceLandmarker.tsx rename to src/web/FaceLandmarker.tsx diff --git a/src/core/Facemesh.tsx b/src/web/Facemesh.tsx similarity index 99% rename from src/core/Facemesh.tsx rename to src/web/Facemesh.tsx index 7890cf007..d4de6e82c 100644 --- a/src/core/Facemesh.tsx +++ b/src/web/Facemesh.tsx @@ -3,7 +3,7 @@ import * as React from 'react' import * as THREE from 'three' import { useThree } from '@react-three/fiber' -import { Line } from './Line' +import { Line } from '../core/Line' export type MediaPipeFaceMesh = typeof FacemeshDatas.SAMPLE_FACE diff --git a/src/web/index.ts b/src/web/index.ts index e28da5f9a..c34fd8bda 100644 --- a/src/web/index.ts +++ b/src/web/index.ts @@ -13,3 +13,12 @@ export * from './View' // Gizmos export * from './pivotControls' + +// Controls +export * from './FaceControls' + +// Misc +export * from './FaceLandmarker' + +// Shapes +export * from './Facemesh' \ No newline at end of file From 007a7b8cdbf182c05d31c94914504a0b5f3d0bba Mon Sep 17 00:00:00 2001 From: Matt Rossman <22670878+mattrossman@users.noreply.github.com> Date: Thu, 25 Jan 2024 03:36:52 -0500 Subject: [PATCH 100/103] fix(RenderTexture): disable XR during RenderTexture render (#1793) --- src/core/RenderTexture.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/RenderTexture.tsx b/src/core/RenderTexture.tsx index 8d7f7384c..3b63dfdf5 100644 --- a/src/core/RenderTexture.tsx +++ b/src/core/RenderTexture.tsx @@ -111,14 +111,18 @@ function Container({ }) { let count = 0 let oldAutoClear + let oldXrEnabled useFrame((state) => { if (frames === Infinity || count < frames) { oldAutoClear = state.gl.autoClear + oldXrEnabled = state.gl.xr.enabled state.gl.autoClear = true + state.gl.xr.enabled = false state.gl.setRenderTarget(fbo) state.gl.render(state.scene, state.camera) state.gl.setRenderTarget(null) state.gl.autoClear = oldAutoClear + state.gl.xr.enabled = oldXrEnabled count++ } }, renderPriority) From 246229d28c387aa5ee60321ec0be07ef6c656933 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Thu, 25 Jan 2024 04:07:16 -0600 Subject: [PATCH 101/103] fix: remove lodash (#1794) --- README.md | 4 +- package.json | 4 -- src/core/Clone.tsx | 11 +++-- src/core/TransformControls.tsx | 68 +++++++++++++++++---------- src/web/pivotControls/AxisRotator.tsx | 3 +- yarn.lock | 24 +--------- 6 files changed, 53 insertions(+), 61 deletions(-) diff --git a/README.md b/README.md index 1e1ec5aa1..4c571a41c 100644 --- a/README.md +++ b/README.md @@ -3569,12 +3569,10 @@ You can also use the `onChange` callback to get notified when the average change The following starts at the highest dpr (2) and clamps the gradual dpr between 0.5 at the lowest and 2 at the highest. If the app is in trouble it will reduce `factor` by `step` until it is either 0 or the app has found its sweet spot above that. ```jsx -import round from 'lodash/round' - const [dpr, setDpr] = useState(2) return ( - setDpr(round(0.5 + 1.5 * factor, 1))} /> + setDpr(Math.floor(0.5 + 1.5 * factor, 1))} /> ``` If you still experience flip flops despite the bounds you can define a limit of `flipflops`. If it is met `onFallback` will be triggered which typically sets a lowest possible baseline for the app. After the fallback has been called PerformanceMonitor will shut down. diff --git a/package.json b/package.json index 6208c503c..d011f854c 100644 --- a/package.json +++ b/package.json @@ -64,9 +64,6 @@ "cross-env": "^7.0.3", "detect-gpu": "^5.0.28", "glsl-noise": "^0.0.0", - "lodash.clamp": "^4.0.3", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", "maath": "^0.10.7", "meshline": "^3.1.6", "react-composer": "^5.0.3", @@ -107,7 +104,6 @@ "@storybook/react-vite": "^7.0.12", "@storybook/theming": "^7.0.12", "@types/jest": "^26.0.10", - "@types/lodash-es": "^4.17.3", "@types/react": "^18.0.0", "@types/react-dom": "^18.0.0", "@types/three": "^0.149.0", diff --git a/src/core/Clone.tsx b/src/core/Clone.tsx index 853d39e61..b617322ab 100644 --- a/src/core/Clone.tsx +++ b/src/core/Clone.tsx @@ -1,6 +1,5 @@ import * as THREE from 'three' import * as React from 'react' -import pick from 'lodash.pick' import { MeshProps } from '@react-three/fiber' import { SkeletonUtils } from 'three-stdlib' import { ForwardRefComponent } from '../helpers/ts-utils' @@ -60,7 +59,11 @@ function createSpread( receiveShadow, }: Omit & Partial ) { - let spread = pick(child, keys) + let spread: Record<(typeof keys)[number], any> = {} + for (const key of keys) { + spread[key] = child[key] + } + if (deep) { if (spread.geometry && deep !== 'materialsOnly') spread.geometry = spread.geometry.clone() if (spread.material && deep !== 'geometriesOnly') spread.material = spread.material.clone() @@ -120,11 +123,11 @@ export const Clone: ForwardRefComponent return ( - {(object?.children).map((child) => { + {object.children.map((child) => { if (child.type === 'Bone') return return })} diff --git a/src/core/TransformControls.tsx b/src/core/TransformControls.tsx index c1526aa34..e9623215c 100644 --- a/src/core/TransformControls.tsx +++ b/src/core/TransformControls.tsx @@ -1,6 +1,4 @@ import { ReactThreeFiber, useThree } from '@react-three/fiber' -import omit from 'lodash.omit' -import pick from 'lodash.pick' import * as React from 'react' import * as THREE from 'three' import { TransformControls as TransformControlsImpl } from 'three-stdlib' @@ -37,26 +35,32 @@ export type TransformControlsProps = ReactThreeFiber.Object3DNode = /* @__PURE__ */ React.forwardRef( ( - { children, domElement, onChange, onMouseDown, onMouseUp, onObjectChange, object, makeDefault, ...props }, + { + children, + domElement, + onChange, + onMouseDown, + onMouseUp, + onObjectChange, + object, + makeDefault, + camera, + // Transform + enabled, + axis, + mode, + translationSnap, + rotationSnap, + scaleSnap, + space, + size, + showX, + showY, + showZ, + ...props + }, ref ) => { - const transformOnlyPropNames = [ - 'enabled', - 'axis', - 'mode', - 'translationSnap', - 'rotationSnap', - 'scaleSnap', - 'space', - 'size', - 'showX', - 'showY', - 'showZ', - ] - - const { camera, ...rest } = props - const transformProps = pick(rest, transformOnlyPropNames) - const objectProps = omit(rest, transformOnlyPropNames) // @ts-expect-error new in @react-three/fiber@7.0.5 const defaultControls = useThree((state) => state.controls) as ControlsProto const gl = useThree((state) => state.gl) @@ -71,7 +75,7 @@ export const TransformControls: ForwardRefComponent new TransformControlsImpl(explCamera, explDomElement), [explCamera, explDomElement] ) - const group = React.useRef() + const group = React.useRef(null!) React.useLayoutEffect(() => { if (object) { @@ -132,13 +136,27 @@ export const TransformControls: ForwardRefComponent - - + + {children} - ) : null + ) } ) diff --git a/src/web/pivotControls/AxisRotator.tsx b/src/web/pivotControls/AxisRotator.tsx index 5aba33652..be53b302d 100644 --- a/src/web/pivotControls/AxisRotator.tsx +++ b/src/web/pivotControls/AxisRotator.tsx @@ -3,7 +3,6 @@ import * as THREE from 'three' import { ThreeEvent, useThree } from '@react-three/fiber' import { Line } from '../../core/Line' import { Html } from '../Html' -import clamp from 'lodash.clamp' import { context } from './context' const clickDir = /* @__PURE__ */ new THREE.Vector3() @@ -142,7 +141,7 @@ export const AxisRotator: React.FC<{ dir1: THREE.Vector3; dir2: THREE.Vector3; a if (min !== undefined && max !== undefined && max - min < 2 * Math.PI) { deltaAngle = minimizeAngle(deltaAngle) deltaAngle = deltaAngle > Math.PI ? deltaAngle - 2 * Math.PI : deltaAngle - deltaAngle = clamp(deltaAngle, min - angle0.current, max - angle0.current) + deltaAngle = THREE.MathUtils.clamp(deltaAngle, min - angle0.current, max - angle0.current) angle.current = angle0.current + deltaAngle } else { angle.current = minimizeAngle(angle0.current + deltaAngle) diff --git a/yarn.lock b/yarn.lock index 96424091c..7edb7a2c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3801,14 +3801,7 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/lodash-es@^4.17.3": - version "4.17.9" - resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.9.tgz#49dbe5112e23c54f2b387d860b7d03028ce170c2" - integrity sha512-ZTcmhiI3NNU7dEvWLZJkzG6ao49zOIjEgIE0RgV7wbPxU0f2xT3VSAHw2gmst8swH6V0YkLRGp4qPlX/6I90MQ== - dependencies: - "@types/lodash" "*" - -"@types/lodash@*", "@types/lodash@^4.14.167": +"@types/lodash@^4.14.167": version "4.14.198" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.198.tgz#4d27465257011aedc741a809f1269941fa2c5d4c" integrity sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg== @@ -9469,11 +9462,6 @@ lodash.capitalize@^4.2.1: resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" integrity sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw== -lodash.clamp@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/lodash.clamp/-/lodash.clamp-4.0.3.tgz#5c24bedeeeef0753560dc2b4cb4671f90a6ddfaa" - integrity sha512-HvzRFWjtcguTW7yd8NJBshuNaCa8aqNFtnswdT7f/cMd/1YKy5Zzoq4W/Oxvnx9l7aeY258uSdDfM793+eLsVg== - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -9504,16 +9492,6 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.omit@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" - integrity sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg== - -lodash.pick@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== - lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" From ce3eb7e2eb5899f9b6085d9350fb4a1e9eb3c822 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=94?= Date: Thu, 25 Jan 2024 14:07:42 +0100 Subject: [PATCH 102/103] fix: flag esm build + view component client only, simplify rollup config --- package.json | 15 +-- rollup.config.js | 90 ------------------ rollup.config.mjs | 90 ++++++++++++++++++ src/index.ts | 2 + src/web/View.tsx | 2 + yarn.lock | 232 +++++++++++++++++++++++++++++++++------------- 6 files changed, 271 insertions(+), 160 deletions(-) delete mode 100644 rollup.config.js create mode 100644 rollup.config.mjs diff --git a/package.json b/package.json index d011f854c..89351abff 100644 --- a/package.json +++ b/package.json @@ -90,10 +90,10 @@ "@commitlint/cli": "^12.0.1", "@commitlint/config-conventional": "^12.0.1", "@react-three/fiber": "^8.0.8", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^19.0.0", - "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-node-resolve": "^13.0.0", + "@rollup/plugin-babel": "^6.0.4", + "@rollup/plugin-commonjs": "^25.0.7", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.2.3", "@storybook/addon-actions": "^7.0.12", "@storybook/addon-controls": "^7.0.12", "@storybook/addon-essentials": "^7.0.12", @@ -129,9 +129,10 @@ "react": "^18.0.0", "react-dom": "^18.0.0", "rimraf": "^3.0.2", - "rollup": "^2.78.1", - "rollup-plugin-glslify": "^1.3.0", - "rollup-plugin-multi-input": "^1.3.1", + "rollup": "^4.9.6", + "rollup-plugin-glslify": "^1.3.1", + "rollup-plugin-multi-input": "^1.4.1", + "rollup-plugin-preserve-directives": "^0.3.1", "rollup-plugin-terser": "^7.0.2", "semantic-release": "^21.0.6", "serve": "^14.2.0", diff --git a/rollup.config.js b/rollup.config.js deleted file mode 100644 index 96639522e..000000000 --- a/rollup.config.js +++ /dev/null @@ -1,90 +0,0 @@ -import path from 'path' -import babel from '@rollup/plugin-babel' -import resolve from '@rollup/plugin-node-resolve' -import json from '@rollup/plugin-json' -import glslify from 'rollup-plugin-glslify' -import multiInput from 'rollup-plugin-multi-input' -import { terser } from 'rollup-plugin-terser' - -const root = process.platform === 'win32' ? path.resolve('/') : '/' -const external = (id) => !id.startsWith('.') && !id.startsWith(root) -const extensions = ['.js', '.jsx', '.ts', '.tsx', '.json'] - -const getBabelOptions = ({ useESModules }) => ({ - babelrc: false, - extensions, - exclude: '**/node_modules/**', - babelHelpers: 'runtime', - presets: [ - [ - '@babel/preset-env', - { - include: [ - '@babel/plugin-proposal-class-properties', - '@babel/plugin-proposal-optional-chaining', - '@babel/plugin-proposal-nullish-coalescing-operator', - '@babel/plugin-proposal-numeric-separator', - '@babel/plugin-proposal-logical-assignment-operators', - ], - bugfixes: true, - loose: true, - modules: false, - targets: '> 1%, not dead, not ie 11, not op_mini all', - }, - ], - '@babel/preset-react', - '@babel/preset-typescript', - ], - plugins: [ - '@babel/plugin-proposal-nullish-coalescing-operator', - ['@babel/transform-runtime', { regenerator: false, useESModules }], - ], -}) - -export default [ - { - input: ['src/**/*.ts', 'src/**/*.tsx', '!src/index.ts'], - output: { dir: `dist`, format: 'esm' }, - external, - plugins: [ - multiInput(), - json(), - glslify(), - babel(getBabelOptions({ useESModules: true }, '>1%, not dead, not ie 11, not op_mini all')), - resolve({ extensions }), - ], - }, - { - input: `./src/index.ts`, - output: { dir: `dist`, format: 'esm' }, - external, - plugins: [ - json(), - glslify(), - babel(getBabelOptions({ useESModules: true }, '>1%, not dead, not ie 11, not op_mini all')), - resolve({ extensions }), - ], - preserveModules: true, - }, - { - input: ['src/**/*.ts', 'src/**/*.tsx', '!src/index.ts'], - output: { dir: `dist`, format: 'cjs' }, - external, - plugins: [ - multiInput({ - transformOutputPath: (output) => output.replace(/\.[^/.]+$/, '.cjs.js'), - }), - json(), - glslify(), - babel(getBabelOptions({ useESModules: false })), - resolve({ extensions }), - terser(), - ], - }, - { - input: `./src/index.ts`, - output: { file: `dist/index.cjs.js`, format: 'cjs' }, - external, - plugins: [json(), glslify(), babel(getBabelOptions({ useESModules: false })), resolve({ extensions }), terser()], - }, -] diff --git a/rollup.config.mjs b/rollup.config.mjs new file mode 100644 index 000000000..93e6da28c --- /dev/null +++ b/rollup.config.mjs @@ -0,0 +1,90 @@ +import path from 'path' +import babel from '@rollup/plugin-babel' +import resolve from '@rollup/plugin-node-resolve' +import json from '@rollup/plugin-json' +import glslify from 'rollup-plugin-glslify' +import multiInput from 'rollup-plugin-multi-input' +import { terser } from 'rollup-plugin-terser' +import preserveDirectives from 'rollup-plugin-preserve-directives' + +const root = process.platform === 'win32' ? path.resolve('/') : '/' +const external = (id) => !id.startsWith('.') && !id.startsWith(root) +const extensions = ['.js', '.jsx', '.ts', '.tsx', '.json'] + +function getBabelOptions({ useESModules }) { + return { + babelrc: false, + extensions, + exclude: '**/node_modules/**', + babelHelpers: 'runtime', + presets: [ + [ + '@babel/preset-env', + { + include: [ + '@babel/plugin-proposal-class-properties', + '@babel/plugin-proposal-optional-chaining', + '@babel/plugin-proposal-nullish-coalescing-operator', + '@babel/plugin-proposal-numeric-separator', + '@babel/plugin-proposal-logical-assignment-operators', + ], + bugfixes: true, + loose: true, + modules: false, + targets: '> 1%, not dead, not ie 11, not op_mini all', + }, + ], + '@babel/preset-react', + '@babel/preset-typescript', + ], + plugins: [ + '@babel/plugin-proposal-nullish-coalescing-operator', + ['@babel/transform-runtime', { regenerator: false, useESModules }], + ], + } +} + +function onwarn(warning, warn) { + if (warning.code === 'MODULE_LEVEL_DIRECTIVE' && warning.message.includes('use client')) return + warn(warning) +} + +export default [ + { + onwarn, + input: `./src/index.ts`, + output: { dir: `dist`, format: 'esm', preserveModules: true }, + external, + plugins: [ + json(), + glslify(), + babel(getBabelOptions({ useESModules: true })), + resolve({ extensions }), + preserveDirectives(), + ], + }, + { + onwarn, + input: ['src/**/*.ts', 'src/**/*.tsx', '!src/index.ts'], + output: { dir: `dist`, format: 'cjs', preserveModules: true }, + external, + plugins: [ + multiInput.default({ + transformOutputPath: (output) => output.replace(/\.[^/.]+$/, '.cjs.js'), + }), + json(), + glslify(), + babel(getBabelOptions({ useESModules: false })), + resolve({ extensions }), + terser(), + preserveDirectives(), + ], + }, + { + onwarn, + input: `./src/index.ts`, + output: { file: `dist/index.cjs.js`, format: 'cjs' }, + external, + plugins: [json(), glslify(), babel(getBabelOptions({ useESModules: false })), resolve({ extensions }), terser()], + }, +] diff --git a/src/index.ts b/src/index.ts index c73ad9981..5ad55feee 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,3 @@ +'use client' + export * from './web' diff --git a/src/web/View.tsx b/src/web/View.tsx index 2352fb643..9ee55a97d 100644 --- a/src/web/View.tsx +++ b/src/web/View.tsx @@ -1,3 +1,5 @@ +'use client' + import * as React from 'react' import * as THREE from 'three' import { RootState, context, createPortal, useFrame, useThree } from '@react-three/fiber' diff --git a/yarn.lock b/yarn.lock index 7edb7a2c7..a08d92daa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -160,7 +160,7 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": +"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== @@ -2653,54 +2653,44 @@ suspend-react "^0.1.3" zustand "^3.7.1" -"@rollup/plugin-babel@^5.3.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" - integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== +"@rollup/plugin-babel@^6.0.4": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz#bd698e351fa9aa9619fcae780aea2a603d98e4c4" + integrity sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw== dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@rollup/pluginutils" "^3.1.0" + "@babel/helper-module-imports" "^7.18.6" + "@rollup/pluginutils" "^5.0.1" -"@rollup/plugin-commonjs@^19.0.0": - version "19.0.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.2.tgz#1ccc3d63878d1bc9846f8969f09dd3b3e4ecc244" - integrity sha512-gBjarfqlC7qs0AutpRW/hrFNm+cd2/QKxhwyFa+srbg1oX7rDsEU3l+W7LAUhsAp9mPJMAkXDhLbQaVwEaE8bA== +"@rollup/plugin-commonjs@^25.0.7": + version "25.0.7" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz#145cec7589ad952171aeb6a585bbeabd0fd3b4cf" + integrity sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ== dependencies: - "@rollup/pluginutils" "^3.1.0" + "@rollup/pluginutils" "^5.0.1" commondir "^1.0.1" - estree-walker "^2.0.1" - glob "^7.1.6" - is-reference "^1.2.1" - magic-string "^0.25.7" - resolve "^1.17.0" + estree-walker "^2.0.2" + glob "^8.0.3" + is-reference "1.2.1" + magic-string "^0.30.3" -"@rollup/plugin-json@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" - integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== +"@rollup/plugin-json@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-6.1.0.tgz#fbe784e29682e9bb6dee28ea75a1a83702e7b805" + integrity sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA== dependencies: - "@rollup/pluginutils" "^3.0.8" + "@rollup/pluginutils" "^5.1.0" -"@rollup/plugin-node-resolve@^13.0.0": - version "13.3.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz#da1c5c5ce8316cef96a2f823d111c1e4e498801c" - integrity sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw== +"@rollup/plugin-node-resolve@^15.2.3": + version "15.2.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz#e5e0b059bd85ca57489492f295ce88c2d4b0daf9" + integrity sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ== dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" deepmerge "^4.2.2" - is-builtin-module "^3.1.0" + is-builtin-module "^3.2.1" is-module "^1.0.0" - resolve "^1.19.0" - -"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" + resolve "^1.22.1" "@rollup/pluginutils@^4.1.1": version "4.2.1" @@ -2710,6 +2700,15 @@ estree-walker "^2.0.1" picomatch "^2.2.2" +"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" + integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + "@rollup/pluginutils@^5.0.2": version "5.0.4" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.4.tgz#74f808f9053d33bafec0cc98e7b835c9667d32ba" @@ -2719,6 +2718,71 @@ estree-walker "^2.0.2" picomatch "^2.3.1" +"@rollup/rollup-android-arm-eabi@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz#66b8d9cb2b3a474d115500f9ebaf43e2126fe496" + integrity sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg== + +"@rollup/rollup-android-arm64@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz#46327d5b86420d2307946bec1535fdf00356e47d" + integrity sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw== + +"@rollup/rollup-darwin-arm64@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz#166987224d2f8b1e2fd28ee90c447d52271d5e90" + integrity sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw== + +"@rollup/rollup-darwin-x64@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz#a2e6e096f74ccea6e2f174454c26aef6bcdd1274" + integrity sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog== + +"@rollup/rollup-linux-arm-gnueabihf@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz#09fcd4c55a2d6160c5865fec708a8e5287f30515" + integrity sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ== + +"@rollup/rollup-linux-arm64-gnu@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz#19a3c0b6315c747ca9acf86e9b710cc2440f83c9" + integrity sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ== + +"@rollup/rollup-linux-arm64-musl@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz#94aaf95fdaf2ad9335983a4552759f98e6b2e850" + integrity sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ== + +"@rollup/rollup-linux-riscv64-gnu@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz#160510e63f4b12618af4013bddf1761cf9fc9880" + integrity sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA== + +"@rollup/rollup-linux-x64-gnu@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz#5ac5d068ce0726bd0a96ca260d5bd93721c0cb98" + integrity sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw== + +"@rollup/rollup-linux-x64-musl@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz#bafa759ab43e8eab9edf242a8259ffb4f2a57a5d" + integrity sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ== + +"@rollup/rollup-win32-arm64-msvc@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz#1cc3416682e5a20d8f088f26657e6e47f8db468e" + integrity sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA== + +"@rollup/rollup-win32-ia32-msvc@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz#7d2251e1aa5e8a1e47c86891fe4547a939503461" + integrity sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ== + +"@rollup/rollup-win32-x64-msvc@4.9.6": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz#2c1fb69e02a3f1506f52698cfdc3a8b6386df9a6" + integrity sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ== + "@semantic-release/commit-analyzer@^10.0.0": version "10.0.4" resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.4.tgz#e2770f341b75d8f19fe6b5b833e8c2e0de2b84de" @@ -3709,10 +3773,10 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/estree@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/estree@^0.0.51": version "0.0.51" @@ -3945,12 +4009,10 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== "@types/scheduler@*": version "0.16.3" @@ -6636,11 +6698,6 @@ estree-walker@^0.6.1: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - estree-walker@^2.0.1, estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" @@ -7464,7 +7521,7 @@ glob@^10.0.0, glob@^10.2.2, glob@^10.2.7: minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry "^1.10.1" -glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: +glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -7476,6 +7533,17 @@ glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + global-dirs@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -8172,7 +8240,7 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-builtin-module@^3.1.0: +is-builtin-module@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== @@ -8396,7 +8464,7 @@ is-port-reachable@4.0.0: resolved "https://registry.yarnpkg.com/is-port-reachable/-/is-port-reachable-4.0.0.tgz#dac044091ef15319c8ab2f34604d8794181f8c2d" integrity sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig== -is-reference@^1.2.1: +is-reference@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== @@ -9572,6 +9640,13 @@ magic-string@^0.30.0: dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" +magic-string@^0.30.3, magic-string@^0.30.5: + version "0.30.5" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" + integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -11931,6 +12006,15 @@ resolve@^1.0.0, resolve@^1.1.5, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14. path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.1: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" @@ -11984,7 +12068,7 @@ rimraf@~2.6.2: dependencies: glob "^7.1.3" -rollup-plugin-glslify@^1.3.0: +rollup-plugin-glslify@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/rollup-plugin-glslify/-/rollup-plugin-glslify-1.3.1.tgz#0473f463840bc32571110161b8fad32ea9612186" integrity sha512-LscWH9VwzOlcbZw3upoagIIMzcvRrR55dCgyheYLUlZlxiWRSf1esY37kgguiQi1NWUd5ctIalj/b2foGVND+A== @@ -11992,13 +12076,20 @@ rollup-plugin-glslify@^1.3.0: glslify "^7.1.1" rollup-pluginutils "^2.8.2" -rollup-plugin-multi-input@^1.3.1: +rollup-plugin-multi-input@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/rollup-plugin-multi-input/-/rollup-plugin-multi-input-1.4.1.tgz#624792c53297965203ef40e652013d34a7eda8e9" integrity sha512-ybvotObZFFDEbqw6MDrYUa/TXmF+1qCVX3svpAddmIOLP3/to5zkSKP0MJV5bNBZfFFpblwChurz4tsPR/zJew== dependencies: fast-glob "3.2.12" +rollup-plugin-preserve-directives@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-preserve-directives/-/rollup-plugin-preserve-directives-0.3.1.tgz#91323eeaa03b10b22aae372c5f94bc695e3c5dea" + integrity sha512-Jn1gWU7G55A1sU6eFpXmwknfBasF0XbBzRqsE6nqrb/gun+mGV7nx++CwOSGPJQpFzFqvKm5U4XNKo3LTLi4Hg== + dependencies: + magic-string "^0.30.5" + rollup-plugin-terser@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" @@ -12023,11 +12114,26 @@ rollup-pluginutils@^2.8.2: optionalDependencies: fsevents "~2.3.2" -rollup@^2.78.1: - version "2.79.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" - integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== +rollup@^4.9.6: + version "4.9.6" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.9.6.tgz#4515facb0318ecca254a2ee1315e22e09efc50a0" + integrity sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg== + dependencies: + "@types/estree" "1.0.5" optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.9.6" + "@rollup/rollup-android-arm64" "4.9.6" + "@rollup/rollup-darwin-arm64" "4.9.6" + "@rollup/rollup-darwin-x64" "4.9.6" + "@rollup/rollup-linux-arm-gnueabihf" "4.9.6" + "@rollup/rollup-linux-arm64-gnu" "4.9.6" + "@rollup/rollup-linux-arm64-musl" "4.9.6" + "@rollup/rollup-linux-riscv64-gnu" "4.9.6" + "@rollup/rollup-linux-x64-gnu" "4.9.6" + "@rollup/rollup-linux-x64-musl" "4.9.6" + "@rollup/rollup-win32-arm64-msvc" "4.9.6" + "@rollup/rollup-win32-ia32-msvc" "4.9.6" + "@rollup/rollup-win32-x64-msvc" "4.9.6" fsevents "~2.3.2" run-parallel@^1.1.9: From 618fbc8b610175c1c9b64774034cc886ea10c7ba Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Fri, 26 Jan 2024 01:37:45 -0600 Subject: [PATCH 103/103] fix: remove 'use client' header (#1798) --- package.json | 15 ++- rollup.config.js | 90 ++++++++++++++++++ rollup.config.mjs | 90 ------------------ src/index.ts | 2 - src/web/View.tsx | 2 - yarn.lock | 232 +++++++++++++--------------------------------- 6 files changed, 160 insertions(+), 271 deletions(-) create mode 100644 rollup.config.js delete mode 100644 rollup.config.mjs diff --git a/package.json b/package.json index 89351abff..d011f854c 100644 --- a/package.json +++ b/package.json @@ -90,10 +90,10 @@ "@commitlint/cli": "^12.0.1", "@commitlint/config-conventional": "^12.0.1", "@react-three/fiber": "^8.0.8", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-commonjs": "^25.0.7", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-commonjs": "^19.0.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.0.0", "@storybook/addon-actions": "^7.0.12", "@storybook/addon-controls": "^7.0.12", "@storybook/addon-essentials": "^7.0.12", @@ -129,10 +129,9 @@ "react": "^18.0.0", "react-dom": "^18.0.0", "rimraf": "^3.0.2", - "rollup": "^4.9.6", - "rollup-plugin-glslify": "^1.3.1", - "rollup-plugin-multi-input": "^1.4.1", - "rollup-plugin-preserve-directives": "^0.3.1", + "rollup": "^2.78.1", + "rollup-plugin-glslify": "^1.3.0", + "rollup-plugin-multi-input": "^1.3.1", "rollup-plugin-terser": "^7.0.2", "semantic-release": "^21.0.6", "serve": "^14.2.0", diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 000000000..96639522e --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,90 @@ +import path from 'path' +import babel from '@rollup/plugin-babel' +import resolve from '@rollup/plugin-node-resolve' +import json from '@rollup/plugin-json' +import glslify from 'rollup-plugin-glslify' +import multiInput from 'rollup-plugin-multi-input' +import { terser } from 'rollup-plugin-terser' + +const root = process.platform === 'win32' ? path.resolve('/') : '/' +const external = (id) => !id.startsWith('.') && !id.startsWith(root) +const extensions = ['.js', '.jsx', '.ts', '.tsx', '.json'] + +const getBabelOptions = ({ useESModules }) => ({ + babelrc: false, + extensions, + exclude: '**/node_modules/**', + babelHelpers: 'runtime', + presets: [ + [ + '@babel/preset-env', + { + include: [ + '@babel/plugin-proposal-class-properties', + '@babel/plugin-proposal-optional-chaining', + '@babel/plugin-proposal-nullish-coalescing-operator', + '@babel/plugin-proposal-numeric-separator', + '@babel/plugin-proposal-logical-assignment-operators', + ], + bugfixes: true, + loose: true, + modules: false, + targets: '> 1%, not dead, not ie 11, not op_mini all', + }, + ], + '@babel/preset-react', + '@babel/preset-typescript', + ], + plugins: [ + '@babel/plugin-proposal-nullish-coalescing-operator', + ['@babel/transform-runtime', { regenerator: false, useESModules }], + ], +}) + +export default [ + { + input: ['src/**/*.ts', 'src/**/*.tsx', '!src/index.ts'], + output: { dir: `dist`, format: 'esm' }, + external, + plugins: [ + multiInput(), + json(), + glslify(), + babel(getBabelOptions({ useESModules: true }, '>1%, not dead, not ie 11, not op_mini all')), + resolve({ extensions }), + ], + }, + { + input: `./src/index.ts`, + output: { dir: `dist`, format: 'esm' }, + external, + plugins: [ + json(), + glslify(), + babel(getBabelOptions({ useESModules: true }, '>1%, not dead, not ie 11, not op_mini all')), + resolve({ extensions }), + ], + preserveModules: true, + }, + { + input: ['src/**/*.ts', 'src/**/*.tsx', '!src/index.ts'], + output: { dir: `dist`, format: 'cjs' }, + external, + plugins: [ + multiInput({ + transformOutputPath: (output) => output.replace(/\.[^/.]+$/, '.cjs.js'), + }), + json(), + glslify(), + babel(getBabelOptions({ useESModules: false })), + resolve({ extensions }), + terser(), + ], + }, + { + input: `./src/index.ts`, + output: { file: `dist/index.cjs.js`, format: 'cjs' }, + external, + plugins: [json(), glslify(), babel(getBabelOptions({ useESModules: false })), resolve({ extensions }), terser()], + }, +] diff --git a/rollup.config.mjs b/rollup.config.mjs deleted file mode 100644 index 93e6da28c..000000000 --- a/rollup.config.mjs +++ /dev/null @@ -1,90 +0,0 @@ -import path from 'path' -import babel from '@rollup/plugin-babel' -import resolve from '@rollup/plugin-node-resolve' -import json from '@rollup/plugin-json' -import glslify from 'rollup-plugin-glslify' -import multiInput from 'rollup-plugin-multi-input' -import { terser } from 'rollup-plugin-terser' -import preserveDirectives from 'rollup-plugin-preserve-directives' - -const root = process.platform === 'win32' ? path.resolve('/') : '/' -const external = (id) => !id.startsWith('.') && !id.startsWith(root) -const extensions = ['.js', '.jsx', '.ts', '.tsx', '.json'] - -function getBabelOptions({ useESModules }) { - return { - babelrc: false, - extensions, - exclude: '**/node_modules/**', - babelHelpers: 'runtime', - presets: [ - [ - '@babel/preset-env', - { - include: [ - '@babel/plugin-proposal-class-properties', - '@babel/plugin-proposal-optional-chaining', - '@babel/plugin-proposal-nullish-coalescing-operator', - '@babel/plugin-proposal-numeric-separator', - '@babel/plugin-proposal-logical-assignment-operators', - ], - bugfixes: true, - loose: true, - modules: false, - targets: '> 1%, not dead, not ie 11, not op_mini all', - }, - ], - '@babel/preset-react', - '@babel/preset-typescript', - ], - plugins: [ - '@babel/plugin-proposal-nullish-coalescing-operator', - ['@babel/transform-runtime', { regenerator: false, useESModules }], - ], - } -} - -function onwarn(warning, warn) { - if (warning.code === 'MODULE_LEVEL_DIRECTIVE' && warning.message.includes('use client')) return - warn(warning) -} - -export default [ - { - onwarn, - input: `./src/index.ts`, - output: { dir: `dist`, format: 'esm', preserveModules: true }, - external, - plugins: [ - json(), - glslify(), - babel(getBabelOptions({ useESModules: true })), - resolve({ extensions }), - preserveDirectives(), - ], - }, - { - onwarn, - input: ['src/**/*.ts', 'src/**/*.tsx', '!src/index.ts'], - output: { dir: `dist`, format: 'cjs', preserveModules: true }, - external, - plugins: [ - multiInput.default({ - transformOutputPath: (output) => output.replace(/\.[^/.]+$/, '.cjs.js'), - }), - json(), - glslify(), - babel(getBabelOptions({ useESModules: false })), - resolve({ extensions }), - terser(), - preserveDirectives(), - ], - }, - { - onwarn, - input: `./src/index.ts`, - output: { file: `dist/index.cjs.js`, format: 'cjs' }, - external, - plugins: [json(), glslify(), babel(getBabelOptions({ useESModules: false })), resolve({ extensions }), terser()], - }, -] diff --git a/src/index.ts b/src/index.ts index 5ad55feee..c73ad9981 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1 @@ -'use client' - export * from './web' diff --git a/src/web/View.tsx b/src/web/View.tsx index 9ee55a97d..2352fb643 100644 --- a/src/web/View.tsx +++ b/src/web/View.tsx @@ -1,5 +1,3 @@ -'use client' - import * as React from 'react' import * as THREE from 'three' import { RootState, context, createPortal, useFrame, useThree } from '@react-three/fiber' diff --git a/yarn.lock b/yarn.lock index a08d92daa..7edb7a2c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -160,7 +160,7 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== @@ -2653,44 +2653,54 @@ suspend-react "^0.1.3" zustand "^3.7.1" -"@rollup/plugin-babel@^6.0.4": - version "6.0.4" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz#bd698e351fa9aa9619fcae780aea2a603d98e4c4" - integrity sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw== +"@rollup/plugin-babel@^5.3.0": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" + integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@rollup/pluginutils" "^5.0.1" + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" -"@rollup/plugin-commonjs@^25.0.7": - version "25.0.7" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz#145cec7589ad952171aeb6a585bbeabd0fd3b4cf" - integrity sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ== +"@rollup/plugin-commonjs@^19.0.0": + version "19.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.2.tgz#1ccc3d63878d1bc9846f8969f09dd3b3e4ecc244" + integrity sha512-gBjarfqlC7qs0AutpRW/hrFNm+cd2/QKxhwyFa+srbg1oX7rDsEU3l+W7LAUhsAp9mPJMAkXDhLbQaVwEaE8bA== dependencies: - "@rollup/pluginutils" "^5.0.1" + "@rollup/pluginutils" "^3.1.0" commondir "^1.0.1" - estree-walker "^2.0.2" - glob "^8.0.3" - is-reference "1.2.1" - magic-string "^0.30.3" + estree-walker "^2.0.1" + glob "^7.1.6" + is-reference "^1.2.1" + magic-string "^0.25.7" + resolve "^1.17.0" -"@rollup/plugin-json@^6.1.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-6.1.0.tgz#fbe784e29682e9bb6dee28ea75a1a83702e7b805" - integrity sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA== +"@rollup/plugin-json@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" + integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== dependencies: - "@rollup/pluginutils" "^5.1.0" + "@rollup/pluginutils" "^3.0.8" -"@rollup/plugin-node-resolve@^15.2.3": - version "15.2.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz#e5e0b059bd85ca57489492f295ce88c2d4b0daf9" - integrity sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ== +"@rollup/plugin-node-resolve@^13.0.0": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz#da1c5c5ce8316cef96a2f823d111c1e4e498801c" + integrity sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw== dependencies: - "@rollup/pluginutils" "^5.0.1" - "@types/resolve" "1.20.2" + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" deepmerge "^4.2.2" - is-builtin-module "^3.2.1" + is-builtin-module "^3.1.0" is-module "^1.0.0" - resolve "^1.22.1" + resolve "^1.19.0" + +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" "@rollup/pluginutils@^4.1.1": version "4.2.1" @@ -2700,15 +2710,6 @@ estree-walker "^2.0.1" picomatch "^2.2.2" -"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" - integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^2.3.1" - "@rollup/pluginutils@^5.0.2": version "5.0.4" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.4.tgz#74f808f9053d33bafec0cc98e7b835c9667d32ba" @@ -2718,71 +2719,6 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@rollup/rollup-android-arm-eabi@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz#66b8d9cb2b3a474d115500f9ebaf43e2126fe496" - integrity sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg== - -"@rollup/rollup-android-arm64@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz#46327d5b86420d2307946bec1535fdf00356e47d" - integrity sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw== - -"@rollup/rollup-darwin-arm64@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz#166987224d2f8b1e2fd28ee90c447d52271d5e90" - integrity sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw== - -"@rollup/rollup-darwin-x64@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz#a2e6e096f74ccea6e2f174454c26aef6bcdd1274" - integrity sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog== - -"@rollup/rollup-linux-arm-gnueabihf@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz#09fcd4c55a2d6160c5865fec708a8e5287f30515" - integrity sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ== - -"@rollup/rollup-linux-arm64-gnu@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz#19a3c0b6315c747ca9acf86e9b710cc2440f83c9" - integrity sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ== - -"@rollup/rollup-linux-arm64-musl@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz#94aaf95fdaf2ad9335983a4552759f98e6b2e850" - integrity sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ== - -"@rollup/rollup-linux-riscv64-gnu@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz#160510e63f4b12618af4013bddf1761cf9fc9880" - integrity sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA== - -"@rollup/rollup-linux-x64-gnu@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz#5ac5d068ce0726bd0a96ca260d5bd93721c0cb98" - integrity sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw== - -"@rollup/rollup-linux-x64-musl@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz#bafa759ab43e8eab9edf242a8259ffb4f2a57a5d" - integrity sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ== - -"@rollup/rollup-win32-arm64-msvc@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz#1cc3416682e5a20d8f088f26657e6e47f8db468e" - integrity sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA== - -"@rollup/rollup-win32-ia32-msvc@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz#7d2251e1aa5e8a1e47c86891fe4547a939503461" - integrity sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ== - -"@rollup/rollup-win32-x64-msvc@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz#2c1fb69e02a3f1506f52698cfdc3a8b6386df9a6" - integrity sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ== - "@semantic-release/commit-analyzer@^10.0.0": version "10.0.4" resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.4.tgz#e2770f341b75d8f19fe6b5b833e8c2e0de2b84de" @@ -3773,10 +3709,10 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== -"@types/estree@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/estree@^0.0.51": version "0.0.51" @@ -4009,10 +3945,12 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/resolve@1.20.2": - version "1.20.2" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" - integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" "@types/scheduler@*": version "0.16.3" @@ -6698,6 +6636,11 @@ estree-walker@^0.6.1: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + estree-walker@^2.0.1, estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" @@ -7521,7 +7464,7 @@ glob@^10.0.0, glob@^10.2.2, glob@^10.2.7: minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry "^1.10.1" -glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: +glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -7533,17 +7476,6 @@ glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.3: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - global-dirs@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -8240,7 +8172,7 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-builtin-module@^3.2.1: +is-builtin-module@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== @@ -8464,7 +8396,7 @@ is-port-reachable@4.0.0: resolved "https://registry.yarnpkg.com/is-port-reachable/-/is-port-reachable-4.0.0.tgz#dac044091ef15319c8ab2f34604d8794181f8c2d" integrity sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig== -is-reference@1.2.1: +is-reference@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== @@ -9640,13 +9572,6 @@ magic-string@^0.30.0: dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" -magic-string@^0.30.3, magic-string@^0.30.5: - version "0.30.5" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" - integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" - make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -12006,15 +11931,6 @@ resolve@^1.0.0, resolve@^1.1.5, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14. path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.22.1: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - resolve@^2.0.0-next.4: version "2.0.0-next.4" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" @@ -12068,7 +11984,7 @@ rimraf@~2.6.2: dependencies: glob "^7.1.3" -rollup-plugin-glslify@^1.3.1: +rollup-plugin-glslify@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/rollup-plugin-glslify/-/rollup-plugin-glslify-1.3.1.tgz#0473f463840bc32571110161b8fad32ea9612186" integrity sha512-LscWH9VwzOlcbZw3upoagIIMzcvRrR55dCgyheYLUlZlxiWRSf1esY37kgguiQi1NWUd5ctIalj/b2foGVND+A== @@ -12076,20 +11992,13 @@ rollup-plugin-glslify@^1.3.1: glslify "^7.1.1" rollup-pluginutils "^2.8.2" -rollup-plugin-multi-input@^1.4.1: +rollup-plugin-multi-input@^1.3.1: version "1.4.1" resolved "https://registry.yarnpkg.com/rollup-plugin-multi-input/-/rollup-plugin-multi-input-1.4.1.tgz#624792c53297965203ef40e652013d34a7eda8e9" integrity sha512-ybvotObZFFDEbqw6MDrYUa/TXmF+1qCVX3svpAddmIOLP3/to5zkSKP0MJV5bNBZfFFpblwChurz4tsPR/zJew== dependencies: fast-glob "3.2.12" -rollup-plugin-preserve-directives@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-preserve-directives/-/rollup-plugin-preserve-directives-0.3.1.tgz#91323eeaa03b10b22aae372c5f94bc695e3c5dea" - integrity sha512-Jn1gWU7G55A1sU6eFpXmwknfBasF0XbBzRqsE6nqrb/gun+mGV7nx++CwOSGPJQpFzFqvKm5U4XNKo3LTLi4Hg== - dependencies: - magic-string "^0.30.5" - rollup-plugin-terser@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" @@ -12114,26 +12023,11 @@ rollup-pluginutils@^2.8.2: optionalDependencies: fsevents "~2.3.2" -rollup@^4.9.6: - version "4.9.6" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.9.6.tgz#4515facb0318ecca254a2ee1315e22e09efc50a0" - integrity sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg== - dependencies: - "@types/estree" "1.0.5" +rollup@^2.78.1: + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.9.6" - "@rollup/rollup-android-arm64" "4.9.6" - "@rollup/rollup-darwin-arm64" "4.9.6" - "@rollup/rollup-darwin-x64" "4.9.6" - "@rollup/rollup-linux-arm-gnueabihf" "4.9.6" - "@rollup/rollup-linux-arm64-gnu" "4.9.6" - "@rollup/rollup-linux-arm64-musl" "4.9.6" - "@rollup/rollup-linux-riscv64-gnu" "4.9.6" - "@rollup/rollup-linux-x64-gnu" "4.9.6" - "@rollup/rollup-linux-x64-musl" "4.9.6" - "@rollup/rollup-win32-arm64-msvc" "4.9.6" - "@rollup/rollup-win32-ia32-msvc" "4.9.6" - "@rollup/rollup-win32-x64-msvc" "4.9.6" fsevents "~2.3.2" run-parallel@^1.1.9:

  18. PresentationControls

+01Yr=s5LeSeu0Vn@4`&>C{1MT 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