├── .gitignore ├── README.md ├── index.html ├── package-lock.json ├── package.json ├── src ├── DrawContext.ts ├── TextRenderer.ts ├── controls.ts ├── gl.ts ├── main.ts ├── math.ts ├── program.ts ├── prop_dealer.ts ├── schemas.ts ├── tessellator.ts ├── types.ts ├── uis.ts ├── uiscreen.ts ├── vars.ts ├── vertex_format.ts └── vite-env.d.ts ├── static ├── ascii.png ├── features.txt ├── font.json ├── font.png ├── font │ └── codicon.ttf ├── grass.png ├── icon.png ├── icons │ ├── default_file.svg │ ├── file_type_image.svg │ ├── file_type_json.svg │ ├── file_type_text.svg │ └── github.png ├── lang │ └── en_us.json ├── shaders │ ├── grayscale_position_texture.fsh │ ├── grayscale_position_texture.vsh │ ├── grayscale_position_texture_color.fsh │ ├── grayscale_position_texture_color.vsh │ ├── position.fsh │ ├── position.vsh │ ├── position_color.fsh │ ├── position_color.vsh │ ├── position_texture.fsh │ ├── position_texture.vsh │ ├── position_texture_color.fsh │ └── position_texture_color.vsh └── ui │ ├── global_variables.json │ ├── play_screen.json │ ├── screen_defs.json │ ├── start_screen.json │ └── ui_defs.json ├── style.css ├── tsconfig.json └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | dist -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JSON UI Editor 2 | A simple test editor for minecraft bugrock json ui to do simple tests. 3 | 4 | ## Disclaimer 5 | 6 | I'm not currently working on it and doesn't support most complex features. There's no point in using it. 7 | 8 | Just use minecraft itself to test your json ui data. It ain't that hard. 9 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 |Drag and drop files here
52 |UI files have a schema. Hover over properties to see their description
53 |Press Shift+S to reload UI
54 |Press Shift+L to show debug lines
55 |60 FPS
86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ztest_aa", 3 | "version": "0.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "ztest_aa", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "monaco-editor": "^0.37.1", 12 | "strip-json-comments": "^5.0.0" 13 | }, 14 | "devDependencies": { 15 | "gh-pages": "^5.0.0", 16 | "typescript": "^5.0.2", 17 | "vite": "^4.3.2", 18 | "vite-plugin-monaco-editor": "^1.1.0" 19 | } 20 | }, 21 | "node_modules/@esbuild/android-arm": { 22 | "version": "0.17.18", 23 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.18.tgz", 24 | "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==", 25 | "cpu": [ 26 | "arm" 27 | ], 28 | "dev": true, 29 | "optional": true, 30 | "os": [ 31 | "android" 32 | ], 33 | "engines": { 34 | "node": ">=12" 35 | } 36 | }, 37 | "node_modules/@esbuild/android-arm64": { 38 | "version": "0.17.18", 39 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz", 40 | "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==", 41 | "cpu": [ 42 | "arm64" 43 | ], 44 | "dev": true, 45 | "optional": true, 46 | "os": [ 47 | "android" 48 | ], 49 | "engines": { 50 | "node": ">=12" 51 | } 52 | }, 53 | "node_modules/@esbuild/android-x64": { 54 | "version": "0.17.18", 55 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.18.tgz", 56 | "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==", 57 | "cpu": [ 58 | "x64" 59 | ], 60 | "dev": true, 61 | "optional": true, 62 | "os": [ 63 | "android" 64 | ], 65 | "engines": { 66 | "node": ">=12" 67 | } 68 | }, 69 | "node_modules/@esbuild/darwin-arm64": { 70 | "version": "0.17.18", 71 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz", 72 | "integrity": "sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==", 73 | "cpu": [ 74 | "arm64" 75 | ], 76 | "dev": true, 77 | "optional": true, 78 | "os": [ 79 | "darwin" 80 | ], 81 | "engines": { 82 | "node": ">=12" 83 | } 84 | }, 85 | "node_modules/@esbuild/darwin-x64": { 86 | "version": "0.17.18", 87 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz", 88 | "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==", 89 | "cpu": [ 90 | "x64" 91 | ], 92 | "dev": true, 93 | "optional": true, 94 | "os": [ 95 | "darwin" 96 | ], 97 | "engines": { 98 | "node": ">=12" 99 | } 100 | }, 101 | "node_modules/@esbuild/freebsd-arm64": { 102 | "version": "0.17.18", 103 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz", 104 | "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==", 105 | "cpu": [ 106 | "arm64" 107 | ], 108 | "dev": true, 109 | "optional": true, 110 | "os": [ 111 | "freebsd" 112 | ], 113 | "engines": { 114 | "node": ">=12" 115 | } 116 | }, 117 | "node_modules/@esbuild/freebsd-x64": { 118 | "version": "0.17.18", 119 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz", 120 | "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==", 121 | "cpu": [ 122 | "x64" 123 | ], 124 | "dev": true, 125 | "optional": true, 126 | "os": [ 127 | "freebsd" 128 | ], 129 | "engines": { 130 | "node": ">=12" 131 | } 132 | }, 133 | "node_modules/@esbuild/linux-arm": { 134 | "version": "0.17.18", 135 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz", 136 | "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==", 137 | "cpu": [ 138 | "arm" 139 | ], 140 | "dev": true, 141 | "optional": true, 142 | "os": [ 143 | "linux" 144 | ], 145 | "engines": { 146 | "node": ">=12" 147 | } 148 | }, 149 | "node_modules/@esbuild/linux-arm64": { 150 | "version": "0.17.18", 151 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz", 152 | "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==", 153 | "cpu": [ 154 | "arm64" 155 | ], 156 | "dev": true, 157 | "optional": true, 158 | "os": [ 159 | "linux" 160 | ], 161 | "engines": { 162 | "node": ">=12" 163 | } 164 | }, 165 | "node_modules/@esbuild/linux-ia32": { 166 | "version": "0.17.18", 167 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz", 168 | "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==", 169 | "cpu": [ 170 | "ia32" 171 | ], 172 | "dev": true, 173 | "optional": true, 174 | "os": [ 175 | "linux" 176 | ], 177 | "engines": { 178 | "node": ">=12" 179 | } 180 | }, 181 | "node_modules/@esbuild/linux-loong64": { 182 | "version": "0.17.18", 183 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz", 184 | "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==", 185 | "cpu": [ 186 | "loong64" 187 | ], 188 | "dev": true, 189 | "optional": true, 190 | "os": [ 191 | "linux" 192 | ], 193 | "engines": { 194 | "node": ">=12" 195 | } 196 | }, 197 | "node_modules/@esbuild/linux-mips64el": { 198 | "version": "0.17.18", 199 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz", 200 | "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==", 201 | "cpu": [ 202 | "mips64el" 203 | ], 204 | "dev": true, 205 | "optional": true, 206 | "os": [ 207 | "linux" 208 | ], 209 | "engines": { 210 | "node": ">=12" 211 | } 212 | }, 213 | "node_modules/@esbuild/linux-ppc64": { 214 | "version": "0.17.18", 215 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz", 216 | "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==", 217 | "cpu": [ 218 | "ppc64" 219 | ], 220 | "dev": true, 221 | "optional": true, 222 | "os": [ 223 | "linux" 224 | ], 225 | "engines": { 226 | "node": ">=12" 227 | } 228 | }, 229 | "node_modules/@esbuild/linux-riscv64": { 230 | "version": "0.17.18", 231 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz", 232 | "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==", 233 | "cpu": [ 234 | "riscv64" 235 | ], 236 | "dev": true, 237 | "optional": true, 238 | "os": [ 239 | "linux" 240 | ], 241 | "engines": { 242 | "node": ">=12" 243 | } 244 | }, 245 | "node_modules/@esbuild/linux-s390x": { 246 | "version": "0.17.18", 247 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz", 248 | "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==", 249 | "cpu": [ 250 | "s390x" 251 | ], 252 | "dev": true, 253 | "optional": true, 254 | "os": [ 255 | "linux" 256 | ], 257 | "engines": { 258 | "node": ">=12" 259 | } 260 | }, 261 | "node_modules/@esbuild/linux-x64": { 262 | "version": "0.17.18", 263 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz", 264 | "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==", 265 | "cpu": [ 266 | "x64" 267 | ], 268 | "dev": true, 269 | "optional": true, 270 | "os": [ 271 | "linux" 272 | ], 273 | "engines": { 274 | "node": ">=12" 275 | } 276 | }, 277 | "node_modules/@esbuild/netbsd-x64": { 278 | "version": "0.17.18", 279 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz", 280 | "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==", 281 | "cpu": [ 282 | "x64" 283 | ], 284 | "dev": true, 285 | "optional": true, 286 | "os": [ 287 | "netbsd" 288 | ], 289 | "engines": { 290 | "node": ">=12" 291 | } 292 | }, 293 | "node_modules/@esbuild/openbsd-x64": { 294 | "version": "0.17.18", 295 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz", 296 | "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==", 297 | "cpu": [ 298 | "x64" 299 | ], 300 | "dev": true, 301 | "optional": true, 302 | "os": [ 303 | "openbsd" 304 | ], 305 | "engines": { 306 | "node": ">=12" 307 | } 308 | }, 309 | "node_modules/@esbuild/sunos-x64": { 310 | "version": "0.17.18", 311 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz", 312 | "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==", 313 | "cpu": [ 314 | "x64" 315 | ], 316 | "dev": true, 317 | "optional": true, 318 | "os": [ 319 | "sunos" 320 | ], 321 | "engines": { 322 | "node": ">=12" 323 | } 324 | }, 325 | "node_modules/@esbuild/win32-arm64": { 326 | "version": "0.17.18", 327 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz", 328 | "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==", 329 | "cpu": [ 330 | "arm64" 331 | ], 332 | "dev": true, 333 | "optional": true, 334 | "os": [ 335 | "win32" 336 | ], 337 | "engines": { 338 | "node": ">=12" 339 | } 340 | }, 341 | "node_modules/@esbuild/win32-ia32": { 342 | "version": "0.17.18", 343 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz", 344 | "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==", 345 | "cpu": [ 346 | "ia32" 347 | ], 348 | "dev": true, 349 | "optional": true, 350 | "os": [ 351 | "win32" 352 | ], 353 | "engines": { 354 | "node": ">=12" 355 | } 356 | }, 357 | "node_modules/@esbuild/win32-x64": { 358 | "version": "0.17.18", 359 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz", 360 | "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==", 361 | "cpu": [ 362 | "x64" 363 | ], 364 | "dev": true, 365 | "optional": true, 366 | "os": [ 367 | "win32" 368 | ], 369 | "engines": { 370 | "node": ">=12" 371 | } 372 | }, 373 | "node_modules/array-union": { 374 | "version": "1.0.2", 375 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 376 | "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", 377 | "dev": true, 378 | "dependencies": { 379 | "array-uniq": "^1.0.1" 380 | }, 381 | "engines": { 382 | "node": ">=0.10.0" 383 | } 384 | }, 385 | "node_modules/array-uniq": { 386 | "version": "1.0.3", 387 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 388 | "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", 389 | "dev": true, 390 | "engines": { 391 | "node": ">=0.10.0" 392 | } 393 | }, 394 | "node_modules/async": { 395 | "version": "3.2.4", 396 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", 397 | "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", 398 | "dev": true 399 | }, 400 | "node_modules/balanced-match": { 401 | "version": "1.0.2", 402 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 403 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 404 | "dev": true 405 | }, 406 | "node_modules/brace-expansion": { 407 | "version": "1.1.11", 408 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 409 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 410 | "dev": true, 411 | "dependencies": { 412 | "balanced-match": "^1.0.0", 413 | "concat-map": "0.0.1" 414 | } 415 | }, 416 | "node_modules/commander": { 417 | "version": "2.20.3", 418 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 419 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 420 | "dev": true 421 | }, 422 | "node_modules/commondir": { 423 | "version": "1.0.1", 424 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 425 | "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 426 | "dev": true 427 | }, 428 | "node_modules/concat-map": { 429 | "version": "0.0.1", 430 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 431 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 432 | "dev": true 433 | }, 434 | "node_modules/email-addresses": { 435 | "version": "5.0.0", 436 | "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz", 437 | "integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==", 438 | "dev": true 439 | }, 440 | "node_modules/esbuild": { 441 | "version": "0.17.18", 442 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.18.tgz", 443 | "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==", 444 | "dev": true, 445 | "hasInstallScript": true, 446 | "bin": { 447 | "esbuild": "bin/esbuild" 448 | }, 449 | "engines": { 450 | "node": ">=12" 451 | }, 452 | "optionalDependencies": { 453 | "@esbuild/android-arm": "0.17.18", 454 | "@esbuild/android-arm64": "0.17.18", 455 | "@esbuild/android-x64": "0.17.18", 456 | "@esbuild/darwin-arm64": "0.17.18", 457 | "@esbuild/darwin-x64": "0.17.18", 458 | "@esbuild/freebsd-arm64": "0.17.18", 459 | "@esbuild/freebsd-x64": "0.17.18", 460 | "@esbuild/linux-arm": "0.17.18", 461 | "@esbuild/linux-arm64": "0.17.18", 462 | "@esbuild/linux-ia32": "0.17.18", 463 | "@esbuild/linux-loong64": "0.17.18", 464 | "@esbuild/linux-mips64el": "0.17.18", 465 | "@esbuild/linux-ppc64": "0.17.18", 466 | "@esbuild/linux-riscv64": "0.17.18", 467 | "@esbuild/linux-s390x": "0.17.18", 468 | "@esbuild/linux-x64": "0.17.18", 469 | "@esbuild/netbsd-x64": "0.17.18", 470 | "@esbuild/openbsd-x64": "0.17.18", 471 | "@esbuild/sunos-x64": "0.17.18", 472 | "@esbuild/win32-arm64": "0.17.18", 473 | "@esbuild/win32-ia32": "0.17.18", 474 | "@esbuild/win32-x64": "0.17.18" 475 | } 476 | }, 477 | "node_modules/escape-string-regexp": { 478 | "version": "1.0.5", 479 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 480 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 481 | "dev": true, 482 | "engines": { 483 | "node": ">=0.8.0" 484 | } 485 | }, 486 | "node_modules/filename-reserved-regex": { 487 | "version": "2.0.0", 488 | "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", 489 | "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", 490 | "dev": true, 491 | "engines": { 492 | "node": ">=4" 493 | } 494 | }, 495 | "node_modules/filenamify": { 496 | "version": "4.3.0", 497 | "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", 498 | "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", 499 | "dev": true, 500 | "dependencies": { 501 | "filename-reserved-regex": "^2.0.0", 502 | "strip-outer": "^1.0.1", 503 | "trim-repeated": "^1.0.0" 504 | }, 505 | "engines": { 506 | "node": ">=8" 507 | }, 508 | "funding": { 509 | "url": "https://github.com/sponsors/sindresorhus" 510 | } 511 | }, 512 | "node_modules/find-cache-dir": { 513 | "version": "3.3.2", 514 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", 515 | "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", 516 | "dev": true, 517 | "dependencies": { 518 | "commondir": "^1.0.1", 519 | "make-dir": "^3.0.2", 520 | "pkg-dir": "^4.1.0" 521 | }, 522 | "engines": { 523 | "node": ">=8" 524 | }, 525 | "funding": { 526 | "url": "https://github.com/avajs/find-cache-dir?sponsor=1" 527 | } 528 | }, 529 | "node_modules/find-up": { 530 | "version": "4.1.0", 531 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 532 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 533 | "dev": true, 534 | "dependencies": { 535 | "locate-path": "^5.0.0", 536 | "path-exists": "^4.0.0" 537 | }, 538 | "engines": { 539 | "node": ">=8" 540 | } 541 | }, 542 | "node_modules/fs-extra": { 543 | "version": "8.1.0", 544 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 545 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 546 | "dev": true, 547 | "dependencies": { 548 | "graceful-fs": "^4.2.0", 549 | "jsonfile": "^4.0.0", 550 | "universalify": "^0.1.0" 551 | }, 552 | "engines": { 553 | "node": ">=6 <7 || >=8" 554 | } 555 | }, 556 | "node_modules/fs.realpath": { 557 | "version": "1.0.0", 558 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 559 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 560 | "dev": true 561 | }, 562 | "node_modules/fsevents": { 563 | "version": "2.3.2", 564 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 565 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 566 | "dev": true, 567 | "hasInstallScript": true, 568 | "optional": true, 569 | "os": [ 570 | "darwin" 571 | ], 572 | "engines": { 573 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 574 | } 575 | }, 576 | "node_modules/gh-pages": { 577 | "version": "5.0.0", 578 | "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-5.0.0.tgz", 579 | "integrity": "sha512-Nqp1SjkPIB94Xw/3yYNTUL+G2dxlhjvv1zeN/4kMC1jfViTEqhtVz/Ba1zSXHuvXCN9ADNS1dN4r5/J/nZWEQQ==", 580 | "dev": true, 581 | "dependencies": { 582 | "async": "^3.2.4", 583 | "commander": "^2.18.0", 584 | "email-addresses": "^5.0.0", 585 | "filenamify": "^4.3.0", 586 | "find-cache-dir": "^3.3.1", 587 | "fs-extra": "^8.1.0", 588 | "globby": "^6.1.0" 589 | }, 590 | "bin": { 591 | "gh-pages": "bin/gh-pages.js", 592 | "gh-pages-clean": "bin/gh-pages-clean.js" 593 | }, 594 | "engines": { 595 | "node": ">=10" 596 | } 597 | }, 598 | "node_modules/glob": { 599 | "version": "7.2.3", 600 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 601 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 602 | "dev": true, 603 | "dependencies": { 604 | "fs.realpath": "^1.0.0", 605 | "inflight": "^1.0.4", 606 | "inherits": "2", 607 | "minimatch": "^3.1.1", 608 | "once": "^1.3.0", 609 | "path-is-absolute": "^1.0.0" 610 | }, 611 | "engines": { 612 | "node": "*" 613 | }, 614 | "funding": { 615 | "url": "https://github.com/sponsors/isaacs" 616 | } 617 | }, 618 | "node_modules/globby": { 619 | "version": "6.1.0", 620 | "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", 621 | "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", 622 | "dev": true, 623 | "dependencies": { 624 | "array-union": "^1.0.1", 625 | "glob": "^7.0.3", 626 | "object-assign": "^4.0.1", 627 | "pify": "^2.0.0", 628 | "pinkie-promise": "^2.0.0" 629 | }, 630 | "engines": { 631 | "node": ">=0.10.0" 632 | } 633 | }, 634 | "node_modules/graceful-fs": { 635 | "version": "4.2.11", 636 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 637 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 638 | "dev": true 639 | }, 640 | "node_modules/inflight": { 641 | "version": "1.0.6", 642 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 643 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 644 | "dev": true, 645 | "dependencies": { 646 | "once": "^1.3.0", 647 | "wrappy": "1" 648 | } 649 | }, 650 | "node_modules/inherits": { 651 | "version": "2.0.4", 652 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 653 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 654 | "dev": true 655 | }, 656 | "node_modules/jsonfile": { 657 | "version": "4.0.0", 658 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 659 | "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 660 | "dev": true, 661 | "optionalDependencies": { 662 | "graceful-fs": "^4.1.6" 663 | } 664 | }, 665 | "node_modules/locate-path": { 666 | "version": "5.0.0", 667 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 668 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 669 | "dev": true, 670 | "dependencies": { 671 | "p-locate": "^4.1.0" 672 | }, 673 | "engines": { 674 | "node": ">=8" 675 | } 676 | }, 677 | "node_modules/make-dir": { 678 | "version": "3.1.0", 679 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 680 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 681 | "dev": true, 682 | "dependencies": { 683 | "semver": "^6.0.0" 684 | }, 685 | "engines": { 686 | "node": ">=8" 687 | }, 688 | "funding": { 689 | "url": "https://github.com/sponsors/sindresorhus" 690 | } 691 | }, 692 | "node_modules/minimatch": { 693 | "version": "3.1.2", 694 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 695 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 696 | "dev": true, 697 | "dependencies": { 698 | "brace-expansion": "^1.1.7" 699 | }, 700 | "engines": { 701 | "node": "*" 702 | } 703 | }, 704 | "node_modules/monaco-editor": { 705 | "version": "0.37.1", 706 | "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.37.1.tgz", 707 | "integrity": "sha512-jLXEEYSbqMkT/FuJLBZAVWGuhIb4JNwHE9kPTorAVmsdZ4UzHAfgWxLsVtD7pLRFaOwYPhNG9nUCpmFL1t/dIg==" 708 | }, 709 | "node_modules/nanoid": { 710 | "version": "3.3.6", 711 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 712 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 713 | "dev": true, 714 | "funding": [ 715 | { 716 | "type": "github", 717 | "url": "https://github.com/sponsors/ai" 718 | } 719 | ], 720 | "bin": { 721 | "nanoid": "bin/nanoid.cjs" 722 | }, 723 | "engines": { 724 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 725 | } 726 | }, 727 | "node_modules/object-assign": { 728 | "version": "4.1.1", 729 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 730 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 731 | "dev": true, 732 | "engines": { 733 | "node": ">=0.10.0" 734 | } 735 | }, 736 | "node_modules/once": { 737 | "version": "1.4.0", 738 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 739 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 740 | "dev": true, 741 | "dependencies": { 742 | "wrappy": "1" 743 | } 744 | }, 745 | "node_modules/p-limit": { 746 | "version": "2.3.0", 747 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 748 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 749 | "dev": true, 750 | "dependencies": { 751 | "p-try": "^2.0.0" 752 | }, 753 | "engines": { 754 | "node": ">=6" 755 | }, 756 | "funding": { 757 | "url": "https://github.com/sponsors/sindresorhus" 758 | } 759 | }, 760 | "node_modules/p-locate": { 761 | "version": "4.1.0", 762 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 763 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 764 | "dev": true, 765 | "dependencies": { 766 | "p-limit": "^2.2.0" 767 | }, 768 | "engines": { 769 | "node": ">=8" 770 | } 771 | }, 772 | "node_modules/p-try": { 773 | "version": "2.2.0", 774 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 775 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 776 | "dev": true, 777 | "engines": { 778 | "node": ">=6" 779 | } 780 | }, 781 | "node_modules/path-exists": { 782 | "version": "4.0.0", 783 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 784 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 785 | "dev": true, 786 | "engines": { 787 | "node": ">=8" 788 | } 789 | }, 790 | "node_modules/path-is-absolute": { 791 | "version": "1.0.1", 792 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 793 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 794 | "dev": true, 795 | "engines": { 796 | "node": ">=0.10.0" 797 | } 798 | }, 799 | "node_modules/picocolors": { 800 | "version": "1.0.0", 801 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 802 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 803 | "dev": true 804 | }, 805 | "node_modules/pify": { 806 | "version": "2.3.0", 807 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 808 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 809 | "dev": true, 810 | "engines": { 811 | "node": ">=0.10.0" 812 | } 813 | }, 814 | "node_modules/pinkie": { 815 | "version": "2.0.4", 816 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 817 | "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", 818 | "dev": true, 819 | "engines": { 820 | "node": ">=0.10.0" 821 | } 822 | }, 823 | "node_modules/pinkie-promise": { 824 | "version": "2.0.1", 825 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 826 | "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", 827 | "dev": true, 828 | "dependencies": { 829 | "pinkie": "^2.0.0" 830 | }, 831 | "engines": { 832 | "node": ">=0.10.0" 833 | } 834 | }, 835 | "node_modules/pkg-dir": { 836 | "version": "4.2.0", 837 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 838 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 839 | "dev": true, 840 | "dependencies": { 841 | "find-up": "^4.0.0" 842 | }, 843 | "engines": { 844 | "node": ">=8" 845 | } 846 | }, 847 | "node_modules/postcss": { 848 | "version": "8.4.23", 849 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", 850 | "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", 851 | "dev": true, 852 | "funding": [ 853 | { 854 | "type": "opencollective", 855 | "url": "https://opencollective.com/postcss/" 856 | }, 857 | { 858 | "type": "tidelift", 859 | "url": "https://tidelift.com/funding/github/npm/postcss" 860 | }, 861 | { 862 | "type": "github", 863 | "url": "https://github.com/sponsors/ai" 864 | } 865 | ], 866 | "dependencies": { 867 | "nanoid": "^3.3.6", 868 | "picocolors": "^1.0.0", 869 | "source-map-js": "^1.0.2" 870 | }, 871 | "engines": { 872 | "node": "^10 || ^12 || >=14" 873 | } 874 | }, 875 | "node_modules/rollup": { 876 | "version": "3.21.1", 877 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.1.tgz", 878 | "integrity": "sha512-GpUgqWCw56OSiBKf7lcAITstYiBV1/EKaKYPl9r8HgAxc6/qYAVw1PaHWnvHWFziRaf4HsVCDLq/IGtBi1K/Zw==", 879 | "dev": true, 880 | "bin": { 881 | "rollup": "dist/bin/rollup" 882 | }, 883 | "engines": { 884 | "node": ">=14.18.0", 885 | "npm": ">=8.0.0" 886 | }, 887 | "optionalDependencies": { 888 | "fsevents": "~2.3.2" 889 | } 890 | }, 891 | "node_modules/semver": { 892 | "version": "6.3.0", 893 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 894 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 895 | "dev": true, 896 | "bin": { 897 | "semver": "bin/semver.js" 898 | } 899 | }, 900 | "node_modules/source-map-js": { 901 | "version": "1.0.2", 902 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 903 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 904 | "dev": true, 905 | "engines": { 906 | "node": ">=0.10.0" 907 | } 908 | }, 909 | "node_modules/strip-json-comments": { 910 | "version": "5.0.0", 911 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.0.tgz", 912 | "integrity": "sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==", 913 | "engines": { 914 | "node": ">=14.16" 915 | }, 916 | "funding": { 917 | "url": "https://github.com/sponsors/sindresorhus" 918 | } 919 | }, 920 | "node_modules/strip-outer": { 921 | "version": "1.0.1", 922 | "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", 923 | "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", 924 | "dev": true, 925 | "dependencies": { 926 | "escape-string-regexp": "^1.0.2" 927 | }, 928 | "engines": { 929 | "node": ">=0.10.0" 930 | } 931 | }, 932 | "node_modules/trim-repeated": { 933 | "version": "1.0.0", 934 | "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", 935 | "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", 936 | "dev": true, 937 | "dependencies": { 938 | "escape-string-regexp": "^1.0.2" 939 | }, 940 | "engines": { 941 | "node": ">=0.10.0" 942 | } 943 | }, 944 | "node_modules/typescript": { 945 | "version": "5.0.4", 946 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", 947 | "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", 948 | "dev": true, 949 | "bin": { 950 | "tsc": "bin/tsc", 951 | "tsserver": "bin/tsserver" 952 | }, 953 | "engines": { 954 | "node": ">=12.20" 955 | } 956 | }, 957 | "node_modules/universalify": { 958 | "version": "0.1.2", 959 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 960 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 961 | "dev": true, 962 | "engines": { 963 | "node": ">= 4.0.0" 964 | } 965 | }, 966 | "node_modules/vite": { 967 | "version": "4.3.3", 968 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.3.tgz", 969 | "integrity": "sha512-MwFlLBO4udZXd+VBcezo3u8mC77YQk+ik+fbc0GZWGgzfbPP+8Kf0fldhARqvSYmtIWoAJ5BXPClUbMTlqFxrA==", 970 | "dev": true, 971 | "dependencies": { 972 | "esbuild": "^0.17.5", 973 | "postcss": "^8.4.23", 974 | "rollup": "^3.21.0" 975 | }, 976 | "bin": { 977 | "vite": "bin/vite.js" 978 | }, 979 | "engines": { 980 | "node": "^14.18.0 || >=16.0.0" 981 | }, 982 | "optionalDependencies": { 983 | "fsevents": "~2.3.2" 984 | }, 985 | "peerDependencies": { 986 | "@types/node": ">= 14", 987 | "less": "*", 988 | "sass": "*", 989 | "stylus": "*", 990 | "sugarss": "*", 991 | "terser": "^5.4.0" 992 | }, 993 | "peerDependenciesMeta": { 994 | "@types/node": { 995 | "optional": true 996 | }, 997 | "less": { 998 | "optional": true 999 | }, 1000 | "sass": { 1001 | "optional": true 1002 | }, 1003 | "stylus": { 1004 | "optional": true 1005 | }, 1006 | "sugarss": { 1007 | "optional": true 1008 | }, 1009 | "terser": { 1010 | "optional": true 1011 | } 1012 | } 1013 | }, 1014 | "node_modules/vite-plugin-monaco-editor": { 1015 | "version": "1.1.0", 1016 | "resolved": "https://registry.npmjs.org/vite-plugin-monaco-editor/-/vite-plugin-monaco-editor-1.1.0.tgz", 1017 | "integrity": "sha512-IvtUqZotrRoVqwT0PBBDIZPNraya3BxN/bfcNfnxZ5rkJiGcNtO5eAOWWSgT7zullIAEqQwxMU83yL9J5k7gww==", 1018 | "dev": true, 1019 | "peerDependencies": { 1020 | "monaco-editor": ">=0.33.0" 1021 | } 1022 | }, 1023 | "node_modules/wrappy": { 1024 | "version": "1.0.2", 1025 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1026 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1027 | "dev": true 1028 | } 1029 | }, 1030 | "dependencies": { 1031 | "@esbuild/android-arm": { 1032 | "version": "0.17.18", 1033 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.18.tgz", 1034 | "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==", 1035 | "dev": true, 1036 | "optional": true 1037 | }, 1038 | "@esbuild/android-arm64": { 1039 | "version": "0.17.18", 1040 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz", 1041 | "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==", 1042 | "dev": true, 1043 | "optional": true 1044 | }, 1045 | "@esbuild/android-x64": { 1046 | "version": "0.17.18", 1047 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.18.tgz", 1048 | "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==", 1049 | "dev": true, 1050 | "optional": true 1051 | }, 1052 | "@esbuild/darwin-arm64": { 1053 | "version": "0.17.18", 1054 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz", 1055 | "integrity": "sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==", 1056 | "dev": true, 1057 | "optional": true 1058 | }, 1059 | "@esbuild/darwin-x64": { 1060 | "version": "0.17.18", 1061 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz", 1062 | "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==", 1063 | "dev": true, 1064 | "optional": true 1065 | }, 1066 | "@esbuild/freebsd-arm64": { 1067 | "version": "0.17.18", 1068 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz", 1069 | "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==", 1070 | "dev": true, 1071 | "optional": true 1072 | }, 1073 | "@esbuild/freebsd-x64": { 1074 | "version": "0.17.18", 1075 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz", 1076 | "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==", 1077 | "dev": true, 1078 | "optional": true 1079 | }, 1080 | "@esbuild/linux-arm": { 1081 | "version": "0.17.18", 1082 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz", 1083 | "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==", 1084 | "dev": true, 1085 | "optional": true 1086 | }, 1087 | "@esbuild/linux-arm64": { 1088 | "version": "0.17.18", 1089 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz", 1090 | "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==", 1091 | "dev": true, 1092 | "optional": true 1093 | }, 1094 | "@esbuild/linux-ia32": { 1095 | "version": "0.17.18", 1096 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz", 1097 | "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==", 1098 | "dev": true, 1099 | "optional": true 1100 | }, 1101 | "@esbuild/linux-loong64": { 1102 | "version": "0.17.18", 1103 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz", 1104 | "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==", 1105 | "dev": true, 1106 | "optional": true 1107 | }, 1108 | "@esbuild/linux-mips64el": { 1109 | "version": "0.17.18", 1110 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz", 1111 | "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==", 1112 | "dev": true, 1113 | "optional": true 1114 | }, 1115 | "@esbuild/linux-ppc64": { 1116 | "version": "0.17.18", 1117 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz", 1118 | "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==", 1119 | "dev": true, 1120 | "optional": true 1121 | }, 1122 | "@esbuild/linux-riscv64": { 1123 | "version": "0.17.18", 1124 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz", 1125 | "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==", 1126 | "dev": true, 1127 | "optional": true 1128 | }, 1129 | "@esbuild/linux-s390x": { 1130 | "version": "0.17.18", 1131 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz", 1132 | "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==", 1133 | "dev": true, 1134 | "optional": true 1135 | }, 1136 | "@esbuild/linux-x64": { 1137 | "version": "0.17.18", 1138 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz", 1139 | "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==", 1140 | "dev": true, 1141 | "optional": true 1142 | }, 1143 | "@esbuild/netbsd-x64": { 1144 | "version": "0.17.18", 1145 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz", 1146 | "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==", 1147 | "dev": true, 1148 | "optional": true 1149 | }, 1150 | "@esbuild/openbsd-x64": { 1151 | "version": "0.17.18", 1152 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz", 1153 | "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==", 1154 | "dev": true, 1155 | "optional": true 1156 | }, 1157 | "@esbuild/sunos-x64": { 1158 | "version": "0.17.18", 1159 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz", 1160 | "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==", 1161 | "dev": true, 1162 | "optional": true 1163 | }, 1164 | "@esbuild/win32-arm64": { 1165 | "version": "0.17.18", 1166 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz", 1167 | "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==", 1168 | "dev": true, 1169 | "optional": true 1170 | }, 1171 | "@esbuild/win32-ia32": { 1172 | "version": "0.17.18", 1173 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz", 1174 | "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==", 1175 | "dev": true, 1176 | "optional": true 1177 | }, 1178 | "@esbuild/win32-x64": { 1179 | "version": "0.17.18", 1180 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz", 1181 | "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==", 1182 | "dev": true, 1183 | "optional": true 1184 | }, 1185 | "array-union": { 1186 | "version": "1.0.2", 1187 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 1188 | "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", 1189 | "dev": true, 1190 | "requires": { 1191 | "array-uniq": "^1.0.1" 1192 | } 1193 | }, 1194 | "array-uniq": { 1195 | "version": "1.0.3", 1196 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 1197 | "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", 1198 | "dev": true 1199 | }, 1200 | "async": { 1201 | "version": "3.2.4", 1202 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", 1203 | "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", 1204 | "dev": true 1205 | }, 1206 | "balanced-match": { 1207 | "version": "1.0.2", 1208 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1209 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1210 | "dev": true 1211 | }, 1212 | "brace-expansion": { 1213 | "version": "1.1.11", 1214 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1215 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1216 | "dev": true, 1217 | "requires": { 1218 | "balanced-match": "^1.0.0", 1219 | "concat-map": "0.0.1" 1220 | } 1221 | }, 1222 | "commander": { 1223 | "version": "2.20.3", 1224 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1225 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1226 | "dev": true 1227 | }, 1228 | "commondir": { 1229 | "version": "1.0.1", 1230 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 1231 | "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 1232 | "dev": true 1233 | }, 1234 | "concat-map": { 1235 | "version": "0.0.1", 1236 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1237 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1238 | "dev": true 1239 | }, 1240 | "email-addresses": { 1241 | "version": "5.0.0", 1242 | "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz", 1243 | "integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==", 1244 | "dev": true 1245 | }, 1246 | "esbuild": { 1247 | "version": "0.17.18", 1248 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.18.tgz", 1249 | "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==", 1250 | "dev": true, 1251 | "requires": { 1252 | "@esbuild/android-arm": "0.17.18", 1253 | "@esbuild/android-arm64": "0.17.18", 1254 | "@esbuild/android-x64": "0.17.18", 1255 | "@esbuild/darwin-arm64": "0.17.18", 1256 | "@esbuild/darwin-x64": "0.17.18", 1257 | "@esbuild/freebsd-arm64": "0.17.18", 1258 | "@esbuild/freebsd-x64": "0.17.18", 1259 | "@esbuild/linux-arm": "0.17.18", 1260 | "@esbuild/linux-arm64": "0.17.18", 1261 | "@esbuild/linux-ia32": "0.17.18", 1262 | "@esbuild/linux-loong64": "0.17.18", 1263 | "@esbuild/linux-mips64el": "0.17.18", 1264 | "@esbuild/linux-ppc64": "0.17.18", 1265 | "@esbuild/linux-riscv64": "0.17.18", 1266 | "@esbuild/linux-s390x": "0.17.18", 1267 | "@esbuild/linux-x64": "0.17.18", 1268 | "@esbuild/netbsd-x64": "0.17.18", 1269 | "@esbuild/openbsd-x64": "0.17.18", 1270 | "@esbuild/sunos-x64": "0.17.18", 1271 | "@esbuild/win32-arm64": "0.17.18", 1272 | "@esbuild/win32-ia32": "0.17.18", 1273 | "@esbuild/win32-x64": "0.17.18" 1274 | } 1275 | }, 1276 | "escape-string-regexp": { 1277 | "version": "1.0.5", 1278 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1279 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 1280 | "dev": true 1281 | }, 1282 | "filename-reserved-regex": { 1283 | "version": "2.0.0", 1284 | "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", 1285 | "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", 1286 | "dev": true 1287 | }, 1288 | "filenamify": { 1289 | "version": "4.3.0", 1290 | "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", 1291 | "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", 1292 | "dev": true, 1293 | "requires": { 1294 | "filename-reserved-regex": "^2.0.0", 1295 | "strip-outer": "^1.0.1", 1296 | "trim-repeated": "^1.0.0" 1297 | } 1298 | }, 1299 | "find-cache-dir": { 1300 | "version": "3.3.2", 1301 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", 1302 | "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", 1303 | "dev": true, 1304 | "requires": { 1305 | "commondir": "^1.0.1", 1306 | "make-dir": "^3.0.2", 1307 | "pkg-dir": "^4.1.0" 1308 | } 1309 | }, 1310 | "find-up": { 1311 | "version": "4.1.0", 1312 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 1313 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1314 | "dev": true, 1315 | "requires": { 1316 | "locate-path": "^5.0.0", 1317 | "path-exists": "^4.0.0" 1318 | } 1319 | }, 1320 | "fs-extra": { 1321 | "version": "8.1.0", 1322 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 1323 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 1324 | "dev": true, 1325 | "requires": { 1326 | "graceful-fs": "^4.2.0", 1327 | "jsonfile": "^4.0.0", 1328 | "universalify": "^0.1.0" 1329 | } 1330 | }, 1331 | "fs.realpath": { 1332 | "version": "1.0.0", 1333 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1334 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1335 | "dev": true 1336 | }, 1337 | "fsevents": { 1338 | "version": "2.3.2", 1339 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1340 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1341 | "dev": true, 1342 | "optional": true 1343 | }, 1344 | "gh-pages": { 1345 | "version": "5.0.0", 1346 | "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-5.0.0.tgz", 1347 | "integrity": "sha512-Nqp1SjkPIB94Xw/3yYNTUL+G2dxlhjvv1zeN/4kMC1jfViTEqhtVz/Ba1zSXHuvXCN9ADNS1dN4r5/J/nZWEQQ==", 1348 | "dev": true, 1349 | "requires": { 1350 | "async": "^3.2.4", 1351 | "commander": "^2.18.0", 1352 | "email-addresses": "^5.0.0", 1353 | "filenamify": "^4.3.0", 1354 | "find-cache-dir": "^3.3.1", 1355 | "fs-extra": "^8.1.0", 1356 | "globby": "^6.1.0" 1357 | } 1358 | }, 1359 | "glob": { 1360 | "version": "7.2.3", 1361 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1362 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1363 | "dev": true, 1364 | "requires": { 1365 | "fs.realpath": "^1.0.0", 1366 | "inflight": "^1.0.4", 1367 | "inherits": "2", 1368 | "minimatch": "^3.1.1", 1369 | "once": "^1.3.0", 1370 | "path-is-absolute": "^1.0.0" 1371 | } 1372 | }, 1373 | "globby": { 1374 | "version": "6.1.0", 1375 | "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", 1376 | "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", 1377 | "dev": true, 1378 | "requires": { 1379 | "array-union": "^1.0.1", 1380 | "glob": "^7.0.3", 1381 | "object-assign": "^4.0.1", 1382 | "pify": "^2.0.0", 1383 | "pinkie-promise": "^2.0.0" 1384 | } 1385 | }, 1386 | "graceful-fs": { 1387 | "version": "4.2.11", 1388 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1389 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 1390 | "dev": true 1391 | }, 1392 | "inflight": { 1393 | "version": "1.0.6", 1394 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1395 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1396 | "dev": true, 1397 | "requires": { 1398 | "once": "^1.3.0", 1399 | "wrappy": "1" 1400 | } 1401 | }, 1402 | "inherits": { 1403 | "version": "2.0.4", 1404 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1405 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1406 | "dev": true 1407 | }, 1408 | "jsonfile": { 1409 | "version": "4.0.0", 1410 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1411 | "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 1412 | "dev": true, 1413 | "requires": { 1414 | "graceful-fs": "^4.1.6" 1415 | } 1416 | }, 1417 | "locate-path": { 1418 | "version": "5.0.0", 1419 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1420 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1421 | "dev": true, 1422 | "requires": { 1423 | "p-locate": "^4.1.0" 1424 | } 1425 | }, 1426 | "make-dir": { 1427 | "version": "3.1.0", 1428 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 1429 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1430 | "dev": true, 1431 | "requires": { 1432 | "semver": "^6.0.0" 1433 | } 1434 | }, 1435 | "minimatch": { 1436 | "version": "3.1.2", 1437 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1438 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1439 | "dev": true, 1440 | "requires": { 1441 | "brace-expansion": "^1.1.7" 1442 | } 1443 | }, 1444 | "monaco-editor": { 1445 | "version": "0.37.1", 1446 | "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.37.1.tgz", 1447 | "integrity": "sha512-jLXEEYSbqMkT/FuJLBZAVWGuhIb4JNwHE9kPTorAVmsdZ4UzHAfgWxLsVtD7pLRFaOwYPhNG9nUCpmFL1t/dIg==" 1448 | }, 1449 | "nanoid": { 1450 | "version": "3.3.6", 1451 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 1452 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 1453 | "dev": true 1454 | }, 1455 | "object-assign": { 1456 | "version": "4.1.1", 1457 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1458 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1459 | "dev": true 1460 | }, 1461 | "once": { 1462 | "version": "1.4.0", 1463 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1464 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1465 | "dev": true, 1466 | "requires": { 1467 | "wrappy": "1" 1468 | } 1469 | }, 1470 | "p-limit": { 1471 | "version": "2.3.0", 1472 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1473 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1474 | "dev": true, 1475 | "requires": { 1476 | "p-try": "^2.0.0" 1477 | } 1478 | }, 1479 | "p-locate": { 1480 | "version": "4.1.0", 1481 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1482 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1483 | "dev": true, 1484 | "requires": { 1485 | "p-limit": "^2.2.0" 1486 | } 1487 | }, 1488 | "p-try": { 1489 | "version": "2.2.0", 1490 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1491 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1492 | "dev": true 1493 | }, 1494 | "path-exists": { 1495 | "version": "4.0.0", 1496 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1497 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1498 | "dev": true 1499 | }, 1500 | "path-is-absolute": { 1501 | "version": "1.0.1", 1502 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1503 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1504 | "dev": true 1505 | }, 1506 | "picocolors": { 1507 | "version": "1.0.0", 1508 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1509 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1510 | "dev": true 1511 | }, 1512 | "pify": { 1513 | "version": "2.3.0", 1514 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1515 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 1516 | "dev": true 1517 | }, 1518 | "pinkie": { 1519 | "version": "2.0.4", 1520 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 1521 | "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", 1522 | "dev": true 1523 | }, 1524 | "pinkie-promise": { 1525 | "version": "2.0.1", 1526 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 1527 | "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", 1528 | "dev": true, 1529 | "requires": { 1530 | "pinkie": "^2.0.0" 1531 | } 1532 | }, 1533 | "pkg-dir": { 1534 | "version": "4.2.0", 1535 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 1536 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 1537 | "dev": true, 1538 | "requires": { 1539 | "find-up": "^4.0.0" 1540 | } 1541 | }, 1542 | "postcss": { 1543 | "version": "8.4.23", 1544 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", 1545 | "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", 1546 | "dev": true, 1547 | "requires": { 1548 | "nanoid": "^3.3.6", 1549 | "picocolors": "^1.0.0", 1550 | "source-map-js": "^1.0.2" 1551 | } 1552 | }, 1553 | "rollup": { 1554 | "version": "3.21.1", 1555 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.1.tgz", 1556 | "integrity": "sha512-GpUgqWCw56OSiBKf7lcAITstYiBV1/EKaKYPl9r8HgAxc6/qYAVw1PaHWnvHWFziRaf4HsVCDLq/IGtBi1K/Zw==", 1557 | "dev": true, 1558 | "requires": { 1559 | "fsevents": "~2.3.2" 1560 | } 1561 | }, 1562 | "semver": { 1563 | "version": "6.3.0", 1564 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1565 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1566 | "dev": true 1567 | }, 1568 | "source-map-js": { 1569 | "version": "1.0.2", 1570 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1571 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1572 | "dev": true 1573 | }, 1574 | "strip-json-comments": { 1575 | "version": "5.0.0", 1576 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.0.tgz", 1577 | "integrity": "sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==" 1578 | }, 1579 | "strip-outer": { 1580 | "version": "1.0.1", 1581 | "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", 1582 | "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", 1583 | "dev": true, 1584 | "requires": { 1585 | "escape-string-regexp": "^1.0.2" 1586 | } 1587 | }, 1588 | "trim-repeated": { 1589 | "version": "1.0.0", 1590 | "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", 1591 | "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", 1592 | "dev": true, 1593 | "requires": { 1594 | "escape-string-regexp": "^1.0.2" 1595 | } 1596 | }, 1597 | "typescript": { 1598 | "version": "5.0.4", 1599 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", 1600 | "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", 1601 | "dev": true 1602 | }, 1603 | "universalify": { 1604 | "version": "0.1.2", 1605 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1606 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 1607 | "dev": true 1608 | }, 1609 | "vite": { 1610 | "version": "4.3.3", 1611 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.3.tgz", 1612 | "integrity": "sha512-MwFlLBO4udZXd+VBcezo3u8mC77YQk+ik+fbc0GZWGgzfbPP+8Kf0fldhARqvSYmtIWoAJ5BXPClUbMTlqFxrA==", 1613 | "dev": true, 1614 | "requires": { 1615 | "esbuild": "^0.17.5", 1616 | "fsevents": "~2.3.2", 1617 | "postcss": "^8.4.23", 1618 | "rollup": "^3.21.0" 1619 | } 1620 | }, 1621 | "vite-plugin-monaco-editor": { 1622 | "version": "1.1.0", 1623 | "resolved": "https://registry.npmjs.org/vite-plugin-monaco-editor/-/vite-plugin-monaco-editor-1.1.0.tgz", 1624 | "integrity": "sha512-IvtUqZotrRoVqwT0PBBDIZPNraya3BxN/bfcNfnxZ5rkJiGcNtO5eAOWWSgT7zullIAEqQwxMU83yL9J5k7gww==", 1625 | "dev": true, 1626 | "requires": {} 1627 | }, 1628 | "wrappy": { 1629 | "version": "1.0.2", 1630 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1631 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1632 | "dev": true 1633 | } 1634 | } 1635 | } 1636 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ztest_aa", 3 | "private": true, 4 | "version": "0.0.0", 5 | "scripts": { 6 | "dev": "vite", 7 | "build": "tsc && vite build", 8 | "preview": "vite preview", 9 | "deploy": "gh-pages -r git@github.com:KalmeMarq/json-ui-editor.git -d dist" 10 | }, 11 | "devDependencies": { 12 | "gh-pages": "^5.0.0", 13 | "typescript": "^5.0.2", 14 | "vite": "^4.3.2", 15 | "vite-plugin-monaco-editor": "^1.1.0" 16 | }, 17 | "dependencies": { 18 | "monaco-editor": "^0.37.1", 19 | "strip-json-comments": "^5.0.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/DrawContext.ts: -------------------------------------------------------------------------------- 1 | import { TextRenderer } from './TextRenderer'; 2 | import { RenderSystem } from './gl'; 3 | import { PROGRAMS } from './program'; 4 | import { BufferBuilder, Tessellator } from './tessellator'; 5 | import { DrawMode, VertexFormats } from './vertex_format'; 6 | 7 | export class DrawContext { 8 | textRend: TextRenderer; 9 | 10 | constructor(textRend: TextRenderer) { 11 | this.textRend = textRend; 12 | } 13 | 14 | public drawTexture(texture: string, x: number, y: number, z: number, width: number, height: number, u: number, v: number, us: number, vs: number, tw: number, th: number, grayscale: boolean) { 15 | const tessellator = Tessellator.getInstance(); 16 | const builder = tessellator.getBufferBuilder(); 17 | RenderSystem.setShaderTexture(0, texture); 18 | RenderSystem.setShader(grayscale ? PROGRAMS.GRAYSCALE_POSITION_TEXTURE : PROGRAMS.POSITION_TEXTURE); 19 | builder.begin(DrawMode.QUADS, VertexFormats.POSITION_TEXTURE); 20 | const x1 = x + width; 21 | const y1 = y + height; 22 | const u0 = u / tw; 23 | const v0 = v / th; 24 | const u1 = (u + us) / tw; 25 | const v1 = (v + vs) / th; 26 | 27 | builder.vertex(x, y, z).texture(u0, v0).next(); 28 | builder.vertex(x, y1, z).texture(u0, v1).next(); 29 | builder.vertex(x1, y1, z).texture(u1, v1).next(); 30 | builder.vertex(x1, y, z).texture(u1, v0).next(); 31 | builder.draw(); 32 | } 33 | 34 | public drawColoredTexture( 35 | texture: string, 36 | x: number, 37 | y: number, 38 | z: number, 39 | width: number, 40 | height: number, 41 | u: number, 42 | v: number, 43 | us: number, 44 | vs: number, 45 | tw: number, 46 | th: number, 47 | color: number[], 48 | grayscale: boolean 49 | ) { 50 | const tessellator = Tessellator.getInstance(); 51 | const builder = tessellator.getBufferBuilder(); 52 | RenderSystem.setShaderTexture(0, texture); 53 | RenderSystem.setShader(grayscale ? PROGRAMS.GRAYSCALE_POSITION_TEXTURE_COLOR : PROGRAMS.POSITION_TEXTURE_COLOR); 54 | builder.begin(DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR); 55 | const x1 = x + width; 56 | const y1 = y + height; 57 | const u0 = u / tw; 58 | const v0 = v / th; 59 | const u1 = (u + us) / tw; 60 | const v1 = (v + vs) / th; 61 | 62 | builder.vertex(x, y, z).texture(u0, v0).color(color[0], color[1], color[2], color[3]).next(); 63 | builder.vertex(x, y1, z).texture(u0, v1).color(color[0], color[1], color[2], color[3]).next(); 64 | builder.vertex(x1, y1, z).texture(u1, v1).color(color[0], color[1], color[2], color[3]).next(); 65 | builder.vertex(x1, y, z).texture(u1, v0).color(color[0], color[1], color[2], color[3]).next(); 66 | builder.draw(); 67 | } 68 | 69 | public drawBorder(x: number, y: number, z: number, width: number, height: number, red: number, green: number, blue: number, alpha: number) { 70 | this.drawColoredf(x, y, z, 1, height, red, green, blue, alpha); 71 | this.drawColoredf(x + width - 1, y, z, 1, height, red, green, blue, alpha); 72 | this.drawColoredf(x, y, z, width, 1, red, green, blue, alpha); 73 | this.drawColoredf(x, y + height - 1, z, width, 1, red, green, blue, alpha); 74 | } 75 | 76 | private drawBorderQuad(builder: BufferBuilder, x: number, y: number, z: number, w: number, h: number, red: number, green: number, blue: number, alpha: number) { 77 | const x1 = x + w; 78 | const y1 = y + h; 79 | builder.vertex(x, y, z).color(red, green, blue, alpha).next(); 80 | builder.vertex(x, y1, z).color(red, green, blue, alpha).next(); 81 | builder.vertex(x1, y1, z).color(red, green, blue, alpha).next(); 82 | builder.vertex(x1, y, z).color(red, green, blue, alpha).next(); 83 | } 84 | 85 | public drawColoredfv(x: number, y: number, z: number, width: number, height: number, color: number[]) { 86 | this.drawColoredf(x, y, z, width, height, color[0], color[1], color[2], color[3]); 87 | } 88 | 89 | public drawColoredf(x: number, y: number, z: number, width: number, height: number, red: number, green: number, blue: number, alpha: number) { 90 | const tessellator = Tessellator.getInstance(); 91 | const builder = tessellator.getBufferBuilder(); 92 | RenderSystem.setShader(PROGRAMS.POSITION_COLOR); 93 | builder.begin(DrawMode.QUADS, VertexFormats.POSITION_COLOR); 94 | const x1 = x + width; 95 | const y1 = y + height; 96 | builder.vertex(x, y, z).color(red, green, blue, alpha).next(); 97 | builder.vertex(x, y1, z).color(red, green, blue, alpha).next(); 98 | builder.vertex(x1, y1, z).color(red, green, blue, alpha).next(); 99 | builder.vertex(x1, y, z).color(red, green, blue, alpha).next(); 100 | RenderSystem.enableBlend(); 101 | builder.draw(); 102 | RenderSystem.disableBlend(); 103 | } 104 | 105 | public drawVGradientfv(x: number, y: number, z: number, width: number, height: number, colorStart: number[], colorEnd: number[]) { 106 | const tessellator = Tessellator.getInstance(); 107 | const builder = tessellator.getBufferBuilder(); 108 | RenderSystem.setShader(PROGRAMS.POSITION_COLOR); 109 | builder.begin(DrawMode.QUADS, VertexFormats.POSITION_COLOR); 110 | const x1 = x + width; 111 | const y1 = y + height; 112 | builder.vertex(x, y, z).color(colorStart[0], colorStart[1], colorStart[2], colorStart[3]).next(); 113 | builder.vertex(x, y1, z).color(colorEnd[0], colorEnd[1], colorEnd[2], colorEnd[3]).next(); 114 | builder.vertex(x1, y1, z).color(colorEnd[0], colorEnd[1], colorEnd[2], colorEnd[3]).next(); 115 | builder.vertex(x1, y, z).color(colorStart[0], colorStart[1], colorStart[2], colorStart[3]).next(); 116 | RenderSystem.enableBlend(); 117 | builder.draw(); 118 | RenderSystem.disableBlend(); 119 | } 120 | 121 | public drawHGradientfv(x: number, y: number, z: number, width: number, height: number, colorStart: number[], colorEnd: number[]) { 122 | const tessellator = Tessellator.getInstance(); 123 | const builder = tessellator.getBufferBuilder(); 124 | RenderSystem.setShader(PROGRAMS.POSITION_COLOR); 125 | builder.begin(DrawMode.QUADS, VertexFormats.POSITION_COLOR); 126 | const x1 = x + width; 127 | const y1 = y + height; 128 | builder.vertex(x, y, z).color(colorStart[0], colorStart[1], colorStart[2], colorStart[3]).next(); 129 | builder.vertex(x, y1, z).color(colorStart[0], colorStart[1], colorStart[2], colorStart[3]).next(); 130 | builder.vertex(x1, y1, z).color(colorEnd[0], colorEnd[1], colorEnd[2], colorEnd[3]).next(); 131 | builder.vertex(x1, y, z).color(colorEnd[0], colorEnd[1], colorEnd[2], colorEnd[3]).next(); 132 | RenderSystem.enableBlend(); 133 | builder.draw(); 134 | RenderSystem.disableBlend(); 135 | } 136 | } 137 | -------------------------------------------------------------------------------- /src/TextRenderer.ts: -------------------------------------------------------------------------------- 1 | import { GL, RenderSystem } from './gl'; 2 | import { PROGRAMS } from './program'; 3 | import { Tessellator } from './tessellator'; 4 | import { DrawMode, VertexFormats } from './vertex_format'; 5 | 6 | export class TextRenderer { 7 | fontData: any; 8 | constructor(fontData: any) { 9 | this.fontData = fontData; 10 | } 11 | 12 | drawWithShadowfv(text: string, x: number, y: number, color: number[]) { 13 | if (text.length == 0) return; 14 | 15 | RenderSystem.enableBlend(); 16 | GL.glBlendFuncSeparate(GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA, GL.SRC_ALPHA, GL.ONE_MINUS_SRC_ALPHA); 17 | const tes = Tessellator.getInstance(); 18 | const builder = tes.getBufferBuilder(); 19 | RenderSystem.setShaderTexture(0, 'ascii.png'); 20 | RenderSystem.setShader(PROGRAMS.POSITION_TEXTURE_COLOR); 21 | 22 | let xx = x; 23 | const y1 = y + 8; 24 | for (let i = 0; i < text.length; ++i) { 25 | const dt = this.fontData[text[i]]; 26 | if (text[i] == ' ') xx += 4; 27 | 28 | if (dt == null) continue; 29 | 30 | const u0 = dt.u / 128; 31 | const v0 = dt.v / 128; 32 | const u1 = (dt.u + 8) / 128; 33 | const v1 = (dt.v + 8) / 128; 34 | builder.begin(DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR); 35 | 36 | builder.vertex(xx, y, 0).texture(u0, v0).color(color[0], color[1], color[2], color[3]).next(); 37 | builder.vertex(xx, y1, 0).texture(u0, v1).color(color[0], color[1], color[2], color[3]).next(); 38 | builder 39 | .vertex(xx + 8, y1, 0) 40 | .texture(u1, v1) 41 | .color(color[0], color[1], color[2], color[3]) 42 | .next(); 43 | builder 44 | .vertex(xx + 8, y, 0) 45 | .texture(u1, v0) 46 | .color(color[0], color[1], color[2], color[3]) 47 | .next(); 48 | builder.draw(); 49 | xx += dt['a']; 50 | } 51 | 52 | RenderSystem.disableBlend(); 53 | } 54 | 55 | draw(text: string, x: number, y: number, color: number[]) { 56 | this.drawWithShadowfv(text, x, y, color); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/controls.ts: -------------------------------------------------------------------------------- 1 | import { DrawContext } from './DrawContext'; 2 | import { RenderSystem } from './gl'; 3 | import { DEBUG } from './vars'; 4 | 5 | const DEBUG_COLOR = [1, 0, 0, 1]; 6 | 7 | abstract class UIProperty