├── .gitignore ├── .prettierrc ├── LICENSE ├── README.md ├── demo ├── index.html ├── jsconfig.json ├── src │ ├── App.jsx │ └── index.jsx └── vite.config.ts ├── package.json ├── screenshots ├── birds.jpg ├── demo.jpg ├── graph.jpg ├── shape.jpg ├── spinner.jpg └── svg.jpg ├── src ├── MeshLineGeometry.ts ├── MeshLineMaterial.ts ├── index.ts └── raycast.ts ├── tsconfig.json ├── vite.config.ts └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | dist 4 | 5 | # Editor directories and files 6 | .idea 7 | .vscode 8 | *.suo 9 | *.ntvs* 10 | *.njsproj 11 | *.sln 12 | *.sw? -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "trailingComma": "all", 4 | "singleQuote": true, 5 | "tabWidth": 2, 6 | "printWidth": 120, 7 | "jsxBracketSameLine": true 8 | } 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Jaume Sanchez 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MeshLine 2 | 3 | A mesh replacement for `THREE.Line`. Instead of using GL_LINE, it uses a strip of billboarded triangles. This is a fork of [spite/THREE.MeshLine](https://github.com/spite/THREE.MeshLine), previously maintained by studio [Utsuboco](https://github.com/utsuboco). 4 | 5 |

6 | 7 | 8 | 9 | 10 | 11 | 12 |

13 | 14 | ### How to use 15 | 16 | ``` 17 | npm install meshline 18 | ``` 19 | 20 | ```jsx 21 | import * as THREE from 'three' 22 | import { MeshLineGeometry, MeshLineMaterial, raycast } from 'meshline' 23 | 24 | const geometry = new MeshLineGeometry() 25 | geometry.setPoints([...]) 26 | const material = new MeshLineMaterial({ ... }) 27 | const mesh = new THREE.Mesh(geometry, material) 28 | mesh.raycast = raycast 29 | scene.add(mesh) 30 | ``` 31 | 32 | #### Assign points 33 | 34 | Create a `MeshLineGeometry` and pass a list of points into `.setPoints()`. Expected inputs are: 35 | 36 | - `Float32Array` 37 | - `THREE.BufferGeometry` 38 | - `Array` 39 | 40 | ```jsx 41 | const geometry = new MeshLineGeometry() 42 | 43 | const points = [] 44 | for (let j = 0; j < Math.PI; j += (2 * Math.PI) / 100) 45 | points.push(Math.cos(j), Math.sin(j), 0) 46 | 47 | geometry.setPoints(points) 48 | ``` 49 | 50 | Note: `.setPoints` accepts a second parameter, which is a function to define a variable width for each point along the line. By default that value is 1, making the line width 1 \* lineWidth. 51 | 52 | ```jsx 53 | // p is a decimal percentage of the number of points 54 | // ie. point 200 of 250 points, p = 0.8 55 | geometry.setPoints(points, (p) => 2) // makes width 2 * lineWidth 56 | geometry.setPoints(points, (p) => 1 - p) // makes width taper 57 | geometry.setPoints(points, (p) => 2 + Math.sin(50 * p)) // makes width sinusoidal 58 | ``` 59 | 60 | #### Create a material 61 | 62 | ```jsx 63 | const material = new MeshLineMaterial(options) 64 | ``` 65 | 66 | By default it's a white material of width 1 unit. 67 | 68 | `MeshLineMaterial` has several attributes to control the appereance: 69 | 70 | - `map` - a `THREE.Texture` to paint along the line (requires `useMap` set to true) 71 | - `useMap` - tells the material to use `map` (0 - solid color, 1 use texture) 72 | - `alphaMap` - a `THREE.Texture` to use as alpha along the line (requires `useAlphaMap` set to true) 73 | - `useAlphaMap` - tells the material to use `alphaMap` (0 - no alpha, 1 modulate alpha) 74 | - `repeat` - THREE.Vector2 to define the texture tiling (applies to map and alphaMap) 75 | - `color` - `THREE.Color` to paint the line width, or tint the texture with 76 | - `opacity` - alpha value from 0 to 1 (requires `transparent` set to `true`) 77 | - `alphaTest` - cutoff value from 0 to 1 78 | - `dashArray` - the length and space between dashes. (0 - no dash) 79 | - `dashOffset` - defines the location where the dash will begin. Ideal to animate the line. 80 | - `dashRatio` - defines the ratio between that is visible or not (0 - more visible, 1 - more invisible). 81 | - `resolution` - `THREE.Vector2` specifying the canvas size (REQUIRED) 82 | - `sizeAttenuation` - constant lineWidth regardless of distance (1 is 1px on screen) (0 - attenuate, 1 - don't) 83 | - `lineWidth` - float defining width (if `sizeAttenuation` is true, it's world units; else is screen pixels) 84 | 85 | If you're rendering transparent lines or using a texture with alpha map, you should set `depthTest` to `false`, `transparent` to `true` and `blending` to an appropriate blending mode, or use `alphaTest`. 86 | 87 | #### Form a mesh 88 | 89 | ```jsx 90 | const mesh = new THREE.Mesh(geometry, material) 91 | scene.add(mesh) 92 | ``` 93 | 94 | ### Raycasting 95 | 96 | Raycast can be optionally added by overwriting `mesh.raycast` with the one that meshline provides. 97 | 98 | ```jsx 99 | import { raycast } from 'meshline' 100 | 101 | mesh.raycast = raycast 102 | ``` 103 | 104 | ### Declarative use 105 | 106 | Meshline can be used declaritively in [react-three-fiber](https://github.com/pmndrs/react-three-fiber). `MeshLineGeometry` has a convenience setter/getter for `.setPoints()`, `points`. 107 | 108 | ```jsx 109 | import { Canvas, extend } from '@react-three/fiber' 110 | import { MeshLineGeometry, MeshLineMaterial, raycast } from 'meshline' 111 | 112 | extend({ MeshLineGeometry, MeshLineMaterial }) 113 | 114 | function App() { 115 | return ( 116 | 117 | 118 | 119 | 120 | 121 | 122 | ) 123 | } 124 | ``` 125 | 126 | #### Variable line widths 127 | 128 | Variable line widths can be set for each point using the `widthCallback` prop. 129 | 130 | ```jsx 131 | p * Math.random()} /> 132 | ``` 133 | 134 | #### Types 135 | 136 | Add these declarations to your entry point. 137 | 138 | ```tsx 139 | import { Object3DNode, MaterialNode } from '@react-three/fiber' 140 | 141 | declare module '@react-three/fiber' { 142 | interface ThreeElements { 143 | meshLineGeometry: Object3DNode 144 | meshLineMaterial: MaterialNode 145 | } 146 | } 147 | ``` 148 | 149 | ### References 150 | 151 | - [Drawing lines is hard](http://mattdesl.svbtle.com/drawing-lines-is-hard) 152 | - [WebGL rendering of solid trails](http://codeflow.org/entries/2012/aug/05/webgl-rendering-of-solid-trails/) 153 | - [Drawing Antialiased Lines with OpenGL](https://www.mapbox.com/blog/drawing-antialiased-lines/) 154 | -------------------------------------------------------------------------------- /demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | meshline demo 7 | 27 | 28 | 29 |
30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /demo/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "meshline": ["../src"] 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /demo/src/App.jsx: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | import { useMemo, useRef } from 'react' 3 | import { MeshLineGeometry, MeshLineMaterial } from 'meshline' 4 | import { extend, Canvas, useFrame } from '@react-three/fiber' 5 | import { EffectComposer, Bloom } from '@react-three/postprocessing' 6 | import { easing } from 'maath' 7 | import { useControls } from 'leva' 8 | 9 | extend({ MeshLineGeometry, MeshLineMaterial }) 10 | 11 | export default function App() { 12 | const { dash, count, radius } = useControls({ 13 | dash: { value: 0.9, min: 0, max: 0.99, step: 0.01 }, 14 | count: { value: 50, min: 0, max: 200, step: 1 }, 15 | radius: { value: 50, min: 1, max: 100, step: 1 }, 16 | }) 17 | return ( 18 | 19 | 20 | 26 | 27 | 28 | 29 | 30 | 31 | ) 32 | } 33 | 34 | function Lines({ dash, count, colors, radius = 50, rand = THREE.MathUtils.randFloatSpread }) { 35 | const lines = useMemo(() => { 36 | return Array.from({ length: count }, () => { 37 | const pos = new THREE.Vector3(rand(radius), rand(radius), rand(radius)) 38 | const points = Array.from({ length: 10 }, () => 39 | pos.add(new THREE.Vector3(rand(radius), rand(radius), rand(radius))).clone(), 40 | ) 41 | const curve = new THREE.CatmullRomCurve3(points).getPoints(200) 42 | return { 43 | color: colors[parseInt(colors.length * Math.random())], 44 | width: Math.max(radius / 100, (radius / 50) * Math.random()), 45 | speed: Math.max(0.1, 1 * Math.random()), 46 | curve: curve.flatMap((point) => point.toArray()), 47 | } 48 | }) 49 | }, [colors, count, radius]) 50 | return lines.map((props, index) => ) 51 | } 52 | 53 | function Fatline({ curve, width, color, speed, dash }) { 54 | const ref = useRef() 55 | useFrame((state, delta) => (ref.current.material.dashOffset -= (delta * speed) / 10)) 56 | return ( 57 | 58 | 59 | 68 | 69 | ) 70 | } 71 | 72 | function Rig({ radius = 20 }) { 73 | return useFrame((state, dt) => { 74 | easing.damp3( 75 | state.camera.position, 76 | [Math.sin(state.pointer.x) * radius, Math.atan(state.pointer.y) * radius, Math.cos(state.pointer.x) * radius], 77 | 0.25, 78 | dt, 79 | ) 80 | state.camera.lookAt(0, 0, 0) 81 | }) 82 | } 83 | -------------------------------------------------------------------------------- /demo/src/index.jsx: -------------------------------------------------------------------------------- 1 | import { createRoot } from 'react-dom/client' 2 | import App from './App' 3 | 4 | createRoot(document.getElementById('root')).render() 5 | -------------------------------------------------------------------------------- /demo/vite.config.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'node:path' 2 | import react from '@vitejs/plugin-react' 3 | import { defineConfig } from 'vite' 4 | 5 | export default defineConfig({ 6 | resolve: { 7 | alias: { 8 | meshline: path.resolve(__dirname, '../src'), 9 | }, 10 | }, 11 | plugins: [react()], 12 | }) 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "meshline", 3 | "version": "3.3.1", 4 | "author": "Jaume Sanchez (https://www.clicktorelease.com)", 5 | "license": "MIT", 6 | "bugs": { 7 | "url": "https://github.com/pmndrs/meshline/issues" 8 | }, 9 | "homepage": "https://github.com/pmndrs/meshline#readme", 10 | "files": [ 11 | "dist" 12 | ], 13 | "type": "module", 14 | "main": "./dist/index.cjs", 15 | "module": "./dist/index.js", 16 | "types": "./dist/index.d.ts", 17 | "devDependencies": { 18 | "@react-three/fiber": "^8.9.1", 19 | "@react-three/postprocessing": "^2.7.0", 20 | "@types/node": "^18.11.13", 21 | "@types/three": "^0.146.0", 22 | "@vitejs/plugin-react": "2", 23 | "leva": "^0.9.34", 24 | "maath": "^0.4.2", 25 | "react": "^18.2.0", 26 | "react-dom": "^18.2.0", 27 | "three": "^0.147.0", 28 | "typescript": "^4.9.3", 29 | "vite": "^3.2.5" 30 | }, 31 | "peerDependencies": { 32 | "three": ">=0.137" 33 | }, 34 | "scripts": { 35 | "dev": "vite demo", 36 | "build": "vite build && tsc" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /screenshots/birds.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmndrs/meshline/4df8778398e086628076267c67552c079d39be85/screenshots/birds.jpg -------------------------------------------------------------------------------- /screenshots/demo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmndrs/meshline/4df8778398e086628076267c67552c079d39be85/screenshots/demo.jpg -------------------------------------------------------------------------------- /screenshots/graph.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmndrs/meshline/4df8778398e086628076267c67552c079d39be85/screenshots/graph.jpg -------------------------------------------------------------------------------- /screenshots/shape.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmndrs/meshline/4df8778398e086628076267c67552c079d39be85/screenshots/shape.jpg -------------------------------------------------------------------------------- /screenshots/spinner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmndrs/meshline/4df8778398e086628076267c67552c079d39be85/screenshots/spinner.jpg -------------------------------------------------------------------------------- /screenshots/svg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmndrs/meshline/4df8778398e086628076267c67552c079d39be85/screenshots/svg.jpg -------------------------------------------------------------------------------- /src/MeshLineGeometry.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | 3 | // https://stackoverflow.com/a/56532878 4 | function memcpy( 5 | src: BufferSource | ArrayLike, 6 | srcOffset: number, 7 | dst: BufferSource | ArrayLike, 8 | dstOffset: number, 9 | length: number, 10 | ): any { 11 | let i: number 12 | // @ts-ignore 13 | src = src.subarray || src.slice ? src : src.buffer 14 | // @ts-ignore 15 | dst = dst.subarray || dst.slice ? dst : dst.buffer 16 | src = srcOffset 17 | ? // @ts-ignore 18 | src.subarray 19 | ? // @ts-ignore 20 | src.subarray(srcOffset, length && srcOffset + length) 21 | : // @ts-ignore 22 | src.slice(srcOffset, length && srcOffset + length) 23 | : src 24 | // @ts-ignore 25 | if (dst.set) { 26 | // @ts-ignore 27 | dst.set(src, dstOffset) 28 | } else { 29 | // @ts-ignore 30 | for (i = 0; i < src.length; i++) dst[i + dstOffset] = src[i] 31 | } 32 | return dst 33 | } 34 | 35 | export type PointsRepresentation = 36 | | THREE.BufferGeometry 37 | | Float32Array 38 | | THREE.Vector3[] 39 | | THREE.Vector2[] 40 | | THREE.Vector3Tuple[] 41 | | THREE.Vector2Tuple[] 42 | | number[] 43 | 44 | function convertPoints(points: PointsRepresentation): Float32Array | number[] { 45 | if (points instanceof Float32Array) return points 46 | if (points instanceof THREE.BufferGeometry) return points.getAttribute('position').array as Float32Array 47 | return points 48 | .map((p) => { 49 | const isArray = Array.isArray(p) 50 | return p instanceof THREE.Vector3 51 | ? [p.x, p.y, p.z] 52 | : p instanceof THREE.Vector2 53 | ? [p.x, p.y, 0] 54 | : isArray && p.length === 3 55 | ? [p[0], p[1], p[2]] 56 | : isArray && p.length === 2 57 | ? [p[0], p[1], 0] 58 | : p 59 | }) 60 | .flat() 61 | } 62 | 63 | export type WidthCallback = (p: number) => any 64 | 65 | export class MeshLineGeometry extends THREE.BufferGeometry { 66 | type = 'MeshLine' 67 | isMeshLine = true 68 | positions: number[] = [] 69 | previous: number[] = [] 70 | next: number[] = [] 71 | side: number[] = [] 72 | width: number[] = [] 73 | indices_array: number[] = [] 74 | uvs: number[] = [] 75 | counters: number[] = [] 76 | widthCallback: WidthCallback | null = null 77 | 78 | _attributes!: { 79 | position: THREE.BufferAttribute 80 | previous: THREE.BufferAttribute 81 | next: THREE.BufferAttribute 82 | side: THREE.BufferAttribute 83 | width: THREE.BufferAttribute 84 | uv: THREE.BufferAttribute 85 | index: THREE.BufferAttribute 86 | counters: THREE.BufferAttribute 87 | } 88 | _points: Float32Array | number[] = [] 89 | points!: Float32Array | number[] 90 | 91 | // Used to raycast 92 | matrixWorld = new THREE.Matrix4() 93 | 94 | constructor() { 95 | super() 96 | 97 | Object.defineProperties(this, { 98 | points: { 99 | enumerable: true, 100 | get() { 101 | return this._points 102 | }, 103 | set(value) { 104 | this.setPoints(value, this.widthCallback) 105 | }, 106 | }, 107 | }) 108 | } 109 | 110 | setMatrixWorld(matrixWorld: THREE.Matrix4): void { 111 | this.matrixWorld = matrixWorld 112 | } 113 | 114 | setPoints(points: PointsRepresentation, wcb?: WidthCallback): void { 115 | points = convertPoints(points) 116 | // as the points are mutated we store them 117 | // for later retreival when necessary (declaritive architectures) 118 | this._points = points 119 | this.widthCallback = wcb ?? null 120 | this.positions = [] 121 | this.counters = [] 122 | 123 | // TODO: this is unreachable 124 | if (points.length && (points[0] as any) instanceof THREE.Vector3) { 125 | // could transform Vector3 array into the array used below 126 | // but this approach will only loop through the array once 127 | // and is more performant 128 | for (let j = 0; j < points.length; j++) { 129 | const p = points[j] as unknown as THREE.Vector3 130 | const c = j / (points.length - 1) 131 | this.positions.push(p.x, p.y, p.z) 132 | this.positions.push(p.x, p.y, p.z) 133 | this.counters.push(c) 134 | this.counters.push(c) 135 | } 136 | } else { 137 | for (let j = 0; j < points.length; j += 3) { 138 | const c = j / (points.length - 1) 139 | this.positions.push(points[j], points[j + 1], points[j + 2]) 140 | this.positions.push(points[j], points[j + 1], points[j + 2]) 141 | this.counters.push(c) 142 | this.counters.push(c) 143 | } 144 | } 145 | this.process() 146 | } 147 | 148 | compareV3(a: number, b: number): boolean { 149 | const aa = a * 6 150 | const ab = b * 6 151 | return ( 152 | this.positions[aa] === this.positions[ab] && 153 | this.positions[aa + 1] === this.positions[ab + 1] && 154 | this.positions[aa + 2] === this.positions[ab + 2] 155 | ) 156 | } 157 | 158 | copyV3(a: number): THREE.Vector3Tuple { 159 | const aa = a * 6 160 | return [this.positions[aa], this.positions[aa + 1], this.positions[aa + 2]] 161 | } 162 | 163 | process(): void { 164 | const l = this.positions.length / 6 165 | 166 | this.previous = [] 167 | this.next = [] 168 | this.side = [] 169 | this.width = [] 170 | this.indices_array = [] 171 | this.uvs = [] 172 | 173 | let w 174 | 175 | let v: THREE.Vector3Tuple 176 | // initial previous points 177 | if (this.compareV3(0, l - 1)) { 178 | v = this.copyV3(l - 2) 179 | } else { 180 | v = this.copyV3(0) 181 | } 182 | this.previous.push(v[0], v[1], v[2]) 183 | this.previous.push(v[0], v[1], v[2]) 184 | 185 | for (let j = 0; j < l; j++) { 186 | // sides 187 | this.side.push(1) 188 | this.side.push(-1) 189 | 190 | // widths 191 | if (this.widthCallback) w = this.widthCallback(j / (l - 1)) 192 | else w = 1 193 | this.width.push(w) 194 | this.width.push(w) 195 | 196 | // uvs 197 | this.uvs.push(j / (l - 1), 0) 198 | this.uvs.push(j / (l - 1), 1) 199 | 200 | if (j < l - 1) { 201 | // points previous to poisitions 202 | v = this.copyV3(j) 203 | this.previous.push(v[0], v[1], v[2]) 204 | this.previous.push(v[0], v[1], v[2]) 205 | 206 | // indices 207 | const n = j * 2 208 | this.indices_array.push(n, n + 1, n + 2) 209 | this.indices_array.push(n + 2, n + 1, n + 3) 210 | } 211 | if (j > 0) { 212 | // points after poisitions 213 | v = this.copyV3(j) 214 | this.next.push(v[0], v[1], v[2]) 215 | this.next.push(v[0], v[1], v[2]) 216 | } 217 | } 218 | 219 | // last next point 220 | if (this.compareV3(l - 1, 0)) { 221 | v = this.copyV3(1) 222 | } else { 223 | v = this.copyV3(l - 1) 224 | } 225 | this.next.push(v[0], v[1], v[2]) 226 | this.next.push(v[0], v[1], v[2]) 227 | 228 | if (!this._attributes || this._attributes.position.count !== this.counters.length) { 229 | this._attributes = { 230 | position: new THREE.BufferAttribute(new Float32Array(this.positions), 3), 231 | previous: new THREE.BufferAttribute(new Float32Array(this.previous), 3), 232 | next: new THREE.BufferAttribute(new Float32Array(this.next), 3), 233 | side: new THREE.BufferAttribute(new Float32Array(this.side), 1), 234 | width: new THREE.BufferAttribute(new Float32Array(this.width), 1), 235 | uv: new THREE.BufferAttribute(new Float32Array(this.uvs), 2), 236 | index: new THREE.BufferAttribute(new Uint16Array(this.indices_array), 1), 237 | counters: new THREE.BufferAttribute(new Float32Array(this.counters), 1), 238 | } 239 | } else { 240 | this._attributes.position.copyArray(new Float32Array(this.positions)) 241 | this._attributes.position.needsUpdate = true 242 | this._attributes.previous.copyArray(new Float32Array(this.previous)) 243 | this._attributes.previous.needsUpdate = true 244 | this._attributes.next.copyArray(new Float32Array(this.next)) 245 | this._attributes.next.needsUpdate = true 246 | this._attributes.side.copyArray(new Float32Array(this.side)) 247 | this._attributes.side.needsUpdate = true 248 | this._attributes.width.copyArray(new Float32Array(this.width)) 249 | this._attributes.width.needsUpdate = true 250 | this._attributes.uv.copyArray(new Float32Array(this.uvs)) 251 | this._attributes.uv.needsUpdate = true 252 | this._attributes.index.copyArray(new Uint16Array(this.indices_array)) 253 | this._attributes.index.needsUpdate = true 254 | } 255 | 256 | this.setAttribute('position', this._attributes.position) 257 | this.setAttribute('previous', this._attributes.previous) 258 | this.setAttribute('next', this._attributes.next) 259 | this.setAttribute('side', this._attributes.side) 260 | this.setAttribute('width', this._attributes.width) 261 | this.setAttribute('uv', this._attributes.uv) 262 | this.setAttribute('counters', this._attributes.counters) 263 | 264 | this.setAttribute('position', this._attributes.position) 265 | this.setAttribute('previous', this._attributes.previous) 266 | this.setAttribute('next', this._attributes.next) 267 | this.setAttribute('side', this._attributes.side) 268 | this.setAttribute('width', this._attributes.width) 269 | this.setAttribute('uv', this._attributes.uv) 270 | this.setAttribute('counters', this._attributes.counters) 271 | 272 | this.setIndex(this._attributes.index) 273 | 274 | this.computeBoundingSphere() 275 | this.computeBoundingBox() 276 | } 277 | 278 | /** 279 | * Fast method to advance the line by one position. The oldest position is removed. 280 | * @param position 281 | */ 282 | advance({ x, y, z }: THREE.Vector3) { 283 | const positions = this._attributes.position.array as number[] 284 | const previous = this._attributes.previous.array as number[] 285 | const next = this._attributes.next.array as number[] 286 | const l = positions.length 287 | 288 | // PREVIOUS 289 | memcpy(positions, 0, previous, 0, l) 290 | 291 | // POSITIONS 292 | memcpy(positions, 6, positions, 0, l - 6) 293 | 294 | positions[l - 6] = x 295 | positions[l - 5] = y 296 | positions[l - 4] = z 297 | positions[l - 3] = x 298 | positions[l - 2] = y 299 | positions[l - 1] = z 300 | 301 | // NEXT 302 | memcpy(positions, 6, next, 0, l - 6) 303 | 304 | next[l - 6] = x 305 | next[l - 5] = y 306 | next[l - 4] = z 307 | next[l - 3] = x 308 | next[l - 2] = y 309 | next[l - 1] = z 310 | 311 | this._attributes.position.needsUpdate = true 312 | this._attributes.previous.needsUpdate = true 313 | this._attributes.next.needsUpdate = true 314 | } 315 | } 316 | -------------------------------------------------------------------------------- /src/MeshLineMaterial.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | 3 | const vertexShader = /* glsl */ ` 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | attribute vec3 previous; 10 | attribute vec3 next; 11 | attribute float side; 12 | attribute float width; 13 | attribute float counters; 14 | 15 | uniform vec2 resolution; 16 | uniform float lineWidth; 17 | uniform vec3 color; 18 | uniform float opacity; 19 | uniform float sizeAttenuation; 20 | 21 | varying vec2 vUV; 22 | varying vec4 vColor; 23 | varying float vCounters; 24 | 25 | vec2 fix(vec4 i, float aspect) { 26 | vec2 res = i.xy / i.w; 27 | res.x *= aspect; 28 | return res; 29 | } 30 | 31 | void main() { 32 | float aspect = resolution.x / resolution.y; 33 | vColor = vec4(color, opacity); 34 | vUV = uv; 35 | vCounters = counters; 36 | 37 | mat4 m = projectionMatrix * modelViewMatrix; 38 | vec4 finalPosition = m * vec4(position, 1.0) * aspect; 39 | vec4 prevPos = m * vec4(previous, 1.0); 40 | vec4 nextPos = m * vec4(next, 1.0); 41 | 42 | vec2 currentP = fix(finalPosition, aspect); 43 | vec2 prevP = fix(prevPos, aspect); 44 | vec2 nextP = fix(nextPos, aspect); 45 | 46 | float w = lineWidth * width; 47 | 48 | vec2 dir; 49 | if (nextP == currentP) dir = normalize(currentP - prevP); 50 | else if (prevP == currentP) dir = normalize(nextP - currentP); 51 | else { 52 | vec2 dir1 = normalize(currentP - prevP); 53 | vec2 dir2 = normalize(nextP - currentP); 54 | dir = normalize(dir1 + dir2); 55 | 56 | vec2 perp = vec2(-dir1.y, dir1.x); 57 | vec2 miter = vec2(-dir.y, dir.x); 58 | //w = clamp(w / dot(miter, perp), 0., 4. * lineWidth * width); 59 | } 60 | 61 | //vec2 normal = (cross(vec3(dir, 0.), vec3(0., 0., 1.))).xy; 62 | vec4 normal = vec4(-dir.y, dir.x, 0., 1.); 63 | normal.xy *= .5 * w; 64 | //normal *= projectionMatrix; 65 | if (sizeAttenuation == 0.) { 66 | normal.xy *= finalPosition.w; 67 | normal.xy /= (vec4(resolution, 0., 1.) * projectionMatrix).xy * aspect; 68 | } 69 | 70 | finalPosition.xy += normal.xy * side; 71 | gl_Position = finalPosition; 72 | #include 73 | #include 74 | vec4 mvPosition = modelViewMatrix * vec4(position, 1.0); 75 | #include 76 | #include 77 | } 78 | ` 79 | 80 | const version = /* @__PURE__ */ (() => parseInt(THREE.REVISION.replace(/\D+/g, '')))() 81 | const colorspace_fragment = version >= 154 ? 'colorspace_fragment' : 'encodings_fragment' 82 | 83 | const fragmentShader = /* glsl */ ` 84 | #include 85 | #include 86 | #include 87 | 88 | uniform sampler2D map; 89 | uniform sampler2D alphaMap; 90 | uniform float useGradient; 91 | uniform float useMap; 92 | uniform float useAlphaMap; 93 | uniform float useDash; 94 | uniform float dashArray; 95 | uniform float dashOffset; 96 | uniform float dashRatio; 97 | uniform float visibility; 98 | uniform float alphaTest; 99 | uniform vec2 repeat; 100 | uniform vec3 gradient[2]; 101 | 102 | varying vec2 vUV; 103 | varying vec4 vColor; 104 | varying float vCounters; 105 | 106 | void main() { 107 | #include 108 | vec4 diffuseColor = vColor; 109 | if (useGradient == 1.) diffuseColor = vec4(mix(gradient[0], gradient[1], vCounters), 1.0); 110 | if (useMap == 1.) diffuseColor *= texture2D(map, vUV * repeat); 111 | if (useAlphaMap == 1.) diffuseColor.a *= texture2D(alphaMap, vUV * repeat).a; 112 | if (diffuseColor.a < alphaTest) discard; 113 | if (useDash == 1.) diffuseColor.a *= ceil(mod(vCounters + dashOffset, dashArray) - (dashArray * dashRatio)); 114 | diffuseColor.a *= step(vCounters, visibility); 115 | #include 116 | gl_FragColor = diffuseColor; 117 | #include 118 | #include 119 | #include <${colorspace_fragment}> 120 | } 121 | ` 122 | 123 | export interface MeshLineMaterialParameters { 124 | lineWidth?: number 125 | map?: THREE.Texture 126 | useMap?: number 127 | alphaMap?: THREE.Texture 128 | useAlphaMap?: number 129 | color?: string | THREE.Color | number 130 | gradient?: string[] | THREE.Color[] | number[] 131 | opacity?: number 132 | resolution: THREE.Vector2 // required 133 | sizeAttenuation?: number 134 | dashArray?: number 135 | dashOffset?: number 136 | dashRatio?: number 137 | useDash?: number 138 | useGradient?: number 139 | visibility?: number 140 | alphaTest?: number 141 | repeat?: THREE.Vector2 142 | } 143 | 144 | export class MeshLineMaterial extends THREE.ShaderMaterial implements MeshLineMaterialParameters { 145 | lineWidth!: number 146 | map!: THREE.Texture 147 | useMap!: number 148 | alphaMap!: THREE.Texture 149 | useAlphaMap!: number 150 | color!: THREE.Color 151 | gradient!: THREE.Color[] 152 | resolution!: THREE.Vector2 153 | sizeAttenuation!: number 154 | dashArray!: number 155 | dashOffset!: number 156 | dashRatio!: number 157 | useDash!: number 158 | useGradient!: number 159 | visibility!: number 160 | repeat!: THREE.Vector2 161 | 162 | constructor(parameters: MeshLineMaterialParameters) { 163 | super({ 164 | uniforms: { 165 | ...THREE.UniformsLib.fog, 166 | lineWidth: { value: 1 }, 167 | map: { value: null }, 168 | useMap: { value: 0 }, 169 | alphaMap: { value: null }, 170 | useAlphaMap: { value: 0 }, 171 | color: { value: new THREE.Color(0xffffff) }, 172 | gradient: { value: [new THREE.Color(0xff0000), new THREE.Color(0x00ff00)] }, 173 | opacity: { value: 1 }, 174 | resolution: { value: new THREE.Vector2(1, 1) }, 175 | sizeAttenuation: { value: 1 }, 176 | dashArray: { value: 0 }, 177 | dashOffset: { value: 0 }, 178 | dashRatio: { value: 0.5 }, 179 | useDash: { value: 0 }, 180 | useGradient: { value: 0 }, 181 | visibility: { value: 1 }, 182 | alphaTest: { value: 0 }, 183 | repeat: { value: new THREE.Vector2(1, 1) }, 184 | }, 185 | vertexShader, 186 | fragmentShader, 187 | }) 188 | 189 | this.type = 'MeshLineMaterial' 190 | Object.defineProperties(this, { 191 | lineWidth: { 192 | enumerable: true, 193 | get() { 194 | return this.uniforms.lineWidth.value 195 | }, 196 | set(value) { 197 | this.uniforms.lineWidth.value = value 198 | }, 199 | }, 200 | map: { 201 | enumerable: true, 202 | get() { 203 | return this.uniforms.map.value 204 | }, 205 | set(value) { 206 | this.uniforms.map.value = value 207 | }, 208 | }, 209 | useMap: { 210 | enumerable: true, 211 | get() { 212 | return this.uniforms.useMap.value 213 | }, 214 | set(value) { 215 | this.uniforms.useMap.value = value 216 | }, 217 | }, 218 | alphaMap: { 219 | enumerable: true, 220 | get() { 221 | return this.uniforms.alphaMap.value 222 | }, 223 | set(value) { 224 | this.uniforms.alphaMap.value = value 225 | }, 226 | }, 227 | useAlphaMap: { 228 | enumerable: true, 229 | get() { 230 | return this.uniforms.useAlphaMap.value 231 | }, 232 | set(value) { 233 | this.uniforms.useAlphaMap.value = value 234 | }, 235 | }, 236 | color: { 237 | enumerable: true, 238 | get() { 239 | return this.uniforms.color.value 240 | }, 241 | set(value) { 242 | this.uniforms.color.value = value 243 | }, 244 | }, 245 | gradient: { 246 | enumerable: true, 247 | get() { 248 | return this.uniforms.gradient.value 249 | }, 250 | set(value) { 251 | this.uniforms.gradient.value = value 252 | }, 253 | }, 254 | opacity: { 255 | enumerable: true, 256 | get() { 257 | return this.uniforms.opacity.value 258 | }, 259 | set(value) { 260 | this.uniforms.opacity.value = value 261 | }, 262 | }, 263 | resolution: { 264 | enumerable: true, 265 | get() { 266 | return this.uniforms.resolution.value 267 | }, 268 | set(value) { 269 | this.uniforms.resolution.value.copy(value) 270 | }, 271 | }, 272 | sizeAttenuation: { 273 | enumerable: true, 274 | get() { 275 | return this.uniforms.sizeAttenuation.value 276 | }, 277 | set(value) { 278 | this.uniforms.sizeAttenuation.value = value 279 | }, 280 | }, 281 | dashArray: { 282 | enumerable: true, 283 | get() { 284 | return this.uniforms.dashArray.value 285 | }, 286 | set(value) { 287 | this.uniforms.dashArray.value = value 288 | this.useDash = value !== 0 ? 1 : 0 289 | }, 290 | }, 291 | dashOffset: { 292 | enumerable: true, 293 | get() { 294 | return this.uniforms.dashOffset.value 295 | }, 296 | set(value) { 297 | this.uniforms.dashOffset.value = value 298 | }, 299 | }, 300 | dashRatio: { 301 | enumerable: true, 302 | get() { 303 | return this.uniforms.dashRatio.value 304 | }, 305 | set(value) { 306 | this.uniforms.dashRatio.value = value 307 | }, 308 | }, 309 | useDash: { 310 | enumerable: true, 311 | get() { 312 | return this.uniforms.useDash.value 313 | }, 314 | set(value) { 315 | this.uniforms.useDash.value = value 316 | }, 317 | }, 318 | useGradient: { 319 | enumerable: true, 320 | get() { 321 | return this.uniforms.useGradient.value 322 | }, 323 | set(value) { 324 | this.uniforms.useGradient.value = value 325 | }, 326 | }, 327 | visibility: { 328 | enumerable: true, 329 | get() { 330 | return this.uniforms.visibility.value 331 | }, 332 | set(value) { 333 | this.uniforms.visibility.value = value 334 | }, 335 | }, 336 | alphaTest: { 337 | enumerable: true, 338 | get() { 339 | return this.uniforms.alphaTest.value 340 | }, 341 | set(value) { 342 | this.uniforms.alphaTest.value = value 343 | }, 344 | }, 345 | repeat: { 346 | enumerable: true, 347 | get() { 348 | return this.uniforms.repeat.value 349 | }, 350 | set(value) { 351 | this.uniforms.repeat.value.copy(value) 352 | }, 353 | }, 354 | }) 355 | this.setValues(parameters) 356 | } 357 | 358 | copy(source: MeshLineMaterial): this { 359 | super.copy(source) 360 | this.lineWidth = source.lineWidth 361 | this.map = source.map 362 | this.useMap = source.useMap 363 | this.alphaMap = source.alphaMap 364 | this.useAlphaMap = source.useAlphaMap 365 | this.color.copy(source.color) 366 | this.gradient = source.gradient 367 | this.opacity = source.opacity 368 | this.resolution.copy(source.resolution) 369 | this.sizeAttenuation = source.sizeAttenuation 370 | this.dashArray = source.dashArray 371 | this.dashOffset = source.dashOffset 372 | this.dashRatio = source.dashRatio 373 | this.useDash = source.useDash 374 | this.useGradient = source.useGradient 375 | this.visibility = source.visibility 376 | this.alphaTest = source.alphaTest 377 | this.repeat.copy(source.repeat) 378 | return this 379 | } 380 | } 381 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MeshLineGeometry' 2 | export * from './MeshLineMaterial' 3 | export * from './raycast' 4 | -------------------------------------------------------------------------------- /src/raycast.ts: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | import type { MeshLineMaterial } from './MeshLineMaterial' 3 | 4 | export function raycast( 5 | this: THREE.Mesh, 6 | raycaster: THREE.Raycaster, 7 | intersects: THREE.Intersection[], 8 | ): void { 9 | const inverseMatrix = new THREE.Matrix4() 10 | const ray = new THREE.Ray() 11 | const sphere = new THREE.Sphere() 12 | const interRay = new THREE.Vector3() 13 | const geometry = this.geometry 14 | // Checking boundingSphere distance to ray 15 | 16 | sphere.copy(geometry.boundingSphere!) 17 | sphere.applyMatrix4(this.matrixWorld) 18 | 19 | if (!raycaster.ray.intersectSphere(sphere, interRay)) return 20 | 21 | inverseMatrix.copy(this.matrixWorld).invert() 22 | ray.copy(raycaster.ray).applyMatrix4(inverseMatrix) 23 | 24 | const vStart = new THREE.Vector3() 25 | const vEnd = new THREE.Vector3() 26 | const interSegment = new THREE.Vector3() 27 | const step = this instanceof THREE.LineSegments ? 2 : 1 28 | const index = geometry.index 29 | const attributes = geometry.attributes 30 | 31 | if (index !== null) { 32 | const indices = index.array 33 | const positions = attributes.position.array 34 | const widths = attributes.width.array 35 | 36 | for (let i = 0, l = indices.length - 1; i < l; i += step) { 37 | const a = indices[i] 38 | const b = indices[i + 1] 39 | 40 | vStart.fromArray(positions, a * 3) 41 | vEnd.fromArray(positions, b * 3) 42 | const width = widths[Math.floor(i / 3)] != undefined ? widths[Math.floor(i / 3)] : 1 43 | const precision = raycaster.params.Line!.threshold + (this.material.lineWidth * width) / 2 44 | const precisionSq = precision * precision 45 | 46 | const distSq = ray.distanceSqToSegment(vStart, vEnd, interRay, interSegment) 47 | 48 | if (distSq > precisionSq) continue 49 | 50 | interRay.applyMatrix4(this.matrixWorld) //Move back to world space for distance calculation 51 | 52 | const distance = raycaster.ray.origin.distanceTo(interRay) 53 | if (distance < raycaster.near || distance > raycaster.far) continue 54 | 55 | intersects.push({ 56 | distance, 57 | // What do we want? intersection point on the ray or on the segment?? 58 | // point: raycaster.ray.at( distance ), 59 | point: interSegment.clone().applyMatrix4(this.matrixWorld), 60 | index: i, 61 | face: null, 62 | faceIndex: undefined, 63 | object: this, 64 | }) 65 | // make event only fire once 66 | i = l 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "dist", 4 | "target": "esnext", 5 | "module": "esnext", 6 | "lib": ["esnext", "dom"], 7 | "moduleResolution": "node", 8 | "pretty": true, 9 | "strict": true, 10 | "declaration": true, 11 | "emitDeclarationOnly": true, 12 | "forceConsistentCasingInFileNames": true 13 | }, 14 | "include": ["src/**/*"] 15 | } 16 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'node:path' 2 | import { defineConfig } from 'vite' 3 | 4 | export default defineConfig({ 5 | build: { 6 | minify: false, 7 | target: 'es2018', 8 | lib: { 9 | formats: ['es', 'cjs'], 10 | entry: 'src/index.ts', 11 | fileName: '[name]', 12 | }, 13 | rollupOptions: { 14 | external: (id: string) => !id.startsWith('.') && !path.isAbsolute(id), 15 | }, 16 | }, 17 | }) 18 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.1.0": 6 | version "2.2.0" 7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" 8 | integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== 9 | dependencies: 10 | "@jridgewell/gen-mapping" "^0.1.0" 11 | "@jridgewell/trace-mapping" "^0.3.9" 12 | 13 | "@babel/code-frame@^7.18.6": 14 | version "7.18.6" 15 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" 16 | integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== 17 | dependencies: 18 | "@babel/highlight" "^7.18.6" 19 | 20 | "@babel/compat-data@^7.20.0": 21 | version "7.20.5" 22 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.5.tgz#86f172690b093373a933223b4745deeb6049e733" 23 | integrity sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g== 24 | 25 | "@babel/core@^7.19.6": 26 | version "7.20.5" 27 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.5.tgz#45e2114dc6cd4ab167f81daf7820e8fa1250d113" 28 | integrity sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ== 29 | dependencies: 30 | "@ampproject/remapping" "^2.1.0" 31 | "@babel/code-frame" "^7.18.6" 32 | "@babel/generator" "^7.20.5" 33 | "@babel/helper-compilation-targets" "^7.20.0" 34 | "@babel/helper-module-transforms" "^7.20.2" 35 | "@babel/helpers" "^7.20.5" 36 | "@babel/parser" "^7.20.5" 37 | "@babel/template" "^7.18.10" 38 | "@babel/traverse" "^7.20.5" 39 | "@babel/types" "^7.20.5" 40 | convert-source-map "^1.7.0" 41 | debug "^4.1.0" 42 | gensync "^1.0.0-beta.2" 43 | json5 "^2.2.1" 44 | semver "^6.3.0" 45 | 46 | "@babel/generator@^7.20.5": 47 | version "7.20.5" 48 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.5.tgz#cb25abee3178adf58d6814b68517c62bdbfdda95" 49 | integrity sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA== 50 | dependencies: 51 | "@babel/types" "^7.20.5" 52 | "@jridgewell/gen-mapping" "^0.3.2" 53 | jsesc "^2.5.1" 54 | 55 | "@babel/helper-annotate-as-pure@^7.18.6": 56 | version "7.18.6" 57 | resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" 58 | integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== 59 | dependencies: 60 | "@babel/types" "^7.18.6" 61 | 62 | "@babel/helper-compilation-targets@^7.20.0": 63 | version "7.20.0" 64 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz#6bf5374d424e1b3922822f1d9bdaa43b1a139d0a" 65 | integrity sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ== 66 | dependencies: 67 | "@babel/compat-data" "^7.20.0" 68 | "@babel/helper-validator-option" "^7.18.6" 69 | browserslist "^4.21.3" 70 | semver "^6.3.0" 71 | 72 | "@babel/helper-environment-visitor@^7.18.9": 73 | version "7.18.9" 74 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" 75 | integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== 76 | 77 | "@babel/helper-function-name@^7.19.0": 78 | version "7.19.0" 79 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" 80 | integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== 81 | dependencies: 82 | "@babel/template" "^7.18.10" 83 | "@babel/types" "^7.19.0" 84 | 85 | "@babel/helper-hoist-variables@^7.18.6": 86 | version "7.18.6" 87 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" 88 | integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== 89 | dependencies: 90 | "@babel/types" "^7.18.6" 91 | 92 | "@babel/helper-module-imports@^7.18.6": 93 | version "7.18.6" 94 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" 95 | integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== 96 | dependencies: 97 | "@babel/types" "^7.18.6" 98 | 99 | "@babel/helper-module-transforms@^7.20.2": 100 | version "7.20.2" 101 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz#ac53da669501edd37e658602a21ba14c08748712" 102 | integrity sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA== 103 | dependencies: 104 | "@babel/helper-environment-visitor" "^7.18.9" 105 | "@babel/helper-module-imports" "^7.18.6" 106 | "@babel/helper-simple-access" "^7.20.2" 107 | "@babel/helper-split-export-declaration" "^7.18.6" 108 | "@babel/helper-validator-identifier" "^7.19.1" 109 | "@babel/template" "^7.18.10" 110 | "@babel/traverse" "^7.20.1" 111 | "@babel/types" "^7.20.2" 112 | 113 | "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0": 114 | version "7.20.2" 115 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" 116 | integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== 117 | 118 | "@babel/helper-simple-access@^7.20.2": 119 | version "7.20.2" 120 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" 121 | integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== 122 | dependencies: 123 | "@babel/types" "^7.20.2" 124 | 125 | "@babel/helper-split-export-declaration@^7.18.6": 126 | version "7.18.6" 127 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" 128 | integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== 129 | dependencies: 130 | "@babel/types" "^7.18.6" 131 | 132 | "@babel/helper-string-parser@^7.19.4": 133 | version "7.19.4" 134 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" 135 | integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== 136 | 137 | "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": 138 | version "7.19.1" 139 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" 140 | integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== 141 | 142 | "@babel/helper-validator-option@^7.18.6": 143 | version "7.18.6" 144 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" 145 | integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== 146 | 147 | "@babel/helpers@^7.20.5": 148 | version "7.20.6" 149 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.6.tgz#e64778046b70e04779dfbdf924e7ebb45992c763" 150 | integrity sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w== 151 | dependencies: 152 | "@babel/template" "^7.18.10" 153 | "@babel/traverse" "^7.20.5" 154 | "@babel/types" "^7.20.5" 155 | 156 | "@babel/highlight@^7.18.6": 157 | version "7.18.6" 158 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" 159 | integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== 160 | dependencies: 161 | "@babel/helper-validator-identifier" "^7.18.6" 162 | chalk "^2.0.0" 163 | js-tokens "^4.0.0" 164 | 165 | "@babel/parser@^7.18.10", "@babel/parser@^7.20.5": 166 | version "7.20.5" 167 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8" 168 | integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA== 169 | 170 | "@babel/plugin-syntax-jsx@^7.18.6": 171 | version "7.18.6" 172 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" 173 | integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== 174 | dependencies: 175 | "@babel/helper-plugin-utils" "^7.18.6" 176 | 177 | "@babel/plugin-transform-react-jsx-development@^7.18.6": 178 | version "7.18.6" 179 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" 180 | integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== 181 | dependencies: 182 | "@babel/plugin-transform-react-jsx" "^7.18.6" 183 | 184 | "@babel/plugin-transform-react-jsx-self@^7.18.6": 185 | version "7.18.6" 186 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz#3849401bab7ae8ffa1e3e5687c94a753fc75bda7" 187 | integrity sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig== 188 | dependencies: 189 | "@babel/helper-plugin-utils" "^7.18.6" 190 | 191 | "@babel/plugin-transform-react-jsx-source@^7.19.6": 192 | version "7.19.6" 193 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz#88578ae8331e5887e8ce28e4c9dc83fb29da0b86" 194 | integrity sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ== 195 | dependencies: 196 | "@babel/helper-plugin-utils" "^7.19.0" 197 | 198 | "@babel/plugin-transform-react-jsx@^7.18.6", "@babel/plugin-transform-react-jsx@^7.19.0": 199 | version "7.19.0" 200 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz#b3cbb7c3a00b92ec8ae1027910e331ba5c500eb9" 201 | integrity sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg== 202 | dependencies: 203 | "@babel/helper-annotate-as-pure" "^7.18.6" 204 | "@babel/helper-module-imports" "^7.18.6" 205 | "@babel/helper-plugin-utils" "^7.19.0" 206 | "@babel/plugin-syntax-jsx" "^7.18.6" 207 | "@babel/types" "^7.19.0" 208 | 209 | "@babel/runtime@^7.13.10", "@babel/runtime@^7.16.7", "@babel/runtime@^7.17.8": 210 | version "7.20.6" 211 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3" 212 | integrity sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA== 213 | dependencies: 214 | regenerator-runtime "^0.13.11" 215 | 216 | "@babel/template@^7.18.10": 217 | version "7.18.10" 218 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" 219 | integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== 220 | dependencies: 221 | "@babel/code-frame" "^7.18.6" 222 | "@babel/parser" "^7.18.10" 223 | "@babel/types" "^7.18.10" 224 | 225 | "@babel/traverse@^7.20.1", "@babel/traverse@^7.20.5": 226 | version "7.20.5" 227 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.5.tgz#78eb244bea8270fdda1ef9af22a5d5e5b7e57133" 228 | integrity sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ== 229 | dependencies: 230 | "@babel/code-frame" "^7.18.6" 231 | "@babel/generator" "^7.20.5" 232 | "@babel/helper-environment-visitor" "^7.18.9" 233 | "@babel/helper-function-name" "^7.19.0" 234 | "@babel/helper-hoist-variables" "^7.18.6" 235 | "@babel/helper-split-export-declaration" "^7.18.6" 236 | "@babel/parser" "^7.20.5" 237 | "@babel/types" "^7.20.5" 238 | debug "^4.1.0" 239 | globals "^11.1.0" 240 | 241 | "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5": 242 | version "7.20.5" 243 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.5.tgz#e206ae370b5393d94dfd1d04cd687cace53efa84" 244 | integrity sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg== 245 | dependencies: 246 | "@babel/helper-string-parser" "^7.19.4" 247 | "@babel/helper-validator-identifier" "^7.19.1" 248 | to-fast-properties "^2.0.0" 249 | 250 | "@chevrotain/cst-dts-gen@10.4.2": 251 | version "10.4.2" 252 | resolved "https://registry.yarnpkg.com/@chevrotain/cst-dts-gen/-/cst-dts-gen-10.4.2.tgz#a3426dba2c48cf6c90e49a0676aea750e8f43e88" 253 | integrity sha512-0+4bNjlndNWMoVLH/+y4uHnf6GrTipsC+YTppJxelVJo+xeRVQ0s2PpkdDCVTsu7efyj+8r1gFiwVXsp6JZ0iQ== 254 | dependencies: 255 | "@chevrotain/gast" "10.4.2" 256 | "@chevrotain/types" "10.4.2" 257 | lodash "4.17.21" 258 | 259 | "@chevrotain/gast@10.4.2": 260 | version "10.4.2" 261 | resolved "https://registry.yarnpkg.com/@chevrotain/gast/-/gast-10.4.2.tgz#236dc48e54cba16260c03bece25d5a3b6e2f5dab" 262 | integrity sha512-4ZAn8/mjkmYonilSJ60gGj1tAF0cVWYUMlIGA0e4ATAc3a648aCnvpBw7zlPHDQjFp50XC13iyWEgWAKiRKTOA== 263 | dependencies: 264 | "@chevrotain/types" "10.4.2" 265 | lodash "4.17.21" 266 | 267 | "@chevrotain/types@10.4.2": 268 | version "10.4.2" 269 | resolved "https://registry.yarnpkg.com/@chevrotain/types/-/types-10.4.2.tgz#18be6b7a3226b121fccec08c2ba8433219a6813c" 270 | integrity sha512-QzSCjg6G4MvIoLeIgOiMR0IgzkGEQqrNJJIr3T5ETRa7l4Av4AMIiEctV99mvDr57iXwwk0/kr3RJxiU36Nevw== 271 | 272 | "@chevrotain/utils@10.4.2": 273 | version "10.4.2" 274 | resolved "https://registry.yarnpkg.com/@chevrotain/utils/-/utils-10.4.2.tgz#87735732184cc5a2f8aad2f3454082294ef3c924" 275 | integrity sha512-V34dacxWLwKcvcy32dx96ADJVdB7kOJLm7LyBkBQw5u5HC9WdEFw2G17zml+U3ivavGTrGPJHl8o9/UJm0PlUw== 276 | 277 | "@esbuild/android-arm@0.15.18": 278 | version "0.15.18" 279 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.18.tgz#266d40b8fdcf87962df8af05b76219bc786b4f80" 280 | integrity sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw== 281 | 282 | "@esbuild/linux-loong64@0.15.18": 283 | version "0.15.18" 284 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz#128b76ecb9be48b60cf5cfc1c63a4f00691a3239" 285 | integrity sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ== 286 | 287 | "@jridgewell/gen-mapping@^0.1.0": 288 | version "0.1.1" 289 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" 290 | integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== 291 | dependencies: 292 | "@jridgewell/set-array" "^1.0.0" 293 | "@jridgewell/sourcemap-codec" "^1.4.10" 294 | 295 | "@jridgewell/gen-mapping@^0.3.2": 296 | version "0.3.2" 297 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" 298 | integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== 299 | dependencies: 300 | "@jridgewell/set-array" "^1.0.1" 301 | "@jridgewell/sourcemap-codec" "^1.4.10" 302 | "@jridgewell/trace-mapping" "^0.3.9" 303 | 304 | "@jridgewell/resolve-uri@3.1.0": 305 | version "3.1.0" 306 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 307 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 308 | 309 | "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": 310 | version "1.1.2" 311 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 312 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 313 | 314 | "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": 315 | version "1.4.14" 316 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 317 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 318 | 319 | "@jridgewell/trace-mapping@^0.3.9": 320 | version "0.3.17" 321 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" 322 | integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== 323 | dependencies: 324 | "@jridgewell/resolve-uri" "3.1.0" 325 | "@jridgewell/sourcemap-codec" "1.4.14" 326 | 327 | "@radix-ui/popper@0.1.0": 328 | version "0.1.0" 329 | resolved "https://registry.yarnpkg.com/@radix-ui/popper/-/popper-0.1.0.tgz#c387a38f31b7799e1ea0d2bb1ca0c91c2931b063" 330 | integrity sha512-uzYeElL3w7SeNMuQpXiFlBhTT+JyaNMCwDfjKkrzugEcYrf5n52PHqncNdQPUtR42hJh8V9FsqyEDbDxkeNjJQ== 331 | dependencies: 332 | "@babel/runtime" "^7.13.10" 333 | csstype "^3.0.4" 334 | 335 | "@radix-ui/primitive@0.1.0": 336 | version "0.1.0" 337 | resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-0.1.0.tgz#6206b97d379994f0d1929809db035733b337e543" 338 | integrity sha512-tqxZKybwN5Fa3VzZry4G6mXAAb9aAqKmPtnVbZpL0vsBwvOHTBwsjHVPXylocYLwEtBY9SCe665bYnNB515uoA== 339 | dependencies: 340 | "@babel/runtime" "^7.13.10" 341 | 342 | "@radix-ui/react-arrow@0.1.3": 343 | version "0.1.3" 344 | resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-0.1.3.tgz#17f86eab216c48aff17b13b811569a9bbabaa44d" 345 | integrity sha512-9x1gRYdlUD5OUwY7L+M+4FY/YltDSsrNSj8QXGPbxZxL5ghWXB/4lhyIGccCwk/e8ggfmQYv9SRNmn3LavPo3A== 346 | dependencies: 347 | "@babel/runtime" "^7.13.10" 348 | "@radix-ui/react-primitive" "0.1.3" 349 | 350 | "@radix-ui/react-compose-refs@0.1.0": 351 | version "0.1.0" 352 | resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-0.1.0.tgz#cff6e780a0f73778b976acff2c2a5b6551caab95" 353 | integrity sha512-eyclbh+b77k+69Dk72q3694OHrn9B3QsoIRx7ywX341U9RK1ThgQjMFZoPtmZNQTksXHLNEiefR8hGVeFyInGg== 354 | dependencies: 355 | "@babel/runtime" "^7.13.10" 356 | 357 | "@radix-ui/react-context@0.1.1": 358 | version "0.1.1" 359 | resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-0.1.1.tgz#06996829ea124d9a1bc1dbe3e51f33588fab0875" 360 | integrity sha512-PkyVX1JsLBioeu0jB9WvRpDBBLtLZohVDT3BB5CTSJqActma8S8030P57mWZb4baZifMvN7KKWPAA40UmWKkQg== 361 | dependencies: 362 | "@babel/runtime" "^7.13.10" 363 | 364 | "@radix-ui/react-id@0.1.4": 365 | version "0.1.4" 366 | resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-0.1.4.tgz#4cd6126e6ac8a43ebe6d52948a068b797cc9ad71" 367 | integrity sha512-/hq5m/D0ZfJWOS7TLF+G0l08KDRs87LBE46JkAvgKkg1fW4jkucx9At9D9vauIPSbdNmww5kXEp566hMlA8eXA== 368 | dependencies: 369 | "@babel/runtime" "^7.13.10" 370 | "@radix-ui/react-use-layout-effect" "0.1.0" 371 | 372 | "@radix-ui/react-popper@0.1.3": 373 | version "0.1.3" 374 | resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-0.1.3.tgz#a93bdd72845566007e5f3868caddd62318bb781e" 375 | integrity sha512-2OV2YaJv7iTZexJY3HJ7B6Fs1A/3JXd3fRGU4JY0guACfGMD1C/jSgds505MKQOTiHE/quI6j3/q8yfzFjJR9g== 376 | dependencies: 377 | "@babel/runtime" "^7.13.10" 378 | "@radix-ui/popper" "0.1.0" 379 | "@radix-ui/react-arrow" "0.1.3" 380 | "@radix-ui/react-compose-refs" "0.1.0" 381 | "@radix-ui/react-context" "0.1.1" 382 | "@radix-ui/react-primitive" "0.1.3" 383 | "@radix-ui/react-use-rect" "0.1.1" 384 | "@radix-ui/react-use-size" "0.1.0" 385 | "@radix-ui/rect" "0.1.1" 386 | 387 | "@radix-ui/react-portal@0.1.3": 388 | version "0.1.3" 389 | resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-0.1.3.tgz#56826e789b3d4e37983f6d23666e3f1b1b9ee358" 390 | integrity sha512-DrV+sPYLs0HhmX5/b7yRT6nLM9Nl6FtQe2KUG+46kiCOKQ+0XzNMO5hmeQtyq0mRf/qlC02rFu6OMsWpIqVsJg== 391 | dependencies: 392 | "@babel/runtime" "^7.13.10" 393 | "@radix-ui/react-primitive" "0.1.3" 394 | "@radix-ui/react-use-layout-effect" "0.1.0" 395 | 396 | "@radix-ui/react-portal@^0.1.3": 397 | version "0.1.4" 398 | resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-0.1.4.tgz#17bdce3d7f1a9a0b35cb5e935ab8bc562441a7d2" 399 | integrity sha512-MO0wRy2eYRTZ/CyOri9NANCAtAtq89DEtg90gicaTlkCfdqCLEBsLb+/q66BZQTr3xX/Vq01nnVfc/TkCqoqvw== 400 | dependencies: 401 | "@babel/runtime" "^7.13.10" 402 | "@radix-ui/react-primitive" "0.1.4" 403 | "@radix-ui/react-use-layout-effect" "0.1.0" 404 | 405 | "@radix-ui/react-presence@0.1.1": 406 | version "0.1.1" 407 | resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-0.1.1.tgz#2088dec6f4f8042f83dd2d6bf9e8ef09dadbbc15" 408 | integrity sha512-LsL+NcWDpFUAYCmXeH02o4pgqcSLpwxP84UIjCtpIKrsPe2vLuhcp79KC/jZJeXz+of2lUpMAxpM+eCpxFZtlg== 409 | dependencies: 410 | "@babel/runtime" "^7.13.10" 411 | "@radix-ui/react-compose-refs" "0.1.0" 412 | "@radix-ui/react-use-layout-effect" "0.1.0" 413 | 414 | "@radix-ui/react-primitive@0.1.3": 415 | version "0.1.3" 416 | resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-0.1.3.tgz#585c35ef2ec06bab0ea9e0fc5c916e556661b881" 417 | integrity sha512-fcyADaaAx2jdqEDLsTs6aX50S3L1c9K9CC6XMpJpuXFJCU4n9PGTFDZRtY2gAoXXoRCPIBsklCopSmGb6SsDjQ== 418 | dependencies: 419 | "@babel/runtime" "^7.13.10" 420 | "@radix-ui/react-slot" "0.1.2" 421 | 422 | "@radix-ui/react-primitive@0.1.4": 423 | version "0.1.4" 424 | resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-0.1.4.tgz#6c233cf08b0cb87fecd107e9efecb3f21861edc1" 425 | integrity sha512-6gSl2IidySupIMJFjYnDIkIWRyQdbu/AHK7rbICPani+LW4b0XdxBXc46og/iZvuwW8pjCS8I2SadIerv84xYA== 426 | dependencies: 427 | "@babel/runtime" "^7.13.10" 428 | "@radix-ui/react-slot" "0.1.2" 429 | 430 | "@radix-ui/react-slot@0.1.2": 431 | version "0.1.2" 432 | resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-0.1.2.tgz#e6f7ad9caa8ce81cc8d532c854c56f9b8b6307c8" 433 | integrity sha512-ADkqfL+agEzEguU3yS26jfB50hRrwf7U4VTwAOZEmi/g+ITcBWe12yM46ueS/UCIMI9Py+gFUaAdxgxafFvY2Q== 434 | dependencies: 435 | "@babel/runtime" "^7.13.10" 436 | "@radix-ui/react-compose-refs" "0.1.0" 437 | 438 | "@radix-ui/react-tooltip@0.1.6": 439 | version "0.1.6" 440 | resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-0.1.6.tgz#46a3e385e004aaebd16ecaa1da7d1af70ba3bb45" 441 | integrity sha512-0uaRpRmTCQo5yMUkDpv4LEDnaQDoeLXcNNhZonCZdbZBQ7ntvjURIWIigq1/pXZp0UX7oPpFzsXD9jUp8JT0WA== 442 | dependencies: 443 | "@babel/runtime" "^7.13.10" 444 | "@radix-ui/primitive" "0.1.0" 445 | "@radix-ui/react-compose-refs" "0.1.0" 446 | "@radix-ui/react-context" "0.1.1" 447 | "@radix-ui/react-id" "0.1.4" 448 | "@radix-ui/react-popper" "0.1.3" 449 | "@radix-ui/react-portal" "0.1.3" 450 | "@radix-ui/react-presence" "0.1.1" 451 | "@radix-ui/react-primitive" "0.1.3" 452 | "@radix-ui/react-slot" "0.1.2" 453 | "@radix-ui/react-use-controllable-state" "0.1.0" 454 | "@radix-ui/react-use-escape-keydown" "0.1.0" 455 | "@radix-ui/react-use-previous" "0.1.0" 456 | "@radix-ui/react-use-rect" "0.1.1" 457 | "@radix-ui/react-visually-hidden" "0.1.3" 458 | 459 | "@radix-ui/react-use-callback-ref@0.1.0": 460 | version "0.1.0" 461 | resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-0.1.0.tgz#934b6e123330f5b3a6b116460e6662cbc663493f" 462 | integrity sha512-Va041McOFFl+aV+sejvl0BS2aeHx86ND9X/rVFmEFQKTXCp6xgUK0NGUAGcgBlIjnJSbMYPGEk1xKSSlVcN2Aw== 463 | dependencies: 464 | "@babel/runtime" "^7.13.10" 465 | 466 | "@radix-ui/react-use-controllable-state@0.1.0": 467 | version "0.1.0" 468 | resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-0.1.0.tgz#4fced164acfc69a4e34fb9d193afdab973a55de1" 469 | integrity sha512-zv7CX/PgsRl46a52Tl45TwqwVJdmqnlQEQhaYMz/yBOD2sx2gCkCFSoF/z9mpnYWmS6DTLNTg5lIps3fV6EnXg== 470 | dependencies: 471 | "@babel/runtime" "^7.13.10" 472 | "@radix-ui/react-use-callback-ref" "0.1.0" 473 | 474 | "@radix-ui/react-use-escape-keydown@0.1.0": 475 | version "0.1.0" 476 | resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-0.1.0.tgz#dc80cb3753e9d1bd992adbad9a149fb6ea941874" 477 | integrity sha512-tDLZbTGFmvXaazUXXv8kYbiCcbAE8yKgng9s95d8fCO+Eundv0Jngbn/hKPhDDs4jj9ChwRX5cDDnlaN+ugYYQ== 478 | dependencies: 479 | "@babel/runtime" "^7.13.10" 480 | "@radix-ui/react-use-callback-ref" "0.1.0" 481 | 482 | "@radix-ui/react-use-layout-effect@0.1.0": 483 | version "0.1.0" 484 | resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-0.1.0.tgz#ebf71bd6d2825de8f1fbb984abf2293823f0f223" 485 | integrity sha512-+wdeS51Y+E1q1Wmd+1xSSbesZkpVj4jsg0BojCbopWvgq5iBvixw5vgemscdh58ep98BwUbsFYnrywFhV9yrVg== 486 | dependencies: 487 | "@babel/runtime" "^7.13.10" 488 | 489 | "@radix-ui/react-use-previous@0.1.0": 490 | version "0.1.0" 491 | resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-0.1.0.tgz#fed880d41187d0fdd1e19c4588402765f342777e" 492 | integrity sha512-0fxNc33rYnCzDMPSiSnfS8YklnxQo8WqbAQXPAgIaaA1jRu2qFB916PL4qCIW+avcAAqFD38vWhqDqcVmBharA== 493 | dependencies: 494 | "@babel/runtime" "^7.13.10" 495 | 496 | "@radix-ui/react-use-rect@0.1.1": 497 | version "0.1.1" 498 | resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-0.1.1.tgz#6c15384beee59c086e75b89a7e66f3d2e583a856" 499 | integrity sha512-kHNNXAsP3/PeszEmM/nxBBS9Jbo93sO+xuMTcRfwzXsmxT5gDXQzAiKbZQ0EecCPtJIzqvr7dlaQi/aP1PKYqQ== 500 | dependencies: 501 | "@babel/runtime" "^7.13.10" 502 | "@radix-ui/rect" "0.1.1" 503 | 504 | "@radix-ui/react-use-size@0.1.0": 505 | version "0.1.0" 506 | resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-0.1.0.tgz#dc49295d646f5d3f570943dbb88bd94fc7db7daf" 507 | integrity sha512-TcZAsR+BYI46w/RbaSFCRACl+Jh6mDqhu6GS2r0iuJpIVrj8atff7qtTjmMmfGtEDNEjhl7DxN3pr1nTS/oruQ== 508 | dependencies: 509 | "@babel/runtime" "^7.13.10" 510 | 511 | "@radix-ui/react-visually-hidden@0.1.3": 512 | version "0.1.3" 513 | resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-0.1.3.tgz#406a2f1e2f2cf27e5b85a29dc3aca718e695acaf" 514 | integrity sha512-dPU6ZR2WQ/W9qv7E1Y8/I8ymqG+8sViU6dQQ6sfr2/8yGr0I4mmI7ywTnqXaE+YS9gHLEZHdQcEqTNESg6YfdQ== 515 | dependencies: 516 | "@babel/runtime" "^7.13.10" 517 | "@radix-ui/react-primitive" "0.1.3" 518 | 519 | "@radix-ui/rect@0.1.1": 520 | version "0.1.1" 521 | resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-0.1.1.tgz#95b5ba51f469bea6b1b841e2d427e17e37d38419" 522 | integrity sha512-g3hnE/UcOg7REdewduRPAK88EPuLZtaq7sA9ouu8S+YEtnyFRI16jgv6GZYe3VMoQLL1T171ebmEPtDjyxWLzw== 523 | dependencies: 524 | "@babel/runtime" "^7.13.10" 525 | 526 | "@react-three/fiber@^8.9.1": 527 | version "8.9.1" 528 | resolved "https://registry.yarnpkg.com/@react-three/fiber/-/fiber-8.9.1.tgz#54e278148ae1c301a4b516936bfce0d9240a7292" 529 | integrity sha512-xRMO9RGp0DkxSFu5BmmkjCxJ4r0dEpLobtxXdZwI0h2rZZaCnkPM5zThRN8xaZNbZhzRSVICeNOFaZltr9xFyQ== 530 | dependencies: 531 | "@babel/runtime" "^7.17.8" 532 | "@types/react-reconciler" "^0.26.7" 533 | its-fine "^1.0.6" 534 | react-reconciler "^0.27.0" 535 | react-use-measure "^2.1.1" 536 | scheduler "^0.21.0" 537 | suspend-react "^0.0.8" 538 | zustand "^3.7.1" 539 | 540 | "@react-three/postprocessing@^2.7.0": 541 | version "2.7.0" 542 | resolved "https://registry.yarnpkg.com/@react-three/postprocessing/-/postprocessing-2.7.0.tgz#bae6be248bdb43cbab3d125b23ba5b0de4d934d2" 543 | integrity sha512-lJfV8GYp+L1SlGRcl8QPUg9QMdO+8ojW2kfaEc/MuvoI4rX3TRhVd3qFjjF++0bBmzt8LeQpDHCOHFAaT3MNYA== 544 | dependencies: 545 | postprocessing "^6.29.0" 546 | react-merge-refs "^1.1.0" 547 | screen-space-reflections "2.5.0" 548 | three-stdlib "^2.8.11" 549 | 550 | "@stitches/react@1.2.8": 551 | version "1.2.8" 552 | resolved "https://registry.yarnpkg.com/@stitches/react/-/react-1.2.8.tgz#954f8008be8d9c65c4e58efa0937f32388ce3a38" 553 | integrity sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA== 554 | 555 | "@types/node@^18.11.13": 556 | version "18.11.13" 557 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.13.tgz#dff34f226ec1ac0432ae3b136ec5552bd3b9c0fe" 558 | integrity sha512-IASpMGVcWpUsx5xBOrxMj7Bl8lqfuTY7FKAnPmu5cHkfQVWF8GulWS1jbRqA934qZL35xh5xN/+Xe/i26Bod4w== 559 | 560 | "@types/offscreencanvas@^2019.6.4": 561 | version "2019.7.0" 562 | resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz#e4a932069db47bb3eabeb0b305502d01586fa90d" 563 | integrity sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg== 564 | 565 | "@types/prop-types@*": 566 | version "15.7.5" 567 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" 568 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== 569 | 570 | "@types/react-reconciler@^0.26.7": 571 | version "0.26.7" 572 | resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.26.7.tgz#0c4643f30821ae057e401b0d9037e03e8e9b2a36" 573 | integrity sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ== 574 | dependencies: 575 | "@types/react" "*" 576 | 577 | "@types/react-reconciler@^0.28.0": 578 | version "0.28.0" 579 | resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.28.0.tgz#513acbed173140e958c909041ca14eb40412077f" 580 | integrity sha512-5cjk9ottZAj7eaTsqzPUIlrVbh3hBAO2YaEL1rkjHKB3xNAId7oU8GhzvAX+gfmlfoxTwJnBjPxEHyxkEA1Ffg== 581 | dependencies: 582 | "@types/react" "*" 583 | 584 | "@types/react@*": 585 | version "18.0.26" 586 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917" 587 | integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== 588 | dependencies: 589 | "@types/prop-types" "*" 590 | "@types/scheduler" "*" 591 | csstype "^3.0.2" 592 | 593 | "@types/scheduler@*": 594 | version "0.16.2" 595 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" 596 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== 597 | 598 | "@types/three@^0.146.0": 599 | version "0.146.0" 600 | resolved "https://registry.yarnpkg.com/@types/three/-/three-0.146.0.tgz#83813ba0d2fff6bdc6d7fda3a77993a932bba45f" 601 | integrity sha512-75AgysUrIvTCB054eQa2pDVFurfeFW8CrMQjpzjt3yHBfuuknoSvvsESd/3EhQxPrz9si3+P0wiDUVsWUlljfA== 602 | dependencies: 603 | "@types/webxr" "*" 604 | 605 | "@types/webxr@*": 606 | version "0.5.0" 607 | resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.0.tgz#aae1cef3210d88fd4204f8c33385a0bbc4da07c9" 608 | integrity sha512-IUMDPSXnYIbEO2IereEFcgcqfDREOgmbGqtrMpVPpACTU6pltYLwHgVkrnYv0XhWEcjio9sYEfIEzgn3c7nDqA== 609 | 610 | "@use-gesture/core@10.2.23": 611 | version "10.2.23" 612 | resolved "https://registry.yarnpkg.com/@use-gesture/core/-/core-10.2.23.tgz#ed5892e86b4ad537613b6ab83111ca58341e40c0" 613 | integrity sha512-Ynap/Uh6RX1Vgn3zNmFTyKapapdf7Av+GzAe6h+RsBZaxMF1z3cK6aohHPJP6T1hLrPyH/yehxa7RBqyESG9RA== 614 | 615 | "@use-gesture/react@^10.2.5": 616 | version "10.2.23" 617 | resolved "https://registry.yarnpkg.com/@use-gesture/react/-/react-10.2.23.tgz#744f7fb68e904721a2bf3d8bffd40e446b86c82a" 618 | integrity sha512-anj9j3Lm4l+/s60Jv1FD2m13r+T+aYstSHUT62hTugojM64LPe9XatfEVHRyWOrGjRU2buQhlm03xN8oxkg/OQ== 619 | dependencies: 620 | "@use-gesture/core" "10.2.23" 621 | 622 | "@vitejs/plugin-react@2": 623 | version "2.2.0" 624 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-2.2.0.tgz#1b9f63b8b6bc3f56258d20cd19b33f5cc761ce6e" 625 | integrity sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA== 626 | dependencies: 627 | "@babel/core" "^7.19.6" 628 | "@babel/plugin-transform-react-jsx" "^7.19.0" 629 | "@babel/plugin-transform-react-jsx-development" "^7.18.6" 630 | "@babel/plugin-transform-react-jsx-self" "^7.18.6" 631 | "@babel/plugin-transform-react-jsx-source" "^7.19.6" 632 | magic-string "^0.26.7" 633 | react-refresh "^0.14.0" 634 | 635 | "@webgpu/glslang@^0.0.15": 636 | version "0.0.15" 637 | resolved "https://registry.yarnpkg.com/@webgpu/glslang/-/glslang-0.0.15.tgz#f5ccaf6015241e6175f4b90906b053f88483d1f2" 638 | integrity sha512-niT+Prh3Aff8Uf1MVBVUsaNjFj9rJAKDXuoHIKiQbB+6IUP/3J3JIhBNyZ7lDhytvXxw6ppgnwKZdDJ08UMj4Q== 639 | 640 | ansi-styles@^3.2.1: 641 | version "3.2.1" 642 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 643 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 644 | dependencies: 645 | color-convert "^1.9.0" 646 | 647 | assign-symbols@^1.0.0: 648 | version "1.0.0" 649 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 650 | integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== 651 | 652 | attr-accept@^2.2.2: 653 | version "2.2.2" 654 | resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b" 655 | integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg== 656 | 657 | browserslist@^4.21.3: 658 | version "4.21.4" 659 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" 660 | integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== 661 | dependencies: 662 | caniuse-lite "^1.0.30001400" 663 | electron-to-chromium "^1.4.251" 664 | node-releases "^2.0.6" 665 | update-browserslist-db "^1.0.9" 666 | 667 | caniuse-lite@^1.0.30001400: 668 | version "1.0.30001439" 669 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz#ab7371faeb4adff4b74dad1718a6fd122e45d9cb" 670 | integrity sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A== 671 | 672 | chalk@^2.0.0: 673 | version "2.4.2" 674 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 675 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 676 | dependencies: 677 | ansi-styles "^3.2.1" 678 | escape-string-regexp "^1.0.5" 679 | supports-color "^5.3.0" 680 | 681 | chevrotain@^10.1.2: 682 | version "10.4.2" 683 | resolved "https://registry.yarnpkg.com/chevrotain/-/chevrotain-10.4.2.tgz#9abeac6a60134931c0a0788b206400e5f7a3daba" 684 | integrity sha512-gzF5GxE0Ckti5kZVuKEZycLntB5X2aj9RVY0r4/220GwQjdnljU+/t3kP74/FMWC7IzCDDEjQ9wsFUf0WCdSHg== 685 | dependencies: 686 | "@chevrotain/cst-dts-gen" "10.4.2" 687 | "@chevrotain/gast" "10.4.2" 688 | "@chevrotain/types" "10.4.2" 689 | "@chevrotain/utils" "10.4.2" 690 | lodash "4.17.21" 691 | regexp-to-ast "0.5.0" 692 | 693 | color-convert@^1.9.0: 694 | version "1.9.3" 695 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 696 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 697 | dependencies: 698 | color-name "1.1.3" 699 | 700 | color-name@1.1.3: 701 | version "1.1.3" 702 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 703 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 704 | 705 | colord@^2.9.2: 706 | version "2.9.3" 707 | resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" 708 | integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== 709 | 710 | convert-source-map@^1.7.0: 711 | version "1.9.0" 712 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" 713 | integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== 714 | 715 | csstype@^3.0.2, csstype@^3.0.4: 716 | version "3.1.1" 717 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" 718 | integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== 719 | 720 | debounce@^1.2.1: 721 | version "1.2.1" 722 | resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" 723 | integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== 724 | 725 | debug@^4.1.0: 726 | version "4.3.4" 727 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 728 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 729 | dependencies: 730 | ms "2.1.2" 731 | 732 | dequal@^2.0.2: 733 | version "2.0.3" 734 | resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" 735 | integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== 736 | 737 | draco3d@^1.4.1: 738 | version "1.5.5" 739 | resolved "https://registry.yarnpkg.com/draco3d/-/draco3d-1.5.5.tgz#6bf4bbdd65950e6153e991cb0dcb8a10323f610e" 740 | integrity sha512-JVuNV0EJzD3LBYhGyIXJLeBID/EVtmFO1ZNhAYflTgiMiAJlbhXQmRRda/azjc8MRVMHh0gqGhiqHUo5dIXM8Q== 741 | 742 | electron-to-chromium@^1.4.251: 743 | version "1.4.284" 744 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" 745 | integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== 746 | 747 | esbuild-android-64@0.15.18: 748 | version "0.15.18" 749 | resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz#20a7ae1416c8eaade917fb2453c1259302c637a5" 750 | integrity sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA== 751 | 752 | esbuild-android-arm64@0.15.18: 753 | version "0.15.18" 754 | resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz#9cc0ec60581d6ad267568f29cf4895ffdd9f2f04" 755 | integrity sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ== 756 | 757 | esbuild-darwin-64@0.15.18: 758 | version "0.15.18" 759 | resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz#428e1730ea819d500808f220fbc5207aea6d4410" 760 | integrity sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg== 761 | 762 | esbuild-darwin-arm64@0.15.18: 763 | version "0.15.18" 764 | resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz#b6dfc7799115a2917f35970bfbc93ae50256b337" 765 | integrity sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA== 766 | 767 | esbuild-freebsd-64@0.15.18: 768 | version "0.15.18" 769 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz#4e190d9c2d1e67164619ae30a438be87d5eedaf2" 770 | integrity sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA== 771 | 772 | esbuild-freebsd-arm64@0.15.18: 773 | version "0.15.18" 774 | resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz#18a4c0344ee23bd5a6d06d18c76e2fd6d3f91635" 775 | integrity sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA== 776 | 777 | esbuild-linux-32@0.15.18: 778 | version "0.15.18" 779 | resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz#9a329731ee079b12262b793fb84eea762e82e0ce" 780 | integrity sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg== 781 | 782 | esbuild-linux-64@0.15.18: 783 | version "0.15.18" 784 | resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz#532738075397b994467b514e524aeb520c191b6c" 785 | integrity sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw== 786 | 787 | esbuild-linux-arm64@0.15.18: 788 | version "0.15.18" 789 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz#5372e7993ac2da8f06b2ba313710d722b7a86e5d" 790 | integrity sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug== 791 | 792 | esbuild-linux-arm@0.15.18: 793 | version "0.15.18" 794 | resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz#e734aaf259a2e3d109d4886c9e81ec0f2fd9a9cc" 795 | integrity sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA== 796 | 797 | esbuild-linux-mips64le@0.15.18: 798 | version "0.15.18" 799 | resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz#c0487c14a9371a84eb08fab0e1d7b045a77105eb" 800 | integrity sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ== 801 | 802 | esbuild-linux-ppc64le@0.15.18: 803 | version "0.15.18" 804 | resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz#af048ad94eed0ce32f6d5a873f7abe9115012507" 805 | integrity sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w== 806 | 807 | esbuild-linux-riscv64@0.15.18: 808 | version "0.15.18" 809 | resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz#423ed4e5927bd77f842bd566972178f424d455e6" 810 | integrity sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg== 811 | 812 | esbuild-linux-s390x@0.15.18: 813 | version "0.15.18" 814 | resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz#21d21eaa962a183bfb76312e5a01cc5ae48ce8eb" 815 | integrity sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ== 816 | 817 | esbuild-netbsd-64@0.15.18: 818 | version "0.15.18" 819 | resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz#ae75682f60d08560b1fe9482bfe0173e5110b998" 820 | integrity sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg== 821 | 822 | esbuild-openbsd-64@0.15.18: 823 | version "0.15.18" 824 | resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz#79591a90aa3b03e4863f93beec0d2bab2853d0a8" 825 | integrity sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ== 826 | 827 | esbuild-sunos-64@0.15.18: 828 | version "0.15.18" 829 | resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz#fd528aa5da5374b7e1e93d36ef9b07c3dfed2971" 830 | integrity sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw== 831 | 832 | esbuild-windows-32@0.15.18: 833 | version "0.15.18" 834 | resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz#0e92b66ecdf5435a76813c4bc5ccda0696f4efc3" 835 | integrity sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ== 836 | 837 | esbuild-windows-64@0.15.18: 838 | version "0.15.18" 839 | resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz#0fc761d785414284fc408e7914226d33f82420d0" 840 | integrity sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw== 841 | 842 | esbuild-windows-arm64@0.15.18: 843 | version "0.15.18" 844 | resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz#5b5bdc56d341d0922ee94965c89ee120a6a86eb7" 845 | integrity sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ== 846 | 847 | esbuild@^0.15.9: 848 | version "0.15.18" 849 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.18.tgz#ea894adaf3fbc036d32320a00d4d6e4978a2f36d" 850 | integrity sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q== 851 | optionalDependencies: 852 | "@esbuild/android-arm" "0.15.18" 853 | "@esbuild/linux-loong64" "0.15.18" 854 | esbuild-android-64 "0.15.18" 855 | esbuild-android-arm64 "0.15.18" 856 | esbuild-darwin-64 "0.15.18" 857 | esbuild-darwin-arm64 "0.15.18" 858 | esbuild-freebsd-64 "0.15.18" 859 | esbuild-freebsd-arm64 "0.15.18" 860 | esbuild-linux-32 "0.15.18" 861 | esbuild-linux-64 "0.15.18" 862 | esbuild-linux-arm "0.15.18" 863 | esbuild-linux-arm64 "0.15.18" 864 | esbuild-linux-mips64le "0.15.18" 865 | esbuild-linux-ppc64le "0.15.18" 866 | esbuild-linux-riscv64 "0.15.18" 867 | esbuild-linux-s390x "0.15.18" 868 | esbuild-netbsd-64 "0.15.18" 869 | esbuild-openbsd-64 "0.15.18" 870 | esbuild-sunos-64 "0.15.18" 871 | esbuild-windows-32 "0.15.18" 872 | esbuild-windows-64 "0.15.18" 873 | esbuild-windows-arm64 "0.15.18" 874 | 875 | escalade@^3.1.1: 876 | version "3.1.1" 877 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 878 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 879 | 880 | escape-string-regexp@^1.0.5: 881 | version "1.0.5" 882 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 883 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 884 | 885 | extend-shallow@^2.0.1: 886 | version "2.0.1" 887 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 888 | integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== 889 | dependencies: 890 | is-extendable "^0.1.0" 891 | 892 | extend-shallow@^3.0.0: 893 | version "3.0.2" 894 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 895 | integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== 896 | dependencies: 897 | assign-symbols "^1.0.0" 898 | is-extendable "^1.0.1" 899 | 900 | fflate@^0.6.9: 901 | version "0.6.10" 902 | resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.6.10.tgz#5f40f9659205936a2d18abf88b2e7781662b6d43" 903 | integrity sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg== 904 | 905 | file-selector@^0.5.0: 906 | version "0.5.0" 907 | resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.5.0.tgz#21c7126dc9728b31a2742d91cab20d55e67e4fb4" 908 | integrity sha512-s8KNnmIDTBoD0p9uJ9uD0XY38SCeBOtj0UMXyQSLg1Ypfrfj8+dAvwsLjYQkQ2GjhVtp2HrnF5cJzMhBjfD8HA== 909 | dependencies: 910 | tslib "^2.0.3" 911 | 912 | for-in@^1.0.2: 913 | version "1.0.2" 914 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 915 | integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== 916 | 917 | fsevents@~2.3.2: 918 | version "2.3.2" 919 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 920 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 921 | 922 | function-bind@^1.1.1: 923 | version "1.1.1" 924 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 925 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 926 | 927 | gensync@^1.0.0-beta.2: 928 | version "1.0.0-beta.2" 929 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 930 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 931 | 932 | get-value@^2.0.6: 933 | version "2.0.6" 934 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 935 | integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== 936 | 937 | globals@^11.1.0: 938 | version "11.12.0" 939 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 940 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 941 | 942 | has-flag@^3.0.0: 943 | version "3.0.0" 944 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 945 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 946 | 947 | has@^1.0.3: 948 | version "1.0.3" 949 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 950 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 951 | dependencies: 952 | function-bind "^1.1.1" 953 | 954 | is-core-module@^2.9.0: 955 | version "2.11.0" 956 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" 957 | integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== 958 | dependencies: 959 | has "^1.0.3" 960 | 961 | is-extendable@^0.1.0, is-extendable@^0.1.1: 962 | version "0.1.1" 963 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 964 | integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== 965 | 966 | is-extendable@^1.0.0, is-extendable@^1.0.1: 967 | version "1.0.1" 968 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 969 | integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== 970 | dependencies: 971 | is-plain-object "^2.0.4" 972 | 973 | is-plain-object@^2.0.3, is-plain-object@^2.0.4: 974 | version "2.0.4" 975 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 976 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 977 | dependencies: 978 | isobject "^3.0.1" 979 | 980 | isobject@^3.0.1: 981 | version "3.0.1" 982 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 983 | integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== 984 | 985 | its-fine@^1.0.6: 986 | version "1.0.6" 987 | resolved "https://registry.yarnpkg.com/its-fine/-/its-fine-1.0.6.tgz#087b14d71137816dab676d8b57c35a6cd5d2b021" 988 | integrity sha512-VZJZPwVT2kxe5KQv+TxCjojfLiUIut8zXDNLTxcM7gJ/xQ/bSPk5M0neZ+j3myy45KKkltY1mm1jyJgx3Fxsdg== 989 | dependencies: 990 | "@types/react-reconciler" "^0.28.0" 991 | 992 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 993 | version "4.0.0" 994 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 995 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 996 | 997 | jsesc@^2.5.1: 998 | version "2.5.2" 999 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1000 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1001 | 1002 | json5@^2.2.1: 1003 | version "2.2.1" 1004 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" 1005 | integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== 1006 | 1007 | ktx-parse@^0.4.5: 1008 | version "0.4.5" 1009 | resolved "https://registry.yarnpkg.com/ktx-parse/-/ktx-parse-0.4.5.tgz#79905e22281a9d3e602b2ff522df1ee7d1813aa6" 1010 | integrity sha512-MK3FOody4TXbFf8Yqv7EBbySw7aPvEcPX++Ipt6Sox+/YMFvR5xaTyhfNSk1AEmMy+RYIw81ctN4IMxCB8OAlg== 1011 | 1012 | leva@^0.9.34: 1013 | version "0.9.34" 1014 | resolved "https://registry.yarnpkg.com/leva/-/leva-0.9.34.tgz#24f2d717f620de959e9ff27b0118d8d94d4e730b" 1015 | integrity sha512-hQmWAakOCuBXYIenJ7RaNIei5enDwHNNb6Gz5BUU3mZk+ElECdbvNJbmcMfkFAJslJw33MXRabt7OKIzItLLWw== 1016 | dependencies: 1017 | "@radix-ui/react-portal" "^0.1.3" 1018 | "@radix-ui/react-tooltip" "0.1.6" 1019 | "@stitches/react" "1.2.8" 1020 | "@use-gesture/react" "^10.2.5" 1021 | colord "^2.9.2" 1022 | dequal "^2.0.2" 1023 | merge-value "^1.0.0" 1024 | react-colorful "^5.5.1" 1025 | react-dropzone "^12.0.0" 1026 | v8n "^1.3.3" 1027 | zustand "^3.6.9" 1028 | 1029 | lodash@4.17.21: 1030 | version "4.17.21" 1031 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1032 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1033 | 1034 | loose-envify@^1.1.0, loose-envify@^1.4.0: 1035 | version "1.4.0" 1036 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1037 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1038 | dependencies: 1039 | js-tokens "^3.0.0 || ^4.0.0" 1040 | 1041 | maath@^0.4.2: 1042 | version "0.4.2" 1043 | resolved "https://registry.yarnpkg.com/maath/-/maath-0.4.2.tgz#379efb3d2fd46bb557333eabb41e4a1d2cbd2766" 1044 | integrity sha512-9vd9AzZY7XLM159LNyWF6v2Lu1lsnjPMlzdGy3pMKxTUg0mWePdyHjfhNi439RpLZCR33hDkdbxbbsmjWyqhIA== 1045 | 1046 | magic-string@^0.26.7: 1047 | version "0.26.7" 1048 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.7.tgz#caf7daf61b34e9982f8228c4527474dac8981d6f" 1049 | integrity sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow== 1050 | dependencies: 1051 | sourcemap-codec "^1.4.8" 1052 | 1053 | merge-value@^1.0.0: 1054 | version "1.0.0" 1055 | resolved "https://registry.yarnpkg.com/merge-value/-/merge-value-1.0.0.tgz#d28f8d41c0b37426e032d1059a0d0343302de502" 1056 | integrity sha512-fJMmvat4NeKz63Uv9iHWcPDjCWcCkoiRoajRTEO8hlhUC6rwaHg0QCF9hBOTjZmm4JuglPckPSTtcuJL5kp0TQ== 1057 | dependencies: 1058 | get-value "^2.0.6" 1059 | is-extendable "^1.0.0" 1060 | mixin-deep "^1.2.0" 1061 | set-value "^2.0.0" 1062 | 1063 | mixin-deep@^1.2.0: 1064 | version "1.3.2" 1065 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" 1066 | integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== 1067 | dependencies: 1068 | for-in "^1.0.2" 1069 | is-extendable "^1.0.1" 1070 | 1071 | mmd-parser@^1.0.4: 1072 | version "1.0.4" 1073 | resolved "https://registry.yarnpkg.com/mmd-parser/-/mmd-parser-1.0.4.tgz#87cc05782cb5974ca854f0303fc5147bc9d690e7" 1074 | integrity sha512-Qi0VCU46t2IwfGv5KF0+D/t9cizcDug7qnNoy9Ggk7aucp0tssV8IwTMkBlDbm+VqAf3cdQHTCARKSsuS2MYFg== 1075 | 1076 | ms@2.1.2: 1077 | version "2.1.2" 1078 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1079 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1080 | 1081 | nanoid@^3.3.4: 1082 | version "3.3.4" 1083 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" 1084 | integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== 1085 | 1086 | node-releases@^2.0.6: 1087 | version "2.0.6" 1088 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" 1089 | integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== 1090 | 1091 | object-assign@^4.1.1: 1092 | version "4.1.1" 1093 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1094 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 1095 | 1096 | opentype.js@^1.3.3: 1097 | version "1.3.4" 1098 | resolved "https://registry.yarnpkg.com/opentype.js/-/opentype.js-1.3.4.tgz#1c0e72e46288473cc4a4c6a2dc60fd7fe6020d77" 1099 | integrity sha512-d2JE9RP/6uagpQAVtJoF0pJJA/fgai89Cc50Yp0EJHk+eLp6QQ7gBoblsnubRULNY132I0J1QKMJ+JTbMqz4sw== 1100 | dependencies: 1101 | string.prototype.codepointat "^0.2.1" 1102 | tiny-inflate "^1.0.3" 1103 | 1104 | path-parse@^1.0.7: 1105 | version "1.0.7" 1106 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1107 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1108 | 1109 | picocolors@^1.0.0: 1110 | version "1.0.0" 1111 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 1112 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 1113 | 1114 | postcss@^8.4.18: 1115 | version "8.4.19" 1116 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.19.tgz#61178e2add236b17351897c8bcc0b4c8ecab56fc" 1117 | integrity sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA== 1118 | dependencies: 1119 | nanoid "^3.3.4" 1120 | picocolors "^1.0.0" 1121 | source-map-js "^1.0.2" 1122 | 1123 | postprocessing@^6.29.0: 1124 | version "6.29.1" 1125 | resolved "https://registry.yarnpkg.com/postprocessing/-/postprocessing-6.29.1.tgz#169b48cca498a52d3ee4b8960645b089cc7f64b3" 1126 | integrity sha512-w+XoL2Z7YpVDsHbIeg6sldMMmDqZS4Hul1FDq3TjOeXZ0Wnp0Qy1EvR7QmYJxyWBux1cKQx/k3XO7LxfvPsZyg== 1127 | 1128 | potpack@^1.0.1: 1129 | version "1.0.2" 1130 | resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.2.tgz#23b99e64eb74f5741ffe7656b5b5c4ddce8dfc14" 1131 | integrity sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ== 1132 | 1133 | prop-types@^15.8.1: 1134 | version "15.8.1" 1135 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" 1136 | integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== 1137 | dependencies: 1138 | loose-envify "^1.4.0" 1139 | object-assign "^4.1.1" 1140 | react-is "^16.13.1" 1141 | 1142 | react-colorful@^5.5.1: 1143 | version "5.6.1" 1144 | resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.6.1.tgz#7dc2aed2d7c72fac89694e834d179e32f3da563b" 1145 | integrity sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw== 1146 | 1147 | react-dom@^18.2.0: 1148 | version "18.2.0" 1149 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" 1150 | integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== 1151 | dependencies: 1152 | loose-envify "^1.1.0" 1153 | scheduler "^0.23.0" 1154 | 1155 | react-dropzone@^12.0.0: 1156 | version "12.1.0" 1157 | resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-12.1.0.tgz#e097b37e9da6f9e324efc757b7434ebc6f3dc2cb" 1158 | integrity sha512-iBYHA1rbopIvtzokEX4QubO6qk5IF/x3BtKGu74rF2JkQDXnwC4uO/lHKpaw4PJIV6iIAYOlwLv2FpiGyqHNog== 1159 | dependencies: 1160 | attr-accept "^2.2.2" 1161 | file-selector "^0.5.0" 1162 | prop-types "^15.8.1" 1163 | 1164 | react-is@^16.13.1: 1165 | version "16.13.1" 1166 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 1167 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 1168 | 1169 | react-merge-refs@^1.1.0: 1170 | version "1.1.0" 1171 | resolved "https://registry.yarnpkg.com/react-merge-refs/-/react-merge-refs-1.1.0.tgz#73d88b892c6c68cbb7a66e0800faa374f4c38b06" 1172 | integrity sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ== 1173 | 1174 | react-reconciler@^0.27.0: 1175 | version "0.27.0" 1176 | resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.27.0.tgz#360124fdf2d76447c7491ee5f0e04503ed9acf5b" 1177 | integrity sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA== 1178 | dependencies: 1179 | loose-envify "^1.1.0" 1180 | scheduler "^0.21.0" 1181 | 1182 | react-refresh@^0.14.0: 1183 | version "0.14.0" 1184 | resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" 1185 | integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== 1186 | 1187 | react-use-measure@^2.1.1: 1188 | version "2.1.1" 1189 | resolved "https://registry.yarnpkg.com/react-use-measure/-/react-use-measure-2.1.1.tgz#5824537f4ee01c9469c45d5f7a8446177c6cc4ba" 1190 | integrity sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig== 1191 | dependencies: 1192 | debounce "^1.2.1" 1193 | 1194 | react@^18.2.0: 1195 | version "18.2.0" 1196 | resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" 1197 | integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== 1198 | dependencies: 1199 | loose-envify "^1.1.0" 1200 | 1201 | regenerator-runtime@^0.13.11: 1202 | version "0.13.11" 1203 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" 1204 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== 1205 | 1206 | regexp-to-ast@0.5.0: 1207 | version "0.5.0" 1208 | resolved "https://registry.yarnpkg.com/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz#56c73856bee5e1fef7f73a00f1473452ab712a24" 1209 | integrity sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw== 1210 | 1211 | resolve@^1.22.1: 1212 | version "1.22.1" 1213 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 1214 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 1215 | dependencies: 1216 | is-core-module "^2.9.0" 1217 | path-parse "^1.0.7" 1218 | supports-preserve-symlinks-flag "^1.0.0" 1219 | 1220 | rollup@^2.79.1: 1221 | version "2.79.1" 1222 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" 1223 | integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== 1224 | optionalDependencies: 1225 | fsevents "~2.3.2" 1226 | 1227 | scheduler@^0.21.0: 1228 | version "0.21.0" 1229 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.21.0.tgz#6fd2532ff5a6d877b6edb12f00d8ab7e8f308820" 1230 | integrity sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ== 1231 | dependencies: 1232 | loose-envify "^1.1.0" 1233 | 1234 | scheduler@^0.23.0: 1235 | version "0.23.0" 1236 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" 1237 | integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== 1238 | dependencies: 1239 | loose-envify "^1.1.0" 1240 | 1241 | screen-space-reflections@2.5.0: 1242 | version "2.5.0" 1243 | resolved "https://registry.yarnpkg.com/screen-space-reflections/-/screen-space-reflections-2.5.0.tgz#2a6ea982da96f9c35f34a361b2555439f9fbb1f6" 1244 | integrity sha512-fWSDMhJS0xwD3LTxRRch7Lb9NzxsR66sCmtDmAA7i+OGnghUrBBsrha85ng7StnCBaLq/BKmZ97dLxWd1XgWdQ== 1245 | 1246 | semver@^6.3.0: 1247 | version "6.3.0" 1248 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1249 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1250 | 1251 | set-value@^2.0.0: 1252 | version "2.0.1" 1253 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" 1254 | integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== 1255 | dependencies: 1256 | extend-shallow "^2.0.1" 1257 | is-extendable "^0.1.1" 1258 | is-plain-object "^2.0.3" 1259 | split-string "^3.0.1" 1260 | 1261 | source-map-js@^1.0.2: 1262 | version "1.0.2" 1263 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 1264 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 1265 | 1266 | sourcemap-codec@^1.4.8: 1267 | version "1.4.8" 1268 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 1269 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 1270 | 1271 | split-string@^3.0.1: 1272 | version "3.1.0" 1273 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 1274 | integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== 1275 | dependencies: 1276 | extend-shallow "^3.0.0" 1277 | 1278 | string.prototype.codepointat@^0.2.1: 1279 | version "0.2.1" 1280 | resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz#004ad44c8afc727527b108cd462b4d971cd469bc" 1281 | integrity sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg== 1282 | 1283 | supports-color@^5.3.0: 1284 | version "5.5.0" 1285 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1286 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1287 | dependencies: 1288 | has-flag "^3.0.0" 1289 | 1290 | supports-preserve-symlinks-flag@^1.0.0: 1291 | version "1.0.0" 1292 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 1293 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1294 | 1295 | suspend-react@^0.0.8: 1296 | version "0.0.8" 1297 | resolved "https://registry.yarnpkg.com/suspend-react/-/suspend-react-0.0.8.tgz#b0740c1386b4eb652f17affe4339915ee268bd31" 1298 | integrity sha512-ZC3r8Hu1y0dIThzsGw0RLZplnX9yXwfItcvaIzJc2VQVi8TGyGDlu92syMB5ulybfvGLHAI5Ghzlk23UBPF8xg== 1299 | 1300 | three-stdlib@^2.8.11: 1301 | version "2.20.4" 1302 | resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.20.4.tgz#89a006c53f12c0b037dc9242874bcada8865bd00" 1303 | integrity sha512-Ksy7h//nnH5dhohbmE6mT/gM54dtmcAjaC9Srx7AJ7xpmCEX3IASkZyUkVqNXv3NZFqx79Swq3sSSVqL4pF79Q== 1304 | dependencies: 1305 | "@babel/runtime" "^7.16.7" 1306 | "@types/offscreencanvas" "^2019.6.4" 1307 | "@webgpu/glslang" "^0.0.15" 1308 | chevrotain "^10.1.2" 1309 | draco3d "^1.4.1" 1310 | fflate "^0.6.9" 1311 | ktx-parse "^0.4.5" 1312 | mmd-parser "^1.0.4" 1313 | opentype.js "^1.3.3" 1314 | potpack "^1.0.1" 1315 | zstddec "^0.0.2" 1316 | 1317 | three@^0.147.0: 1318 | version "0.147.0" 1319 | resolved "https://registry.yarnpkg.com/three/-/three-0.147.0.tgz#1974af9e8e0c1efb3a8561334d57c0b6c29a7951" 1320 | integrity sha512-LPTOslYQXFkmvceQjFTNnVVli2LaVF6C99Pv34fJypp8NbQLbTlu3KinZ0zURghS5zEehK+VQyvWuPZ/Sm8fzw== 1321 | 1322 | tiny-inflate@^1.0.3: 1323 | version "1.0.3" 1324 | resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" 1325 | integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== 1326 | 1327 | to-fast-properties@^2.0.0: 1328 | version "2.0.0" 1329 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1330 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 1331 | 1332 | tslib@^2.0.3: 1333 | version "2.4.1" 1334 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" 1335 | integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== 1336 | 1337 | typescript@^4.9.3: 1338 | version "4.9.3" 1339 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" 1340 | integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== 1341 | 1342 | update-browserslist-db@^1.0.9: 1343 | version "1.0.10" 1344 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" 1345 | integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== 1346 | dependencies: 1347 | escalade "^3.1.1" 1348 | picocolors "^1.0.0" 1349 | 1350 | v8n@^1.3.3: 1351 | version "1.5.1" 1352 | resolved "https://registry.yarnpkg.com/v8n/-/v8n-1.5.1.tgz#aecfeb9d298a8ce8be443cd7ad0d46e30203165a" 1353 | integrity sha512-LdabyT4OffkyXFCe9UT+uMkxNBs5rcTVuZClvxQr08D5TUgo1OFKkoT65qYRCsiKBl/usHjpXvP4hHMzzDRj3A== 1354 | 1355 | vite@^3.2.5: 1356 | version "3.2.5" 1357 | resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.5.tgz#dee5678172a8a0ab3e547ad4148c3d547f90e86a" 1358 | integrity sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ== 1359 | dependencies: 1360 | esbuild "^0.15.9" 1361 | postcss "^8.4.18" 1362 | resolve "^1.22.1" 1363 | rollup "^2.79.1" 1364 | optionalDependencies: 1365 | fsevents "~2.3.2" 1366 | 1367 | zstddec@^0.0.2: 1368 | version "0.0.2" 1369 | resolved "https://registry.yarnpkg.com/zstddec/-/zstddec-0.0.2.tgz#57e2f28dd1ff56b750e07d158a43f0611ad9eeb4" 1370 | integrity sha512-DCo0oxvcvOTGP/f5FA6tz2Z6wF+FIcEApSTu0zV5sQgn9hoT5lZ9YRAKUraxt9oP7l4e8TnNdi8IZTCX6WCkwA== 1371 | 1372 | zustand@^3.6.9, zustand@^3.7.1: 1373 | version "3.7.2" 1374 | resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.7.2.tgz#7b44c4f4a5bfd7a8296a3957b13e1c346f42514d" 1375 | integrity sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA== 1376 | --------------------------------------------------------------------------------