diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000..9b4f4025
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "frontend/packages/crawlab-ui"]
+ path = frontend/packages/crawlab-ui
+ url = git@github.com:crawlab-team/crawlab-ui.git
diff --git a/frontend/.env.docker b/frontend/.env.docker
deleted file mode 100644
index dfa712ba..00000000
--- a/frontend/.env.docker
+++ /dev/null
@@ -1,3 +0,0 @@
-VUE_APP_API_BASE_URL=/api
-VUE_APP_INIT_BAIDU_TONGJI=
-VUE_APP_INIT_UMENG=
diff --git a/frontend/.eslintignore b/frontend/.eslintignore
deleted file mode 100644
index b16742a5..00000000
--- a/frontend/.eslintignore
+++ /dev/null
@@ -1,3 +0,0 @@
-./src/i18n/**/*.ts
-*/**/*.js
-*.js
diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js
deleted file mode 100644
index 1b3b85b7..00000000
--- a/frontend/.eslintrc.js
+++ /dev/null
@@ -1,20 +0,0 @@
-module.exports = {
- root: true,
- env: {
- node: true
- },
- 'extends': [
- 'plugin:vue/vue3-essential',
- 'eslint:recommended',
- '@vue/typescript/recommended'
- ],
- parserOptions: {
- ecmaVersion: 2020
- },
- rules: {
- 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
- 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
- '@typescript-eslint/no-explicit-any': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
- '@typescript-eslint/camelcase': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
- }
-}
diff --git a/frontend/.gitignore b/frontend/.gitignore
index 77111eae..87f50dc6 100644
--- a/frontend/.gitignore
+++ b/frontend/.gitignore
@@ -30,4 +30,5 @@ lib/
**/node_modules
**/package-lock.json
-stats.html
\ No newline at end of file
+stats.html
+.turbo
\ No newline at end of file
diff --git a/frontend/apps/crawlab/index.html b/frontend/apps/crawlab/index.html
new file mode 100644
index 00000000..8e829861
--- /dev/null
+++ b/frontend/apps/crawlab/index.html
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+ Crawlab
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/apps/crawlab/package.json b/frontend/apps/crawlab/package.json
new file mode 100644
index 00000000..377432da
--- /dev/null
+++ b/frontend/apps/crawlab/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "crawlab",
+ "version": "0.7.0",
+ "scripts": {
+ "dev": "pnpm run serve",
+ "serve": "vite",
+ "preview": "vite preview",
+ "build": "vite build",
+ "build:analyze": "vite build --mode analyze",
+ "build:serve": "serve dist",
+ "test": "jest"
+ },
+ "dependencies": {
+ "crawlab-ui": "workspace:crawlab-ui"
+ },
+ "devDependencies": {
+ "@types/node": "^20.14.8",
+ "@vitejs/plugin-vue": "^5.0.5",
+ "@vue/compiler-sfc": "^3.2.45",
+ "pnpm": "^9",
+ "rollup-plugin-external-globals": "^0.10.0",
+ "rollup-plugin-visualizer": "^5.12.0",
+ "sass": "^1.56.1",
+ "typescript": "^5",
+ "vite": "^5.4.6",
+ "vite-aliases": "^0.11.7",
+ "vite-plugin-dynamic-import": "^1.5.0",
+ "vite-plugin-externalize-deps": "^0.8.0",
+ "vue-tsc": "^2.0.22"
+ }
+}
diff --git a/frontend/apps/crawlab/pnpm-lock.yaml b/frontend/apps/crawlab/pnpm-lock.yaml
new file mode 100644
index 00000000..e977a6c7
--- /dev/null
+++ b/frontend/apps/crawlab/pnpm-lock.yaml
@@ -0,0 +1,4511 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@element-plus/icons-vue':
+ specifier: ^2.3.1
+ version: 2.3.1(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ '@fortawesome/fontawesome-common-types':
+ specifier: ^6.5.2
+ version: 6.6.0
+ '@fortawesome/fontawesome-svg-core':
+ specifier: ^6.5.2
+ version: 6.6.0
+ '@fortawesome/free-brands-svg-icons':
+ specifier: ^6.5.2
+ version: 6.6.0
+ '@fortawesome/free-regular-svg-icons':
+ specifier: ^6.5.2
+ version: 6.6.0
+ '@fortawesome/free-solid-svg-icons':
+ specifier: ^6.5.2
+ version: 6.6.0
+ '@fortawesome/vue-fontawesome':
+ specifier: ^3.0.8
+ version: 3.0.8(@fortawesome/fontawesome-svg-core@6.6.0)(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ '@popperjs/core':
+ specifier: ^2.11.8
+ version: 2.11.8
+ '@types/getos':
+ specifier: ^3.0.4
+ version: 3.0.4
+ '@types/humanize-duration':
+ specifier: ^3.27.4
+ version: 3.27.4
+ '@types/javascript-time-ago':
+ specifier: ^2.0.8
+ version: 2.0.8
+ '@types/md5':
+ specifier: ^2.3.5
+ version: 2.3.5
+ '@types/pinyin':
+ specifier: ^2.10.2
+ version: 2.10.2
+ '@types/showdown':
+ specifier: ^2.0.6
+ version: 2.0.6
+ '@types/url-join':
+ specifier: ^4.0.3
+ version: 4.0.3
+ async-validator:
+ specifier: ^4.2.5
+ version: 4.2.5
+ atom-material-icons:
+ specifier: ^3.0.0
+ version: 3.0.0
+ axios:
+ specifier: ^1.7.2
+ version: 1.7.7
+ chart.js:
+ specifier: ^4.4.3
+ version: 4.4.5
+ chartjs-adapter-date-fns:
+ specifier: ^3.0.0
+ version: 3.0.0(chart.js@4.4.5)(date-fns@4.1.0)
+ core-js:
+ specifier: ^3.37.1
+ version: 3.38.1
+ crawlab-ui:
+ specifier: 0.7.0-rc3
+ version: 0.7.0-rc3(dlwfpvqjxhvrevoazxvsg7egqu)
+ crawlab-vue3-dropzone:
+ specifier: 3.0.3
+ version: 3.0.3(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ cron-parser:
+ specifier: ^4.9.0
+ version: 4.9.0
+ cronstrue:
+ specifier: ^2.50.0
+ version: 2.50.0
+ dayjs:
+ specifier: ^1.11.11
+ version: 1.11.13
+ element-plus:
+ specifier: ^2.7.6
+ version: 2.8.5(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ font-awesome:
+ specifier: ^4.7.0
+ version: 4.7.0
+ humanize-duration:
+ specifier: ^3.32.1
+ version: 3.32.1
+ javascript-time-ago:
+ specifier: ^2.5.10
+ version: 2.5.11
+ md5:
+ specifier: ^2.3.0
+ version: 2.3.0
+ monaco-editor:
+ specifier: ^0.50.0
+ version: 0.50.0
+ normalize.css:
+ specifier: ^8.0.1
+ version: 8.0.1
+ os-name:
+ specifier: ^5.0.1
+ version: 5.0.1
+ pinyin:
+ specifier: ^2.10.2
+ version: 2.11.2
+ point-cluster:
+ specifier: ^3.1.8
+ version: 3.1.8
+ showdown:
+ specifier: ^2.1.0
+ version: 2.1.0
+ three:
+ specifier: ^0.166.0
+ version: 0.166.1
+ url-join:
+ specifier: ^4.0.1
+ version: 4.0.1
+ vue:
+ specifier: ^3.4
+ version: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+ vue-clipboard3:
+ specifier: ^2.0.0
+ version: 2.0.0
+ vue-i18n:
+ specifier: 9.13.1
+ version: 9.13.1(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ vue-router:
+ specifier: 4.4.0
+ version: 4.4.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ vuex:
+ specifier: ^4.1.0
+ version: 4.1.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ devDependencies:
+ '@types/node':
+ specifier: ^18.11.10
+ version: https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz
+ '@vitejs/plugin-vue':
+ specifier: ^3.2.0
+ version: https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz(vite@https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1))(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ '@vue/compiler-sfc':
+ specifier: ^3.2.45
+ version: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz
+ rollup-plugin-external-globals:
+ specifier: ^0.8.0
+ version: 0.8.0(rollup@3.26.2)
+ rollup-plugin-visualizer:
+ specifier: ^5.9.2
+ version: 5.9.2(rollup@3.26.2)
+ typescript:
+ specifier: ^4.6.4
+ version: https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz
+ vite:
+ specifier: ^3.2.4
+ version: https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1)
+ vite-aliases:
+ specifier: ^0.9.7
+ version: https://registry.npmmirror.com/vite-aliases/-/vite-aliases-0.9.7.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1)
+ vite-plugin-dynamic-import:
+ specifier: ^1.2.4
+ version: https://registry.npmmirror.com/vite-plugin-dynamic-import/-/vite-plugin-dynamic-import-1.2.4.tgz
+ vite-plugin-externalize-deps:
+ specifier: ^0.7.0
+ version: 0.7.0(vite@https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1))
+ vue-tsc:
+ specifier: ^1.0.9
+ version: https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.0.11.tgz(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+
+packages:
+
+ '@ampproject/remapping@2.3.0':
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
+
+ '@arr/every@1.0.1':
+ resolution: {integrity: sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==}
+ engines: {node: '>=4'}
+
+ '@babel/helper-string-parser@7.25.7':
+ resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz':
+ resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==, tarball: https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz}
+ version: 7.19.4
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.25.7':
+ resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz':
+ resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==, tarball: https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz}
+ version: 7.19.1
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.25.8':
+ resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/parser@https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz':
+ resolution: {integrity: sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==, tarball: https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz}
+ version: 7.20.5
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/types@7.25.8':
+ resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@https://registry.npmmirror.com/@babel/types/-/types-7.20.5.tgz':
+ resolution: {integrity: sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==, tarball: https://registry.npmmirror.com/@babel/types/-/types-7.20.5.tgz}
+ version: 7.20.5
+ engines: {node: '>=6.9.0'}
+
+ '@codemirror/autocomplete@6.18.1':
+ resolution: {integrity: sha512-iWHdj/B1ethnHRTwZj+C1obmmuCzquH29EbcKr0qIjA9NfDeBDJ7vs+WOHsFeLeflE4o+dHfYndJloMKHUkWUA==}
+ peerDependencies:
+ '@codemirror/language': ^6.0.0
+ '@codemirror/state': ^6.0.0
+ '@codemirror/view': ^6.0.0
+ '@lezer/common': ^1.0.0
+
+ '@codemirror/commands@6.7.0':
+ resolution: {integrity: sha512-+cduIZ2KbesDhbykV02K25A5xIVrquSPz4UxxYBemRlAT2aW8dhwUgLDwej7q/RJUHKk4nALYcR1puecDvbdqw==}
+
+ '@codemirror/lang-json@6.0.1':
+ resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==}
+
+ '@codemirror/language@6.10.3':
+ resolution: {integrity: sha512-kDqEU5sCP55Oabl6E7m5N+vZRoc0iWqgDVhEKifcHzPzjqCegcO4amfrYVL9PmPZpl4G0yjkpTpUO/Ui8CzO8A==}
+
+ '@codemirror/lint@6.8.2':
+ resolution: {integrity: sha512-PDFG5DjHxSEjOXk9TQYYVjZDqlZTFaDBfhQixHnQOEVDDNHUbEh/hstAjcQJaA6FQdZTD1hquXTK0rVBLADR1g==}
+
+ '@codemirror/search@6.5.6':
+ resolution: {integrity: sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==}
+
+ '@codemirror/state@6.4.1':
+ resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==}
+
+ '@codemirror/view@6.34.1':
+ resolution: {integrity: sha512-t1zK/l9UiRqwUNPm+pdIT0qzJlzuVckbTEMVNFhfWkGiBQClstzg+78vedCvLSX0xJEZ6lwZbPpnljL7L6iwMQ==}
+
+ '@ctrl/tinycolor@3.4.1':
+ resolution: {integrity: sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==}
+ engines: {node: '>=10'}
+
+ '@element-plus/icons-vue@2.3.1':
+ resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==}
+ version: 2.3.1
+ peerDependencies:
+ vue: ^3.2.0
+
+ '@esbuild/android-arm@0.15.16':
+ resolution: {integrity: sha512-nyB6CH++2mSgx3GbnrJsZSxzne5K0HMyNIWafDHqYy7IwxFc4fd/CgHVZXr8Eh+Q3KbIAcAe3vGyqIPhGblvMQ==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/linux-loong64@0.15.16':
+ resolution: {integrity: sha512-SDLfP1uoB0HZ14CdVYgagllgrG7Mdxhkt4jDJOKl/MldKrkQ6vDJMZKl2+5XsEY/Lzz37fjgLQoJBGuAw/x8kQ==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@floating-ui/core@1.6.8':
+ resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==}
+
+ '@floating-ui/dom@1.6.11':
+ resolution: {integrity: sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==}
+
+ '@floating-ui/utils@0.2.8':
+ resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==}
+
+ '@fortawesome/fontawesome-common-types@6.6.0':
+ resolution: {integrity: sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/fontawesome-svg-core@6.6.0':
+ resolution: {integrity: sha512-KHwPkCk6oRT4HADE7smhfsKudt9N/9lm6EJ5BVg0tD1yPA5hht837fB87F8pn15D8JfTqQOjhKTktwmLMiD7Kg==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/free-brands-svg-icons@6.6.0':
+ resolution: {integrity: sha512-1MPD8lMNW/earme4OQi1IFHtmHUwAKgghXlNwWi9GO7QkTfD+IIaYpIai4m2YJEzqfEji3jFHX1DZI5pbY/biQ==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/free-regular-svg-icons@6.6.0':
+ resolution: {integrity: sha512-Yv9hDzL4aI73BEwSEh20clrY8q/uLxawaQ98lekBx6t9dQKDHcDzzV1p2YtBGTtolYtNqcWdniOnhzB+JPnQEQ==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/free-solid-svg-icons@6.6.0':
+ resolution: {integrity: sha512-IYv/2skhEDFc2WGUcqvFJkeK39Q+HyPf5GHUrT/l2pKbtgEIv1al1TKd6qStR5OIwQdN1GZP54ci3y4mroJWjA==}
+ engines: {node: '>=6'}
+
+ '@fortawesome/vue-fontawesome@3.0.8':
+ resolution: {integrity: sha512-yyHHAj4G8pQIDfaIsMvQpwKMboIZtcHTUvPqXjOHyldh1O1vZfH4W03VDPv5RvI9P6DLTzJQlmVgj9wCf7c2Fw==}
+ version: 3.0.8
+ peerDependencies:
+ '@fortawesome/fontawesome-svg-core': ~1 || ~6
+ vue: '>= 3.0.0 < 4'
+
+ '@intlify/core-base@9.13.1':
+ resolution: {integrity: sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==}
+ engines: {node: '>= 16'}
+
+ '@intlify/message-compiler@9.13.1':
+ resolution: {integrity: sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==}
+ engines: {node: '>= 16'}
+
+ '@intlify/shared@9.13.1':
+ resolution: {integrity: sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==}
+ engines: {node: '>= 16'}
+
+ '@jridgewell/gen-mapping@0.3.5':
+ resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/set-array@1.2.1':
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.4.15':
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+
+ '@jridgewell/sourcemap-codec@1.5.0':
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+
+ '@jsep-plugin/assignment@1.2.1':
+ resolution: {integrity: sha512-gaHqbubTi29aZpVbBlECRpmdia+L5/lh2BwtIJTmtxdbecEyyX/ejAOg7eQDGNvGOUmPY7Z2Yxdy9ioyH/VJeA==}
+ engines: {node: '>= 10.16.0'}
+ peerDependencies:
+ jsep: ^0.4.0||^1.0.0
+
+ '@jsep-plugin/regex@1.0.3':
+ resolution: {integrity: sha512-XfZgry4DwEZvSFtS/6Y+R48D7qJYJK6R9/yJFyUFHCIUMEEHuJ4X95TDgJp5QkmzfLYvapMPzskV5HpIDrREug==}
+ engines: {node: '>= 10.16.0'}
+ peerDependencies:
+ jsep: ^0.4.0||^1.0.0
+
+ '@jsonquerylang/jsonquery@3.1.1':
+ resolution: {integrity: sha512-P6Qo5egd3W8TBpqQsqaZtZ9lPO7oXBM21QdkYamCAYZHv9VCPXiI8NeIuSoXdoe5zKVZPUWmqaI14uacJLmcNw==}
+ hasBin: true
+
+ '@kurkle/color@0.3.2':
+ resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==}
+
+ '@lexical/clipboard@0.16.1':
+ resolution: {integrity: sha512-0dWs/SwKS5KPpuf6fUVVt9vSCl6HAqcDGhSITw/okv0rrIlXTUT6WhVsMJtXfFxTyVvwMeOecJHvQH3i/jRQtA==}
+
+ '@lexical/code@0.16.1':
+ resolution: {integrity: sha512-pOC28rRZ2XkmI2nIJm50DbKaCJtk5D0o7r6nORYp4i0z+lxt5Sf2m82DL9ksUHJRqKy87pwJDpoWvJ2SAI0ohw==}
+
+ '@lexical/history@0.16.1':
+ resolution: {integrity: sha512-WQhScx0TJeKSQAnEkRpIaWdUXqirrNrom2MxbBUc/32zEUMm9FzV7nRGknvUabEFUo7vZq6xTZpOExQJqHInQA==}
+
+ '@lexical/html@0.16.1':
+ resolution: {integrity: sha512-vbtAdCvQ3PaAqa5mFmtmrvbiAvjCu1iXBAJ0bsHqFXCF2Sba5LwHVe8dUAOTpfEZEMbiHfjul6b5fj4vNPGF2A==}
+
+ '@lexical/link@0.16.1':
+ resolution: {integrity: sha512-zG36gEnEqbIe6tK/MhXi7wn/XMY/zdivnPcOY5WyC3derkEezeLSSIFsC1u5UNeK5pbpNMSy4LDpLhi1Ww4Y5w==}
+
+ '@lexical/list@0.16.1':
+ resolution: {integrity: sha512-i9YhLAh5N6YO9dP+R1SIL9WEdCKeTiQQYVUzj84vDvX5DIBxMPUjTmMn3LXu9T+QO3h1s2L/vJusZASrl45eAw==}
+
+ '@lexical/markdown@0.16.1':
+ resolution: {integrity: sha512-0sBLttMvfQO/hVaIqpHdvDowpgV2CoRuWo2CNwvRLZPPWvPVjL4Nkb73wmi8zAZsAOTbX2aw+g4m/+k5oJqNig==}
+
+ '@lexical/rich-text@0.16.1':
+ resolution: {integrity: sha512-4uEVXJur7tdSbqbmsToCW4YVm0AMh4y9LK077Yq2O9hSuA5dqpI8UbTDnxZN2D7RfahNvwlqp8eZKFB1yeiJGQ==}
+
+ '@lexical/selection@0.16.1':
+ resolution: {integrity: sha512-+nK3RvXtyQvQDq7AZ46JpphmM33pwuulwiRfeXR5T9iFQTtgWOEjsAi/KKX7vGm70BxACfiSxy5QCOgBWFwVJg==}
+
+ '@lexical/table@0.16.1':
+ resolution: {integrity: sha512-GWb0/MM1sVXpi1p2HWWOBldZXASMQ4c6WRNYnRmq7J/aB5N66HqQgJGKp3m66Kz4k1JjhmZfPs7F018qIBhnFQ==}
+
+ '@lexical/text@0.16.1':
+ resolution: {integrity: sha512-Os/nKQegORTrKKN6vL3/FMVszyzyqaotlisPynvTaHTUC+yY4uyjM2hlF93i5a2ixxyiPLF9bDroxUP96TMPXg==}
+
+ '@lexical/utils@0.16.1':
+ resolution: {integrity: sha512-BVyJxDQi/rIxFTDjf2zE7rMDKSuEaeJ4dybHRa/hRERt85gavGByQawSLeQlTjLaYLVsy+x7wCcqh2fNhlLf0g==}
+
+ '@lezer/common@1.2.3':
+ resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==}
+
+ '@lezer/highlight@1.2.1':
+ resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==}
+
+ '@lezer/json@1.0.2':
+ resolution: {integrity: sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ==}
+
+ '@lezer/lr@1.4.2':
+ resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==}
+
+ '@mapbox/node-pre-gyp@1.0.10':
+ resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==}
+ hasBin: true
+
+ '@nodelib/fs.scandir@https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, tarball: https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz}
+ version: 2.1.5
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, tarball: https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz}
+ version: 2.0.5
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, tarball: https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz}
+ version: 1.2.8
+ engines: {node: '>= 8'}
+
+ '@parcel/watcher-android-arm64@2.4.1':
+ resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ '@parcel/watcher-darwin-arm64@2.4.1':
+ resolution: {integrity: sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@parcel/watcher-darwin-x64@2.4.1':
+ resolution: {integrity: sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@parcel/watcher-freebsd-x64@2.4.1':
+ resolution: {integrity: sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@parcel/watcher-linux-arm-glibc@2.4.1':
+ resolution: {integrity: sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@parcel/watcher-linux-arm64-glibc@2.4.1':
+ resolution: {integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@parcel/watcher-linux-arm64-musl@2.4.1':
+ resolution: {integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@parcel/watcher-linux-x64-glibc@2.4.1':
+ resolution: {integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@parcel/watcher-linux-x64-musl@2.4.1':
+ resolution: {integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@parcel/watcher-win32-arm64@2.4.1':
+ resolution: {integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@parcel/watcher-win32-ia32@2.4.1':
+ resolution: {integrity: sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@parcel/watcher-win32-x64@2.4.1':
+ resolution: {integrity: sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ '@parcel/watcher@2.4.1':
+ resolution: {integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==}
+ engines: {node: '>= 10.0.0'}
+
+ '@polka/url@0.5.0':
+ resolution: {integrity: sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==}
+
+ '@polka/url@1.0.0-next.21':
+ resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
+
+ '@popperjs/core@2.11.8':
+ resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
+
+ '@replit/codemirror-indentation-markers@6.5.3':
+ resolution: {integrity: sha512-hL5Sfvw3C1vgg7GolLe/uxX5T3tmgOA3ZzqlMv47zjU1ON51pzNWiVbS22oh6crYhtVhv8b3gdXwoYp++2ilHw==}
+ peerDependencies:
+ '@codemirror/language': ^6.0.0
+ '@codemirror/state': ^6.0.0
+ '@codemirror/view': ^6.0.0
+
+ '@rollup/pluginutils@5.0.2':
+ resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@sphinxxxx/color-conversion@2.2.2':
+ resolution: {integrity: sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==}
+
+ '@sxzz/popperjs-es@2.11.7':
+ resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==}
+
+ '@trysound/sax@0.2.0':
+ resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
+ engines: {node: '>=10.13.0'}
+
+ '@tweenjs/tween.js@23.1.3':
+ resolution: {integrity: sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==}
+
+ '@types/estree@1.0.0':
+ resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
+
+ '@types/estree@1.0.6':
+ resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+
+ '@types/getos@3.0.4':
+ resolution: {integrity: sha512-OsNVsuGEBd5QoeXTgjPmA89a465hjQithLMImsiJlIi0aYP8axKWtWrsmEMfm50w6EL2oRzCz+cLkZmp9/LfZw==}
+
+ '@types/humanize-duration@3.27.4':
+ resolution: {integrity: sha512-yaf7kan2Sq0goxpbcwTQ+8E9RP6HutFBPv74T/IA/ojcHKhuKVlk2YFYyHhWZeLvZPzzLE3aatuQB4h0iqyyUA==}
+
+ '@types/javascript-time-ago@2.0.8':
+ resolution: {integrity: sha512-X77q3xUzWVn0qohgurKE1G5NiXZjee8VbLqaukW/HXVkz7bdCFJgOPQ3JVB4IkrDhMS4CviFTmpZuNVg0i2QFA==}
+
+ '@types/lodash-es@4.17.12':
+ resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
+
+ '@types/lodash@4.17.10':
+ resolution: {integrity: sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==}
+
+ '@types/md5@2.3.5':
+ resolution: {integrity: sha512-/i42wjYNgE6wf0j2bcTX6kuowmdL/6PE4IVitMpm2eYKBUuYCprdcWVK+xEF0gcV6ufMCRhtxmReGfc6hIK7Jw==}
+
+ '@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz':
+ resolution: {integrity: sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==, tarball: https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz}
+ version: 18.11.10
+
+ '@types/pinyin@2.10.2':
+ resolution: {integrity: sha512-jLzlRkaLRLg+lgYPjOuP3HX2cozUkhXls5GTXopsKuKJ9lDGlIAb88OoIztH6TbNUsoJnl/7e/kjaumA5IKKJg==}
+
+ '@types/showdown@2.0.6':
+ resolution: {integrity: sha512-pTvD/0CIeqe4x23+YJWlX2gArHa8G0J0Oh6GKaVXV7TAeickpkkZiNOgFcFcmLQ5lB/K0qBJL1FtRYltBfbGCQ==}
+
+ '@types/stats.js@0.17.3':
+ resolution: {integrity: sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==}
+
+ '@types/three@0.166.0':
+ resolution: {integrity: sha512-FHMnpcdhdbdOOIYbfkTkUVpYMW53odxbTRwd0/xJpYnTzEsjnVnondGAvHZb4z06UW0vo6WPVuvH0/9qrxKx7g==}
+
+ '@types/url-join@4.0.3':
+ resolution: {integrity: sha512-3l1qMm3wqO0iyC5gkADzT95UVW7C/XXcdvUcShOideKF0ddgVRErEQQJXBd2kvQm+aSgqhBGHGB38TgMeT57Ww==}
+
+ '@types/web-bluetooth@0.0.16':
+ resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
+
+ '@types/webxr@0.5.20':
+ resolution: {integrity: sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==}
+
+ '@vitejs/plugin-vue@https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz':
+ resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==, tarball: https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz}
+ version: 3.2.0
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^3.0.0
+ vue: ^3.2.25
+
+ '@volar/language-core@https://registry.npmmirror.com/@volar/language-core/-/language-core-1.0.11.tgz':
+ resolution: {integrity: sha512-YwUYKxIyDc+Fq3kQ6BGGfkrKCG5JzE2Yr6vMxrxEXW2rg/gsq3JgMk/4sI8ybRsaTirhCB4V8+AIVYsvcRxgig==, tarball: https://registry.npmmirror.com/@volar/language-core/-/language-core-1.0.11.tgz}
+ version: 1.0.11
+
+ '@volar/source-map@https://registry.npmmirror.com/@volar/source-map/-/source-map-1.0.11.tgz':
+ resolution: {integrity: sha512-tkuV9MD+OuiZfHA0qZXrPdW6F7TvnpnuTan6Qe7UGUs9+sflezlMJdjaYdGgQObfP+06pcT1E3xdkOoi08ZyyQ==, tarball: https://registry.npmmirror.com/@volar/source-map/-/source-map-1.0.11.tgz}
+ version: 1.0.11
+
+ '@volar/typescript@https://registry.npmmirror.com/@volar/typescript/-/typescript-1.0.11.tgz':
+ resolution: {integrity: sha512-mq7wDDAs0Eb43jev2FxbowuiwWqvL3kb+tar1we8VQbdabpyQ5dmbWPwo/IglevMmW3SKo1Et+6rqAeZpXNnPQ==, tarball: https://registry.npmmirror.com/@volar/typescript/-/typescript-1.0.11.tgz}
+ version: 1.0.11
+
+ '@volar/vue-language-core@https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.0.11.tgz':
+ resolution: {integrity: sha512-A3ODs0/ua7BcpSSnE7KtO8bzWsYsbOJRyW2Q/2uktxlfHj8srln3JdgK/mNlIgfnWtACbE5K+EfMJOgJKv864A==, tarball: https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.0.11.tgz}
+ version: 1.0.11
+
+ '@volar/vue-typescript@https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.0.11.tgz':
+ resolution: {integrity: sha512-jlnFPvBcTyPiAbGlgjhKK7fp3Q+Z7Z5eU1NTbTSS0lQC8Gog3sh2UxLAFG5Voe1gHIxasoOEPXzMR0CWF4bKbA==, tarball: https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.0.11.tgz}
+ version: 1.0.11
+
+ '@vue/compiler-core@3.5.12':
+ resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==}
+
+ '@vue/compiler-core@https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz':
+ resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==, tarball: https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz}
+ version: 3.2.45
+
+ '@vue/compiler-dom@3.5.12':
+ resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==}
+
+ '@vue/compiler-dom@https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz':
+ resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==, tarball: https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz}
+ version: 3.2.45
+
+ '@vue/compiler-sfc@3.5.12':
+ resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==}
+
+ '@vue/compiler-sfc@https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz':
+ resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==, tarball: https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz}
+ version: 3.2.45
+
+ '@vue/compiler-ssr@3.5.12':
+ resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==}
+
+ '@vue/compiler-ssr@https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz':
+ resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==, tarball: https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz}
+ version: 3.2.45
+
+ '@vue/devtools-api@6.4.5':
+ resolution: {integrity: sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==}
+
+ '@vue/devtools-api@6.6.4':
+ resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
+
+ '@vue/reactivity-transform@https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz':
+ resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==, tarball: https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz}
+ version: 3.2.45
+
+ '@vue/reactivity@3.5.12':
+ resolution: {integrity: sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==}
+
+ '@vue/reactivity@https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz':
+ resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==, tarball: https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz}
+ version: 3.2.45
+
+ '@vue/runtime-core@3.5.12':
+ resolution: {integrity: sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==}
+
+ '@vue/runtime-dom@3.5.12':
+ resolution: {integrity: sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==}
+
+ '@vue/server-renderer@3.5.12':
+ resolution: {integrity: sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==}
+ version: 3.5.12
+ peerDependencies:
+ vue: 3.5.12
+
+ '@vue/shared@3.5.12':
+ resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==}
+
+ '@vue/shared@https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz':
+ resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==, tarball: https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz}
+ version: 3.2.45
+
+ '@vueuse/core@9.13.0':
+ resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==}
+ version: 9.13.0
+
+ '@vueuse/metadata@9.13.0':
+ resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==}
+
+ '@vueuse/shared@9.13.0':
+ resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==}
+ version: 9.13.0
+
+ abbrev@1.1.1:
+ resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
+
+ accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+
+ acorn-dynamic-import@4.0.0:
+ resolution: {integrity: sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==}
+ deprecated: This is probably built in to whatever tool you're using. If you still need it... idk
+ peerDependencies:
+ acorn: ^6.0.0
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn@6.4.2:
+ resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ acorn@8.13.0:
+ resolution: {integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ agent-base@6.0.2:
+ resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
+ engines: {node: '>= 6.0.0'}
+
+ ajv@8.17.1:
+ resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ anymatch@https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, tarball: https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz}
+ version: 3.1.3
+ engines: {node: '>= 8'}
+
+ aproba@2.0.0:
+ resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
+
+ are-we-there-yet@2.0.0:
+ resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==}
+ engines: {node: '>=10'}
+ deprecated: This package is no longer supported.
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+ aria-query@5.3.2:
+ resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
+ engines: {node: '>= 0.4'}
+
+ array-bounds@1.0.1:
+ resolution: {integrity: sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ==}
+
+ array-normalize@1.1.4:
+ resolution: {integrity: sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg==}
+
+ array-timsort@https://registry.npmmirror.com/array-timsort/-/array-timsort-1.0.3.tgz:
+ resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==, tarball: https://registry.npmmirror.com/array-timsort/-/array-timsort-1.0.3.tgz}
+ version: 1.0.3
+
+ async-validator@4.2.5:
+ resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ atom-material-icons@3.0.0:
+ resolution: {integrity: sha512-qtMR5KxQh82iLIFOdrQZViq21GTNT+/mccrVAg41hIlrhpwHAEjCeGj91Iyas9GL28ld0D0hagHv6ipGWlLZHw==}
+
+ attr-accept@2.2.2:
+ resolution: {integrity: sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==}
+ engines: {node: '>=4'}
+
+ axios@1.7.7:
+ resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==}
+
+ axobject-query@4.1.0:
+ resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
+ engines: {node: '>= 0.4'}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ balanced-match@https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz}
+ version: 1.0.2
+
+ binary-extensions@https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz:
+ resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, tarball: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz}
+ version: 2.2.0
+ engines: {node: '>=8'}
+
+ binary-search-bounds@2.0.5:
+ resolution: {integrity: sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==}
+
+ boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+
+ brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+ brace-expansion@https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz}
+ version: 2.0.1
+
+ braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+
+ braces@https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, tarball: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz}
+ version: 3.0.2
+ engines: {node: '>=8'}
+
+ buble@0.19.8:
+ resolution: {integrity: sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA==}
+ hasBin: true
+
+ bubleify@1.2.1:
+ resolution: {integrity: sha512-vp3NHmaQVoKaKWvi15FTMinPNjfp+47+/kFJ9ifezdMF/CBLArCxDVUh+FQE3qRxCRj1qyjJqilTBHHqlM8MaQ==}
+ engines: {node: '>=4.0.0'}
+
+ bytes@3.0.0:
+ resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
+ engines: {node: '>= 0.8'}
+
+ chalk@2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+
+ charenc@0.0.2:
+ resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==}
+
+ chart.js@4.4.5:
+ resolution: {integrity: sha512-CVVjg1RYTJV9OCC8WeJPMx8gsV8K6WIyIEQUE3ui4AR9Hfgls9URri6Ja3hyMVBbTF8Q2KFa19PE815gWcWhng==}
+ engines: {pnpm: '>=8'}
+
+ chartjs-adapter-date-fns@3.0.0:
+ resolution: {integrity: sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==}
+ peerDependencies:
+ chart.js: '>=2.8.0'
+ date-fns: '>=2.0.0'
+
+ chokidar@4.0.1:
+ resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==}
+ engines: {node: '>= 14.16.0'}
+
+ chokidar@https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz}
+ version: 3.5.3
+ engines: {node: '>= 8.10.0'}
+
+ chownr@2.0.0:
+ resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
+ engines: {node: '>=10'}
+
+ clamp@1.0.1:
+ resolution: {integrity: sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==}
+
+ clipboard@2.0.11:
+ resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==}
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ code-red@1.0.4:
+ resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
+
+ codemirror-wrapped-line-indent@1.0.8:
+ resolution: {integrity: sha512-5UwuHCz4oAZuvot1DbfFxSxJacTESdNGa/KpJD7HfpVpDAJdgB1vV9OG4b4pkJqPWuOfIpFLTQEKS85kTpV+XA==}
+ peerDependencies:
+ '@codemirror/language': ^6.9.0
+ '@codemirror/state': ^6.2.1
+ '@codemirror/view': ^6.17.1
+
+ color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ color-support@1.1.3:
+ resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
+ hasBin: true
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ commander@1.1.1:
+ resolution: {integrity: sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==}
+ engines: {node: '>= 0.6.x'}
+
+ commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+
+ commander@9.5.0:
+ resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
+ engines: {node: ^12.20.0 || >=14}
+
+ comment-json@https://registry.npmmirror.com/comment-json/-/comment-json-4.2.3.tgz:
+ resolution: {integrity: sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==, tarball: https://registry.npmmirror.com/comment-json/-/comment-json-4.2.3.tgz}
+ version: 4.2.3
+ engines: {node: '>= 6'}
+
+ compressible@2.0.18:
+ resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
+ engines: {node: '>= 0.6'}
+
+ compression@1.7.4:
+ resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==}
+ engines: {node: '>= 0.8.0'}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ consola@https://registry.npmmirror.com/consola/-/consola-2.15.3.tgz:
+ resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==, tarball: https://registry.npmmirror.com/consola/-/consola-2.15.3.tgz}
+ version: 2.15.3
+
+ console-clear@1.1.1:
+ resolution: {integrity: sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==}
+ engines: {node: '>=4'}
+
+ console-control-strings@1.1.0:
+ resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
+
+ core-js@3.38.1:
+ resolution: {integrity: sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==}
+
+ core-util-is@https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, tarball: https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz}
+ version: 1.0.3
+
+ crawlab-ui@0.7.0-rc3:
+ resolution: {integrity: sha512-WF7DLjrXa0J3uY/u7iTtZyqbhCIHZaW2K5dWHMj28GCaT69uvPRR32AfZPWag5sarqXdOmKNSOt5NidAPKqKpQ==}
+ peerDependencies:
+ '@element-plus/icons-vue': ^2.3.1
+ '@fortawesome/fontawesome-common-types': ^6.5.2
+ '@fortawesome/fontawesome-svg-core': ^6.5.2
+ '@fortawesome/free-brands-svg-icons': ^6.5.2
+ '@fortawesome/free-regular-svg-icons': ^6.5.2
+ '@fortawesome/free-solid-svg-icons': ^6.5.2
+ '@fortawesome/vue-fontawesome': ^3.0.8
+ '@lexical/code': ^0.16.1
+ '@lexical/history': ^0.16.1
+ '@lexical/html': ^0.16.1
+ '@lexical/link': ^0.16.1
+ '@lexical/list': ^0.16.1
+ '@lexical/markdown': ^0.16.1
+ '@lexical/rich-text': ^0.16.1
+ '@lexical/selection': ^0.16.1
+ '@lexical/table': ^0.16.1
+ '@lexical/text': ^0.16.1
+ '@lexical/utils': ^0.16.1
+ '@popperjs/core': ^2.11.8
+ '@types/getos': ^3.0.4
+ '@types/humanize-duration': ^3.27.4
+ '@types/javascript-time-ago': ^2.0.8
+ '@types/lodash': ^4.17.6
+ '@types/md5': ^2.3.5
+ '@types/pinyin': ^2.10.2
+ '@types/showdown': ^2.0.6
+ '@types/three': ^0.166.0
+ '@types/url-join': ^4.0.3
+ async-validator: ^4.2.5
+ atom-material-icons: ^3.0.0
+ axios: ^1.7.2
+ chart.js: ^4.4.3
+ chartjs-adapter-date-fns: ^3.0.0
+ clipboard: ^2.0.11
+ core-js: ^3.37.1
+ crawlab-vue3-dropzone: 3.0.3
+ cron-parser: ^4.9.0
+ cronstrue: ^2.50.0
+ dayjs: ^1.11.11
+ element-plus: ^2.7.6
+ font-awesome: ^4.7.0
+ humanize-duration: ^3.32.1
+ javascript-time-ago: ^2.5.10
+ lexical: ^0.16.1
+ lodash: ^4.17.21
+ md5: ^2.3.0
+ mitt: ^3.0.1
+ monaco-editor: ^0.50.0
+ normalize.css: ^8.0.1
+ os-name: ^5.0.1
+ pinyin: ^2.10.2
+ point-cluster: ^3.1.8
+ prismjs: ^1.29.0
+ showdown: ^2.1.0
+ three: ^0.166.1
+ tiny-invariant: ^1.3.3
+ url-join: ^4.0.1
+ url-regex: ^5.0.0
+ vite-svg-loader: ^5.1.0
+ vue: ^3.4
+ vue-chartjs: ^5.3.1
+ vue-clipboard3: ^2.0.0
+ vue-i18n: 9.13.1
+ vue-router: ^4.4.0
+ vuex: ^4.1.0
+
+ crawlab-vue3-dropzone@3.0.3:
+ resolution: {integrity: sha512-s/GHSTteFqJcMk14Xkp1imwEyrOCa+uwwH1eCsTAxVzaYocpiDpbDjQ3u3vrMyws9InsqqgtmAJhy2vGHEsk/Q==}
+ version: 3.0.3
+ peerDependencies:
+ vue: '>=3.2.45'
+
+ crelt@1.0.6:
+ resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
+
+ cron-parser@4.9.0:
+ resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==}
+ engines: {node: '>=12.0.0'}
+
+ cronstrue@2.50.0:
+ resolution: {integrity: sha512-ULYhWIonJzlScCCQrPUG5uMXzXxSixty4djud9SS37DoNxDdkeRocxzHuAo4ImRBUK+mAuU5X9TSwEDccnnuPg==}
+ hasBin: true
+
+ cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+
+ crypt@0.0.2:
+ resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==}
+
+ css-select@5.1.0:
+ resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+
+ css-tree@2.2.1:
+ resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+ css-tree@2.3.1:
+ resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+
+ css-what@6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+ engines: {node: '>= 6'}
+
+ csso@5.0.5:
+ resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+ csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+ date-fns@4.1.0:
+ resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
+
+ dayjs@1.11.13:
+ resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
+
+ de-indent@https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==, tarball: https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz}
+ version: 1.0.2
+
+ debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ define-lazy-prop@2.0.0:
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
+
+ defined@1.0.1:
+ resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ delegate@3.2.0:
+ resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==}
+
+ delegates@1.0.0:
+ resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
+
+ detect-libc@1.0.3:
+ resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+
+ detect-libc@2.0.1:
+ resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==}
+ engines: {node: '>=8'}
+
+ diff-sequences@29.6.3:
+ resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+ domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+
+ domutils@3.1.0:
+ resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
+
+ dtype@2.0.0:
+ resolution: {integrity: sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==}
+ engines: {node: '>= 0.8.0'}
+
+ element-plus@2.8.5:
+ resolution: {integrity: sha512-Px+kPbRTVvn5oa5+9saa7QEOnUweKXm0JVI7yJHzKF/doQGixwcFMsQEF2+3Fy62EA/7dRRKVuhsNGGZYNk3cw==}
+ version: 2.8.5
+ peerDependencies:
+ vue: ^3.2.0
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ esbuild-android-64@0.15.16:
+ resolution: {integrity: sha512-Vwkv/sT0zMSgPSVO3Jlt1pUbnZuOgtOQJkJkyyJFAlLe7BiT8e9ESzo0zQSx4c3wW4T6kGChmKDPMbWTgtliQA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ esbuild-android-arm64@0.15.16:
+ resolution: {integrity: sha512-lqfKuofMExL5niNV3gnhMUYacSXfsvzTa/58sDlBET/hCOG99Zmeh+lz6kvdgvGOsImeo6J9SW21rFCogNPLxg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ esbuild-darwin-64@0.15.16:
+ resolution: {integrity: sha512-wo2VWk/n/9V2TmqUZ/KpzRjCEcr00n7yahEdmtzlrfQ3lfMCf3Wa+0sqHAbjk3C6CKkR3WKK/whkMq5Gj4Da9g==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ esbuild-darwin-arm64@0.15.16:
+ resolution: {integrity: sha512-fMXaUr5ou0M4WnewBKsspMtX++C1yIa3nJ5R2LSbLCfJT3uFdcRoU/NZjoM4kOMKyOD9Sa/2vlgN8G07K3SJnw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ esbuild-freebsd-64@0.15.16:
+ resolution: {integrity: sha512-UzIc0xlRx5x9kRuMr+E3+hlSOxa/aRqfuMfiYBXu2jJ8Mzej4lGL7+o6F5hzhLqWfWm1GWHNakIdlqg1ayaTNQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ esbuild-freebsd-arm64@0.15.16:
+ resolution: {integrity: sha512-8xyiYuGc0DLZphFQIiYaLHlfoP+hAN9RHbE+Ibh8EUcDNHAqbQgUrQg7pE7Bo00rXmQ5Ap6KFgcR0b4ALZls1g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ esbuild-linux-32@0.15.16:
+ resolution: {integrity: sha512-iGijUTV+0kIMyUVoynK0v+32Oi8yyp0xwMzX69GX+5+AniNy/C/AL1MjFTsozRp/3xQPl7jVux/PLe2ds10/2w==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ esbuild-linux-64@0.15.16:
+ resolution: {integrity: sha512-tuSOjXdLw7VzaUj89fIdAaQT7zFGbKBcz4YxbWrOiXkwscYgE7HtTxUavreBbnRkGxKwr9iT/gmeJWNm4djy/g==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ esbuild-linux-arm64@0.15.16:
+ resolution: {integrity: sha512-mPYksnfHnemNrvjrDhZyixL/AfbJN0Xn9S34ZOHYdh6/jJcNd8iTsv3JwJoEvTJqjMggjMhGUPJAdjnFBHoH8A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ esbuild-linux-arm@0.15.16:
+ resolution: {integrity: sha512-XKcrxCEXDTOuoRj5l12tJnkvuxXBMKwEC5j0JISw3ziLf0j4zIwXbKbTmUrKFWbo6ZgvNpa7Y5dnbsjVvH39bQ==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ esbuild-linux-mips64le@0.15.16:
+ resolution: {integrity: sha512-kSJO2PXaxfm0pWY39+YX+QtpFqyyrcp0ZeI8QPTrcFVQoWEPiPVtOfTZeS3ZKedfH+Ga38c4DSzmKMQJocQv6A==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ esbuild-linux-ppc64le@0.15.16:
+ resolution: {integrity: sha512-NimPikwkBY0yGABw6SlhKrtT35sU4O23xkhlrTT/O6lSxv3Pm5iSc6OYaqVAHWkLdVf31bF4UDVFO+D990WpAA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ esbuild-linux-riscv64@0.15.16:
+ resolution: {integrity: sha512-ty2YUHZlwFOwp7pR+J87M4CVrXJIf5ZZtU/umpxgVJBXvWjhziSLEQxvl30SYfUPq0nzeWKBGw5i/DieiHeKfw==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ esbuild-linux-s390x@0.15.16:
+ resolution: {integrity: sha512-VkZaGssvPDQtx4fvVdZ9czezmyWyzpQhEbSNsHZZN0BHvxRLOYAQ7sjay8nMQwYswP6O2KlZluRMNPYefFRs+w==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ esbuild-netbsd-64@0.15.16:
+ resolution: {integrity: sha512-ElQ9rhdY51et6MJTWrCPbqOd/YuPowD7Cxx3ee8wlmXQQVW7UvQI6nSprJ9uVFQISqSF5e5EWpwWqXZsECLvXg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ esbuild-openbsd-64@0.15.16:
+ resolution: {integrity: sha512-KgxMHyxMCT+NdLQE1zVJEsLSt2QQBAvJfmUGDmgEq8Fvjrf6vSKB00dVHUEDKcJwMID6CdgCpvYNt999tIYhqA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ esbuild-sunos-64@0.15.16:
+ resolution: {integrity: sha512-exSAx8Phj7QylXHlMfIyEfNrmqnLxFqLxdQF6MBHPdHAjT7fsKaX6XIJn+aQEFiOcE4X8e7VvdMCJ+WDZxjSRQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ esbuild-windows-32@0.15.16:
+ resolution: {integrity: sha512-zQgWpY5pUCSTOwqKQ6/vOCJfRssTvxFuEkpB4f2VUGPBpdddZfdj8hbZuFRdZRPIVHvN7juGcpgCA/XCF37mAQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ esbuild-windows-64@0.15.16:
+ resolution: {integrity: sha512-HjW1hHRLSncnM3MBCP7iquatHVJq9l0S2xxsHHj4yzf4nm9TU4Z7k4NkeMlD/dHQ4jPlQQhwcMvwbJiOefSuZw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ esbuild-windows-arm64@0.15.16:
+ resolution: {integrity: sha512-oCcUKrJaMn04Vxy9Ekd8x23O8LoU01+4NOkQ2iBToKgnGj5eo1vU9i27NQZ9qC8NFZgnQQZg5oZWAejmbsppNA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ esbuild@https://registry.npmmirror.com/esbuild/-/esbuild-0.15.16.tgz:
+ resolution: {integrity: sha512-o6iS9zxdHrrojjlj6pNGC2NAg86ECZqIETswTM5KmJitq+R1YmahhWtMumeQp9lHqJaROGnsBi2RLawGnfo5ZQ==, tarball: https://registry.npmmirror.com/esbuild/-/esbuild-0.15.16.tgz}
+ version: 0.15.16
+ engines: {node: '>=12'}
+ hasBin: true
+
+ escalade@3.1.1:
+ resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
+ engines: {node: '>=6'}
+
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ esprima@https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, tarball: https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz}
+ version: 4.0.1
+ engines: {node: '>=4'}
+ hasBin: true
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ estree-walker@https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, tarball: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz}
+ version: 2.0.2
+
+ execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-glob@https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz:
+ resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==, tarball: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz}
+ version: 3.2.12
+ engines: {node: '>=8.6.0'}
+
+ fast-uri@3.0.3:
+ resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==}
+
+ fastq@https://registry.npmmirror.com/fastq/-/fastq-1.14.0.tgz:
+ resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==, tarball: https://registry.npmmirror.com/fastq/-/fastq-1.14.0.tgz}
+ version: 1.14.0
+
+ fflate@0.8.2:
+ resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
+
+ file-selector@0.2.4:
+ resolution: {integrity: sha512-ZDsQNbrv6qRi1YTDOEWzf5J2KjZ9KMI1Q2SGeTkCJmNNW25Jg4TW4UMcmoqcg4WrAyKRcpBXdbWRxkfrOzVRbA==}
+ engines: {node: '>= 10'}
+
+ fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+
+ fill-range@https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, tarball: https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz}
+ version: 7.0.1
+ engines: {node: '>=8'}
+
+ flatten-vertex-data@1.0.2:
+ resolution: {integrity: sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==}
+
+ follow-redirects@1.15.9:
+ resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ font-awesome@4.7.0:
+ resolution: {integrity: sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==}
+ engines: {node: '>=0.10.3'}
+
+ form-data@4.0.1:
+ resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==}
+ engines: {node: '>= 6'}
+
+ fs-minipass@2.1.0:
+ resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
+ engines: {node: '>= 8'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.2:
+ resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz:
+ resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz}
+ version: 1.1.1
+
+ gauge@3.0.2:
+ resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==}
+ engines: {node: '>=10'}
+ deprecated: This package is no longer supported.
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-port@3.2.0:
+ resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==}
+ engines: {node: '>=4'}
+
+ get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+
+ glob-parent@https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, tarball: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz}
+ version: 5.1.2
+ engines: {node: '>= 6'}
+
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ good-listener@1.2.2:
+ resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==}
+
+ has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+
+ has-own-prop@https://registry.npmmirror.com/has-own-prop/-/has-own-prop-2.0.0.tgz:
+ resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==, tarball: https://registry.npmmirror.com/has-own-prop/-/has-own-prop-2.0.0.tgz}
+ version: 2.0.0
+ engines: {node: '>=8'}
+
+ has-unicode@2.0.1:
+ resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
+
+ has@https://registry.npmmirror.com/has/-/has-1.0.3.tgz:
+ resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, tarball: https://registry.npmmirror.com/has/-/has-1.0.3.tgz}
+ version: 1.0.3
+ engines: {node: '>= 0.4.0'}
+
+ he@https://registry.npmmirror.com/he/-/he-1.2.0.tgz:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, tarball: https://registry.npmmirror.com/he/-/he-1.2.0.tgz}
+ version: 1.2.0
+ hasBin: true
+
+ https-proxy-agent@5.0.1:
+ resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
+ engines: {node: '>= 6'}
+
+ human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+
+ humanize-duration@3.32.1:
+ resolution: {integrity: sha512-inh5wue5XdfObhu/IGEMiA1nUXigSGcaKNemcbLRKa7jXYGDZXr3LoT9pTIzq2hPEbld7w/qv9h+ikWGz8fL1g==}
+
+ immutable-json-patch@6.0.1:
+ resolution: {integrity: sha512-BHL/cXMjwFZlTOffiWNdY8ZTvNyYLrutCnWxrcKPHr5FqpAb6vsO6WWSPnVSys3+DruFN6lhHJJPHi8uELQL5g==}
+
+ immutable@4.3.7:
+ resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ ip-regex@4.3.0:
+ resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==}
+ engines: {node: '>=8'}
+
+ is-binary-path@https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, tarball: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz}
+ version: 2.1.0
+ engines: {node: '>=8'}
+
+ is-buffer@1.1.6:
+ resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
+
+ is-core-module@https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz:
+ resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==, tarball: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz}
+ version: 2.11.0
+
+ is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-extglob@https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, tarball: https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz}
+ version: 2.1.1
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-glob@https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, tarball: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz}
+ version: 4.0.3
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-number@https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, tarball: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz}
+ version: 7.0.0
+ engines: {node: '>=0.12.0'}
+
+ is-obj@1.0.1:
+ resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==}
+ engines: {node: '>=0.10.0'}
+
+ is-reference@3.0.1:
+ resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==}
+
+ is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
+ is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ javascript-time-ago@2.5.11:
+ resolution: {integrity: sha512-Zeyf5R7oM1fSMW9zsU3YgAYwE0bimEeF54Udn2ixGd8PUwu+z1Yc5t4Y8YScJDMHD6uCx6giLt3VJR5K4CMwbg==}
+
+ jmespath@0.16.0:
+ resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==}
+ engines: {node: '>= 0.6.0'}
+
+ js-yaml@3.14.1:
+ resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
+ hasBin: true
+
+ jsep@1.3.9:
+ resolution: {integrity: sha512-i1rBX5N7VPl0eYb6+mHNp52sEuaS2Wi8CDYx1X5sn9naevL78+265XJqy1qENEk7mRKwS06NHpUqiBwR7qeodw==}
+ engines: {node: '>= 10.16.0'}
+
+ jsesc@0.5.0:
+ resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
+ hasBin: true
+
+ json-editor-vue@0.17.2:
+ resolution: {integrity: sha512-P38IvEwQJe4IHFpZe1YG2CWOK6pCjeHmPu2tLs01IiV0kz8QBoHYC7N5ZORlGTL4tQFVOosmnI1gjXztywHtig==}
+ version: 0.17.2
+ peerDependencies:
+ '@vue/composition-api': '>=1'
+ vue: 2||3
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
+ json-source-map@0.6.1:
+ resolution: {integrity: sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==}
+
+ jsonpath-plus@10.0.1:
+ resolution: {integrity: sha512-30DeH2QD4nL1IpDLPIFz09G5XyLvh+oNMUI2Zxf4tbrlsVHs0e3VPnwpOnSTFb4yM0dfQK2WGKLsSaAS8V62rw==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
+ jsonrepair@3.8.1:
+ resolution: {integrity: sha512-5wnjaO53EJOhfLFY92nvBz2B9gqF9ql/D4HKUb1WOSBaqtVcAifFfmurblnhCJn/ySqKFA8U3n7nhGMAu/hEjQ==}
+ hasBin: true
+
+ keypress@0.1.0:
+ resolution: {integrity: sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA==}
+
+ kleur@3.0.3:
+ resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
+ engines: {node: '>=6'}
+
+ lexical@0.16.1:
+ resolution: {integrity: sha512-+R05d3+N945OY8pTUjTqQrWoApjC+ctzvjnmNETtx9WmVAaiW0tQVG+AYLt5pDGY8dQXtd4RPorvnxBTECt9SA==}
+
+ local-access@1.1.0:
+ resolution: {integrity: sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==}
+ engines: {node: '>=6'}
+
+ locate-character@3.0.0:
+ resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
+
+ lodash-es@4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+
+ lodash-unified@1.0.3:
+ resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==}
+ peerDependencies:
+ '@types/lodash-es': '*'
+ lodash: '*'
+ lodash-es: '*'
+
+ lodash._reinterpolate@3.0.0:
+ resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==}
+
+ lodash.template@4.5.0:
+ resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==}
+
+ lodash.templatesettings@4.2.0:
+ resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+
+ luxon@3.5.0:
+ resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==}
+ engines: {node: '>=12'}
+
+ macos-release@3.1.0:
+ resolution: {integrity: sha512-/M/R0gCDgM+Cv1IuBG1XGdfTFnMEG6PZeT+KGWHO/OG+imqmaD9CH5vHBTycEM3+Kc4uG2Il+tFAuUWLqQOeUA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ magic-string@0.25.9:
+ resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
+
+ magic-string@0.30.1:
+ resolution: {integrity: sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==}
+ engines: {node: '>=12'}
+
+ magic-string@0.30.12:
+ resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==}
+
+ magic-string@https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz:
+ resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==, tarball: https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz}
+ version: 0.25.9
+
+ make-dir@3.1.0:
+ resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
+ engines: {node: '>=8'}
+
+ matchit@1.1.0:
+ resolution: {integrity: sha512-+nGYoOlfHmxe5BW5tE0EMJppXEwdSf8uBA1GTZC7Q77kbT35+VKLYJMzVNWCHSsga1ps1tPYFtFyvxvKzWVmMA==}
+ engines: {node: '>=6'}
+
+ math-log2@1.0.1:
+ resolution: {integrity: sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==}
+ engines: {node: '>=0.10.0'}
+
+ md5@2.3.0:
+ resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==}
+
+ mdn-data@2.0.28:
+ resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
+
+ mdn-data@2.0.30:
+ resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
+
+ memoize-one@6.0.0:
+ resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ merge2@https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, tarball: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz}
+ version: 1.4.1
+ engines: {node: '>= 8'}
+
+ meshoptimizer@0.18.1:
+ resolution: {integrity: sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==}
+
+ micromatch@4.0.5:
+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+ engines: {node: '>=8.6'}
+
+ micromatch@https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz:
+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, tarball: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz}
+ version: 4.0.5
+ engines: {node: '>=8.6'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@https://registry.npmmirror.com/minimatch/-/minimatch-5.1.1.tgz:
+ resolution: {integrity: sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g==, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-5.1.1.tgz}
+ version: 5.1.1
+ engines: {node: '>=10'}
+
+ minimist@1.2.7:
+ resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
+
+ minipass@3.3.6:
+ resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
+ engines: {node: '>=8'}
+
+ minizlib@2.1.2:
+ resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
+ engines: {node: '>= 8'}
+
+ mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
+
+ mkdirp@1.0.4:
+ resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ monaco-editor@0.50.0:
+ resolution: {integrity: sha512-8CclLCmrRRh+sul7C08BmPBP3P8wVWfBHomsTcndxg5NRCEPfu/mc2AGU8k37ajjDVXcXFc12ORAMUkmk+lkFA==}
+
+ mri@1.2.0:
+ resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
+ engines: {node: '>=4'}
+
+ mrmime@1.0.1:
+ resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
+ engines: {node: '>=10'}
+
+ ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
+ muggle-string@https://registry.npmmirror.com/muggle-string/-/muggle-string-0.1.0.tgz:
+ resolution: {integrity: sha512-Tr1knR3d2mKvvWthlk7202rywKbiOm4rVFLsfAaSIhJ6dt9o47W4S+JMtWhd/PW9Wrdew2/S2fSvhz3E2gkfEg==, tarball: https://registry.npmmirror.com/muggle-string/-/muggle-string-0.1.0.tgz}
+ version: 0.1.0
+
+ nanoid@3.3.7:
+ resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ nanoid@https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz:
+ resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==, tarball: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz}
+ version: 3.3.4
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ natural-compare-lite@1.4.0:
+ resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
+
+ negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+
+ node-addon-api@3.2.1:
+ resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==}
+
+ node-addon-api@7.1.1:
+ resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
+
+ node-fetch@2.6.7:
+ resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ nodejieba@2.5.2:
+ resolution: {integrity: sha512-ByskJvaBrQ2eV+5M0OeD80S5NKoGaHc9zi3Z/PTKl/95eac2YF8RmWduq9AknLpkQLrLAIcqurrtC6BzjpKwwg==}
+ engines: {node: '>= 10.20.0'}
+
+ nopt@5.0.0:
+ resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ normalize-path@https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, tarball: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz}
+ version: 3.0.0
+ engines: {node: '>=0.10.0'}
+
+ normalize-wheel-es@1.2.0:
+ resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==}
+
+ normalize.css@8.0.1:
+ resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==}
+
+ npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+
+ npmlog@5.0.1:
+ resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==}
+ deprecated: This package is no longer supported.
+
+ nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ on-headers@1.0.2:
+ resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
+ engines: {node: '>= 0.8'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ open@8.4.2:
+ resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+ engines: {node: '>=12'}
+
+ os-homedir@2.0.0:
+ resolution: {integrity: sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q==}
+ engines: {node: '>=0.10.0'}
+ deprecated: This is not needed anymore. Use `require('os').homedir()` instead.
+
+ os-name@5.0.1:
+ resolution: {integrity: sha512-0EQpaHUHq7olp2/YFUr+0vZi9tMpDTblHGz+Ch5RntKxiRXOAY0JOz1UlxhSjMSksHvkm13eD6elJj3M8Ht/kw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ parse-rect@1.2.0:
+ resolution: {integrity: sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-parse@https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, tarball: https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz}
+ version: 1.0.7
+
+ periscopic@3.1.0:
+ resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
+
+ pick-by-alias@1.2.0:
+ resolution: {integrity: sha512-ESj2+eBxhGrcA1azgHs7lARG5+5iLakc/6nlfbpjcLl00HuuUOIuORhYXN4D1HfvMSKuVtFQjAlnwi1JHEeDIw==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picocolors@https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz:
+ resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, tarball: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz}
+ version: 1.0.0
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, tarball: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz}
+ version: 2.3.1
+ engines: {node: '>=8.6'}
+
+ pinyin@2.11.2:
+ resolution: {integrity: sha512-tAWDBcowj09j/vLUjty98nVqrbTVNhutf1VcyID4p0sxTFPzRyXw7n7Ic0HQwBdWFIWrrDP8bYiT64gaT6h3gA==}
+ hasBin: true
+
+ point-cluster@3.1.8:
+ resolution: {integrity: sha512-7klIr45dpMeZuqjIK9+qBg3m2IhyZJNJkdqjJFw0Olq75FM8ojrTMjClVUrMjNYRVqtwztxCHH71Fyjhg+YwyQ==}
+
+ polka@0.5.2:
+ resolution: {integrity: sha512-FVg3vDmCqP80tOrs+OeNlgXYmFppTXdjD5E7I4ET1NjvtNmQrb1/mJibybKkb/d4NA7YWAr1ojxuhpL3FHqdlw==}
+
+ postcss@8.4.47:
+ resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ postcss@https://registry.npmmirror.com/postcss/-/postcss-8.4.19.tgz:
+ resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==, tarball: https://registry.npmmirror.com/postcss/-/postcss-8.4.19.tgz}
+ version: 8.4.19
+ engines: {node: ^10 || ^12 || >=14}
+
+ prismjs@1.29.0:
+ resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
+ engines: {node: '>=6'}
+
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+ queue-microtask@https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, tarball: https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz}
+ version: 1.2.3
+
+ readable-stream@3.6.0:
+ resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
+ engines: {node: '>= 6'}
+
+ readdirp@4.0.2:
+ resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==}
+ engines: {node: '>= 14.16.0'}
+
+ readdirp@https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz}
+ version: 3.6.0
+ engines: {node: '>=8.10.0'}
+
+ regenerate-unicode-properties@9.0.0:
+ resolution: {integrity: sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==}
+ engines: {node: '>=4'}
+
+ regenerate@1.4.2:
+ resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+
+ regexpu-core@4.8.0:
+ resolution: {integrity: sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==}
+ engines: {node: '>=4'}
+
+ regjsgen@0.5.2:
+ resolution: {integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==}
+
+ regjsparser@0.7.0:
+ resolution: {integrity: sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==}
+ hasBin: true
+
+ relative-time-format@1.1.6:
+ resolution: {integrity: sha512-aCv3juQw4hT1/P/OrVltKWLlp15eW1GRcwP1XdxHrPdZE9MtgqFpegjnTjLhi2m2WI9MT/hQQtE+tjEWG1hgkQ==}
+
+ repeat-string@https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz:
+ resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==, tarball: https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz}
+ version: 1.6.1
+ engines: {node: '>=0.10'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
+ resolve@https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz:
+ resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==, tarball: https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz}
+ version: 1.22.1
+ hasBin: true
+
+ reusify@https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, tarball: https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz}
+ version: 1.0.4
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+
+ rollup-plugin-external-globals@0.8.0:
+ resolution: {integrity: sha512-c65c7hPMCE//cLzC4dLVE25XkuHsBqSkZp+/5pvtZ1MFwqgQLRRkIfuCvI3PnI7Yj8HoXqYtdsRN9gYF5a4tVQ==}
+ peerDependencies:
+ rollup: ^2.25.0 || ^3.3.0
+
+ rollup-plugin-visualizer@5.9.2:
+ resolution: {integrity: sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A==}
+ engines: {node: '>=14'}
+ hasBin: true
+ peerDependencies:
+ rollup: 2.x || 3.x
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ rollup@3.26.2:
+ resolution: {integrity: sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==}
+ engines: {node: '>=14.18.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ rollup@https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz:
+ resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==, tarball: https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz}
+ version: 2.79.1
+ engines: {node: '>=10.0.0'}
+ hasBin: true
+
+ run-parallel@https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, tarball: https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz}
+ version: 1.2.0
+
+ sade@1.8.1:
+ resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
+ engines: {node: '>=6'}
+
+ safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ sass@1.80.1:
+ resolution: {integrity: sha512-9lBwDZ7j3y/1DKj5Ec249EVGo5CVpwnzIyIj+cqlCjKkApLnzsJ/l9SnV4YnORvW9dQwQN+gQvh/mFZ8CnDs7Q==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ select-dom@6.0.2:
+ resolution: {integrity: sha512-fnRexLCjOE1XtMiV0xGACx4GJFMs/eatOQM0LWL9lxWB8DJ/FeXO39ztqUh6dZCOdoFo/g6jGJIIqNWoMsNLPA==}
+
+ select@1.1.2:
+ resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==}
+
+ semiver@1.1.0:
+ resolution: {integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==}
+ engines: {node: '>=6'}
+
+ semver@6.3.0:
+ resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
+ hasBin: true
+
+ semver@7.3.8:
+ resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ set-blocking@2.0.0:
+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ showdown@2.1.0:
+ resolution: {integrity: sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==}
+ hasBin: true
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ sirv-cli@1.0.14:
+ resolution: {integrity: sha512-yyUTNr984ANKDloqepkYbBSqvx3buwYg2sQKPWjSU+IBia5loaoka2If8N9CMwt8AfP179cdEl7kYJ//iWJHjQ==}
+ engines: {node: '>= 10'}
+ hasBin: true
+
+ sirv@1.0.19:
+ resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==}
+ engines: {node: '>= 10'}
+
+ source-map-js@1.0.2:
+ resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
+ engines: {node: '>=0.10.0'}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ source-map-js@https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz:
+ resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, tarball: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz}
+ version: 1.0.2
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.7.4:
+ resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
+ engines: {node: '>= 8'}
+
+ source-map@https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, tarball: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz}
+ version: 0.6.1
+ engines: {node: '>=0.10.0'}
+
+ sourcemap-codec@1.4.8:
+ resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
+ deprecated: Please use @jridgewell/sourcemap-codec instead
+
+ sourcemap-codec@https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz:
+ resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==, tarball: https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz}
+ version: 1.4.8
+
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+
+ style-mod@4.1.2:
+ resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==}
+
+ supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+
+ supports-preserve-symlinks-flag@https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, tarball: https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz}
+ version: 1.0.0
+ engines: {node: '>= 0.4'}
+
+ svelte@4.2.19:
+ resolution: {integrity: sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==}
+ engines: {node: '>=16'}
+
+ svgo@3.3.2:
+ resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ tar@6.1.12:
+ resolution: {integrity: sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==}
+ engines: {node: '>=10'}
+
+ three@0.166.1:
+ resolution: {integrity: sha512-LtuafkKHHzm61AQA1be2MAYIw1IjmhOUxhBa0prrLpEMWbV7ijvxCRHjSgHPGp2493wLBzwKV46tA9nivLEgKg==}
+
+ tiny-emitter@2.1.0:
+ resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==}
+
+ tiny-invariant@1.3.3:
+ resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+
+ tinydate@1.3.0:
+ resolution: {integrity: sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==}
+ engines: {node: '>=4'}
+
+ tlds@1.255.0:
+ resolution: {integrity: sha512-tcwMRIioTcF/FcxLev8MJWxCp+GUALRhFEqbDoZrnowmKSGqPrl5pqS+Sut2m8BgJ6S4FExCSSpGffZ0Tks6Aw==}
+ hasBin: true
+
+ to-fast-properties@2.0.0:
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+ engines: {node: '>=4'}
+
+ to-fast-properties@https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz:
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, tarball: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz}
+ version: 2.0.0
+ engines: {node: '>=4'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ to-regex-range@https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, tarball: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz}
+ version: 5.0.1
+ engines: {node: '>=8.0'}
+
+ totalist@1.1.0:
+ resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==}
+ engines: {node: '>=6'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ trouter@2.0.1:
+ resolution: {integrity: sha512-kr8SKKw94OI+xTGOkfsvwZQ8mWoikZDd2n8XZHjJVZUARZT+4/VV6cacRS6CLsH9bNm+HFIPU1Zx4CnNnb4qlQ==}
+ engines: {node: '>=6'}
+
+ tslib@2.4.1:
+ resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
+
+ typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz:
+ resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==, tarball: https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz}
+ version: 4.9.3
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+
+ unicode-canonical-property-names-ecmascript@2.0.0:
+ resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
+ engines: {node: '>=4'}
+
+ unicode-match-property-ecmascript@2.0.0:
+ resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+ engines: {node: '>=4'}
+
+ unicode-match-property-value-ecmascript@2.1.0:
+ resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==}
+ engines: {node: '>=4'}
+
+ unicode-property-aliases-ecmascript@2.1.0:
+ resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
+ engines: {node: '>=4'}
+
+ url-join@4.0.1:
+ resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==}
+
+ url-regex@5.0.0:
+ resolution: {integrity: sha512-O08GjTiAFNsSlrUWfqF1jH0H1W3m35ZyadHrGv5krdnmPPoxP27oDTqux/579PtaroiSGm5yma6KT1mHFH6Y/g==}
+ engines: {node: '>=8'}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ uuid@10.0.0:
+ resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==}
+ hasBin: true
+
+ vanilla-jsoneditor@1.0.8:
+ resolution: {integrity: sha512-5tKODR6J3IbGoMeBv4DEEU/Dlam4bPunOarIJKfrd5xs4bUife59Lp8Psjf86Y8OAM9mvxkrwR275XsBnvtO9A==}
+
+ vanilla-picker@2.12.3:
+ resolution: {integrity: sha512-qVkT1E7yMbUsB2mmJNFmaXMWE2hF8ffqzMMwe9zdAikd8u2VfnsVY2HQcOUi2F38bgbxzlJBEdS1UUhOXdF9GQ==}
+
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
+ vite-aliases@https://registry.npmmirror.com/vite-aliases/-/vite-aliases-0.9.7.tgz:
+ resolution: {integrity: sha512-MiqZx5NJQDn/I7gYzovop8GzlEDYCxR3i3JCCNap5OWEfBmo4b+jIfpmal22IoBREgx1TtkmwRkHJCBUhnL6jA==, tarball: https://registry.npmmirror.com/vite-aliases/-/vite-aliases-0.9.7.tgz}
+ version: 0.9.7
+ engines: {node: '>=16.6.0', npm: '>=7.0.0'}
+
+ vite-plugin-dynamic-import@https://registry.npmmirror.com/vite-plugin-dynamic-import/-/vite-plugin-dynamic-import-1.2.4.tgz:
+ resolution: {integrity: sha512-R6spqDhDm8VxaUNyEkybh9PM262ReO8WXJ6rjtyJ/H8Y4b+pq2uM9Xz5DMu7N7OxUGlqo9HSzT3VjhpbySXrng==, tarball: https://registry.npmmirror.com/vite-plugin-dynamic-import/-/vite-plugin-dynamic-import-1.2.4.tgz}
+ version: 1.2.4
+
+ vite-plugin-externalize-deps@0.7.0:
+ resolution: {integrity: sha512-do2gPrR79Tm8UKcqsw3RTAtN4YO8GkVRBckWdJWINZ3Qdp3KN9S1oyUZxKszTB/iyg4zdOUweLOeBI8t86QVow==}
+ version: 0.7.0
+ peerDependencies:
+ vite: ^2.0.0 || ^3.0.0 || ^4.0.0
+
+ vite-svg-loader@5.1.0:
+ resolution: {integrity: sha512-M/wqwtOEjgb956/+m5ZrYT/Iq6Hax0OakWbokj8+9PXOnB7b/4AxESHieEtnNEy7ZpjsjYW1/5nK8fATQMmRxw==}
+ version: 5.1.0
+ peerDependencies:
+ vue: '>=3.2.13'
+
+ vite@https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz:
+ resolution: {integrity: sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==, tarball: https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz}
+ version: 3.2.4
+ engines: {node: ^14.18.0 || >=16.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': '>= 14'
+ less: '*'
+ sass: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ vue-chartjs@5.3.1:
+ resolution: {integrity: sha512-rZjqcHBxKiHrBl0CIvcOlVEBwRhpWAVf6rDU3vUfa7HuSRmGtCslc0Oc8m16oAVuk0erzc1FCtH1VCriHsrz+A==}
+ version: 5.3.1
+ peerDependencies:
+ chart.js: ^4.1.1
+ vue: ^3.0.0-0 || ^2.7.0
+
+ vue-clipboard3@2.0.0:
+ resolution: {integrity: sha512-Q9S7dzWGax7LN5iiSPcu/K1GGm2gcBBlYwmMsUc5/16N6w90cbKow3FnPmPs95sungns4yvd9/+JhbAznECS2A==}
+
+ vue-demi@0.14.10:
+ resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
+ version: 0.14.10
+ engines: {node: '>=12'}
+ hasBin: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+
+ vue-i18n@9.13.1:
+ resolution: {integrity: sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==}
+ version: 9.13.1
+ engines: {node: '>= 16'}
+ peerDependencies:
+ vue: ^3.0.0
+
+ vue-router@4.4.0:
+ resolution: {integrity: sha512-HB+t2p611aIZraV2aPSRNXf0Z/oLZFrlygJm+sZbdJaW6lcFqEDQwnzUBXn+DApw+/QzDU/I9TeWx9izEjTmsA==}
+ version: 4.4.0
+ peerDependencies:
+ vue: ^3.2.0
+
+ vue-template-compiler@https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz:
+ resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==, tarball: https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz}
+ version: 2.7.14
+
+ vue-tsc@https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.0.11.tgz:
+ resolution: {integrity: sha512-lj+6dEroPsE4wmQOPtjCzAf8x363Km5/tuEvMEoQaoRnzs9myBM46FNvCGIIPStYUGuaqF1W1bORmP2KDQEORA==, tarball: https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.0.11.tgz}
+ version: 1.0.11
+ hasBin: true
+ peerDependencies:
+ typescript: '*'
+
+ vue@3.5.12:
+ resolution: {integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==}
+ version: 3.5.12
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ vuex@4.1.0:
+ resolution: {integrity: sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==}
+ version: 4.1.0
+ peerDependencies:
+ vue: ^3.2.0
+
+ w3c-keyname@2.2.8:
+ resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ wide-align@1.1.5:
+ resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
+
+ windows-release@5.0.1:
+ resolution: {integrity: sha512-y1xFdFvdMiDXI3xiOhMbJwt1Y7dUxidha0CWPs1NgjZIjZANTcX7+7bMqNjuezhzb8s5JGEiBAbQjQQYYy7ulw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+snapshots:
+
+ '@ampproject/remapping@2.3.0':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@arr/every@1.0.1': {}
+
+ '@babel/helper-string-parser@7.25.7': {}
+
+ '@babel/helper-string-parser@https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz': {}
+
+ '@babel/helper-validator-identifier@7.25.7': {}
+
+ '@babel/helper-validator-identifier@https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz': {}
+
+ '@babel/parser@7.25.8':
+ dependencies:
+ '@babel/types': 7.25.8
+
+ '@babel/parser@https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz':
+ dependencies:
+ '@babel/types': https://registry.npmmirror.com/@babel/types/-/types-7.20.5.tgz
+
+ '@babel/types@7.25.8':
+ dependencies:
+ '@babel/helper-string-parser': 7.25.7
+ '@babel/helper-validator-identifier': 7.25.7
+ to-fast-properties: 2.0.0
+
+ '@babel/types@https://registry.npmmirror.com/@babel/types/-/types-7.20.5.tgz':
+ dependencies:
+ '@babel/helper-string-parser': https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz
+ '@babel/helper-validator-identifier': https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz
+ to-fast-properties: https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz
+
+ '@codemirror/autocomplete@6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)':
+ dependencies:
+ '@codemirror/language': 6.10.3
+ '@codemirror/state': 6.4.1
+ '@codemirror/view': 6.34.1
+ '@lezer/common': 1.2.3
+
+ '@codemirror/commands@6.7.0':
+ dependencies:
+ '@codemirror/language': 6.10.3
+ '@codemirror/state': 6.4.1
+ '@codemirror/view': 6.34.1
+ '@lezer/common': 1.2.3
+
+ '@codemirror/lang-json@6.0.1':
+ dependencies:
+ '@codemirror/language': 6.10.3
+ '@lezer/json': 1.0.2
+
+ '@codemirror/language@6.10.3':
+ dependencies:
+ '@codemirror/state': 6.4.1
+ '@codemirror/view': 6.34.1
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+ style-mod: 4.1.2
+
+ '@codemirror/lint@6.8.2':
+ dependencies:
+ '@codemirror/state': 6.4.1
+ '@codemirror/view': 6.34.1
+ crelt: 1.0.6
+
+ '@codemirror/search@6.5.6':
+ dependencies:
+ '@codemirror/state': 6.4.1
+ '@codemirror/view': 6.34.1
+ crelt: 1.0.6
+
+ '@codemirror/state@6.4.1': {}
+
+ '@codemirror/view@6.34.1':
+ dependencies:
+ '@codemirror/state': 6.4.1
+ style-mod: 4.1.2
+ w3c-keyname: 2.2.8
+
+ '@ctrl/tinycolor@3.4.1': {}
+
+ '@element-plus/icons-vue@2.3.1(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))':
+ dependencies:
+ vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+
+ '@esbuild/android-arm@0.15.16':
+ optional: true
+
+ '@esbuild/linux-loong64@0.15.16':
+ optional: true
+
+ '@floating-ui/core@1.6.8':
+ dependencies:
+ '@floating-ui/utils': 0.2.8
+
+ '@floating-ui/dom@1.6.11':
+ dependencies:
+ '@floating-ui/core': 1.6.8
+ '@floating-ui/utils': 0.2.8
+
+ '@floating-ui/utils@0.2.8': {}
+
+ '@fortawesome/fontawesome-common-types@6.6.0': {}
+
+ '@fortawesome/fontawesome-svg-core@6.6.0':
+ dependencies:
+ '@fortawesome/fontawesome-common-types': 6.6.0
+
+ '@fortawesome/free-brands-svg-icons@6.6.0':
+ dependencies:
+ '@fortawesome/fontawesome-common-types': 6.6.0
+
+ '@fortawesome/free-regular-svg-icons@6.6.0':
+ dependencies:
+ '@fortawesome/fontawesome-common-types': 6.6.0
+
+ '@fortawesome/free-solid-svg-icons@6.6.0':
+ dependencies:
+ '@fortawesome/fontawesome-common-types': 6.6.0
+
+ '@fortawesome/vue-fontawesome@3.0.8(@fortawesome/fontawesome-svg-core@6.6.0)(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))':
+ dependencies:
+ '@fortawesome/fontawesome-svg-core': 6.6.0
+ vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+
+ '@intlify/core-base@9.13.1':
+ dependencies:
+ '@intlify/message-compiler': 9.13.1
+ '@intlify/shared': 9.13.1
+
+ '@intlify/message-compiler@9.13.1':
+ dependencies:
+ '@intlify/shared': 9.13.1
+ source-map-js: 1.0.2
+
+ '@intlify/shared@9.13.1': {}
+
+ '@jridgewell/gen-mapping@0.3.5':
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/set-array@1.2.1': {}
+
+ '@jridgewell/sourcemap-codec@1.4.15': {}
+
+ '@jridgewell/sourcemap-codec@1.5.0': {}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ '@jsep-plugin/assignment@1.2.1(jsep@1.3.9)':
+ dependencies:
+ jsep: 1.3.9
+
+ '@jsep-plugin/regex@1.0.3(jsep@1.3.9)':
+ dependencies:
+ jsep: 1.3.9
+
+ '@jsonquerylang/jsonquery@3.1.1': {}
+
+ '@kurkle/color@0.3.2': {}
+
+ '@lexical/clipboard@0.16.1':
+ dependencies:
+ '@lexical/html': 0.16.1
+ '@lexical/list': 0.16.1
+ '@lexical/selection': 0.16.1
+ '@lexical/utils': 0.16.1
+ lexical: 0.16.1
+
+ '@lexical/code@0.16.1':
+ dependencies:
+ '@lexical/utils': 0.16.1
+ lexical: 0.16.1
+ prismjs: 1.29.0
+
+ '@lexical/history@0.16.1':
+ dependencies:
+ '@lexical/utils': 0.16.1
+ lexical: 0.16.1
+
+ '@lexical/html@0.16.1':
+ dependencies:
+ '@lexical/selection': 0.16.1
+ '@lexical/utils': 0.16.1
+ lexical: 0.16.1
+
+ '@lexical/link@0.16.1':
+ dependencies:
+ '@lexical/utils': 0.16.1
+ lexical: 0.16.1
+
+ '@lexical/list@0.16.1':
+ dependencies:
+ '@lexical/utils': 0.16.1
+ lexical: 0.16.1
+
+ '@lexical/markdown@0.16.1':
+ dependencies:
+ '@lexical/code': 0.16.1
+ '@lexical/link': 0.16.1
+ '@lexical/list': 0.16.1
+ '@lexical/rich-text': 0.16.1
+ '@lexical/text': 0.16.1
+ '@lexical/utils': 0.16.1
+ lexical: 0.16.1
+
+ '@lexical/rich-text@0.16.1':
+ dependencies:
+ '@lexical/clipboard': 0.16.1
+ '@lexical/selection': 0.16.1
+ '@lexical/utils': 0.16.1
+ lexical: 0.16.1
+
+ '@lexical/selection@0.16.1':
+ dependencies:
+ lexical: 0.16.1
+
+ '@lexical/table@0.16.1':
+ dependencies:
+ '@lexical/utils': 0.16.1
+ lexical: 0.16.1
+
+ '@lexical/text@0.16.1':
+ dependencies:
+ lexical: 0.16.1
+
+ '@lexical/utils@0.16.1':
+ dependencies:
+ '@lexical/list': 0.16.1
+ '@lexical/selection': 0.16.1
+ '@lexical/table': 0.16.1
+ lexical: 0.16.1
+
+ '@lezer/common@1.2.3': {}
+
+ '@lezer/highlight@1.2.1':
+ dependencies:
+ '@lezer/common': 1.2.3
+
+ '@lezer/json@1.0.2':
+ dependencies:
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+
+ '@lezer/lr@1.4.2':
+ dependencies:
+ '@lezer/common': 1.2.3
+
+ '@mapbox/node-pre-gyp@1.0.10':
+ dependencies:
+ detect-libc: 2.0.1
+ https-proxy-agent: 5.0.1
+ make-dir: 3.1.0
+ node-fetch: 2.6.7
+ nopt: 5.0.0
+ npmlog: 5.0.1
+ rimraf: 3.0.2
+ semver: 7.3.8
+ tar: 6.1.12
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+ optional: true
+
+ '@nodelib/fs.scandir@https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz':
+ dependencies:
+ '@nodelib/fs.stat': https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz
+ run-parallel: https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz
+
+ '@nodelib/fs.stat@https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz': {}
+
+ '@nodelib/fs.walk@https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz':
+ dependencies:
+ '@nodelib/fs.scandir': https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz
+ fastq: https://registry.npmmirror.com/fastq/-/fastq-1.14.0.tgz
+
+ '@parcel/watcher-android-arm64@2.4.1':
+ optional: true
+
+ '@parcel/watcher-darwin-arm64@2.4.1':
+ optional: true
+
+ '@parcel/watcher-darwin-x64@2.4.1':
+ optional: true
+
+ '@parcel/watcher-freebsd-x64@2.4.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm-glibc@2.4.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-glibc@2.4.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-musl@2.4.1':
+ optional: true
+
+ '@parcel/watcher-linux-x64-glibc@2.4.1':
+ optional: true
+
+ '@parcel/watcher-linux-x64-musl@2.4.1':
+ optional: true
+
+ '@parcel/watcher-win32-arm64@2.4.1':
+ optional: true
+
+ '@parcel/watcher-win32-ia32@2.4.1':
+ optional: true
+
+ '@parcel/watcher-win32-x64@2.4.1':
+ optional: true
+
+ '@parcel/watcher@2.4.1':
+ dependencies:
+ detect-libc: 1.0.3
+ is-glob: 4.0.3
+ micromatch: 4.0.5
+ node-addon-api: 7.1.1
+ optionalDependencies:
+ '@parcel/watcher-android-arm64': 2.4.1
+ '@parcel/watcher-darwin-arm64': 2.4.1
+ '@parcel/watcher-darwin-x64': 2.4.1
+ '@parcel/watcher-freebsd-x64': 2.4.1
+ '@parcel/watcher-linux-arm-glibc': 2.4.1
+ '@parcel/watcher-linux-arm64-glibc': 2.4.1
+ '@parcel/watcher-linux-arm64-musl': 2.4.1
+ '@parcel/watcher-linux-x64-glibc': 2.4.1
+ '@parcel/watcher-linux-x64-musl': 2.4.1
+ '@parcel/watcher-win32-arm64': 2.4.1
+ '@parcel/watcher-win32-ia32': 2.4.1
+ '@parcel/watcher-win32-x64': 2.4.1
+
+ '@polka/url@0.5.0': {}
+
+ '@polka/url@1.0.0-next.21': {}
+
+ '@popperjs/core@2.11.8': {}
+
+ '@replit/codemirror-indentation-markers@6.5.3(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
+ dependencies:
+ '@codemirror/language': 6.10.3
+ '@codemirror/state': 6.4.1
+ '@codemirror/view': 6.34.1
+
+ '@rollup/pluginutils@5.0.2(rollup@3.26.2)':
+ dependencies:
+ '@types/estree': 1.0.0
+ estree-walker: 2.0.2
+ picomatch: 2.3.1
+ optionalDependencies:
+ rollup: 3.26.2
+
+ '@sphinxxxx/color-conversion@2.2.2': {}
+
+ '@sxzz/popperjs-es@2.11.7': {}
+
+ '@trysound/sax@0.2.0': {}
+
+ '@tweenjs/tween.js@23.1.3': {}
+
+ '@types/estree@1.0.0': {}
+
+ '@types/estree@1.0.6': {}
+
+ '@types/getos@3.0.4': {}
+
+ '@types/humanize-duration@3.27.4': {}
+
+ '@types/javascript-time-ago@2.0.8': {}
+
+ '@types/lodash-es@4.17.12':
+ dependencies:
+ '@types/lodash': 4.17.10
+
+ '@types/lodash@4.17.10': {}
+
+ '@types/md5@2.3.5': {}
+
+ '@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz': {}
+
+ '@types/pinyin@2.10.2': {}
+
+ '@types/showdown@2.0.6': {}
+
+ '@types/stats.js@0.17.3': {}
+
+ '@types/three@0.166.0':
+ dependencies:
+ '@tweenjs/tween.js': 23.1.3
+ '@types/stats.js': 0.17.3
+ '@types/webxr': 0.5.20
+ fflate: 0.8.2
+ meshoptimizer: 0.18.1
+
+ '@types/url-join@4.0.3': {}
+
+ '@types/web-bluetooth@0.0.16': {}
+
+ '@types/webxr@0.5.20': {}
+
+ '@vitejs/plugin-vue@https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz(vite@https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1))(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))':
+ dependencies:
+ vite: https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1)
+ vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+
+ '@volar/language-core@https://registry.npmmirror.com/@volar/language-core/-/language-core-1.0.11.tgz':
+ dependencies:
+ '@volar/source-map': https://registry.npmmirror.com/@volar/source-map/-/source-map-1.0.11.tgz
+ '@vue/reactivity': https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz
+ muggle-string: https://registry.npmmirror.com/muggle-string/-/muggle-string-0.1.0.tgz
+
+ '@volar/source-map@https://registry.npmmirror.com/@volar/source-map/-/source-map-1.0.11.tgz':
+ dependencies:
+ muggle-string: https://registry.npmmirror.com/muggle-string/-/muggle-string-0.1.0.tgz
+
+ '@volar/typescript@https://registry.npmmirror.com/@volar/typescript/-/typescript-1.0.11.tgz':
+ dependencies:
+ '@volar/language-core': https://registry.npmmirror.com/@volar/language-core/-/language-core-1.0.11.tgz
+
+ '@volar/vue-language-core@https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.0.11.tgz':
+ dependencies:
+ '@volar/language-core': https://registry.npmmirror.com/@volar/language-core/-/language-core-1.0.11.tgz
+ '@volar/source-map': https://registry.npmmirror.com/@volar/source-map/-/source-map-1.0.11.tgz
+ '@vue/compiler-dom': https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz
+ '@vue/compiler-sfc': https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz
+ '@vue/reactivity': https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz
+ '@vue/shared': https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz
+ minimatch: https://registry.npmmirror.com/minimatch/-/minimatch-5.1.1.tgz
+ vue-template-compiler: https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz
+
+ '@volar/vue-typescript@https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.0.11.tgz':
+ dependencies:
+ '@volar/typescript': https://registry.npmmirror.com/@volar/typescript/-/typescript-1.0.11.tgz
+ '@volar/vue-language-core': https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.0.11.tgz
+
+ '@vue/compiler-core@3.5.12':
+ dependencies:
+ '@babel/parser': 7.25.8
+ '@vue/shared': 3.5.12
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
+
+ '@vue/compiler-core@https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz':
+ dependencies:
+ '@babel/parser': https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz
+ '@vue/shared': https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz
+ estree-walker: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz
+ source-map: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz
+
+ '@vue/compiler-dom@3.5.12':
+ dependencies:
+ '@vue/compiler-core': 3.5.12
+ '@vue/shared': 3.5.12
+
+ '@vue/compiler-dom@https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz':
+ dependencies:
+ '@vue/compiler-core': https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz
+ '@vue/shared': https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz
+
+ '@vue/compiler-sfc@3.5.12':
+ dependencies:
+ '@babel/parser': 7.25.8
+ '@vue/compiler-core': 3.5.12
+ '@vue/compiler-dom': 3.5.12
+ '@vue/compiler-ssr': 3.5.12
+ '@vue/shared': 3.5.12
+ estree-walker: 2.0.2
+ magic-string: 0.30.12
+ postcss: 8.4.47
+ source-map-js: 1.2.1
+
+ '@vue/compiler-sfc@https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz':
+ dependencies:
+ '@babel/parser': https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz
+ '@vue/compiler-core': https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz
+ '@vue/compiler-dom': https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz
+ '@vue/compiler-ssr': https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz
+ '@vue/reactivity-transform': https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz
+ '@vue/shared': https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz
+ estree-walker: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz
+ magic-string: https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz
+ postcss: https://registry.npmmirror.com/postcss/-/postcss-8.4.19.tgz
+ source-map: https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz
+
+ '@vue/compiler-ssr@3.5.12':
+ dependencies:
+ '@vue/compiler-dom': 3.5.12
+ '@vue/shared': 3.5.12
+
+ '@vue/compiler-ssr@https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz':
+ dependencies:
+ '@vue/compiler-dom': https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz
+ '@vue/shared': https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz
+
+ '@vue/devtools-api@6.4.5': {}
+
+ '@vue/devtools-api@6.6.4': {}
+
+ '@vue/reactivity-transform@https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz':
+ dependencies:
+ '@babel/parser': https://registry.npmmirror.com/@babel/parser/-/parser-7.20.5.tgz
+ '@vue/compiler-core': https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz
+ '@vue/shared': https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz
+ estree-walker: https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz
+ magic-string: https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz
+
+ '@vue/reactivity@3.5.12':
+ dependencies:
+ '@vue/shared': 3.5.12
+
+ '@vue/reactivity@https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz':
+ dependencies:
+ '@vue/shared': https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz
+
+ '@vue/runtime-core@3.5.12':
+ dependencies:
+ '@vue/reactivity': 3.5.12
+ '@vue/shared': 3.5.12
+
+ '@vue/runtime-dom@3.5.12':
+ dependencies:
+ '@vue/reactivity': 3.5.12
+ '@vue/runtime-core': 3.5.12
+ '@vue/shared': 3.5.12
+ csstype: 3.1.3
+
+ '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))':
+ dependencies:
+ '@vue/compiler-ssr': 3.5.12
+ '@vue/shared': 3.5.12
+ vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+
+ '@vue/shared@3.5.12': {}
+
+ '@vue/shared@https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz': {}
+
+ '@vueuse/core@9.13.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))':
+ dependencies:
+ '@types/web-bluetooth': 0.0.16
+ '@vueuse/metadata': 9.13.0
+ '@vueuse/shared': 9.13.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ vue-demi: 0.14.10(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+
+ '@vueuse/metadata@9.13.0': {}
+
+ '@vueuse/shared@9.13.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))':
+ dependencies:
+ vue-demi: 0.14.10(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+
+ abbrev@1.1.1:
+ optional: true
+
+ accepts@1.3.8:
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+
+ acorn-dynamic-import@4.0.0(acorn@6.4.2):
+ dependencies:
+ acorn: 6.4.2
+
+ acorn-jsx@5.3.2(acorn@6.4.2):
+ dependencies:
+ acorn: 6.4.2
+
+ acorn@6.4.2: {}
+
+ acorn@8.13.0: {}
+
+ agent-base@6.0.2:
+ dependencies:
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
+ ajv@8.17.1:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.0.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ anymatch@https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz:
+ dependencies:
+ normalize-path: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz
+ picomatch: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz
+
+ aproba@2.0.0:
+ optional: true
+
+ are-we-there-yet@2.0.0:
+ dependencies:
+ delegates: 1.0.0
+ readable-stream: 3.6.0
+ optional: true
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ aria-query@5.3.2: {}
+
+ array-bounds@1.0.1: {}
+
+ array-normalize@1.1.4:
+ dependencies:
+ array-bounds: 1.0.1
+
+ array-timsort@https://registry.npmmirror.com/array-timsort/-/array-timsort-1.0.3.tgz: {}
+
+ async-validator@4.2.5: {}
+
+ asynckit@0.4.0: {}
+
+ atom-material-icons@3.0.0:
+ dependencies:
+ compression: 1.7.4
+ js-yaml: 3.14.1
+ polka: 0.5.2
+ select-dom: 6.0.2
+ sirv: 1.0.19
+ sirv-cli: 1.0.14
+ optionalDependencies:
+ lodash.template: 4.5.0
+ minimist: 1.2.7
+ transitivePeerDependencies:
+ - supports-color
+
+ attr-accept@2.2.2: {}
+
+ axios@1.7.7:
+ dependencies:
+ follow-redirects: 1.15.9
+ form-data: 4.0.1
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ axobject-query@4.1.0: {}
+
+ balanced-match@1.0.2:
+ optional: true
+
+ balanced-match@https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz: {}
+
+ binary-extensions@https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz: {}
+
+ binary-search-bounds@2.0.5: {}
+
+ boolbase@1.0.0: {}
+
+ brace-expansion@1.1.11:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+ optional: true
+
+ brace-expansion@https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz:
+ dependencies:
+ balanced-match: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz
+
+ braces@3.0.2:
+ dependencies:
+ fill-range: 7.0.1
+
+ braces@https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz:
+ dependencies:
+ fill-range: https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz
+
+ buble@0.19.8:
+ dependencies:
+ acorn: 6.4.2
+ acorn-dynamic-import: 4.0.0(acorn@6.4.2)
+ acorn-jsx: 5.3.2(acorn@6.4.2)
+ chalk: 2.4.2
+ magic-string: 0.25.9
+ minimist: 1.2.7
+ os-homedir: 2.0.0
+ regexpu-core: 4.8.0
+
+ bubleify@1.2.1:
+ dependencies:
+ buble: 0.19.8
+
+ bytes@3.0.0: {}
+
+ chalk@2.4.2:
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+
+ charenc@0.0.2: {}
+
+ chart.js@4.4.5:
+ dependencies:
+ '@kurkle/color': 0.3.2
+
+ chartjs-adapter-date-fns@3.0.0(chart.js@4.4.5)(date-fns@4.1.0):
+ dependencies:
+ chart.js: 4.4.5
+ date-fns: 4.1.0
+
+ chokidar@4.0.1:
+ dependencies:
+ readdirp: 4.0.2
+
+ chokidar@https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz:
+ dependencies:
+ anymatch: https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz
+ braces: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz
+ glob-parent: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz
+ is-binary-path: https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz
+ is-glob: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz
+ normalize-path: https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz
+ readdirp: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz
+ optionalDependencies:
+ fsevents: 2.3.2
+
+ chownr@2.0.0:
+ optional: true
+
+ clamp@1.0.1: {}
+
+ clipboard@2.0.11:
+ dependencies:
+ good-listener: 1.2.2
+ select: 1.1.2
+ tiny-emitter: 2.1.0
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ code-red@1.0.4:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@types/estree': 1.0.6
+ acorn: 8.13.0
+ estree-walker: 3.0.3
+ periscopic: 3.1.0
+
+ codemirror-wrapped-line-indent@1.0.8(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1):
+ dependencies:
+ '@codemirror/language': 6.10.3
+ '@codemirror/state': 6.4.1
+ '@codemirror/view': 6.34.1
+
+ color-convert@1.9.3:
+ dependencies:
+ color-name: 1.1.3
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.3: {}
+
+ color-name@1.1.4: {}
+
+ color-support@1.1.3:
+ optional: true
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ commander@1.1.1:
+ dependencies:
+ keypress: 0.1.0
+
+ commander@7.2.0: {}
+
+ commander@9.5.0: {}
+
+ comment-json@https://registry.npmmirror.com/comment-json/-/comment-json-4.2.3.tgz:
+ dependencies:
+ array-timsort: https://registry.npmmirror.com/array-timsort/-/array-timsort-1.0.3.tgz
+ core-util-is: https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz
+ esprima: https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz
+ has-own-prop: https://registry.npmmirror.com/has-own-prop/-/has-own-prop-2.0.0.tgz
+ repeat-string: https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz
+
+ compressible@2.0.18:
+ dependencies:
+ mime-db: 1.52.0
+
+ compression@1.7.4:
+ dependencies:
+ accepts: 1.3.8
+ bytes: 3.0.0
+ compressible: 2.0.18
+ debug: 2.6.9
+ on-headers: 1.0.2
+ safe-buffer: 5.1.2
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ concat-map@0.0.1:
+ optional: true
+
+ consola@https://registry.npmmirror.com/consola/-/consola-2.15.3.tgz: {}
+
+ console-clear@1.1.1: {}
+
+ console-control-strings@1.1.0:
+ optional: true
+
+ core-js@3.38.1: {}
+
+ core-util-is@https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz: {}
+
+ crawlab-ui@0.7.0-rc3(dlwfpvqjxhvrevoazxvsg7egqu):
+ dependencies:
+ '@element-plus/icons-vue': 2.3.1(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ '@fortawesome/fontawesome-common-types': 6.6.0
+ '@fortawesome/fontawesome-svg-core': 6.6.0
+ '@fortawesome/free-brands-svg-icons': 6.6.0
+ '@fortawesome/free-regular-svg-icons': 6.6.0
+ '@fortawesome/free-solid-svg-icons': 6.6.0
+ '@fortawesome/vue-fontawesome': 3.0.8(@fortawesome/fontawesome-svg-core@6.6.0)(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ '@lexical/code': 0.16.1
+ '@lexical/history': 0.16.1
+ '@lexical/html': 0.16.1
+ '@lexical/link': 0.16.1
+ '@lexical/list': 0.16.1
+ '@lexical/markdown': 0.16.1
+ '@lexical/rich-text': 0.16.1
+ '@lexical/selection': 0.16.1
+ '@lexical/table': 0.16.1
+ '@lexical/text': 0.16.1
+ '@lexical/utils': 0.16.1
+ '@popperjs/core': 2.11.8
+ '@types/getos': 3.0.4
+ '@types/humanize-duration': 3.27.4
+ '@types/javascript-time-ago': 2.0.8
+ '@types/lodash': 4.17.10
+ '@types/md5': 2.3.5
+ '@types/pinyin': 2.10.2
+ '@types/showdown': 2.0.6
+ '@types/three': 0.166.0
+ '@types/url-join': 4.0.3
+ async-validator: 4.2.5
+ atom-material-icons: 3.0.0
+ axios: 1.7.7
+ chart.js: 4.4.5
+ chartjs-adapter-date-fns: 3.0.0(chart.js@4.4.5)(date-fns@4.1.0)
+ clipboard: 2.0.11
+ core-js: 3.38.1
+ crawlab-vue3-dropzone: 3.0.3(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ cron-parser: 4.9.0
+ cronstrue: 2.50.0
+ dayjs: 1.11.13
+ element-plus: 2.8.5(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ font-awesome: 4.7.0
+ humanize-duration: 3.32.1
+ javascript-time-ago: 2.5.11
+ json-editor-vue: 0.17.2(@lezer/common@1.2.3)(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ lexical: 0.16.1
+ lodash: 4.17.21
+ md5: 2.3.0
+ mitt: 3.0.1
+ monaco-editor: 0.50.0
+ normalize.css: 8.0.1
+ os-name: 5.0.1
+ pinyin: 2.11.2
+ point-cluster: 3.1.8
+ prismjs: 1.29.0
+ showdown: 2.1.0
+ three: 0.166.1
+ tiny-invariant: 1.3.3
+ url-join: 4.0.1
+ url-regex: 5.0.0
+ uuid: 10.0.0
+ vite-svg-loader: 5.1.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+ vue-chartjs: 5.3.1(chart.js@4.4.5)(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ vue-clipboard3: 2.0.0
+ vue-i18n: 9.13.1(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ vue-router: 4.4.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ vuex: 4.1.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ transitivePeerDependencies:
+ - '@lezer/common'
+ - '@vue/composition-api'
+
+ crawlab-vue3-dropzone@3.0.3(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)):
+ dependencies:
+ attr-accept: 2.2.2
+ file-selector: 0.2.4
+ vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+
+ crelt@1.0.6: {}
+
+ cron-parser@4.9.0:
+ dependencies:
+ luxon: 3.5.0
+
+ cronstrue@2.50.0: {}
+
+ cross-spawn@7.0.3:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ crypt@0.0.2: {}
+
+ css-select@5.1.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ nth-check: 2.1.1
+
+ css-tree@2.2.1:
+ dependencies:
+ mdn-data: 2.0.28
+ source-map-js: 1.2.1
+
+ css-tree@2.3.1:
+ dependencies:
+ mdn-data: 2.0.30
+ source-map-js: 1.2.1
+
+ css-what@6.1.0: {}
+
+ csso@5.0.5:
+ dependencies:
+ css-tree: 2.2.1
+
+ csstype@3.1.3: {}
+
+ date-fns@4.1.0: {}
+
+ dayjs@1.11.13: {}
+
+ de-indent@https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz: {}
+
+ debug@2.6.9:
+ dependencies:
+ ms: 2.0.0
+
+ debug@4.3.4:
+ dependencies:
+ ms: 2.1.2
+ optional: true
+
+ define-lazy-prop@2.0.0: {}
+
+ defined@1.0.1: {}
+
+ delayed-stream@1.0.0: {}
+
+ delegate@3.2.0: {}
+
+ delegates@1.0.0:
+ optional: true
+
+ detect-libc@1.0.3: {}
+
+ detect-libc@2.0.1:
+ optional: true
+
+ diff-sequences@29.6.3: {}
+
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
+ domelementtype@2.3.0: {}
+
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domutils@3.1.0:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
+ dtype@2.0.0: {}
+
+ element-plus@2.8.5(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)):
+ dependencies:
+ '@ctrl/tinycolor': 3.4.1
+ '@element-plus/icons-vue': 2.3.1(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ '@floating-ui/dom': 1.6.11
+ '@popperjs/core': '@sxzz/popperjs-es@2.11.7'
+ '@types/lodash': 4.17.10
+ '@types/lodash-es': 4.17.12
+ '@vueuse/core': 9.13.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ async-validator: 4.2.5
+ dayjs: 1.11.13
+ escape-html: 1.0.3
+ lodash: 4.17.21
+ lodash-es: 4.17.21
+ lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21)
+ memoize-one: 6.0.0
+ normalize-wheel-es: 1.2.0
+ vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+
+ emoji-regex@8.0.0: {}
+
+ entities@4.5.0: {}
+
+ esbuild-android-64@0.15.16:
+ optional: true
+
+ esbuild-android-arm64@0.15.16:
+ optional: true
+
+ esbuild-darwin-64@0.15.16:
+ optional: true
+
+ esbuild-darwin-arm64@0.15.16:
+ optional: true
+
+ esbuild-freebsd-64@0.15.16:
+ optional: true
+
+ esbuild-freebsd-arm64@0.15.16:
+ optional: true
+
+ esbuild-linux-32@0.15.16:
+ optional: true
+
+ esbuild-linux-64@0.15.16:
+ optional: true
+
+ esbuild-linux-arm64@0.15.16:
+ optional: true
+
+ esbuild-linux-arm@0.15.16:
+ optional: true
+
+ esbuild-linux-mips64le@0.15.16:
+ optional: true
+
+ esbuild-linux-ppc64le@0.15.16:
+ optional: true
+
+ esbuild-linux-riscv64@0.15.16:
+ optional: true
+
+ esbuild-linux-s390x@0.15.16:
+ optional: true
+
+ esbuild-netbsd-64@0.15.16:
+ optional: true
+
+ esbuild-openbsd-64@0.15.16:
+ optional: true
+
+ esbuild-sunos-64@0.15.16:
+ optional: true
+
+ esbuild-windows-32@0.15.16:
+ optional: true
+
+ esbuild-windows-64@0.15.16:
+ optional: true
+
+ esbuild-windows-arm64@0.15.16:
+ optional: true
+
+ esbuild@https://registry.npmmirror.com/esbuild/-/esbuild-0.15.16.tgz:
+ optionalDependencies:
+ '@esbuild/android-arm': 0.15.16
+ '@esbuild/linux-loong64': 0.15.16
+ esbuild-android-64: 0.15.16
+ esbuild-android-arm64: 0.15.16
+ esbuild-darwin-64: 0.15.16
+ esbuild-darwin-arm64: 0.15.16
+ esbuild-freebsd-64: 0.15.16
+ esbuild-freebsd-arm64: 0.15.16
+ esbuild-linux-32: 0.15.16
+ esbuild-linux-64: 0.15.16
+ esbuild-linux-arm: 0.15.16
+ esbuild-linux-arm64: 0.15.16
+ esbuild-linux-mips64le: 0.15.16
+ esbuild-linux-ppc64le: 0.15.16
+ esbuild-linux-riscv64: 0.15.16
+ esbuild-linux-s390x: 0.15.16
+ esbuild-netbsd-64: 0.15.16
+ esbuild-openbsd-64: 0.15.16
+ esbuild-sunos-64: 0.15.16
+ esbuild-windows-32: 0.15.16
+ esbuild-windows-64: 0.15.16
+ esbuild-windows-arm64: 0.15.16
+
+ escalade@3.1.1: {}
+
+ escape-html@1.0.3: {}
+
+ escape-string-regexp@1.0.5: {}
+
+ esprima@4.0.1: {}
+
+ esprima@https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz: {}
+
+ estree-walker@2.0.2: {}
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.0
+
+ estree-walker@https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz: {}
+
+ execa@5.1.1:
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-glob@https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz:
+ dependencies:
+ '@nodelib/fs.stat': https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz
+ '@nodelib/fs.walk': https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz
+ glob-parent: https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz
+ merge2: https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz
+ micromatch: https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz
+
+ fast-uri@3.0.3: {}
+
+ fastq@https://registry.npmmirror.com/fastq/-/fastq-1.14.0.tgz:
+ dependencies:
+ reusify: https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz
+
+ fflate@0.8.2: {}
+
+ file-selector@0.2.4:
+ dependencies:
+ tslib: 2.4.1
+
+ fill-range@7.0.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ fill-range@https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz:
+ dependencies:
+ to-regex-range: https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz
+
+ flatten-vertex-data@1.0.2:
+ dependencies:
+ dtype: 2.0.0
+
+ follow-redirects@1.15.9: {}
+
+ font-awesome@4.7.0: {}
+
+ form-data@4.0.1:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+
+ fs-minipass@2.1.0:
+ dependencies:
+ minipass: 3.3.6
+ optional: true
+
+ fs.realpath@1.0.0:
+ optional: true
+
+ fsevents@2.3.2:
+ optional: true
+
+ function-bind@https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz: {}
+
+ gauge@3.0.2:
+ dependencies:
+ aproba: 2.0.0
+ color-support: 1.1.3
+ console-control-strings: 1.1.0
+ has-unicode: 2.0.1
+ object-assign: 4.1.1
+ signal-exit: 3.0.7
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wide-align: 1.1.5
+ optional: true
+
+ get-caller-file@2.0.5: {}
+
+ get-port@3.2.0: {}
+
+ get-stream@6.0.1: {}
+
+ glob-parent@https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz:
+ dependencies:
+ is-glob: https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz
+
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ optional: true
+
+ good-listener@1.2.2:
+ dependencies:
+ delegate: 3.2.0
+
+ has-flag@3.0.0: {}
+
+ has-own-prop@https://registry.npmmirror.com/has-own-prop/-/has-own-prop-2.0.0.tgz: {}
+
+ has-unicode@2.0.1:
+ optional: true
+
+ has@https://registry.npmmirror.com/has/-/has-1.0.3.tgz:
+ dependencies:
+ function-bind: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz
+
+ he@https://registry.npmmirror.com/he/-/he-1.2.0.tgz: {}
+
+ https-proxy-agent@5.0.1:
+ dependencies:
+ agent-base: 6.0.2
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ optional: true
+
+ human-signals@2.1.0: {}
+
+ humanize-duration@3.32.1: {}
+
+ immutable-json-patch@6.0.1: {}
+
+ immutable@4.3.7: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+ optional: true
+
+ inherits@2.0.4:
+ optional: true
+
+ ip-regex@4.3.0: {}
+
+ is-binary-path@https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz:
+ dependencies:
+ binary-extensions: https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz
+
+ is-buffer@1.1.6: {}
+
+ is-core-module@https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz:
+ dependencies:
+ has: https://registry.npmmirror.com/has/-/has-1.0.3.tgz
+
+ is-docker@2.2.1: {}
+
+ is-extglob@2.1.1: {}
+
+ is-extglob@https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-glob@https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz:
+ dependencies:
+ is-extglob: https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz
+
+ is-number@7.0.0: {}
+
+ is-number@https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz: {}
+
+ is-obj@1.0.1: {}
+
+ is-reference@3.0.1:
+ dependencies:
+ '@types/estree': 1.0.0
+
+ is-stream@2.0.1: {}
+
+ is-wsl@2.2.0:
+ dependencies:
+ is-docker: 2.2.1
+
+ isexe@2.0.0: {}
+
+ javascript-time-ago@2.5.11:
+ dependencies:
+ relative-time-format: 1.1.6
+
+ jmespath@0.16.0: {}
+
+ js-yaml@3.14.1:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
+ jsep@1.3.9: {}
+
+ jsesc@0.5.0: {}
+
+ json-editor-vue@0.17.2(@lezer/common@1.2.3)(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)):
+ dependencies:
+ vanilla-jsoneditor: 1.0.8(@lezer/common@1.2.3)
+ vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+ vue-demi: 0.14.10(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ transitivePeerDependencies:
+ - '@lezer/common'
+
+ json-schema-traverse@1.0.0: {}
+
+ json-source-map@0.6.1: {}
+
+ jsonpath-plus@10.0.1:
+ dependencies:
+ '@jsep-plugin/assignment': 1.2.1(jsep@1.3.9)
+ '@jsep-plugin/regex': 1.0.3(jsep@1.3.9)
+ jsep: 1.3.9
+
+ jsonrepair@3.8.1: {}
+
+ keypress@0.1.0: {}
+
+ kleur@3.0.3: {}
+
+ lexical@0.16.1: {}
+
+ local-access@1.1.0: {}
+
+ locate-character@3.0.0: {}
+
+ lodash-es@4.17.21: {}
+
+ lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21):
+ dependencies:
+ '@types/lodash-es': 4.17.12
+ lodash: 4.17.21
+ lodash-es: 4.17.21
+
+ lodash._reinterpolate@3.0.0:
+ optional: true
+
+ lodash.template@4.5.0:
+ dependencies:
+ lodash._reinterpolate: 3.0.0
+ lodash.templatesettings: 4.2.0
+ optional: true
+
+ lodash.templatesettings@4.2.0:
+ dependencies:
+ lodash._reinterpolate: 3.0.0
+ optional: true
+
+ lodash@4.17.21: {}
+
+ lru-cache@6.0.0:
+ dependencies:
+ yallist: 4.0.0
+ optional: true
+
+ luxon@3.5.0: {}
+
+ macos-release@3.1.0: {}
+
+ magic-string@0.25.9:
+ dependencies:
+ sourcemap-codec: 1.4.8
+
+ magic-string@0.30.1:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ magic-string@0.30.12:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ magic-string@https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz:
+ dependencies:
+ sourcemap-codec: https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz
+
+ make-dir@3.1.0:
+ dependencies:
+ semver: 6.3.0
+ optional: true
+
+ matchit@1.1.0:
+ dependencies:
+ '@arr/every': 1.0.1
+
+ math-log2@1.0.1: {}
+
+ md5@2.3.0:
+ dependencies:
+ charenc: 0.0.2
+ crypt: 0.0.2
+ is-buffer: 1.1.6
+
+ mdn-data@2.0.28: {}
+
+ mdn-data@2.0.30: {}
+
+ memoize-one@6.0.0: {}
+
+ merge-stream@2.0.0: {}
+
+ merge2@https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz: {}
+
+ meshoptimizer@0.18.1: {}
+
+ micromatch@4.0.5:
+ dependencies:
+ braces: 3.0.2
+ picomatch: 2.3.1
+
+ micromatch@https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz:
+ dependencies:
+ braces: https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz
+ picomatch: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz
+
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mimic-fn@2.1.0: {}
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.11
+ optional: true
+
+ minimatch@https://registry.npmmirror.com/minimatch/-/minimatch-5.1.1.tgz:
+ dependencies:
+ brace-expansion: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz
+
+ minimist@1.2.7: {}
+
+ minipass@3.3.6:
+ dependencies:
+ yallist: 4.0.0
+ optional: true
+
+ minizlib@2.1.2:
+ dependencies:
+ minipass: 3.3.6
+ yallist: 4.0.0
+ optional: true
+
+ mitt@3.0.1: {}
+
+ mkdirp@1.0.4:
+ optional: true
+
+ monaco-editor@0.50.0: {}
+
+ mri@1.2.0: {}
+
+ mrmime@1.0.1: {}
+
+ ms@2.0.0: {}
+
+ ms@2.1.2:
+ optional: true
+
+ muggle-string@https://registry.npmmirror.com/muggle-string/-/muggle-string-0.1.0.tgz: {}
+
+ nanoid@3.3.7: {}
+
+ nanoid@https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz: {}
+
+ natural-compare-lite@1.4.0: {}
+
+ negotiator@0.6.3: {}
+
+ node-addon-api@3.2.1:
+ optional: true
+
+ node-addon-api@7.1.1: {}
+
+ node-fetch@2.6.7:
+ dependencies:
+ whatwg-url: 5.0.0
+ optional: true
+
+ nodejieba@2.5.2:
+ dependencies:
+ '@mapbox/node-pre-gyp': 1.0.10
+ node-addon-api: 3.2.1
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+ optional: true
+
+ nopt@5.0.0:
+ dependencies:
+ abbrev: 1.1.1
+ optional: true
+
+ normalize-path@https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz: {}
+
+ normalize-wheel-es@1.2.0: {}
+
+ normalize.css@8.0.1: {}
+
+ npm-run-path@4.0.1:
+ dependencies:
+ path-key: 3.1.1
+
+ npmlog@5.0.1:
+ dependencies:
+ are-we-there-yet: 2.0.0
+ console-control-strings: 1.1.0
+ gauge: 3.0.2
+ set-blocking: 2.0.0
+ optional: true
+
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
+
+ object-assign@4.1.1: {}
+
+ on-headers@1.0.2: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+ optional: true
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ open@8.4.2:
+ dependencies:
+ define-lazy-prop: 2.0.0
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
+
+ os-homedir@2.0.0: {}
+
+ os-name@5.0.1:
+ dependencies:
+ macos-release: 3.1.0
+ windows-release: 5.0.1
+
+ parse-rect@1.2.0:
+ dependencies:
+ pick-by-alias: 1.2.0
+
+ path-is-absolute@1.0.1:
+ optional: true
+
+ path-key@3.1.1: {}
+
+ path-parse@https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz: {}
+
+ periscopic@3.1.0:
+ dependencies:
+ '@types/estree': 1.0.6
+ estree-walker: 3.0.3
+ is-reference: 3.0.1
+
+ pick-by-alias@1.2.0: {}
+
+ picocolors@1.1.1: {}
+
+ picocolors@https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz: {}
+
+ picomatch@2.3.1: {}
+
+ picomatch@https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz: {}
+
+ pinyin@2.11.2:
+ dependencies:
+ commander: 1.1.1
+ object-assign: 4.1.1
+ optionalDependencies:
+ nodejieba: 2.5.2
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ point-cluster@3.1.8:
+ dependencies:
+ array-bounds: 1.0.1
+ array-normalize: 1.1.4
+ binary-search-bounds: 2.0.5
+ bubleify: 1.2.1
+ clamp: 1.0.1
+ defined: 1.0.1
+ dtype: 2.0.0
+ flatten-vertex-data: 1.0.2
+ is-obj: 1.0.1
+ math-log2: 1.0.1
+ parse-rect: 1.2.0
+ pick-by-alias: 1.2.0
+
+ polka@0.5.2:
+ dependencies:
+ '@polka/url': 0.5.0
+ trouter: 2.0.1
+
+ postcss@8.4.47:
+ dependencies:
+ nanoid: 3.3.7
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ postcss@https://registry.npmmirror.com/postcss/-/postcss-8.4.19.tgz:
+ dependencies:
+ nanoid: https://registry.npmmirror.com/nanoid/-/nanoid-3.3.4.tgz
+ picocolors: https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz
+ source-map-js: https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz
+
+ prismjs@1.29.0: {}
+
+ proxy-from-env@1.1.0: {}
+
+ queue-microtask@https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz: {}
+
+ readable-stream@3.6.0:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+ optional: true
+
+ readdirp@4.0.2: {}
+
+ readdirp@https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz:
+ dependencies:
+ picomatch: https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz
+
+ regenerate-unicode-properties@9.0.0:
+ dependencies:
+ regenerate: 1.4.2
+
+ regenerate@1.4.2: {}
+
+ regexpu-core@4.8.0:
+ dependencies:
+ regenerate: 1.4.2
+ regenerate-unicode-properties: 9.0.0
+ regjsgen: 0.5.2
+ regjsparser: 0.7.0
+ unicode-match-property-ecmascript: 2.0.0
+ unicode-match-property-value-ecmascript: 2.1.0
+
+ regjsgen@0.5.2: {}
+
+ regjsparser@0.7.0:
+ dependencies:
+ jsesc: 0.5.0
+
+ relative-time-format@1.1.6: {}
+
+ repeat-string@https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz: {}
+
+ require-directory@2.1.1: {}
+
+ require-from-string@2.0.2: {}
+
+ resolve@https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz:
+ dependencies:
+ is-core-module: https://registry.npmmirror.com/is-core-module/-/is-core-module-2.11.0.tgz
+ path-parse: https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz
+ supports-preserve-symlinks-flag: https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz
+
+ reusify@https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz: {}
+
+ rimraf@3.0.2:
+ dependencies:
+ glob: 7.2.3
+ optional: true
+
+ rollup-plugin-external-globals@0.8.0(rollup@3.26.2):
+ dependencies:
+ '@rollup/pluginutils': 5.0.2(rollup@3.26.2)
+ estree-walker: 3.0.3
+ is-reference: 3.0.1
+ magic-string: 0.30.1
+ rollup: 3.26.2
+
+ rollup-plugin-visualizer@5.9.2(rollup@3.26.2):
+ dependencies:
+ open: 8.4.2
+ picomatch: 2.3.1
+ source-map: 0.7.4
+ yargs: 17.7.2
+ optionalDependencies:
+ rollup: 3.26.2
+
+ rollup@3.26.2:
+ optionalDependencies:
+ fsevents: 2.3.2
+
+ rollup@https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz:
+ optionalDependencies:
+ fsevents: 2.3.2
+
+ run-parallel@https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz:
+ dependencies:
+ queue-microtask: https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz
+
+ sade@1.8.1:
+ dependencies:
+ mri: 1.2.0
+
+ safe-buffer@5.1.2: {}
+
+ safe-buffer@5.2.1:
+ optional: true
+
+ sass@1.80.1:
+ dependencies:
+ '@parcel/watcher': 2.4.1
+ chokidar: 4.0.1
+ immutable: 4.3.7
+ source-map-js: 1.2.1
+
+ select-dom@6.0.2: {}
+
+ select@1.1.2: {}
+
+ semiver@1.1.0: {}
+
+ semver@6.3.0:
+ optional: true
+
+ semver@7.3.8:
+ dependencies:
+ lru-cache: 6.0.0
+ optional: true
+
+ set-blocking@2.0.0:
+ optional: true
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ showdown@2.1.0:
+ dependencies:
+ commander: 9.5.0
+
+ signal-exit@3.0.7: {}
+
+ sirv-cli@1.0.14:
+ dependencies:
+ console-clear: 1.1.1
+ get-port: 3.2.0
+ kleur: 3.0.3
+ local-access: 1.1.0
+ sade: 1.8.1
+ semiver: 1.1.0
+ sirv: 1.0.19
+ tinydate: 1.3.0
+
+ sirv@1.0.19:
+ dependencies:
+ '@polka/url': 1.0.0-next.21
+ mrmime: 1.0.1
+ totalist: 1.1.0
+
+ source-map-js@1.0.2: {}
+
+ source-map-js@1.2.1: {}
+
+ source-map-js@https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz: {}
+
+ source-map@0.7.4: {}
+
+ source-map@https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz: {}
+
+ sourcemap-codec@1.4.8: {}
+
+ sourcemap-codec@https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz: {}
+
+ sprintf-js@1.0.3: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+ optional: true
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-final-newline@2.0.0: {}
+
+ style-mod@4.1.2: {}
+
+ supports-color@5.5.0:
+ dependencies:
+ has-flag: 3.0.0
+
+ supports-preserve-symlinks-flag@https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz: {}
+
+ svelte@4.2.19:
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.25
+ '@types/estree': 1.0.6
+ acorn: 8.13.0
+ aria-query: 5.3.2
+ axobject-query: 4.1.0
+ code-red: 1.0.4
+ css-tree: 2.3.1
+ estree-walker: 3.0.3
+ is-reference: 3.0.1
+ locate-character: 3.0.0
+ magic-string: 0.30.12
+ periscopic: 3.1.0
+
+ svgo@3.3.2:
+ dependencies:
+ '@trysound/sax': 0.2.0
+ commander: 7.2.0
+ css-select: 5.1.0
+ css-tree: 2.3.1
+ css-what: 6.1.0
+ csso: 5.0.5
+ picocolors: 1.1.1
+
+ tar@6.1.12:
+ dependencies:
+ chownr: 2.0.0
+ fs-minipass: 2.1.0
+ minipass: 3.3.6
+ minizlib: 2.1.2
+ mkdirp: 1.0.4
+ yallist: 4.0.0
+ optional: true
+
+ three@0.166.1: {}
+
+ tiny-emitter@2.1.0: {}
+
+ tiny-invariant@1.3.3: {}
+
+ tinydate@1.3.0: {}
+
+ tlds@1.255.0: {}
+
+ to-fast-properties@2.0.0: {}
+
+ to-fast-properties@https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ to-regex-range@https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz:
+ dependencies:
+ is-number: https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz
+
+ totalist@1.1.0: {}
+
+ tr46@0.0.3:
+ optional: true
+
+ trouter@2.0.1:
+ dependencies:
+ matchit: 1.1.0
+
+ tslib@2.4.1: {}
+
+ typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz: {}
+
+ unicode-canonical-property-names-ecmascript@2.0.0: {}
+
+ unicode-match-property-ecmascript@2.0.0:
+ dependencies:
+ unicode-canonical-property-names-ecmascript: 2.0.0
+ unicode-property-aliases-ecmascript: 2.1.0
+
+ unicode-match-property-value-ecmascript@2.1.0: {}
+
+ unicode-property-aliases-ecmascript@2.1.0: {}
+
+ url-join@4.0.1: {}
+
+ url-regex@5.0.0:
+ dependencies:
+ ip-regex: 4.3.0
+ tlds: 1.255.0
+
+ util-deprecate@1.0.2:
+ optional: true
+
+ uuid@10.0.0: {}
+
+ vanilla-jsoneditor@1.0.8(@lezer/common@1.2.3):
+ dependencies:
+ '@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)
+ '@codemirror/commands': 6.7.0
+ '@codemirror/lang-json': 6.0.1
+ '@codemirror/language': 6.10.3
+ '@codemirror/lint': 6.8.2
+ '@codemirror/search': 6.5.6
+ '@codemirror/state': 6.4.1
+ '@codemirror/view': 6.34.1
+ '@fortawesome/free-regular-svg-icons': 6.6.0
+ '@fortawesome/free-solid-svg-icons': 6.6.0
+ '@jsonquerylang/jsonquery': 3.1.1
+ '@lezer/highlight': 1.2.1
+ '@replit/codemirror-indentation-markers': 6.5.3(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+ ajv: 8.17.1
+ codemirror-wrapped-line-indent: 1.0.8(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+ diff-sequences: 29.6.3
+ immutable-json-patch: 6.0.1
+ jmespath: 0.16.0
+ json-source-map: 0.6.1
+ jsonpath-plus: 10.0.1
+ jsonrepair: 3.8.1
+ lodash-es: 4.17.21
+ memoize-one: 6.0.0
+ natural-compare-lite: 1.4.0
+ sass: 1.80.1
+ svelte: 4.2.19
+ vanilla-picker: 2.12.3
+ transitivePeerDependencies:
+ - '@lezer/common'
+
+ vanilla-picker@2.12.3:
+ dependencies:
+ '@sphinxxxx/color-conversion': 2.2.2
+
+ vary@1.1.2: {}
+
+ vite-aliases@https://registry.npmmirror.com/vite-aliases/-/vite-aliases-0.9.7.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1):
+ dependencies:
+ chokidar: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz
+ comment-json: https://registry.npmmirror.com/comment-json/-/comment-json-4.2.3.tgz
+ consola: https://registry.npmmirror.com/consola/-/consola-2.15.3.tgz
+ fast-glob: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz
+ vite: https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1)
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - sass
+ - stylus
+ - sugarss
+ - terser
+
+ vite-plugin-dynamic-import@https://registry.npmmirror.com/vite-plugin-dynamic-import/-/vite-plugin-dynamic-import-1.2.4.tgz:
+ dependencies:
+ fast-glob: https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz
+
+ vite-plugin-externalize-deps@0.7.0(vite@https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1)):
+ dependencies:
+ vite: https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1)
+
+ vite-svg-loader@5.1.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)):
+ dependencies:
+ svgo: 3.3.2
+ vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+
+ vite@https://registry.npmmirror.com/vite/-/vite-3.2.4.tgz(@types/node@https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz)(sass@1.80.1):
+ dependencies:
+ esbuild: https://registry.npmmirror.com/esbuild/-/esbuild-0.15.16.tgz
+ postcss: https://registry.npmmirror.com/postcss/-/postcss-8.4.19.tgz
+ resolve: https://registry.npmmirror.com/resolve/-/resolve-1.22.1.tgz
+ rollup: https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz
+ optionalDependencies:
+ '@types/node': https://registry.npmmirror.com/@types/node/-/node-18.11.10.tgz
+ fsevents: 2.3.2
+ sass: 1.80.1
+
+ vue-chartjs@5.3.1(chart.js@4.4.5)(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)):
+ dependencies:
+ chart.js: 4.4.5
+ vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+
+ vue-clipboard3@2.0.0:
+ dependencies:
+ clipboard: 2.0.11
+
+ vue-demi@0.14.10(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)):
+ dependencies:
+ vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+
+ vue-i18n@9.13.1(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)):
+ dependencies:
+ '@intlify/core-base': 9.13.1
+ '@intlify/shared': 9.13.1
+ '@vue/devtools-api': 6.6.4
+ vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+
+ vue-router@4.4.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)):
+ dependencies:
+ '@vue/devtools-api': 6.6.4
+ vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+
+ vue-template-compiler@https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz:
+ dependencies:
+ de-indent: https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz
+ he: https://registry.npmmirror.com/he/-/he-1.2.0.tgz
+
+ vue-tsc@https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.0.11.tgz(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz):
+ dependencies:
+ '@volar/vue-language-core': https://registry.npmmirror.com/@volar/vue-language-core/-/vue-language-core-1.0.11.tgz
+ '@volar/vue-typescript': https://registry.npmmirror.com/@volar/vue-typescript/-/vue-typescript-1.0.11.tgz
+ typescript: https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz
+
+ vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz):
+ dependencies:
+ '@vue/compiler-dom': 3.5.12
+ '@vue/compiler-sfc': 3.5.12
+ '@vue/runtime-dom': 3.5.12
+ '@vue/server-renderer': 3.5.12(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz))
+ '@vue/shared': 3.5.12
+ optionalDependencies:
+ typescript: https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz
+
+ vuex@4.1.0(vue@3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)):
+ dependencies:
+ '@vue/devtools-api': 6.4.5
+ vue: 3.5.12(typescript@https://registry.npmmirror.com/typescript/-/typescript-4.9.3.tgz)
+
+ w3c-keyname@2.2.8: {}
+
+ webidl-conversions@3.0.1:
+ optional: true
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+ optional: true
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ wide-align@1.1.5:
+ dependencies:
+ string-width: 4.2.3
+ optional: true
+
+ windows-release@5.0.1:
+ dependencies:
+ execa: 5.1.1
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2:
+ optional: true
+
+ y18n@5.0.8: {}
+
+ yallist@4.0.0:
+ optional: true
+
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.1.1
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
diff --git a/frontend/apps/crawlab/public/three/three.min.js b/frontend/apps/crawlab/public/three/three.min.js
new file mode 100644
index 00000000..b71995ee
--- /dev/null
+++ b/frontend/apps/crawlab/public/three/three.min.js
@@ -0,0 +1,26564 @@
+/**
+ * @license
+ * Copyright 2010-2021 Three.js Authors
+ * SPDX-License-Identifier: MIT
+ */
+!(function (t, e) {
+ 'object' == typeof exports && 'undefined' != typeof module
+ ? e(exports)
+ : 'function' == typeof define && define.amd
+ ? define(['exports'], e)
+ : e(
+ ((t =
+ 'undefined' != typeof globalThis ? globalThis : t || self).THREE =
+ {})
+ );
+})(this, function (t) {
+ 'use strict';
+ const e = '128',
+ n = 100,
+ i = 300,
+ r = 301,
+ s = 302,
+ a = 303,
+ o = 304,
+ l = 306,
+ c = 307,
+ h = 1e3,
+ u = 1001,
+ d = 1002,
+ p = 1003,
+ m = 1004,
+ f = 1005,
+ g = 1006,
+ v = 1007,
+ y = 1008,
+ x = 1009,
+ _ = 1012,
+ w = 1014,
+ b = 1015,
+ M = 1016,
+ S = 1020,
+ T = 1022,
+ E = 1023,
+ A = 1026,
+ L = 1027,
+ R = 33776,
+ C = 33777,
+ P = 33778,
+ D = 33779,
+ I = 35840,
+ N = 35841,
+ B = 35842,
+ z = 35843,
+ F = 37492,
+ O = 37496,
+ H = 2300,
+ G = 2301,
+ U = 2302,
+ k = 2400,
+ V = 2401,
+ W = 2402,
+ j = 2500,
+ q = 2501,
+ X = 3e3,
+ Y = 3001,
+ Z = 3007,
+ J = 3002,
+ Q = 3004,
+ K = 3005,
+ $ = 3006,
+ tt = 7680,
+ et = 35044,
+ nt = 35048,
+ it = '300 es';
+ class rt {
+ addEventListener(t, e) {
+ void 0 === this._listeners && (this._listeners = {});
+ const n = this._listeners;
+ void 0 === n[t] && (n[t] = []), -1 === n[t].indexOf(e) && n[t].push(e);
+ }
+ hasEventListener(t, e) {
+ if (void 0 === this._listeners) return !1;
+ const n = this._listeners;
+ return void 0 !== n[t] && -1 !== n[t].indexOf(e);
+ }
+ removeEventListener(t, e) {
+ if (void 0 === this._listeners) return;
+ const n = this._listeners[t];
+ if (void 0 !== n) {
+ const t = n.indexOf(e);
+ -1 !== t && n.splice(t, 1);
+ }
+ }
+ dispatchEvent(t) {
+ if (void 0 === this._listeners) return;
+ const e = this._listeners[t.type];
+ if (void 0 !== e) {
+ t.target = this;
+ const n = e.slice(0);
+ for (let e = 0, i = n.length; e < i; e++) n[e].call(this, t);
+ t.target = null;
+ }
+ }
+ }
+ const st = [];
+ for (let t = 0; t < 256; t++) st[t] = (t < 16 ? '0' : '') + t.toString(16);
+ let at = 1234567;
+ const ot = Math.PI / 180,
+ lt = 180 / Math.PI;
+ function ct() {
+ const t = (4294967295 * Math.random()) | 0,
+ e = (4294967295 * Math.random()) | 0,
+ n = (4294967295 * Math.random()) | 0,
+ i = (4294967295 * Math.random()) | 0;
+ return (
+ st[255 & t] +
+ st[(t >> 8) & 255] +
+ st[(t >> 16) & 255] +
+ st[(t >> 24) & 255] +
+ '-' +
+ st[255 & e] +
+ st[(e >> 8) & 255] +
+ '-' +
+ st[((e >> 16) & 15) | 64] +
+ st[(e >> 24) & 255] +
+ '-' +
+ st[(63 & n) | 128] +
+ st[(n >> 8) & 255] +
+ '-' +
+ st[(n >> 16) & 255] +
+ st[(n >> 24) & 255] +
+ st[255 & i] +
+ st[(i >> 8) & 255] +
+ st[(i >> 16) & 255] +
+ st[(i >> 24) & 255]
+ ).toUpperCase();
+ }
+ function ht(t, e, n) {
+ return Math.max(e, Math.min(n, t));
+ }
+ function ut(t, e) {
+ return ((t % e) + e) % e;
+ }
+ function dt(t, e, n) {
+ return (1 - n) * t + n * e;
+ }
+ function pt(t) {
+ return 0 == (t & (t - 1)) && 0 !== t;
+ }
+ function mt(t) {
+ return Math.pow(2, Math.ceil(Math.log(t) / Math.LN2));
+ }
+ function ft(t) {
+ return Math.pow(2, Math.floor(Math.log(t) / Math.LN2));
+ }
+ var gt = Object.freeze({
+ __proto__: null,
+ DEG2RAD: ot,
+ RAD2DEG: lt,
+ generateUUID: ct,
+ clamp: ht,
+ euclideanModulo: ut,
+ mapLinear: function (t, e, n, i, r) {
+ return i + ((t - e) * (r - i)) / (n - e);
+ },
+ inverseLerp: function (t, e, n) {
+ return t !== e ? (n - t) / (e - t) : 0;
+ },
+ lerp: dt,
+ damp: function (t, e, n, i) {
+ return dt(t, e, 1 - Math.exp(-n * i));
+ },
+ pingpong: function (t, e = 1) {
+ return e - Math.abs(ut(t, 2 * e) - e);
+ },
+ smoothstep: function (t, e, n) {
+ return t <= e
+ ? 0
+ : t >= n
+ ? 1
+ : (t = (t - e) / (n - e)) * t * (3 - 2 * t);
+ },
+ smootherstep: function (t, e, n) {
+ return t <= e
+ ? 0
+ : t >= n
+ ? 1
+ : (t = (t - e) / (n - e)) * t * t * (t * (6 * t - 15) + 10);
+ },
+ randInt: function (t, e) {
+ return t + Math.floor(Math.random() * (e - t + 1));
+ },
+ randFloat: function (t, e) {
+ return t + Math.random() * (e - t);
+ },
+ randFloatSpread: function (t) {
+ return t * (0.5 - Math.random());
+ },
+ seededRandom: function (t) {
+ return (
+ void 0 !== t && (at = t % 2147483647),
+ (at = (16807 * at) % 2147483647),
+ (at - 1) / 2147483646
+ );
+ },
+ degToRad: function (t) {
+ return t * ot;
+ },
+ radToDeg: function (t) {
+ return t * lt;
+ },
+ isPowerOfTwo: pt,
+ ceilPowerOfTwo: mt,
+ floorPowerOfTwo: ft,
+ setQuaternionFromProperEuler: function (t, e, n, i, r) {
+ const s = Math.cos,
+ a = Math.sin,
+ o = s(n / 2),
+ l = a(n / 2),
+ c = s((e + i) / 2),
+ h = a((e + i) / 2),
+ u = s((e - i) / 2),
+ d = a((e - i) / 2),
+ p = s((i - e) / 2),
+ m = a((i - e) / 2);
+ switch (r) {
+ case 'XYX':
+ t.set(o * h, l * u, l * d, o * c);
+ break;
+ case 'YZY':
+ t.set(l * d, o * h, l * u, o * c);
+ break;
+ case 'ZXZ':
+ t.set(l * u, l * d, o * h, o * c);
+ break;
+ case 'XZX':
+ t.set(o * h, l * m, l * p, o * c);
+ break;
+ case 'YXY':
+ t.set(l * p, o * h, l * m, o * c);
+ break;
+ case 'ZYZ':
+ t.set(l * m, l * p, o * h, o * c);
+ break;
+ default:
+ console.warn(
+ 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' +
+ r
+ );
+ }
+ },
+ });
+ class vt {
+ constructor(t = 0, e = 0) {
+ (this.x = t), (this.y = e);
+ }
+ get width() {
+ return this.x;
+ }
+ set width(t) {
+ this.x = t;
+ }
+ get height() {
+ return this.y;
+ }
+ set height(t) {
+ this.y = t;
+ }
+ set(t, e) {
+ return (this.x = t), (this.y = e), this;
+ }
+ setScalar(t) {
+ return (this.x = t), (this.y = t), this;
+ }
+ setX(t) {
+ return (this.x = t), this;
+ }
+ setY(t) {
+ return (this.y = t), this;
+ }
+ setComponent(t, e) {
+ switch (t) {
+ case 0:
+ this.x = e;
+ break;
+ case 1:
+ this.y = e;
+ break;
+ default:
+ throw new Error('index is out of range: ' + t);
+ }
+ return this;
+ }
+ getComponent(t) {
+ switch (t) {
+ case 0:
+ return this.x;
+ case 1:
+ return this.y;
+ default:
+ throw new Error('index is out of range: ' + t);
+ }
+ }
+ clone() {
+ return new this.constructor(this.x, this.y);
+ }
+ copy(t) {
+ return (this.x = t.x), (this.y = t.y), this;
+ }
+ add(t, e) {
+ return void 0 !== e
+ ? (console.warn(
+ 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.'
+ ),
+ this.addVectors(t, e))
+ : ((this.x += t.x), (this.y += t.y), this);
+ }
+ addScalar(t) {
+ return (this.x += t), (this.y += t), this;
+ }
+ addVectors(t, e) {
+ return (this.x = t.x + e.x), (this.y = t.y + e.y), this;
+ }
+ addScaledVector(t, e) {
+ return (this.x += t.x * e), (this.y += t.y * e), this;
+ }
+ sub(t, e) {
+ return void 0 !== e
+ ? (console.warn(
+ 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.'
+ ),
+ this.subVectors(t, e))
+ : ((this.x -= t.x), (this.y -= t.y), this);
+ }
+ subScalar(t) {
+ return (this.x -= t), (this.y -= t), this;
+ }
+ subVectors(t, e) {
+ return (this.x = t.x - e.x), (this.y = t.y - e.y), this;
+ }
+ multiply(t) {
+ return (this.x *= t.x), (this.y *= t.y), this;
+ }
+ multiplyScalar(t) {
+ return (this.x *= t), (this.y *= t), this;
+ }
+ divide(t) {
+ return (this.x /= t.x), (this.y /= t.y), this;
+ }
+ divideScalar(t) {
+ return this.multiplyScalar(1 / t);
+ }
+ applyMatrix3(t) {
+ const e = this.x,
+ n = this.y,
+ i = t.elements;
+ return (
+ (this.x = i[0] * e + i[3] * n + i[6]),
+ (this.y = i[1] * e + i[4] * n + i[7]),
+ this
+ );
+ }
+ min(t) {
+ return (
+ (this.x = Math.min(this.x, t.x)), (this.y = Math.min(this.y, t.y)), this
+ );
+ }
+ max(t) {
+ return (
+ (this.x = Math.max(this.x, t.x)), (this.y = Math.max(this.y, t.y)), this
+ );
+ }
+ clamp(t, e) {
+ return (
+ (this.x = Math.max(t.x, Math.min(e.x, this.x))),
+ (this.y = Math.max(t.y, Math.min(e.y, this.y))),
+ this
+ );
+ }
+ clampScalar(t, e) {
+ return (
+ (this.x = Math.max(t, Math.min(e, this.x))),
+ (this.y = Math.max(t, Math.min(e, this.y))),
+ this
+ );
+ }
+ clampLength(t, e) {
+ const n = this.length();
+ return this.divideScalar(n || 1).multiplyScalar(
+ Math.max(t, Math.min(e, n))
+ );
+ }
+ floor() {
+ return (this.x = Math.floor(this.x)), (this.y = Math.floor(this.y)), this;
+ }
+ ceil() {
+ return (this.x = Math.ceil(this.x)), (this.y = Math.ceil(this.y)), this;
+ }
+ round() {
+ return (this.x = Math.round(this.x)), (this.y = Math.round(this.y)), this;
+ }
+ roundToZero() {
+ return (
+ (this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x)),
+ (this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y)),
+ this
+ );
+ }
+ negate() {
+ return (this.x = -this.x), (this.y = -this.y), this;
+ }
+ dot(t) {
+ return this.x * t.x + this.y * t.y;
+ }
+ cross(t) {
+ return this.x * t.y - this.y * t.x;
+ }
+ lengthSq() {
+ return this.x * this.x + this.y * this.y;
+ }
+ length() {
+ return Math.sqrt(this.x * this.x + this.y * this.y);
+ }
+ manhattanLength() {
+ return Math.abs(this.x) + Math.abs(this.y);
+ }
+ normalize() {
+ return this.divideScalar(this.length() || 1);
+ }
+ angle() {
+ return Math.atan2(-this.y, -this.x) + Math.PI;
+ }
+ distanceTo(t) {
+ return Math.sqrt(this.distanceToSquared(t));
+ }
+ distanceToSquared(t) {
+ const e = this.x - t.x,
+ n = this.y - t.y;
+ return e * e + n * n;
+ }
+ manhattanDistanceTo(t) {
+ return Math.abs(this.x - t.x) + Math.abs(this.y - t.y);
+ }
+ setLength(t) {
+ return this.normalize().multiplyScalar(t);
+ }
+ lerp(t, e) {
+ return (
+ (this.x += (t.x - this.x) * e), (this.y += (t.y - this.y) * e), this
+ );
+ }
+ lerpVectors(t, e, n) {
+ return (
+ (this.x = t.x + (e.x - t.x) * n), (this.y = t.y + (e.y - t.y) * n), this
+ );
+ }
+ equals(t) {
+ return t.x === this.x && t.y === this.y;
+ }
+ fromArray(t, e = 0) {
+ return (this.x = t[e]), (this.y = t[e + 1]), this;
+ }
+ toArray(t = [], e = 0) {
+ return (t[e] = this.x), (t[e + 1] = this.y), t;
+ }
+ fromBufferAttribute(t, e, n) {
+ return (
+ void 0 !== n &&
+ console.warn(
+ 'THREE.Vector2: offset has been removed from .fromBufferAttribute().'
+ ),
+ (this.x = t.getX(e)),
+ (this.y = t.getY(e)),
+ this
+ );
+ }
+ rotateAround(t, e) {
+ const n = Math.cos(e),
+ i = Math.sin(e),
+ r = this.x - t.x,
+ s = this.y - t.y;
+ return (
+ (this.x = r * n - s * i + t.x), (this.y = r * i + s * n + t.y), this
+ );
+ }
+ random() {
+ return (this.x = Math.random()), (this.y = Math.random()), this;
+ }
+ }
+ vt.prototype.isVector2 = !0;
+ class yt {
+ constructor() {
+ (this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1]),
+ arguments.length > 0 &&
+ console.error(
+ 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.'
+ );
+ }
+ set(t, e, n, i, r, s, a, o, l) {
+ const c = this.elements;
+ return (
+ (c[0] = t),
+ (c[1] = i),
+ (c[2] = a),
+ (c[3] = e),
+ (c[4] = r),
+ (c[5] = o),
+ (c[6] = n),
+ (c[7] = s),
+ (c[8] = l),
+ this
+ );
+ }
+ identity() {
+ return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), this;
+ }
+ copy(t) {
+ const e = this.elements,
+ n = t.elements;
+ return (
+ (e[0] = n[0]),
+ (e[1] = n[1]),
+ (e[2] = n[2]),
+ (e[3] = n[3]),
+ (e[4] = n[4]),
+ (e[5] = n[5]),
+ (e[6] = n[6]),
+ (e[7] = n[7]),
+ (e[8] = n[8]),
+ this
+ );
+ }
+ extractBasis(t, e, n) {
+ return (
+ t.setFromMatrix3Column(this, 0),
+ e.setFromMatrix3Column(this, 1),
+ n.setFromMatrix3Column(this, 2),
+ this
+ );
+ }
+ setFromMatrix4(t) {
+ const e = t.elements;
+ return (
+ this.set(e[0], e[4], e[8], e[1], e[5], e[9], e[2], e[6], e[10]), this
+ );
+ }
+ multiply(t) {
+ return this.multiplyMatrices(this, t);
+ }
+ premultiply(t) {
+ return this.multiplyMatrices(t, this);
+ }
+ multiplyMatrices(t, e) {
+ const n = t.elements,
+ i = e.elements,
+ r = this.elements,
+ s = n[0],
+ a = n[3],
+ o = n[6],
+ l = n[1],
+ c = n[4],
+ h = n[7],
+ u = n[2],
+ d = n[5],
+ p = n[8],
+ m = i[0],
+ f = i[3],
+ g = i[6],
+ v = i[1],
+ y = i[4],
+ x = i[7],
+ _ = i[2],
+ w = i[5],
+ b = i[8];
+ return (
+ (r[0] = s * m + a * v + o * _),
+ (r[3] = s * f + a * y + o * w),
+ (r[6] = s * g + a * x + o * b),
+ (r[1] = l * m + c * v + h * _),
+ (r[4] = l * f + c * y + h * w),
+ (r[7] = l * g + c * x + h * b),
+ (r[2] = u * m + d * v + p * _),
+ (r[5] = u * f + d * y + p * w),
+ (r[8] = u * g + d * x + p * b),
+ this
+ );
+ }
+ multiplyScalar(t) {
+ const e = this.elements;
+ return (
+ (e[0] *= t),
+ (e[3] *= t),
+ (e[6] *= t),
+ (e[1] *= t),
+ (e[4] *= t),
+ (e[7] *= t),
+ (e[2] *= t),
+ (e[5] *= t),
+ (e[8] *= t),
+ this
+ );
+ }
+ determinant() {
+ const t = this.elements,
+ e = t[0],
+ n = t[1],
+ i = t[2],
+ r = t[3],
+ s = t[4],
+ a = t[5],
+ o = t[6],
+ l = t[7],
+ c = t[8];
+ return (
+ e * s * c - e * a * l - n * r * c + n * a * o + i * r * l - i * s * o
+ );
+ }
+ invert() {
+ const t = this.elements,
+ e = t[0],
+ n = t[1],
+ i = t[2],
+ r = t[3],
+ s = t[4],
+ a = t[5],
+ o = t[6],
+ l = t[7],
+ c = t[8],
+ h = c * s - a * l,
+ u = a * o - c * r,
+ d = l * r - s * o,
+ p = e * h + n * u + i * d;
+ if (0 === p) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0);
+ const m = 1 / p;
+ return (
+ (t[0] = h * m),
+ (t[1] = (i * l - c * n) * m),
+ (t[2] = (a * n - i * s) * m),
+ (t[3] = u * m),
+ (t[4] = (c * e - i * o) * m),
+ (t[5] = (i * r - a * e) * m),
+ (t[6] = d * m),
+ (t[7] = (n * o - l * e) * m),
+ (t[8] = (s * e - n * r) * m),
+ this
+ );
+ }
+ transpose() {
+ let t;
+ const e = this.elements;
+ return (
+ (t = e[1]),
+ (e[1] = e[3]),
+ (e[3] = t),
+ (t = e[2]),
+ (e[2] = e[6]),
+ (e[6] = t),
+ (t = e[5]),
+ (e[5] = e[7]),
+ (e[7] = t),
+ this
+ );
+ }
+ getNormalMatrix(t) {
+ return this.setFromMatrix4(t).invert().transpose();
+ }
+ transposeIntoArray(t) {
+ const e = this.elements;
+ return (
+ (t[0] = e[0]),
+ (t[1] = e[3]),
+ (t[2] = e[6]),
+ (t[3] = e[1]),
+ (t[4] = e[4]),
+ (t[5] = e[7]),
+ (t[6] = e[2]),
+ (t[7] = e[5]),
+ (t[8] = e[8]),
+ this
+ );
+ }
+ setUvTransform(t, e, n, i, r, s, a) {
+ const o = Math.cos(r),
+ l = Math.sin(r);
+ return (
+ this.set(
+ n * o,
+ n * l,
+ -n * (o * s + l * a) + s + t,
+ -i * l,
+ i * o,
+ -i * (-l * s + o * a) + a + e,
+ 0,
+ 0,
+ 1
+ ),
+ this
+ );
+ }
+ scale(t, e) {
+ const n = this.elements;
+ return (
+ (n[0] *= t),
+ (n[3] *= t),
+ (n[6] *= t),
+ (n[1] *= e),
+ (n[4] *= e),
+ (n[7] *= e),
+ this
+ );
+ }
+ rotate(t) {
+ const e = Math.cos(t),
+ n = Math.sin(t),
+ i = this.elements,
+ r = i[0],
+ s = i[3],
+ a = i[6],
+ o = i[1],
+ l = i[4],
+ c = i[7];
+ return (
+ (i[0] = e * r + n * o),
+ (i[3] = e * s + n * l),
+ (i[6] = e * a + n * c),
+ (i[1] = -n * r + e * o),
+ (i[4] = -n * s + e * l),
+ (i[7] = -n * a + e * c),
+ this
+ );
+ }
+ translate(t, e) {
+ const n = this.elements;
+ return (
+ (n[0] += t * n[2]),
+ (n[3] += t * n[5]),
+ (n[6] += t * n[8]),
+ (n[1] += e * n[2]),
+ (n[4] += e * n[5]),
+ (n[7] += e * n[8]),
+ this
+ );
+ }
+ equals(t) {
+ const e = this.elements,
+ n = t.elements;
+ for (let t = 0; t < 9; t++) if (e[t] !== n[t]) return !1;
+ return !0;
+ }
+ fromArray(t, e = 0) {
+ for (let n = 0; n < 9; n++) this.elements[n] = t[n + e];
+ return this;
+ }
+ toArray(t = [], e = 0) {
+ const n = this.elements;
+ return (
+ (t[e] = n[0]),
+ (t[e + 1] = n[1]),
+ (t[e + 2] = n[2]),
+ (t[e + 3] = n[3]),
+ (t[e + 4] = n[4]),
+ (t[e + 5] = n[5]),
+ (t[e + 6] = n[6]),
+ (t[e + 7] = n[7]),
+ (t[e + 8] = n[8]),
+ t
+ );
+ }
+ clone() {
+ return new this.constructor().fromArray(this.elements);
+ }
+ }
+ let xt;
+ yt.prototype.isMatrix3 = !0;
+ class _t {
+ static getDataURL(t) {
+ if (/^data:/i.test(t.src)) return t.src;
+ if ('undefined' == typeof HTMLCanvasElement) return t.src;
+ let e;
+ if (t instanceof HTMLCanvasElement) e = t;
+ else {
+ void 0 === xt &&
+ (xt = document.createElementNS(
+ 'http://www.w3.org/1999/xhtml',
+ 'canvas'
+ )),
+ (xt.width = t.width),
+ (xt.height = t.height);
+ const n = xt.getContext('2d');
+ t instanceof ImageData
+ ? n.putImageData(t, 0, 0)
+ : n.drawImage(t, 0, 0, t.width, t.height),
+ (e = xt);
+ }
+ return e.width > 2048 || e.height > 2048
+ ? (console.warn(
+ 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons',
+ t
+ ),
+ e.toDataURL('image/jpeg', 0.6))
+ : e.toDataURL('image/png');
+ }
+ }
+ let wt = 0;
+ class bt extends rt {
+ constructor(
+ t = bt.DEFAULT_IMAGE,
+ e = bt.DEFAULT_MAPPING,
+ n = 1001,
+ i = 1001,
+ r = 1006,
+ s = 1008,
+ a = 1023,
+ o = 1009,
+ l = 1,
+ c = 3e3
+ ) {
+ super(),
+ Object.defineProperty(this, 'id', { value: wt++ }),
+ (this.uuid = ct()),
+ (this.name = ''),
+ (this.image = t),
+ (this.mipmaps = []),
+ (this.mapping = e),
+ (this.wrapS = n),
+ (this.wrapT = i),
+ (this.magFilter = r),
+ (this.minFilter = s),
+ (this.anisotropy = l),
+ (this.format = a),
+ (this.internalFormat = null),
+ (this.type = o),
+ (this.offset = new vt(0, 0)),
+ (this.repeat = new vt(1, 1)),
+ (this.center = new vt(0, 0)),
+ (this.rotation = 0),
+ (this.matrixAutoUpdate = !0),
+ (this.matrix = new yt()),
+ (this.generateMipmaps = !0),
+ (this.premultiplyAlpha = !1),
+ (this.flipY = !0),
+ (this.unpackAlignment = 4),
+ (this.encoding = c),
+ (this.version = 0),
+ (this.onUpdate = null);
+ }
+ updateMatrix() {
+ this.matrix.setUvTransform(
+ this.offset.x,
+ this.offset.y,
+ this.repeat.x,
+ this.repeat.y,
+ this.rotation,
+ this.center.x,
+ this.center.y
+ );
+ }
+ clone() {
+ return new this.constructor().copy(this);
+ }
+ copy(t) {
+ return (
+ (this.name = t.name),
+ (this.image = t.image),
+ (this.mipmaps = t.mipmaps.slice(0)),
+ (this.mapping = t.mapping),
+ (this.wrapS = t.wrapS),
+ (this.wrapT = t.wrapT),
+ (this.magFilter = t.magFilter),
+ (this.minFilter = t.minFilter),
+ (this.anisotropy = t.anisotropy),
+ (this.format = t.format),
+ (this.internalFormat = t.internalFormat),
+ (this.type = t.type),
+ this.offset.copy(t.offset),
+ this.repeat.copy(t.repeat),
+ this.center.copy(t.center),
+ (this.rotation = t.rotation),
+ (this.matrixAutoUpdate = t.matrixAutoUpdate),
+ this.matrix.copy(t.matrix),
+ (this.generateMipmaps = t.generateMipmaps),
+ (this.premultiplyAlpha = t.premultiplyAlpha),
+ (this.flipY = t.flipY),
+ (this.unpackAlignment = t.unpackAlignment),
+ (this.encoding = t.encoding),
+ this
+ );
+ }
+ toJSON(t) {
+ const e = void 0 === t || 'string' == typeof t;
+ if (!e && void 0 !== t.textures[this.uuid]) return t.textures[this.uuid];
+ const n = {
+ metadata: {
+ version: 4.5,
+ type: 'Texture',
+ generator: 'Texture.toJSON',
+ },
+ uuid: this.uuid,
+ name: this.name,
+ mapping: this.mapping,
+ repeat: [this.repeat.x, this.repeat.y],
+ offset: [this.offset.x, this.offset.y],
+ center: [this.center.x, this.center.y],
+ rotation: this.rotation,
+ wrap: [this.wrapS, this.wrapT],
+ format: this.format,
+ type: this.type,
+ encoding: this.encoding,
+ minFilter: this.minFilter,
+ magFilter: this.magFilter,
+ anisotropy: this.anisotropy,
+ flipY: this.flipY,
+ premultiplyAlpha: this.premultiplyAlpha,
+ unpackAlignment: this.unpackAlignment,
+ };
+ if (void 0 !== this.image) {
+ const i = this.image;
+ if (
+ (void 0 === i.uuid && (i.uuid = ct()),
+ !e && void 0 === t.images[i.uuid])
+ ) {
+ let e;
+ if (Array.isArray(i)) {
+ e = [];
+ for (let t = 0, n = i.length; t < n; t++)
+ i[t].isDataTexture ? e.push(Mt(i[t].image)) : e.push(Mt(i[t]));
+ } else e = Mt(i);
+ t.images[i.uuid] = { uuid: i.uuid, url: e };
+ }
+ n.image = i.uuid;
+ }
+ return e || (t.textures[this.uuid] = n), n;
+ }
+ dispose() {
+ this.dispatchEvent({ type: 'dispose' });
+ }
+ transformUv(t) {
+ if (this.mapping !== i) return t;
+ if ((t.applyMatrix3(this.matrix), t.x < 0 || t.x > 1))
+ switch (this.wrapS) {
+ case h:
+ t.x = t.x - Math.floor(t.x);
+ break;
+ case u:
+ t.x = t.x < 0 ? 0 : 1;
+ break;
+ case d:
+ 1 === Math.abs(Math.floor(t.x) % 2)
+ ? (t.x = Math.ceil(t.x) - t.x)
+ : (t.x = t.x - Math.floor(t.x));
+ }
+ if (t.y < 0 || t.y > 1)
+ switch (this.wrapT) {
+ case h:
+ t.y = t.y - Math.floor(t.y);
+ break;
+ case u:
+ t.y = t.y < 0 ? 0 : 1;
+ break;
+ case d:
+ 1 === Math.abs(Math.floor(t.y) % 2)
+ ? (t.y = Math.ceil(t.y) - t.y)
+ : (t.y = t.y - Math.floor(t.y));
+ }
+ return this.flipY && (t.y = 1 - t.y), t;
+ }
+ set needsUpdate(t) {
+ !0 === t && this.version++;
+ }
+ }
+ function Mt(t) {
+ return ('undefined' != typeof HTMLImageElement &&
+ t instanceof HTMLImageElement) ||
+ ('undefined' != typeof HTMLCanvasElement &&
+ t instanceof HTMLCanvasElement) ||
+ ('undefined' != typeof ImageBitmap && t instanceof ImageBitmap)
+ ? _t.getDataURL(t)
+ : t.data
+ ? {
+ data: Array.prototype.slice.call(t.data),
+ width: t.width,
+ height: t.height,
+ type: t.data.constructor.name,
+ }
+ : (console.warn('THREE.Texture: Unable to serialize Texture.'), {});
+ }
+ (bt.DEFAULT_IMAGE = void 0),
+ (bt.DEFAULT_MAPPING = i),
+ (bt.prototype.isTexture = !0);
+ class St {
+ constructor(t = 0, e = 0, n = 0, i = 1) {
+ (this.x = t), (this.y = e), (this.z = n), (this.w = i);
+ }
+ get width() {
+ return this.z;
+ }
+ set width(t) {
+ this.z = t;
+ }
+ get height() {
+ return this.w;
+ }
+ set height(t) {
+ this.w = t;
+ }
+ set(t, e, n, i) {
+ return (this.x = t), (this.y = e), (this.z = n), (this.w = i), this;
+ }
+ setScalar(t) {
+ return (this.x = t), (this.y = t), (this.z = t), (this.w = t), this;
+ }
+ setX(t) {
+ return (this.x = t), this;
+ }
+ setY(t) {
+ return (this.y = t), this;
+ }
+ setZ(t) {
+ return (this.z = t), this;
+ }
+ setW(t) {
+ return (this.w = t), this;
+ }
+ setComponent(t, e) {
+ switch (t) {
+ case 0:
+ this.x = e;
+ break;
+ case 1:
+ this.y = e;
+ break;
+ case 2:
+ this.z = e;
+ break;
+ case 3:
+ this.w = e;
+ break;
+ default:
+ throw new Error('index is out of range: ' + t);
+ }
+ return this;
+ }
+ getComponent(t) {
+ switch (t) {
+ case 0:
+ return this.x;
+ case 1:
+ return this.y;
+ case 2:
+ return this.z;
+ case 3:
+ return this.w;
+ default:
+ throw new Error('index is out of range: ' + t);
+ }
+ }
+ clone() {
+ return new this.constructor(this.x, this.y, this.z, this.w);
+ }
+ copy(t) {
+ return (
+ (this.x = t.x),
+ (this.y = t.y),
+ (this.z = t.z),
+ (this.w = void 0 !== t.w ? t.w : 1),
+ this
+ );
+ }
+ add(t, e) {
+ return void 0 !== e
+ ? (console.warn(
+ 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.'
+ ),
+ this.addVectors(t, e))
+ : ((this.x += t.x),
+ (this.y += t.y),
+ (this.z += t.z),
+ (this.w += t.w),
+ this);
+ }
+ addScalar(t) {
+ return (this.x += t), (this.y += t), (this.z += t), (this.w += t), this;
+ }
+ addVectors(t, e) {
+ return (
+ (this.x = t.x + e.x),
+ (this.y = t.y + e.y),
+ (this.z = t.z + e.z),
+ (this.w = t.w + e.w),
+ this
+ );
+ }
+ addScaledVector(t, e) {
+ return (
+ (this.x += t.x * e),
+ (this.y += t.y * e),
+ (this.z += t.z * e),
+ (this.w += t.w * e),
+ this
+ );
+ }
+ sub(t, e) {
+ return void 0 !== e
+ ? (console.warn(
+ 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.'
+ ),
+ this.subVectors(t, e))
+ : ((this.x -= t.x),
+ (this.y -= t.y),
+ (this.z -= t.z),
+ (this.w -= t.w),
+ this);
+ }
+ subScalar(t) {
+ return (this.x -= t), (this.y -= t), (this.z -= t), (this.w -= t), this;
+ }
+ subVectors(t, e) {
+ return (
+ (this.x = t.x - e.x),
+ (this.y = t.y - e.y),
+ (this.z = t.z - e.z),
+ (this.w = t.w - e.w),
+ this
+ );
+ }
+ multiply(t) {
+ return (
+ (this.x *= t.x), (this.y *= t.y), (this.z *= t.z), (this.w *= t.w), this
+ );
+ }
+ multiplyScalar(t) {
+ return (this.x *= t), (this.y *= t), (this.z *= t), (this.w *= t), this;
+ }
+ applyMatrix4(t) {
+ const e = this.x,
+ n = this.y,
+ i = this.z,
+ r = this.w,
+ s = t.elements;
+ return (
+ (this.x = s[0] * e + s[4] * n + s[8] * i + s[12] * r),
+ (this.y = s[1] * e + s[5] * n + s[9] * i + s[13] * r),
+ (this.z = s[2] * e + s[6] * n + s[10] * i + s[14] * r),
+ (this.w = s[3] * e + s[7] * n + s[11] * i + s[15] * r),
+ this
+ );
+ }
+ divideScalar(t) {
+ return this.multiplyScalar(1 / t);
+ }
+ setAxisAngleFromQuaternion(t) {
+ this.w = 2 * Math.acos(t.w);
+ const e = Math.sqrt(1 - t.w * t.w);
+ return (
+ e < 1e-4
+ ? ((this.x = 1), (this.y = 0), (this.z = 0))
+ : ((this.x = t.x / e), (this.y = t.y / e), (this.z = t.z / e)),
+ this
+ );
+ }
+ setAxisAngleFromRotationMatrix(t) {
+ let e, n, i, r;
+ const s = 0.01,
+ a = 0.1,
+ o = t.elements,
+ l = o[0],
+ c = o[4],
+ h = o[8],
+ u = o[1],
+ d = o[5],
+ p = o[9],
+ m = o[2],
+ f = o[6],
+ g = o[10];
+ if (Math.abs(c - u) < s && Math.abs(h - m) < s && Math.abs(p - f) < s) {
+ if (
+ Math.abs(c + u) < a &&
+ Math.abs(h + m) < a &&
+ Math.abs(p + f) < a &&
+ Math.abs(l + d + g - 3) < a
+ )
+ return this.set(1, 0, 0, 0), this;
+ e = Math.PI;
+ const t = (l + 1) / 2,
+ o = (d + 1) / 2,
+ v = (g + 1) / 2,
+ y = (c + u) / 4,
+ x = (h + m) / 4,
+ _ = (p + f) / 4;
+ return (
+ t > o && t > v
+ ? t < s
+ ? ((n = 0), (i = 0.707106781), (r = 0.707106781))
+ : ((n = Math.sqrt(t)), (i = y / n), (r = x / n))
+ : o > v
+ ? o < s
+ ? ((n = 0.707106781), (i = 0), (r = 0.707106781))
+ : ((i = Math.sqrt(o)), (n = y / i), (r = _ / i))
+ : v < s
+ ? ((n = 0.707106781), (i = 0.707106781), (r = 0))
+ : ((r = Math.sqrt(v)), (n = x / r), (i = _ / r)),
+ this.set(n, i, r, e),
+ this
+ );
+ }
+ let v = Math.sqrt(
+ (f - p) * (f - p) + (h - m) * (h - m) + (u - c) * (u - c)
+ );
+ return (
+ Math.abs(v) < 0.001 && (v = 1),
+ (this.x = (f - p) / v),
+ (this.y = (h - m) / v),
+ (this.z = (u - c) / v),
+ (this.w = Math.acos((l + d + g - 1) / 2)),
+ this
+ );
+ }
+ min(t) {
+ return (
+ (this.x = Math.min(this.x, t.x)),
+ (this.y = Math.min(this.y, t.y)),
+ (this.z = Math.min(this.z, t.z)),
+ (this.w = Math.min(this.w, t.w)),
+ this
+ );
+ }
+ max(t) {
+ return (
+ (this.x = Math.max(this.x, t.x)),
+ (this.y = Math.max(this.y, t.y)),
+ (this.z = Math.max(this.z, t.z)),
+ (this.w = Math.max(this.w, t.w)),
+ this
+ );
+ }
+ clamp(t, e) {
+ return (
+ (this.x = Math.max(t.x, Math.min(e.x, this.x))),
+ (this.y = Math.max(t.y, Math.min(e.y, this.y))),
+ (this.z = Math.max(t.z, Math.min(e.z, this.z))),
+ (this.w = Math.max(t.w, Math.min(e.w, this.w))),
+ this
+ );
+ }
+ clampScalar(t, e) {
+ return (
+ (this.x = Math.max(t, Math.min(e, this.x))),
+ (this.y = Math.max(t, Math.min(e, this.y))),
+ (this.z = Math.max(t, Math.min(e, this.z))),
+ (this.w = Math.max(t, Math.min(e, this.w))),
+ this
+ );
+ }
+ clampLength(t, e) {
+ const n = this.length();
+ return this.divideScalar(n || 1).multiplyScalar(
+ Math.max(t, Math.min(e, n))
+ );
+ }
+ floor() {
+ return (
+ (this.x = Math.floor(this.x)),
+ (this.y = Math.floor(this.y)),
+ (this.z = Math.floor(this.z)),
+ (this.w = Math.floor(this.w)),
+ this
+ );
+ }
+ ceil() {
+ return (
+ (this.x = Math.ceil(this.x)),
+ (this.y = Math.ceil(this.y)),
+ (this.z = Math.ceil(this.z)),
+ (this.w = Math.ceil(this.w)),
+ this
+ );
+ }
+ round() {
+ return (
+ (this.x = Math.round(this.x)),
+ (this.y = Math.round(this.y)),
+ (this.z = Math.round(this.z)),
+ (this.w = Math.round(this.w)),
+ this
+ );
+ }
+ roundToZero() {
+ return (
+ (this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x)),
+ (this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y)),
+ (this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z)),
+ (this.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w)),
+ this
+ );
+ }
+ negate() {
+ return (
+ (this.x = -this.x),
+ (this.y = -this.y),
+ (this.z = -this.z),
+ (this.w = -this.w),
+ this
+ );
+ }
+ dot(t) {
+ return this.x * t.x + this.y * t.y + this.z * t.z + this.w * t.w;
+ }
+ lengthSq() {
+ return (
+ this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w
+ );
+ }
+ length() {
+ return Math.sqrt(
+ this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w
+ );
+ }
+ manhattanLength() {
+ return (
+ Math.abs(this.x) +
+ Math.abs(this.y) +
+ Math.abs(this.z) +
+ Math.abs(this.w)
+ );
+ }
+ normalize() {
+ return this.divideScalar(this.length() || 1);
+ }
+ setLength(t) {
+ return this.normalize().multiplyScalar(t);
+ }
+ lerp(t, e) {
+ return (
+ (this.x += (t.x - this.x) * e),
+ (this.y += (t.y - this.y) * e),
+ (this.z += (t.z - this.z) * e),
+ (this.w += (t.w - this.w) * e),
+ this
+ );
+ }
+ lerpVectors(t, e, n) {
+ return (
+ (this.x = t.x + (e.x - t.x) * n),
+ (this.y = t.y + (e.y - t.y) * n),
+ (this.z = t.z + (e.z - t.z) * n),
+ (this.w = t.w + (e.w - t.w) * n),
+ this
+ );
+ }
+ equals(t) {
+ return (
+ t.x === this.x && t.y === this.y && t.z === this.z && t.w === this.w
+ );
+ }
+ fromArray(t, e = 0) {
+ return (
+ (this.x = t[e]),
+ (this.y = t[e + 1]),
+ (this.z = t[e + 2]),
+ (this.w = t[e + 3]),
+ this
+ );
+ }
+ toArray(t = [], e = 0) {
+ return (
+ (t[e] = this.x),
+ (t[e + 1] = this.y),
+ (t[e + 2] = this.z),
+ (t[e + 3] = this.w),
+ t
+ );
+ }
+ fromBufferAttribute(t, e, n) {
+ return (
+ void 0 !== n &&
+ console.warn(
+ 'THREE.Vector4: offset has been removed from .fromBufferAttribute().'
+ ),
+ (this.x = t.getX(e)),
+ (this.y = t.getY(e)),
+ (this.z = t.getZ(e)),
+ (this.w = t.getW(e)),
+ this
+ );
+ }
+ random() {
+ return (
+ (this.x = Math.random()),
+ (this.y = Math.random()),
+ (this.z = Math.random()),
+ (this.w = Math.random()),
+ this
+ );
+ }
+ }
+ St.prototype.isVector4 = !0;
+ class Tt extends rt {
+ constructor(t, e, n) {
+ super(),
+ (this.width = t),
+ (this.height = e),
+ (this.depth = 1),
+ (this.scissor = new St(0, 0, t, e)),
+ (this.scissorTest = !1),
+ (this.viewport = new St(0, 0, t, e)),
+ (n = n || {}),
+ (this.texture = new bt(
+ void 0,
+ n.mapping,
+ n.wrapS,
+ n.wrapT,
+ n.magFilter,
+ n.minFilter,
+ n.format,
+ n.type,
+ n.anisotropy,
+ n.encoding
+ )),
+ (this.texture.image = {}),
+ (this.texture.image.width = t),
+ (this.texture.image.height = e),
+ (this.texture.image.depth = 1),
+ (this.texture.generateMipmaps =
+ void 0 !== n.generateMipmaps && n.generateMipmaps),
+ (this.texture.minFilter = void 0 !== n.minFilter ? n.minFilter : g),
+ (this.depthBuffer = void 0 === n.depthBuffer || n.depthBuffer),
+ (this.stencilBuffer = void 0 !== n.stencilBuffer && n.stencilBuffer),
+ (this.depthTexture = void 0 !== n.depthTexture ? n.depthTexture : null);
+ }
+ setTexture(t) {
+ (t.image = { width: this.width, height: this.height, depth: this.depth }),
+ (this.texture = t);
+ }
+ setSize(t, e, n = 1) {
+ (this.width === t && this.height === e && this.depth === n) ||
+ ((this.width = t),
+ (this.height = e),
+ (this.depth = n),
+ (this.texture.image.width = t),
+ (this.texture.image.height = e),
+ (this.texture.image.depth = n),
+ this.dispose()),
+ this.viewport.set(0, 0, t, e),
+ this.scissor.set(0, 0, t, e);
+ }
+ clone() {
+ return new this.constructor().copy(this);
+ }
+ copy(t) {
+ return (
+ (this.width = t.width),
+ (this.height = t.height),
+ (this.depth = t.depth),
+ this.viewport.copy(t.viewport),
+ (this.texture = t.texture.clone()),
+ (this.depthBuffer = t.depthBuffer),
+ (this.stencilBuffer = t.stencilBuffer),
+ (this.depthTexture = t.depthTexture),
+ this
+ );
+ }
+ dispose() {
+ this.dispatchEvent({ type: 'dispose' });
+ }
+ }
+ Tt.prototype.isWebGLRenderTarget = !0;
+ class Et extends Tt {
+ constructor(t, e, n) {
+ super(t, e, n), (this.samples = 4);
+ }
+ copy(t) {
+ return super.copy.call(this, t), (this.samples = t.samples), this;
+ }
+ }
+ Et.prototype.isWebGLMultisampleRenderTarget = !0;
+ class At {
+ constructor(t = 0, e = 0, n = 0, i = 1) {
+ (this._x = t), (this._y = e), (this._z = n), (this._w = i);
+ }
+ static slerp(t, e, n, i) {
+ return (
+ console.warn(
+ 'THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.'
+ ),
+ n.slerpQuaternions(t, e, i)
+ );
+ }
+ static slerpFlat(t, e, n, i, r, s, a) {
+ let o = n[i + 0],
+ l = n[i + 1],
+ c = n[i + 2],
+ h = n[i + 3];
+ const u = r[s + 0],
+ d = r[s + 1],
+ p = r[s + 2],
+ m = r[s + 3];
+ if (0 === a)
+ return (
+ (t[e + 0] = o), (t[e + 1] = l), (t[e + 2] = c), void (t[e + 3] = h)
+ );
+ if (1 === a)
+ return (
+ (t[e + 0] = u), (t[e + 1] = d), (t[e + 2] = p), void (t[e + 3] = m)
+ );
+ if (h !== m || o !== u || l !== d || c !== p) {
+ let t = 1 - a;
+ const e = o * u + l * d + c * p + h * m,
+ n = e >= 0 ? 1 : -1,
+ i = 1 - e * e;
+ if (i > Number.EPSILON) {
+ const r = Math.sqrt(i),
+ s = Math.atan2(r, e * n);
+ (t = Math.sin(t * s) / r), (a = Math.sin(a * s) / r);
+ }
+ const r = a * n;
+ if (
+ ((o = o * t + u * r),
+ (l = l * t + d * r),
+ (c = c * t + p * r),
+ (h = h * t + m * r),
+ t === 1 - a)
+ ) {
+ const t = 1 / Math.sqrt(o * o + l * l + c * c + h * h);
+ (o *= t), (l *= t), (c *= t), (h *= t);
+ }
+ }
+ (t[e] = o), (t[e + 1] = l), (t[e + 2] = c), (t[e + 3] = h);
+ }
+ static multiplyQuaternionsFlat(t, e, n, i, r, s) {
+ const a = n[i],
+ o = n[i + 1],
+ l = n[i + 2],
+ c = n[i + 3],
+ h = r[s],
+ u = r[s + 1],
+ d = r[s + 2],
+ p = r[s + 3];
+ return (
+ (t[e] = a * p + c * h + o * d - l * u),
+ (t[e + 1] = o * p + c * u + l * h - a * d),
+ (t[e + 2] = l * p + c * d + a * u - o * h),
+ (t[e + 3] = c * p - a * h - o * u - l * d),
+ t
+ );
+ }
+ get x() {
+ return this._x;
+ }
+ set x(t) {
+ (this._x = t), this._onChangeCallback();
+ }
+ get y() {
+ return this._y;
+ }
+ set y(t) {
+ (this._y = t), this._onChangeCallback();
+ }
+ get z() {
+ return this._z;
+ }
+ set z(t) {
+ (this._z = t), this._onChangeCallback();
+ }
+ get w() {
+ return this._w;
+ }
+ set w(t) {
+ (this._w = t), this._onChangeCallback();
+ }
+ set(t, e, n, i) {
+ return (
+ (this._x = t),
+ (this._y = e),
+ (this._z = n),
+ (this._w = i),
+ this._onChangeCallback(),
+ this
+ );
+ }
+ clone() {
+ return new this.constructor(this._x, this._y, this._z, this._w);
+ }
+ copy(t) {
+ return (
+ (this._x = t.x),
+ (this._y = t.y),
+ (this._z = t.z),
+ (this._w = t.w),
+ this._onChangeCallback(),
+ this
+ );
+ }
+ setFromEuler(t, e) {
+ if (!t || !t.isEuler)
+ throw new Error(
+ 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.'
+ );
+ const n = t._x,
+ i = t._y,
+ r = t._z,
+ s = t._order,
+ a = Math.cos,
+ o = Math.sin,
+ l = a(n / 2),
+ c = a(i / 2),
+ h = a(r / 2),
+ u = o(n / 2),
+ d = o(i / 2),
+ p = o(r / 2);
+ switch (s) {
+ case 'XYZ':
+ (this._x = u * c * h + l * d * p),
+ (this._y = l * d * h - u * c * p),
+ (this._z = l * c * p + u * d * h),
+ (this._w = l * c * h - u * d * p);
+ break;
+ case 'YXZ':
+ (this._x = u * c * h + l * d * p),
+ (this._y = l * d * h - u * c * p),
+ (this._z = l * c * p - u * d * h),
+ (this._w = l * c * h + u * d * p);
+ break;
+ case 'ZXY':
+ (this._x = u * c * h - l * d * p),
+ (this._y = l * d * h + u * c * p),
+ (this._z = l * c * p + u * d * h),
+ (this._w = l * c * h - u * d * p);
+ break;
+ case 'ZYX':
+ (this._x = u * c * h - l * d * p),
+ (this._y = l * d * h + u * c * p),
+ (this._z = l * c * p - u * d * h),
+ (this._w = l * c * h + u * d * p);
+ break;
+ case 'YZX':
+ (this._x = u * c * h + l * d * p),
+ (this._y = l * d * h + u * c * p),
+ (this._z = l * c * p - u * d * h),
+ (this._w = l * c * h - u * d * p);
+ break;
+ case 'XZY':
+ (this._x = u * c * h - l * d * p),
+ (this._y = l * d * h - u * c * p),
+ (this._z = l * c * p + u * d * h),
+ (this._w = l * c * h + u * d * p);
+ break;
+ default:
+ console.warn(
+ 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' +
+ s
+ );
+ }
+ return !1 !== e && this._onChangeCallback(), this;
+ }
+ setFromAxisAngle(t, e) {
+ const n = e / 2,
+ i = Math.sin(n);
+ return (
+ (this._x = t.x * i),
+ (this._y = t.y * i),
+ (this._z = t.z * i),
+ (this._w = Math.cos(n)),
+ this._onChangeCallback(),
+ this
+ );
+ }
+ setFromRotationMatrix(t) {
+ const e = t.elements,
+ n = e[0],
+ i = e[4],
+ r = e[8],
+ s = e[1],
+ a = e[5],
+ o = e[9],
+ l = e[2],
+ c = e[6],
+ h = e[10],
+ u = n + a + h;
+ if (u > 0) {
+ const t = 0.5 / Math.sqrt(u + 1);
+ (this._w = 0.25 / t),
+ (this._x = (c - o) * t),
+ (this._y = (r - l) * t),
+ (this._z = (s - i) * t);
+ } else if (n > a && n > h) {
+ const t = 2 * Math.sqrt(1 + n - a - h);
+ (this._w = (c - o) / t),
+ (this._x = 0.25 * t),
+ (this._y = (i + s) / t),
+ (this._z = (r + l) / t);
+ } else if (a > h) {
+ const t = 2 * Math.sqrt(1 + a - n - h);
+ (this._w = (r - l) / t),
+ (this._x = (i + s) / t),
+ (this._y = 0.25 * t),
+ (this._z = (o + c) / t);
+ } else {
+ const t = 2 * Math.sqrt(1 + h - n - a);
+ (this._w = (s - i) / t),
+ (this._x = (r + l) / t),
+ (this._y = (o + c) / t),
+ (this._z = 0.25 * t);
+ }
+ return this._onChangeCallback(), this;
+ }
+ setFromUnitVectors(t, e) {
+ let n = t.dot(e) + 1;
+ return (
+ n < Number.EPSILON
+ ? ((n = 0),
+ Math.abs(t.x) > Math.abs(t.z)
+ ? ((this._x = -t.y),
+ (this._y = t.x),
+ (this._z = 0),
+ (this._w = n))
+ : ((this._x = 0),
+ (this._y = -t.z),
+ (this._z = t.y),
+ (this._w = n)))
+ : ((this._x = t.y * e.z - t.z * e.y),
+ (this._y = t.z * e.x - t.x * e.z),
+ (this._z = t.x * e.y - t.y * e.x),
+ (this._w = n)),
+ this.normalize()
+ );
+ }
+ angleTo(t) {
+ return 2 * Math.acos(Math.abs(ht(this.dot(t), -1, 1)));
+ }
+ rotateTowards(t, e) {
+ const n = this.angleTo(t);
+ if (0 === n) return this;
+ const i = Math.min(1, e / n);
+ return this.slerp(t, i), this;
+ }
+ identity() {
+ return this.set(0, 0, 0, 1);
+ }
+ invert() {
+ return this.conjugate();
+ }
+ conjugate() {
+ return (
+ (this._x *= -1),
+ (this._y *= -1),
+ (this._z *= -1),
+ this._onChangeCallback(),
+ this
+ );
+ }
+ dot(t) {
+ return this._x * t._x + this._y * t._y + this._z * t._z + this._w * t._w;
+ }
+ lengthSq() {
+ return (
+ this._x * this._x +
+ this._y * this._y +
+ this._z * this._z +
+ this._w * this._w
+ );
+ }
+ length() {
+ return Math.sqrt(
+ this._x * this._x +
+ this._y * this._y +
+ this._z * this._z +
+ this._w * this._w
+ );
+ }
+ normalize() {
+ let t = this.length();
+ return (
+ 0 === t
+ ? ((this._x = 0), (this._y = 0), (this._z = 0), (this._w = 1))
+ : ((t = 1 / t),
+ (this._x = this._x * t),
+ (this._y = this._y * t),
+ (this._z = this._z * t),
+ (this._w = this._w * t)),
+ this._onChangeCallback(),
+ this
+ );
+ }
+ multiply(t, e) {
+ return void 0 !== e
+ ? (console.warn(
+ 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.'
+ ),
+ this.multiplyQuaternions(t, e))
+ : this.multiplyQuaternions(this, t);
+ }
+ premultiply(t) {
+ return this.multiplyQuaternions(t, this);
+ }
+ multiplyQuaternions(t, e) {
+ const n = t._x,
+ i = t._y,
+ r = t._z,
+ s = t._w,
+ a = e._x,
+ o = e._y,
+ l = e._z,
+ c = e._w;
+ return (
+ (this._x = n * c + s * a + i * l - r * o),
+ (this._y = i * c + s * o + r * a - n * l),
+ (this._z = r * c + s * l + n * o - i * a),
+ (this._w = s * c - n * a - i * o - r * l),
+ this._onChangeCallback(),
+ this
+ );
+ }
+ slerp(t, e) {
+ if (0 === e) return this;
+ if (1 === e) return this.copy(t);
+ const n = this._x,
+ i = this._y,
+ r = this._z,
+ s = this._w;
+ let a = s * t._w + n * t._x + i * t._y + r * t._z;
+ if (
+ (a < 0
+ ? ((this._w = -t._w),
+ (this._x = -t._x),
+ (this._y = -t._y),
+ (this._z = -t._z),
+ (a = -a))
+ : this.copy(t),
+ a >= 1)
+ )
+ return (this._w = s), (this._x = n), (this._y = i), (this._z = r), this;
+ const o = 1 - a * a;
+ if (o <= Number.EPSILON) {
+ const t = 1 - e;
+ return (
+ (this._w = t * s + e * this._w),
+ (this._x = t * n + e * this._x),
+ (this._y = t * i + e * this._y),
+ (this._z = t * r + e * this._z),
+ this.normalize(),
+ this._onChangeCallback(),
+ this
+ );
+ }
+ const l = Math.sqrt(o),
+ c = Math.atan2(l, a),
+ h = Math.sin((1 - e) * c) / l,
+ u = Math.sin(e * c) / l;
+ return (
+ (this._w = s * h + this._w * u),
+ (this._x = n * h + this._x * u),
+ (this._y = i * h + this._y * u),
+ (this._z = r * h + this._z * u),
+ this._onChangeCallback(),
+ this
+ );
+ }
+ slerpQuaternions(t, e, n) {
+ this.copy(t).slerp(e, n);
+ }
+ equals(t) {
+ return (
+ t._x === this._x &&
+ t._y === this._y &&
+ t._z === this._z &&
+ t._w === this._w
+ );
+ }
+ fromArray(t, e = 0) {
+ return (
+ (this._x = t[e]),
+ (this._y = t[e + 1]),
+ (this._z = t[e + 2]),
+ (this._w = t[e + 3]),
+ this._onChangeCallback(),
+ this
+ );
+ }
+ toArray(t = [], e = 0) {
+ return (
+ (t[e] = this._x),
+ (t[e + 1] = this._y),
+ (t[e + 2] = this._z),
+ (t[e + 3] = this._w),
+ t
+ );
+ }
+ fromBufferAttribute(t, e) {
+ return (
+ (this._x = t.getX(e)),
+ (this._y = t.getY(e)),
+ (this._z = t.getZ(e)),
+ (this._w = t.getW(e)),
+ this
+ );
+ }
+ _onChange(t) {
+ return (this._onChangeCallback = t), this;
+ }
+ _onChangeCallback() {}
+ }
+ At.prototype.isQuaternion = !0;
+ class Lt {
+ constructor(t = 0, e = 0, n = 0) {
+ (this.x = t), (this.y = e), (this.z = n);
+ }
+ set(t, e, n) {
+ return (
+ void 0 === n && (n = this.z),
+ (this.x = t),
+ (this.y = e),
+ (this.z = n),
+ this
+ );
+ }
+ setScalar(t) {
+ return (this.x = t), (this.y = t), (this.z = t), this;
+ }
+ setX(t) {
+ return (this.x = t), this;
+ }
+ setY(t) {
+ return (this.y = t), this;
+ }
+ setZ(t) {
+ return (this.z = t), this;
+ }
+ setComponent(t, e) {
+ switch (t) {
+ case 0:
+ this.x = e;
+ break;
+ case 1:
+ this.y = e;
+ break;
+ case 2:
+ this.z = e;
+ break;
+ default:
+ throw new Error('index is out of range: ' + t);
+ }
+ return this;
+ }
+ getComponent(t) {
+ switch (t) {
+ case 0:
+ return this.x;
+ case 1:
+ return this.y;
+ case 2:
+ return this.z;
+ default:
+ throw new Error('index is out of range: ' + t);
+ }
+ }
+ clone() {
+ return new this.constructor(this.x, this.y, this.z);
+ }
+ copy(t) {
+ return (this.x = t.x), (this.y = t.y), (this.z = t.z), this;
+ }
+ add(t, e) {
+ return void 0 !== e
+ ? (console.warn(
+ 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.'
+ ),
+ this.addVectors(t, e))
+ : ((this.x += t.x), (this.y += t.y), (this.z += t.z), this);
+ }
+ addScalar(t) {
+ return (this.x += t), (this.y += t), (this.z += t), this;
+ }
+ addVectors(t, e) {
+ return (
+ (this.x = t.x + e.x), (this.y = t.y + e.y), (this.z = t.z + e.z), this
+ );
+ }
+ addScaledVector(t, e) {
+ return (
+ (this.x += t.x * e), (this.y += t.y * e), (this.z += t.z * e), this
+ );
+ }
+ sub(t, e) {
+ return void 0 !== e
+ ? (console.warn(
+ 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.'
+ ),
+ this.subVectors(t, e))
+ : ((this.x -= t.x), (this.y -= t.y), (this.z -= t.z), this);
+ }
+ subScalar(t) {
+ return (this.x -= t), (this.y -= t), (this.z -= t), this;
+ }
+ subVectors(t, e) {
+ return (
+ (this.x = t.x - e.x), (this.y = t.y - e.y), (this.z = t.z - e.z), this
+ );
+ }
+ multiply(t, e) {
+ return void 0 !== e
+ ? (console.warn(
+ 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.'
+ ),
+ this.multiplyVectors(t, e))
+ : ((this.x *= t.x), (this.y *= t.y), (this.z *= t.z), this);
+ }
+ multiplyScalar(t) {
+ return (this.x *= t), (this.y *= t), (this.z *= t), this;
+ }
+ multiplyVectors(t, e) {
+ return (
+ (this.x = t.x * e.x), (this.y = t.y * e.y), (this.z = t.z * e.z), this
+ );
+ }
+ applyEuler(t) {
+ return (
+ (t && t.isEuler) ||
+ console.error(
+ 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.'
+ ),
+ this.applyQuaternion(Ct.setFromEuler(t))
+ );
+ }
+ applyAxisAngle(t, e) {
+ return this.applyQuaternion(Ct.setFromAxisAngle(t, e));
+ }
+ applyMatrix3(t) {
+ const e = this.x,
+ n = this.y,
+ i = this.z,
+ r = t.elements;
+ return (
+ (this.x = r[0] * e + r[3] * n + r[6] * i),
+ (this.y = r[1] * e + r[4] * n + r[7] * i),
+ (this.z = r[2] * e + r[5] * n + r[8] * i),
+ this
+ );
+ }
+ applyNormalMatrix(t) {
+ return this.applyMatrix3(t).normalize();
+ }
+ applyMatrix4(t) {
+ const e = this.x,
+ n = this.y,
+ i = this.z,
+ r = t.elements,
+ s = 1 / (r[3] * e + r[7] * n + r[11] * i + r[15]);
+ return (
+ (this.x = (r[0] * e + r[4] * n + r[8] * i + r[12]) * s),
+ (this.y = (r[1] * e + r[5] * n + r[9] * i + r[13]) * s),
+ (this.z = (r[2] * e + r[6] * n + r[10] * i + r[14]) * s),
+ this
+ );
+ }
+ applyQuaternion(t) {
+ const e = this.x,
+ n = this.y,
+ i = this.z,
+ r = t.x,
+ s = t.y,
+ a = t.z,
+ o = t.w,
+ l = o * e + s * i - a * n,
+ c = o * n + a * e - r * i,
+ h = o * i + r * n - s * e,
+ u = -r * e - s * n - a * i;
+ return (
+ (this.x = l * o + u * -r + c * -a - h * -s),
+ (this.y = c * o + u * -s + h * -r - l * -a),
+ (this.z = h * o + u * -a + l * -s - c * -r),
+ this
+ );
+ }
+ project(t) {
+ return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(
+ t.projectionMatrix
+ );
+ }
+ unproject(t) {
+ return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(
+ t.matrixWorld
+ );
+ }
+ transformDirection(t) {
+ const e = this.x,
+ n = this.y,
+ i = this.z,
+ r = t.elements;
+ return (
+ (this.x = r[0] * e + r[4] * n + r[8] * i),
+ (this.y = r[1] * e + r[5] * n + r[9] * i),
+ (this.z = r[2] * e + r[6] * n + r[10] * i),
+ this.normalize()
+ );
+ }
+ divide(t) {
+ return (this.x /= t.x), (this.y /= t.y), (this.z /= t.z), this;
+ }
+ divideScalar(t) {
+ return this.multiplyScalar(1 / t);
+ }
+ min(t) {
+ return (
+ (this.x = Math.min(this.x, t.x)),
+ (this.y = Math.min(this.y, t.y)),
+ (this.z = Math.min(this.z, t.z)),
+ this
+ );
+ }
+ max(t) {
+ return (
+ (this.x = Math.max(this.x, t.x)),
+ (this.y = Math.max(this.y, t.y)),
+ (this.z = Math.max(this.z, t.z)),
+ this
+ );
+ }
+ clamp(t, e) {
+ return (
+ (this.x = Math.max(t.x, Math.min(e.x, this.x))),
+ (this.y = Math.max(t.y, Math.min(e.y, this.y))),
+ (this.z = Math.max(t.z, Math.min(e.z, this.z))),
+ this
+ );
+ }
+ clampScalar(t, e) {
+ return (
+ (this.x = Math.max(t, Math.min(e, this.x))),
+ (this.y = Math.max(t, Math.min(e, this.y))),
+ (this.z = Math.max(t, Math.min(e, this.z))),
+ this
+ );
+ }
+ clampLength(t, e) {
+ const n = this.length();
+ return this.divideScalar(n || 1).multiplyScalar(
+ Math.max(t, Math.min(e, n))
+ );
+ }
+ floor() {
+ return (
+ (this.x = Math.floor(this.x)),
+ (this.y = Math.floor(this.y)),
+ (this.z = Math.floor(this.z)),
+ this
+ );
+ }
+ ceil() {
+ return (
+ (this.x = Math.ceil(this.x)),
+ (this.y = Math.ceil(this.y)),
+ (this.z = Math.ceil(this.z)),
+ this
+ );
+ }
+ round() {
+ return (
+ (this.x = Math.round(this.x)),
+ (this.y = Math.round(this.y)),
+ (this.z = Math.round(this.z)),
+ this
+ );
+ }
+ roundToZero() {
+ return (
+ (this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x)),
+ (this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y)),
+ (this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z)),
+ this
+ );
+ }
+ negate() {
+ return (this.x = -this.x), (this.y = -this.y), (this.z = -this.z), this;
+ }
+ dot(t) {
+ return this.x * t.x + this.y * t.y + this.z * t.z;
+ }
+ lengthSq() {
+ return this.x * this.x + this.y * this.y + this.z * this.z;
+ }
+ length() {
+ return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
+ }
+ manhattanLength() {
+ return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);
+ }
+ normalize() {
+ return this.divideScalar(this.length() || 1);
+ }
+ setLength(t) {
+ return this.normalize().multiplyScalar(t);
+ }
+ lerp(t, e) {
+ return (
+ (this.x += (t.x - this.x) * e),
+ (this.y += (t.y - this.y) * e),
+ (this.z += (t.z - this.z) * e),
+ this
+ );
+ }
+ lerpVectors(t, e, n) {
+ return (
+ (this.x = t.x + (e.x - t.x) * n),
+ (this.y = t.y + (e.y - t.y) * n),
+ (this.z = t.z + (e.z - t.z) * n),
+ this
+ );
+ }
+ cross(t, e) {
+ return void 0 !== e
+ ? (console.warn(
+ 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.'
+ ),
+ this.crossVectors(t, e))
+ : this.crossVectors(this, t);
+ }
+ crossVectors(t, e) {
+ const n = t.x,
+ i = t.y,
+ r = t.z,
+ s = e.x,
+ a = e.y,
+ o = e.z;
+ return (
+ (this.x = i * o - r * a),
+ (this.y = r * s - n * o),
+ (this.z = n * a - i * s),
+ this
+ );
+ }
+ projectOnVector(t) {
+ const e = t.lengthSq();
+ if (0 === e) return this.set(0, 0, 0);
+ const n = t.dot(this) / e;
+ return this.copy(t).multiplyScalar(n);
+ }
+ projectOnPlane(t) {
+ return Rt.copy(this).projectOnVector(t), this.sub(Rt);
+ }
+ reflect(t) {
+ return this.sub(Rt.copy(t).multiplyScalar(2 * this.dot(t)));
+ }
+ angleTo(t) {
+ const e = Math.sqrt(this.lengthSq() * t.lengthSq());
+ if (0 === e) return Math.PI / 2;
+ const n = this.dot(t) / e;
+ return Math.acos(ht(n, -1, 1));
+ }
+ distanceTo(t) {
+ return Math.sqrt(this.distanceToSquared(t));
+ }
+ distanceToSquared(t) {
+ const e = this.x - t.x,
+ n = this.y - t.y,
+ i = this.z - t.z;
+ return e * e + n * n + i * i;
+ }
+ manhattanDistanceTo(t) {
+ return (
+ Math.abs(this.x - t.x) + Math.abs(this.y - t.y) + Math.abs(this.z - t.z)
+ );
+ }
+ setFromSpherical(t) {
+ return this.setFromSphericalCoords(t.radius, t.phi, t.theta);
+ }
+ setFromSphericalCoords(t, e, n) {
+ const i = Math.sin(e) * t;
+ return (
+ (this.x = i * Math.sin(n)),
+ (this.y = Math.cos(e) * t),
+ (this.z = i * Math.cos(n)),
+ this
+ );
+ }
+ setFromCylindrical(t) {
+ return this.setFromCylindricalCoords(t.radius, t.theta, t.y);
+ }
+ setFromCylindricalCoords(t, e, n) {
+ return (
+ (this.x = t * Math.sin(e)),
+ (this.y = n),
+ (this.z = t * Math.cos(e)),
+ this
+ );
+ }
+ setFromMatrixPosition(t) {
+ const e = t.elements;
+ return (this.x = e[12]), (this.y = e[13]), (this.z = e[14]), this;
+ }
+ setFromMatrixScale(t) {
+ const e = this.setFromMatrixColumn(t, 0).length(),
+ n = this.setFromMatrixColumn(t, 1).length(),
+ i = this.setFromMatrixColumn(t, 2).length();
+ return (this.x = e), (this.y = n), (this.z = i), this;
+ }
+ setFromMatrixColumn(t, e) {
+ return this.fromArray(t.elements, 4 * e);
+ }
+ setFromMatrix3Column(t, e) {
+ return this.fromArray(t.elements, 3 * e);
+ }
+ equals(t) {
+ return t.x === this.x && t.y === this.y && t.z === this.z;
+ }
+ fromArray(t, e = 0) {
+ return (this.x = t[e]), (this.y = t[e + 1]), (this.z = t[e + 2]), this;
+ }
+ toArray(t = [], e = 0) {
+ return (t[e] = this.x), (t[e + 1] = this.y), (t[e + 2] = this.z), t;
+ }
+ fromBufferAttribute(t, e, n) {
+ return (
+ void 0 !== n &&
+ console.warn(
+ 'THREE.Vector3: offset has been removed from .fromBufferAttribute().'
+ ),
+ (this.x = t.getX(e)),
+ (this.y = t.getY(e)),
+ (this.z = t.getZ(e)),
+ this
+ );
+ }
+ random() {
+ return (
+ (this.x = Math.random()),
+ (this.y = Math.random()),
+ (this.z = Math.random()),
+ this
+ );
+ }
+ }
+ Lt.prototype.isVector3 = !0;
+ const Rt = new Lt(),
+ Ct = new At();
+ class Pt {
+ constructor(
+ t = new Lt(1 / 0, 1 / 0, 1 / 0),
+ e = new Lt(-1 / 0, -1 / 0, -1 / 0)
+ ) {
+ (this.min = t), (this.max = e);
+ }
+ set(t, e) {
+ return this.min.copy(t), this.max.copy(e), this;
+ }
+ setFromArray(t) {
+ let e = 1 / 0,
+ n = 1 / 0,
+ i = 1 / 0,
+ r = -1 / 0,
+ s = -1 / 0,
+ a = -1 / 0;
+ for (let o = 0, l = t.length; o < l; o += 3) {
+ const l = t[o],
+ c = t[o + 1],
+ h = t[o + 2];
+ l < e && (e = l),
+ c < n && (n = c),
+ h < i && (i = h),
+ l > r && (r = l),
+ c > s && (s = c),
+ h > a && (a = h);
+ }
+ return this.min.set(e, n, i), this.max.set(r, s, a), this;
+ }
+ setFromBufferAttribute(t) {
+ let e = 1 / 0,
+ n = 1 / 0,
+ i = 1 / 0,
+ r = -1 / 0,
+ s = -1 / 0,
+ a = -1 / 0;
+ for (let o = 0, l = t.count; o < l; o++) {
+ const l = t.getX(o),
+ c = t.getY(o),
+ h = t.getZ(o);
+ l < e && (e = l),
+ c < n && (n = c),
+ h < i && (i = h),
+ l > r && (r = l),
+ c > s && (s = c),
+ h > a && (a = h);
+ }
+ return this.min.set(e, n, i), this.max.set(r, s, a), this;
+ }
+ setFromPoints(t) {
+ this.makeEmpty();
+ for (let e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]);
+ return this;
+ }
+ setFromCenterAndSize(t, e) {
+ const n = It.copy(e).multiplyScalar(0.5);
+ return this.min.copy(t).sub(n), this.max.copy(t).add(n), this;
+ }
+ setFromObject(t) {
+ return this.makeEmpty(), this.expandByObject(t);
+ }
+ clone() {
+ return new this.constructor().copy(this);
+ }
+ copy(t) {
+ return this.min.copy(t.min), this.max.copy(t.max), this;
+ }
+ makeEmpty() {
+ return (
+ (this.min.x = this.min.y = this.min.z = 1 / 0),
+ (this.max.x = this.max.y = this.max.z = -1 / 0),
+ this
+ );
+ }
+ isEmpty() {
+ return (
+ this.max.x < this.min.x ||
+ this.max.y < this.min.y ||
+ this.max.z < this.min.z
+ );
+ }
+ getCenter(t) {
+ return (
+ void 0 === t &&
+ (console.warn('THREE.Box3: .getCenter() target is now required'),
+ (t = new Lt())),
+ this.isEmpty()
+ ? t.set(0, 0, 0)
+ : t.addVectors(this.min, this.max).multiplyScalar(0.5)
+ );
+ }
+ getSize(t) {
+ return (
+ void 0 === t &&
+ (console.warn('THREE.Box3: .getSize() target is now required'),
+ (t = new Lt())),
+ this.isEmpty() ? t.set(0, 0, 0) : t.subVectors(this.max, this.min)
+ );
+ }
+ expandByPoint(t) {
+ return this.min.min(t), this.max.max(t), this;
+ }
+ expandByVector(t) {
+ return this.min.sub(t), this.max.add(t), this;
+ }
+ expandByScalar(t) {
+ return this.min.addScalar(-t), this.max.addScalar(t), this;
+ }
+ expandByObject(t) {
+ t.updateWorldMatrix(!1, !1);
+ const e = t.geometry;
+ void 0 !== e &&
+ (null === e.boundingBox && e.computeBoundingBox(),
+ Nt.copy(e.boundingBox),
+ Nt.applyMatrix4(t.matrixWorld),
+ this.union(Nt));
+ const n = t.children;
+ for (let t = 0, e = n.length; t < e; t++) this.expandByObject(n[t]);
+ return this;
+ }
+ containsPoint(t) {
+ return !(
+ t.x < this.min.x ||
+ t.x > this.max.x ||
+ t.y < this.min.y ||
+ t.y > this.max.y ||
+ t.z < this.min.z ||
+ t.z > this.max.z
+ );
+ }
+ containsBox(t) {
+ return (
+ this.min.x <= t.min.x &&
+ t.max.x <= this.max.x &&
+ this.min.y <= t.min.y &&
+ t.max.y <= this.max.y &&
+ this.min.z <= t.min.z &&
+ t.max.z <= this.max.z
+ );
+ }
+ getParameter(t, e) {
+ return (
+ void 0 === e &&
+ (console.warn('THREE.Box3: .getParameter() target is now required'),
+ (e = new Lt())),
+ e.set(
+ (t.x - this.min.x) / (this.max.x - this.min.x),
+ (t.y - this.min.y) / (this.max.y - this.min.y),
+ (t.z - this.min.z) / (this.max.z - this.min.z)
+ )
+ );
+ }
+ intersectsBox(t) {
+ return !(
+ t.max.x < this.min.x ||
+ t.min.x > this.max.x ||
+ t.max.y < this.min.y ||
+ t.min.y > this.max.y ||
+ t.max.z < this.min.z ||
+ t.min.z > this.max.z
+ );
+ }
+ intersectsSphere(t) {
+ return (
+ this.clampPoint(t.center, It),
+ It.distanceToSquared(t.center) <= t.radius * t.radius
+ );
+ }
+ intersectsPlane(t) {
+ let e, n;
+ return (
+ t.normal.x > 0
+ ? ((e = t.normal.x * this.min.x), (n = t.normal.x * this.max.x))
+ : ((e = t.normal.x * this.max.x), (n = t.normal.x * this.min.x)),
+ t.normal.y > 0
+ ? ((e += t.normal.y * this.min.y), (n += t.normal.y * this.max.y))
+ : ((e += t.normal.y * this.max.y), (n += t.normal.y * this.min.y)),
+ t.normal.z > 0
+ ? ((e += t.normal.z * this.min.z), (n += t.normal.z * this.max.z))
+ : ((e += t.normal.z * this.max.z), (n += t.normal.z * this.min.z)),
+ e <= -t.constant && n >= -t.constant
+ );
+ }
+ intersectsTriangle(t) {
+ if (this.isEmpty()) return !1;
+ this.getCenter(Ut),
+ kt.subVectors(this.max, Ut),
+ Bt.subVectors(t.a, Ut),
+ zt.subVectors(t.b, Ut),
+ Ft.subVectors(t.c, Ut),
+ Ot.subVectors(zt, Bt),
+ Ht.subVectors(Ft, zt),
+ Gt.subVectors(Bt, Ft);
+ let e = [
+ 0,
+ -Ot.z,
+ Ot.y,
+ 0,
+ -Ht.z,
+ Ht.y,
+ 0,
+ -Gt.z,
+ Gt.y,
+ Ot.z,
+ 0,
+ -Ot.x,
+ Ht.z,
+ 0,
+ -Ht.x,
+ Gt.z,
+ 0,
+ -Gt.x,
+ -Ot.y,
+ Ot.x,
+ 0,
+ -Ht.y,
+ Ht.x,
+ 0,
+ -Gt.y,
+ Gt.x,
+ 0,
+ ];
+ return (
+ !!jt(e, Bt, zt, Ft, kt) &&
+ ((e = [1, 0, 0, 0, 1, 0, 0, 0, 1]),
+ !!jt(e, Bt, zt, Ft, kt) &&
+ (Vt.crossVectors(Ot, Ht),
+ (e = [Vt.x, Vt.y, Vt.z]),
+ jt(e, Bt, zt, Ft, kt)))
+ );
+ }
+ clampPoint(t, e) {
+ return (
+ void 0 === e &&
+ (console.warn('THREE.Box3: .clampPoint() target is now required'),
+ (e = new Lt())),
+ e.copy(t).clamp(this.min, this.max)
+ );
+ }
+ distanceToPoint(t) {
+ return It.copy(t).clamp(this.min, this.max).sub(t).length();
+ }
+ getBoundingSphere(t) {
+ return (
+ void 0 === t &&
+ console.error(
+ 'THREE.Box3: .getBoundingSphere() target is now required'
+ ),
+ this.getCenter(t.center),
+ (t.radius = 0.5 * this.getSize(It).length()),
+ t
+ );
+ }
+ intersect(t) {
+ return (
+ this.min.max(t.min),
+ this.max.min(t.max),
+ this.isEmpty() && this.makeEmpty(),
+ this
+ );
+ }
+ union(t) {
+ return this.min.min(t.min), this.max.max(t.max), this;
+ }
+ applyMatrix4(t) {
+ return (
+ this.isEmpty() ||
+ (Dt[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(t),
+ Dt[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(t),
+ Dt[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(t),
+ Dt[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(t),
+ Dt[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(t),
+ Dt[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(t),
+ Dt[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(t),
+ Dt[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(t),
+ this.setFromPoints(Dt)),
+ this
+ );
+ }
+ translate(t) {
+ return this.min.add(t), this.max.add(t), this;
+ }
+ equals(t) {
+ return t.min.equals(this.min) && t.max.equals(this.max);
+ }
+ }
+ Pt.prototype.isBox3 = !0;
+ const Dt = [
+ new Lt(),
+ new Lt(),
+ new Lt(),
+ new Lt(),
+ new Lt(),
+ new Lt(),
+ new Lt(),
+ new Lt(),
+ ],
+ It = new Lt(),
+ Nt = new Pt(),
+ Bt = new Lt(),
+ zt = new Lt(),
+ Ft = new Lt(),
+ Ot = new Lt(),
+ Ht = new Lt(),
+ Gt = new Lt(),
+ Ut = new Lt(),
+ kt = new Lt(),
+ Vt = new Lt(),
+ Wt = new Lt();
+ function jt(t, e, n, i, r) {
+ for (let s = 0, a = t.length - 3; s <= a; s += 3) {
+ Wt.fromArray(t, s);
+ const a =
+ r.x * Math.abs(Wt.x) + r.y * Math.abs(Wt.y) + r.z * Math.abs(Wt.z),
+ o = e.dot(Wt),
+ l = n.dot(Wt),
+ c = i.dot(Wt);
+ if (Math.max(-Math.max(o, l, c), Math.min(o, l, c)) > a) return !1;
+ }
+ return !0;
+ }
+ const qt = new Pt(),
+ Xt = new Lt(),
+ Yt = new Lt(),
+ Zt = new Lt();
+ class Jt {
+ constructor(t = new Lt(), e = -1) {
+ (this.center = t), (this.radius = e);
+ }
+ set(t, e) {
+ return this.center.copy(t), (this.radius = e), this;
+ }
+ setFromPoints(t, e) {
+ const n = this.center;
+ void 0 !== e ? n.copy(e) : qt.setFromPoints(t).getCenter(n);
+ let i = 0;
+ for (let e = 0, r = t.length; e < r; e++)
+ i = Math.max(i, n.distanceToSquared(t[e]));
+ return (this.radius = Math.sqrt(i)), this;
+ }
+ copy(t) {
+ return this.center.copy(t.center), (this.radius = t.radius), this;
+ }
+ isEmpty() {
+ return this.radius < 0;
+ }
+ makeEmpty() {
+ return this.center.set(0, 0, 0), (this.radius = -1), this;
+ }
+ containsPoint(t) {
+ return t.distanceToSquared(this.center) <= this.radius * this.radius;
+ }
+ distanceToPoint(t) {
+ return t.distanceTo(this.center) - this.radius;
+ }
+ intersectsSphere(t) {
+ const e = this.radius + t.radius;
+ return t.center.distanceToSquared(this.center) <= e * e;
+ }
+ intersectsBox(t) {
+ return t.intersectsSphere(this);
+ }
+ intersectsPlane(t) {
+ return Math.abs(t.distanceToPoint(this.center)) <= this.radius;
+ }
+ clampPoint(t, e) {
+ const n = this.center.distanceToSquared(t);
+ return (
+ void 0 === e &&
+ (console.warn('THREE.Sphere: .clampPoint() target is now required'),
+ (e = new Lt())),
+ e.copy(t),
+ n > this.radius * this.radius &&
+ (e.sub(this.center).normalize(),
+ e.multiplyScalar(this.radius).add(this.center)),
+ e
+ );
+ }
+ getBoundingBox(t) {
+ return (
+ void 0 === t &&
+ (console.warn(
+ 'THREE.Sphere: .getBoundingBox() target is now required'
+ ),
+ (t = new Pt())),
+ this.isEmpty()
+ ? (t.makeEmpty(), t)
+ : (t.set(this.center, this.center), t.expandByScalar(this.radius), t)
+ );
+ }
+ applyMatrix4(t) {
+ return (
+ this.center.applyMatrix4(t),
+ (this.radius = this.radius * t.getMaxScaleOnAxis()),
+ this
+ );
+ }
+ translate(t) {
+ return this.center.add(t), this;
+ }
+ expandByPoint(t) {
+ Zt.subVectors(t, this.center);
+ const e = Zt.lengthSq();
+ if (e > this.radius * this.radius) {
+ const t = Math.sqrt(e),
+ n = 0.5 * (t - this.radius);
+ this.center.add(Zt.multiplyScalar(n / t)), (this.radius += n);
+ }
+ return this;
+ }
+ union(t) {
+ return (
+ Yt.subVectors(t.center, this.center)
+ .normalize()
+ .multiplyScalar(t.radius),
+ this.expandByPoint(Xt.copy(t.center).add(Yt)),
+ this.expandByPoint(Xt.copy(t.center).sub(Yt)),
+ this
+ );
+ }
+ equals(t) {
+ return t.center.equals(this.center) && t.radius === this.radius;
+ }
+ clone() {
+ return new this.constructor().copy(this);
+ }
+ }
+ const Qt = new Lt(),
+ Kt = new Lt(),
+ $t = new Lt(),
+ te = new Lt(),
+ ee = new Lt(),
+ ne = new Lt(),
+ ie = new Lt();
+ class re {
+ constructor(t = new Lt(), e = new Lt(0, 0, -1)) {
+ (this.origin = t), (this.direction = e);
+ }
+ set(t, e) {
+ return this.origin.copy(t), this.direction.copy(e), this;
+ }
+ copy(t) {
+ return this.origin.copy(t.origin), this.direction.copy(t.direction), this;
+ }
+ at(t, e) {
+ return (
+ void 0 === e &&
+ (console.warn('THREE.Ray: .at() target is now required'),
+ (e = new Lt())),
+ e.copy(this.direction).multiplyScalar(t).add(this.origin)
+ );
+ }
+ lookAt(t) {
+ return this.direction.copy(t).sub(this.origin).normalize(), this;
+ }
+ recast(t) {
+ return this.origin.copy(this.at(t, Qt)), this;
+ }
+ closestPointToPoint(t, e) {
+ void 0 === e &&
+ (console.warn(
+ 'THREE.Ray: .closestPointToPoint() target is now required'
+ ),
+ (e = new Lt())),
+ e.subVectors(t, this.origin);
+ const n = e.dot(this.direction);
+ return n < 0
+ ? e.copy(this.origin)
+ : e.copy(this.direction).multiplyScalar(n).add(this.origin);
+ }
+ distanceToPoint(t) {
+ return Math.sqrt(this.distanceSqToPoint(t));
+ }
+ distanceSqToPoint(t) {
+ const e = Qt.subVectors(t, this.origin).dot(this.direction);
+ return e < 0
+ ? this.origin.distanceToSquared(t)
+ : (Qt.copy(this.direction).multiplyScalar(e).add(this.origin),
+ Qt.distanceToSquared(t));
+ }
+ distanceSqToSegment(t, e, n, i) {
+ Kt.copy(t).add(e).multiplyScalar(0.5),
+ $t.copy(e).sub(t).normalize(),
+ te.copy(this.origin).sub(Kt);
+ const r = 0.5 * t.distanceTo(e),
+ s = -this.direction.dot($t),
+ a = te.dot(this.direction),
+ o = -te.dot($t),
+ l = te.lengthSq(),
+ c = Math.abs(1 - s * s);
+ let h, u, d, p;
+ if (c > 0)
+ if (((h = s * o - a), (u = s * a - o), (p = r * c), h >= 0))
+ if (u >= -p)
+ if (u <= p) {
+ const t = 1 / c;
+ (h *= t),
+ (u *= t),
+ (d = h * (h + s * u + 2 * a) + u * (s * h + u + 2 * o) + l);
+ } else
+ (u = r),
+ (h = Math.max(0, -(s * u + a))),
+ (d = -h * h + u * (u + 2 * o) + l);
+ else
+ (u = -r),
+ (h = Math.max(0, -(s * u + a))),
+ (d = -h * h + u * (u + 2 * o) + l);
+ else
+ u <= -p
+ ? ((h = Math.max(0, -(-s * r + a))),
+ (u = h > 0 ? -r : Math.min(Math.max(-r, -o), r)),
+ (d = -h * h + u * (u + 2 * o) + l))
+ : u <= p
+ ? ((h = 0),
+ (u = Math.min(Math.max(-r, -o), r)),
+ (d = u * (u + 2 * o) + l))
+ : ((h = Math.max(0, -(s * r + a))),
+ (u = h > 0 ? r : Math.min(Math.max(-r, -o), r)),
+ (d = -h * h + u * (u + 2 * o) + l));
+ else
+ (u = s > 0 ? -r : r),
+ (h = Math.max(0, -(s * u + a))),
+ (d = -h * h + u * (u + 2 * o) + l);
+ return (
+ n && n.copy(this.direction).multiplyScalar(h).add(this.origin),
+ i && i.copy($t).multiplyScalar(u).add(Kt),
+ d
+ );
+ }
+ intersectSphere(t, e) {
+ Qt.subVectors(t.center, this.origin);
+ const n = Qt.dot(this.direction),
+ i = Qt.dot(Qt) - n * n,
+ r = t.radius * t.radius;
+ if (i > r) return null;
+ const s = Math.sqrt(r - i),
+ a = n - s,
+ o = n + s;
+ return a < 0 && o < 0 ? null : a < 0 ? this.at(o, e) : this.at(a, e);
+ }
+ intersectsSphere(t) {
+ return this.distanceSqToPoint(t.center) <= t.radius * t.radius;
+ }
+ distanceToPlane(t) {
+ const e = t.normal.dot(this.direction);
+ if (0 === e) return 0 === t.distanceToPoint(this.origin) ? 0 : null;
+ const n = -(this.origin.dot(t.normal) + t.constant) / e;
+ return n >= 0 ? n : null;
+ }
+ intersectPlane(t, e) {
+ const n = this.distanceToPlane(t);
+ return null === n ? null : this.at(n, e);
+ }
+ intersectsPlane(t) {
+ const e = t.distanceToPoint(this.origin);
+ if (0 === e) return !0;
+ return t.normal.dot(this.direction) * e < 0;
+ }
+ intersectBox(t, e) {
+ let n, i, r, s, a, o;
+ const l = 1 / this.direction.x,
+ c = 1 / this.direction.y,
+ h = 1 / this.direction.z,
+ u = this.origin;
+ return (
+ l >= 0
+ ? ((n = (t.min.x - u.x) * l), (i = (t.max.x - u.x) * l))
+ : ((n = (t.max.x - u.x) * l), (i = (t.min.x - u.x) * l)),
+ c >= 0
+ ? ((r = (t.min.y - u.y) * c), (s = (t.max.y - u.y) * c))
+ : ((r = (t.max.y - u.y) * c), (s = (t.min.y - u.y) * c)),
+ n > s || r > i
+ ? null
+ : ((r > n || n != n) && (n = r),
+ (s < i || i != i) && (i = s),
+ h >= 0
+ ? ((a = (t.min.z - u.z) * h), (o = (t.max.z - u.z) * h))
+ : ((a = (t.max.z - u.z) * h), (o = (t.min.z - u.z) * h)),
+ n > o || a > i
+ ? null
+ : ((a > n || n != n) && (n = a),
+ (o < i || i != i) && (i = o),
+ i < 0 ? null : this.at(n >= 0 ? n : i, e)))
+ );
+ }
+ intersectsBox(t) {
+ return null !== this.intersectBox(t, Qt);
+ }
+ intersectTriangle(t, e, n, i, r) {
+ ee.subVectors(e, t), ne.subVectors(n, t), ie.crossVectors(ee, ne);
+ let s,
+ a = this.direction.dot(ie);
+ if (a > 0) {
+ if (i) return null;
+ s = 1;
+ } else {
+ if (!(a < 0)) return null;
+ (s = -1), (a = -a);
+ }
+ te.subVectors(this.origin, t);
+ const o = s * this.direction.dot(ne.crossVectors(te, ne));
+ if (o < 0) return null;
+ const l = s * this.direction.dot(ee.cross(te));
+ if (l < 0) return null;
+ if (o + l > a) return null;
+ const c = -s * te.dot(ie);
+ return c < 0 ? null : this.at(c / a, r);
+ }
+ applyMatrix4(t) {
+ return (
+ this.origin.applyMatrix4(t), this.direction.transformDirection(t), this
+ );
+ }
+ equals(t) {
+ return t.origin.equals(this.origin) && t.direction.equals(this.direction);
+ }
+ clone() {
+ return new this.constructor().copy(this);
+ }
+ }
+ class se {
+ constructor() {
+ (this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]),
+ arguments.length > 0 &&
+ console.error(
+ 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.'
+ );
+ }
+ set(t, e, n, i, r, s, a, o, l, c, h, u, d, p, m, f) {
+ const g = this.elements;
+ return (
+ (g[0] = t),
+ (g[4] = e),
+ (g[8] = n),
+ (g[12] = i),
+ (g[1] = r),
+ (g[5] = s),
+ (g[9] = a),
+ (g[13] = o),
+ (g[2] = l),
+ (g[6] = c),
+ (g[10] = h),
+ (g[14] = u),
+ (g[3] = d),
+ (g[7] = p),
+ (g[11] = m),
+ (g[15] = f),
+ this
+ );
+ }
+ identity() {
+ return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this;
+ }
+ clone() {
+ return new se().fromArray(this.elements);
+ }
+ copy(t) {
+ const e = this.elements,
+ n = t.elements;
+ return (
+ (e[0] = n[0]),
+ (e[1] = n[1]),
+ (e[2] = n[2]),
+ (e[3] = n[3]),
+ (e[4] = n[4]),
+ (e[5] = n[5]),
+ (e[6] = n[6]),
+ (e[7] = n[7]),
+ (e[8] = n[8]),
+ (e[9] = n[9]),
+ (e[10] = n[10]),
+ (e[11] = n[11]),
+ (e[12] = n[12]),
+ (e[13] = n[13]),
+ (e[14] = n[14]),
+ (e[15] = n[15]),
+ this
+ );
+ }
+ copyPosition(t) {
+ const e = this.elements,
+ n = t.elements;
+ return (e[12] = n[12]), (e[13] = n[13]), (e[14] = n[14]), this;
+ }
+ setFromMatrix3(t) {
+ const e = t.elements;
+ return (
+ this.set(
+ e[0],
+ e[3],
+ e[6],
+ 0,
+ e[1],
+ e[4],
+ e[7],
+ 0,
+ e[2],
+ e[5],
+ e[8],
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ),
+ this
+ );
+ }
+ extractBasis(t, e, n) {
+ return (
+ t.setFromMatrixColumn(this, 0),
+ e.setFromMatrixColumn(this, 1),
+ n.setFromMatrixColumn(this, 2),
+ this
+ );
+ }
+ makeBasis(t, e, n) {
+ return (
+ this.set(
+ t.x,
+ e.x,
+ n.x,
+ 0,
+ t.y,
+ e.y,
+ n.y,
+ 0,
+ t.z,
+ e.z,
+ n.z,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ),
+ this
+ );
+ }
+ extractRotation(t) {
+ const e = this.elements,
+ n = t.elements,
+ i = 1 / ae.setFromMatrixColumn(t, 0).length(),
+ r = 1 / ae.setFromMatrixColumn(t, 1).length(),
+ s = 1 / ae.setFromMatrixColumn(t, 2).length();
+ return (
+ (e[0] = n[0] * i),
+ (e[1] = n[1] * i),
+ (e[2] = n[2] * i),
+ (e[3] = 0),
+ (e[4] = n[4] * r),
+ (e[5] = n[5] * r),
+ (e[6] = n[6] * r),
+ (e[7] = 0),
+ (e[8] = n[8] * s),
+ (e[9] = n[9] * s),
+ (e[10] = n[10] * s),
+ (e[11] = 0),
+ (e[12] = 0),
+ (e[13] = 0),
+ (e[14] = 0),
+ (e[15] = 1),
+ this
+ );
+ }
+ makeRotationFromEuler(t) {
+ (t && t.isEuler) ||
+ console.error(
+ 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.'
+ );
+ const e = this.elements,
+ n = t.x,
+ i = t.y,
+ r = t.z,
+ s = Math.cos(n),
+ a = Math.sin(n),
+ o = Math.cos(i),
+ l = Math.sin(i),
+ c = Math.cos(r),
+ h = Math.sin(r);
+ if ('XYZ' === t.order) {
+ const t = s * c,
+ n = s * h,
+ i = a * c,
+ r = a * h;
+ (e[0] = o * c),
+ (e[4] = -o * h),
+ (e[8] = l),
+ (e[1] = n + i * l),
+ (e[5] = t - r * l),
+ (e[9] = -a * o),
+ (e[2] = r - t * l),
+ (e[6] = i + n * l),
+ (e[10] = s * o);
+ } else if ('YXZ' === t.order) {
+ const t = o * c,
+ n = o * h,
+ i = l * c,
+ r = l * h;
+ (e[0] = t + r * a),
+ (e[4] = i * a - n),
+ (e[8] = s * l),
+ (e[1] = s * h),
+ (e[5] = s * c),
+ (e[9] = -a),
+ (e[2] = n * a - i),
+ (e[6] = r + t * a),
+ (e[10] = s * o);
+ } else if ('ZXY' === t.order) {
+ const t = o * c,
+ n = o * h,
+ i = l * c,
+ r = l * h;
+ (e[0] = t - r * a),
+ (e[4] = -s * h),
+ (e[8] = i + n * a),
+ (e[1] = n + i * a),
+ (e[5] = s * c),
+ (e[9] = r - t * a),
+ (e[2] = -s * l),
+ (e[6] = a),
+ (e[10] = s * o);
+ } else if ('ZYX' === t.order) {
+ const t = s * c,
+ n = s * h,
+ i = a * c,
+ r = a * h;
+ (e[0] = o * c),
+ (e[4] = i * l - n),
+ (e[8] = t * l + r),
+ (e[1] = o * h),
+ (e[5] = r * l + t),
+ (e[9] = n * l - i),
+ (e[2] = -l),
+ (e[6] = a * o),
+ (e[10] = s * o);
+ } else if ('YZX' === t.order) {
+ const t = s * o,
+ n = s * l,
+ i = a * o,
+ r = a * l;
+ (e[0] = o * c),
+ (e[4] = r - t * h),
+ (e[8] = i * h + n),
+ (e[1] = h),
+ (e[5] = s * c),
+ (e[9] = -a * c),
+ (e[2] = -l * c),
+ (e[6] = n * h + i),
+ (e[10] = t - r * h);
+ } else if ('XZY' === t.order) {
+ const t = s * o,
+ n = s * l,
+ i = a * o,
+ r = a * l;
+ (e[0] = o * c),
+ (e[4] = -h),
+ (e[8] = l * c),
+ (e[1] = t * h + r),
+ (e[5] = s * c),
+ (e[9] = n * h - i),
+ (e[2] = i * h - n),
+ (e[6] = a * c),
+ (e[10] = r * h + t);
+ }
+ return (
+ (e[3] = 0),
+ (e[7] = 0),
+ (e[11] = 0),
+ (e[12] = 0),
+ (e[13] = 0),
+ (e[14] = 0),
+ (e[15] = 1),
+ this
+ );
+ }
+ makeRotationFromQuaternion(t) {
+ return this.compose(le, t, ce);
+ }
+ lookAt(t, e, n) {
+ const i = this.elements;
+ return (
+ de.subVectors(t, e),
+ 0 === de.lengthSq() && (de.z = 1),
+ de.normalize(),
+ he.crossVectors(n, de),
+ 0 === he.lengthSq() &&
+ (1 === Math.abs(n.z) ? (de.x += 1e-4) : (de.z += 1e-4),
+ de.normalize(),
+ he.crossVectors(n, de)),
+ he.normalize(),
+ ue.crossVectors(de, he),
+ (i[0] = he.x),
+ (i[4] = ue.x),
+ (i[8] = de.x),
+ (i[1] = he.y),
+ (i[5] = ue.y),
+ (i[9] = de.y),
+ (i[2] = he.z),
+ (i[6] = ue.z),
+ (i[10] = de.z),
+ this
+ );
+ }
+ multiply(t, e) {
+ return void 0 !== e
+ ? (console.warn(
+ 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.'
+ ),
+ this.multiplyMatrices(t, e))
+ : this.multiplyMatrices(this, t);
+ }
+ premultiply(t) {
+ return this.multiplyMatrices(t, this);
+ }
+ multiplyMatrices(t, e) {
+ const n = t.elements,
+ i = e.elements,
+ r = this.elements,
+ s = n[0],
+ a = n[4],
+ o = n[8],
+ l = n[12],
+ c = n[1],
+ h = n[5],
+ u = n[9],
+ d = n[13],
+ p = n[2],
+ m = n[6],
+ f = n[10],
+ g = n[14],
+ v = n[3],
+ y = n[7],
+ x = n[11],
+ _ = n[15],
+ w = i[0],
+ b = i[4],
+ M = i[8],
+ S = i[12],
+ T = i[1],
+ E = i[5],
+ A = i[9],
+ L = i[13],
+ R = i[2],
+ C = i[6],
+ P = i[10],
+ D = i[14],
+ I = i[3],
+ N = i[7],
+ B = i[11],
+ z = i[15];
+ return (
+ (r[0] = s * w + a * T + o * R + l * I),
+ (r[4] = s * b + a * E + o * C + l * N),
+ (r[8] = s * M + a * A + o * P + l * B),
+ (r[12] = s * S + a * L + o * D + l * z),
+ (r[1] = c * w + h * T + u * R + d * I),
+ (r[5] = c * b + h * E + u * C + d * N),
+ (r[9] = c * M + h * A + u * P + d * B),
+ (r[13] = c * S + h * L + u * D + d * z),
+ (r[2] = p * w + m * T + f * R + g * I),
+ (r[6] = p * b + m * E + f * C + g * N),
+ (r[10] = p * M + m * A + f * P + g * B),
+ (r[14] = p * S + m * L + f * D + g * z),
+ (r[3] = v * w + y * T + x * R + _ * I),
+ (r[7] = v * b + y * E + x * C + _ * N),
+ (r[11] = v * M + y * A + x * P + _ * B),
+ (r[15] = v * S + y * L + x * D + _ * z),
+ this
+ );
+ }
+ multiplyScalar(t) {
+ const e = this.elements;
+ return (
+ (e[0] *= t),
+ (e[4] *= t),
+ (e[8] *= t),
+ (e[12] *= t),
+ (e[1] *= t),
+ (e[5] *= t),
+ (e[9] *= t),
+ (e[13] *= t),
+ (e[2] *= t),
+ (e[6] *= t),
+ (e[10] *= t),
+ (e[14] *= t),
+ (e[3] *= t),
+ (e[7] *= t),
+ (e[11] *= t),
+ (e[15] *= t),
+ this
+ );
+ }
+ determinant() {
+ const t = this.elements,
+ e = t[0],
+ n = t[4],
+ i = t[8],
+ r = t[12],
+ s = t[1],
+ a = t[5],
+ o = t[9],
+ l = t[13],
+ c = t[2],
+ h = t[6],
+ u = t[10],
+ d = t[14];
+ return (
+ t[3] *
+ (+r * o * h -
+ i * l * h -
+ r * a * u +
+ n * l * u +
+ i * a * d -
+ n * o * d) +
+ t[7] *
+ (+e * o * d -
+ e * l * u +
+ r * s * u -
+ i * s * d +
+ i * l * c -
+ r * o * c) +
+ t[11] *
+ (+e * l * h -
+ e * a * d -
+ r * s * h +
+ n * s * d +
+ r * a * c -
+ n * l * c) +
+ t[15] *
+ (-i * a * c -
+ e * o * h +
+ e * a * u +
+ i * s * h -
+ n * s * u +
+ n * o * c)
+ );
+ }
+ transpose() {
+ const t = this.elements;
+ let e;
+ return (
+ (e = t[1]),
+ (t[1] = t[4]),
+ (t[4] = e),
+ (e = t[2]),
+ (t[2] = t[8]),
+ (t[8] = e),
+ (e = t[6]),
+ (t[6] = t[9]),
+ (t[9] = e),
+ (e = t[3]),
+ (t[3] = t[12]),
+ (t[12] = e),
+ (e = t[7]),
+ (t[7] = t[13]),
+ (t[13] = e),
+ (e = t[11]),
+ (t[11] = t[14]),
+ (t[14] = e),
+ this
+ );
+ }
+ setPosition(t, e, n) {
+ const i = this.elements;
+ return (
+ t.isVector3
+ ? ((i[12] = t.x), (i[13] = t.y), (i[14] = t.z))
+ : ((i[12] = t), (i[13] = e), (i[14] = n)),
+ this
+ );
+ }
+ invert() {
+ const t = this.elements,
+ e = t[0],
+ n = t[1],
+ i = t[2],
+ r = t[3],
+ s = t[4],
+ a = t[5],
+ o = t[6],
+ l = t[7],
+ c = t[8],
+ h = t[9],
+ u = t[10],
+ d = t[11],
+ p = t[12],
+ m = t[13],
+ f = t[14],
+ g = t[15],
+ v =
+ h * f * l - m * u * l + m * o * d - a * f * d - h * o * g + a * u * g,
+ y =
+ p * u * l - c * f * l - p * o * d + s * f * d + c * o * g - s * u * g,
+ x =
+ c * m * l - p * h * l + p * a * d - s * m * d - c * a * g + s * h * g,
+ _ =
+ p * h * o - c * m * o - p * a * u + s * m * u + c * a * f - s * h * f,
+ w = e * v + n * y + i * x + r * _;
+ if (0 === w)
+ return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ const b = 1 / w;
+ return (
+ (t[0] = v * b),
+ (t[1] =
+ (m * u * r -
+ h * f * r -
+ m * i * d +
+ n * f * d +
+ h * i * g -
+ n * u * g) *
+ b),
+ (t[2] =
+ (a * f * r -
+ m * o * r +
+ m * i * l -
+ n * f * l -
+ a * i * g +
+ n * o * g) *
+ b),
+ (t[3] =
+ (h * o * r -
+ a * u * r -
+ h * i * l +
+ n * u * l +
+ a * i * d -
+ n * o * d) *
+ b),
+ (t[4] = y * b),
+ (t[5] =
+ (c * f * r -
+ p * u * r +
+ p * i * d -
+ e * f * d -
+ c * i * g +
+ e * u * g) *
+ b),
+ (t[6] =
+ (p * o * r -
+ s * f * r -
+ p * i * l +
+ e * f * l +
+ s * i * g -
+ e * o * g) *
+ b),
+ (t[7] =
+ (s * u * r -
+ c * o * r +
+ c * i * l -
+ e * u * l -
+ s * i * d +
+ e * o * d) *
+ b),
+ (t[8] = x * b),
+ (t[9] =
+ (p * h * r -
+ c * m * r -
+ p * n * d +
+ e * m * d +
+ c * n * g -
+ e * h * g) *
+ b),
+ (t[10] =
+ (s * m * r -
+ p * a * r +
+ p * n * l -
+ e * m * l -
+ s * n * g +
+ e * a * g) *
+ b),
+ (t[11] =
+ (c * a * r -
+ s * h * r -
+ c * n * l +
+ e * h * l +
+ s * n * d -
+ e * a * d) *
+ b),
+ (t[12] = _ * b),
+ (t[13] =
+ (c * m * i -
+ p * h * i +
+ p * n * u -
+ e * m * u -
+ c * n * f +
+ e * h * f) *
+ b),
+ (t[14] =
+ (p * a * i -
+ s * m * i -
+ p * n * o +
+ e * m * o +
+ s * n * f -
+ e * a * f) *
+ b),
+ (t[15] =
+ (s * h * i -
+ c * a * i +
+ c * n * o -
+ e * h * o -
+ s * n * u +
+ e * a * u) *
+ b),
+ this
+ );
+ }
+ scale(t) {
+ const e = this.elements,
+ n = t.x,
+ i = t.y,
+ r = t.z;
+ return (
+ (e[0] *= n),
+ (e[4] *= i),
+ (e[8] *= r),
+ (e[1] *= n),
+ (e[5] *= i),
+ (e[9] *= r),
+ (e[2] *= n),
+ (e[6] *= i),
+ (e[10] *= r),
+ (e[3] *= n),
+ (e[7] *= i),
+ (e[11] *= r),
+ this
+ );
+ }
+ getMaxScaleOnAxis() {
+ const t = this.elements,
+ e = t[0] * t[0] + t[1] * t[1] + t[2] * t[2],
+ n = t[4] * t[4] + t[5] * t[5] + t[6] * t[6],
+ i = t[8] * t[8] + t[9] * t[9] + t[10] * t[10];
+ return Math.sqrt(Math.max(e, n, i));
+ }
+ makeTranslation(t, e, n) {
+ return this.set(1, 0, 0, t, 0, 1, 0, e, 0, 0, 1, n, 0, 0, 0, 1), this;
+ }
+ makeRotationX(t) {
+ const e = Math.cos(t),
+ n = Math.sin(t);
+ return this.set(1, 0, 0, 0, 0, e, -n, 0, 0, n, e, 0, 0, 0, 0, 1), this;
+ }
+ makeRotationY(t) {
+ const e = Math.cos(t),
+ n = Math.sin(t);
+ return this.set(e, 0, n, 0, 0, 1, 0, 0, -n, 0, e, 0, 0, 0, 0, 1), this;
+ }
+ makeRotationZ(t) {
+ const e = Math.cos(t),
+ n = Math.sin(t);
+ return this.set(e, -n, 0, 0, n, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this;
+ }
+ makeRotationAxis(t, e) {
+ const n = Math.cos(e),
+ i = Math.sin(e),
+ r = 1 - n,
+ s = t.x,
+ a = t.y,
+ o = t.z,
+ l = r * s,
+ c = r * a;
+ return (
+ this.set(
+ l * s + n,
+ l * a - i * o,
+ l * o + i * a,
+ 0,
+ l * a + i * o,
+ c * a + n,
+ c * o - i * s,
+ 0,
+ l * o - i * a,
+ c * o + i * s,
+ r * o * o + n,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1
+ ),
+ this
+ );
+ }
+ makeScale(t, e, n) {
+ return this.set(t, 0, 0, 0, 0, e, 0, 0, 0, 0, n, 0, 0, 0, 0, 1), this;
+ }
+ makeShear(t, e, n) {
+ return this.set(1, e, n, 0, t, 1, n, 0, t, e, 1, 0, 0, 0, 0, 1), this;
+ }
+ compose(t, e, n) {
+ const i = this.elements,
+ r = e._x,
+ s = e._y,
+ a = e._z,
+ o = e._w,
+ l = r + r,
+ c = s + s,
+ h = a + a,
+ u = r * l,
+ d = r * c,
+ p = r * h,
+ m = s * c,
+ f = s * h,
+ g = a * h,
+ v = o * l,
+ y = o * c,
+ x = o * h,
+ _ = n.x,
+ w = n.y,
+ b = n.z;
+ return (
+ (i[0] = (1 - (m + g)) * _),
+ (i[1] = (d + x) * _),
+ (i[2] = (p - y) * _),
+ (i[3] = 0),
+ (i[4] = (d - x) * w),
+ (i[5] = (1 - (u + g)) * w),
+ (i[6] = (f + v) * w),
+ (i[7] = 0),
+ (i[8] = (p + y) * b),
+ (i[9] = (f - v) * b),
+ (i[10] = (1 - (u + m)) * b),
+ (i[11] = 0),
+ (i[12] = t.x),
+ (i[13] = t.y),
+ (i[14] = t.z),
+ (i[15] = 1),
+ this
+ );
+ }
+ decompose(t, e, n) {
+ const i = this.elements;
+ let r = ae.set(i[0], i[1], i[2]).length();
+ const s = ae.set(i[4], i[5], i[6]).length(),
+ a = ae.set(i[8], i[9], i[10]).length();
+ this.determinant() < 0 && (r = -r),
+ (t.x = i[12]),
+ (t.y = i[13]),
+ (t.z = i[14]),
+ oe.copy(this);
+ const o = 1 / r,
+ l = 1 / s,
+ c = 1 / a;
+ return (
+ (oe.elements[0] *= o),
+ (oe.elements[1] *= o),
+ (oe.elements[2] *= o),
+ (oe.elements[4] *= l),
+ (oe.elements[5] *= l),
+ (oe.elements[6] *= l),
+ (oe.elements[8] *= c),
+ (oe.elements[9] *= c),
+ (oe.elements[10] *= c),
+ e.setFromRotationMatrix(oe),
+ (n.x = r),
+ (n.y = s),
+ (n.z = a),
+ this
+ );
+ }
+ makePerspective(t, e, n, i, r, s) {
+ void 0 === s &&
+ console.warn(
+ 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.'
+ );
+ const a = this.elements,
+ o = (2 * r) / (e - t),
+ l = (2 * r) / (n - i),
+ c = (e + t) / (e - t),
+ h = (n + i) / (n - i),
+ u = -(s + r) / (s - r),
+ d = (-2 * s * r) / (s - r);
+ return (
+ (a[0] = o),
+ (a[4] = 0),
+ (a[8] = c),
+ (a[12] = 0),
+ (a[1] = 0),
+ (a[5] = l),
+ (a[9] = h),
+ (a[13] = 0),
+ (a[2] = 0),
+ (a[6] = 0),
+ (a[10] = u),
+ (a[14] = d),
+ (a[3] = 0),
+ (a[7] = 0),
+ (a[11] = -1),
+ (a[15] = 0),
+ this
+ );
+ }
+ makeOrthographic(t, e, n, i, r, s) {
+ const a = this.elements,
+ o = 1 / (e - t),
+ l = 1 / (n - i),
+ c = 1 / (s - r),
+ h = (e + t) * o,
+ u = (n + i) * l,
+ d = (s + r) * c;
+ return (
+ (a[0] = 2 * o),
+ (a[4] = 0),
+ (a[8] = 0),
+ (a[12] = -h),
+ (a[1] = 0),
+ (a[5] = 2 * l),
+ (a[9] = 0),
+ (a[13] = -u),
+ (a[2] = 0),
+ (a[6] = 0),
+ (a[10] = -2 * c),
+ (a[14] = -d),
+ (a[3] = 0),
+ (a[7] = 0),
+ (a[11] = 0),
+ (a[15] = 1),
+ this
+ );
+ }
+ equals(t) {
+ const e = this.elements,
+ n = t.elements;
+ for (let t = 0; t < 16; t++) if (e[t] !== n[t]) return !1;
+ return !0;
+ }
+ fromArray(t, e = 0) {
+ for (let n = 0; n < 16; n++) this.elements[n] = t[n + e];
+ return this;
+ }
+ toArray(t = [], e = 0) {
+ const n = this.elements;
+ return (
+ (t[e] = n[0]),
+ (t[e + 1] = n[1]),
+ (t[e + 2] = n[2]),
+ (t[e + 3] = n[3]),
+ (t[e + 4] = n[4]),
+ (t[e + 5] = n[5]),
+ (t[e + 6] = n[6]),
+ (t[e + 7] = n[7]),
+ (t[e + 8] = n[8]),
+ (t[e + 9] = n[9]),
+ (t[e + 10] = n[10]),
+ (t[e + 11] = n[11]),
+ (t[e + 12] = n[12]),
+ (t[e + 13] = n[13]),
+ (t[e + 14] = n[14]),
+ (t[e + 15] = n[15]),
+ t
+ );
+ }
+ }
+ se.prototype.isMatrix4 = !0;
+ const ae = new Lt(),
+ oe = new se(),
+ le = new Lt(0, 0, 0),
+ ce = new Lt(1, 1, 1),
+ he = new Lt(),
+ ue = new Lt(),
+ de = new Lt(),
+ pe = new se(),
+ me = new At();
+ class fe {
+ constructor(t = 0, e = 0, n = 0, i = fe.DefaultOrder) {
+ (this._x = t), (this._y = e), (this._z = n), (this._order = i);
+ }
+ get x() {
+ return this._x;
+ }
+ set x(t) {
+ (this._x = t), this._onChangeCallback();
+ }
+ get y() {
+ return this._y;
+ }
+ set y(t) {
+ (this._y = t), this._onChangeCallback();
+ }
+ get z() {
+ return this._z;
+ }
+ set z(t) {
+ (this._z = t), this._onChangeCallback();
+ }
+ get order() {
+ return this._order;
+ }
+ set order(t) {
+ (this._order = t), this._onChangeCallback();
+ }
+ set(t, e, n, i) {
+ return (
+ (this._x = t),
+ (this._y = e),
+ (this._z = n),
+ (this._order = i || this._order),
+ this._onChangeCallback(),
+ this
+ );
+ }
+ clone() {
+ return new this.constructor(this._x, this._y, this._z, this._order);
+ }
+ copy(t) {
+ return (
+ (this._x = t._x),
+ (this._y = t._y),
+ (this._z = t._z),
+ (this._order = t._order),
+ this._onChangeCallback(),
+ this
+ );
+ }
+ setFromRotationMatrix(t, e, n) {
+ const i = t.elements,
+ r = i[0],
+ s = i[4],
+ a = i[8],
+ o = i[1],
+ l = i[5],
+ c = i[9],
+ h = i[2],
+ u = i[6],
+ d = i[10];
+ switch ((e = e || this._order)) {
+ case 'XYZ':
+ (this._y = Math.asin(ht(a, -1, 1))),
+ Math.abs(a) < 0.9999999
+ ? ((this._x = Math.atan2(-c, d)), (this._z = Math.atan2(-s, r)))
+ : ((this._x = Math.atan2(u, l)), (this._z = 0));
+ break;
+ case 'YXZ':
+ (this._x = Math.asin(-ht(c, -1, 1))),
+ Math.abs(c) < 0.9999999
+ ? ((this._y = Math.atan2(a, d)), (this._z = Math.atan2(o, l)))
+ : ((this._y = Math.atan2(-h, r)), (this._z = 0));
+ break;
+ case 'ZXY':
+ (this._x = Math.asin(ht(u, -1, 1))),
+ Math.abs(u) < 0.9999999
+ ? ((this._y = Math.atan2(-h, d)), (this._z = Math.atan2(-s, l)))
+ : ((this._y = 0), (this._z = Math.atan2(o, r)));
+ break;
+ case 'ZYX':
+ (this._y = Math.asin(-ht(h, -1, 1))),
+ Math.abs(h) < 0.9999999
+ ? ((this._x = Math.atan2(u, d)), (this._z = Math.atan2(o, r)))
+ : ((this._x = 0), (this._z = Math.atan2(-s, l)));
+ break;
+ case 'YZX':
+ (this._z = Math.asin(ht(o, -1, 1))),
+ Math.abs(o) < 0.9999999
+ ? ((this._x = Math.atan2(-c, l)), (this._y = Math.atan2(-h, r)))
+ : ((this._x = 0), (this._y = Math.atan2(a, d)));
+ break;
+ case 'XZY':
+ (this._z = Math.asin(-ht(s, -1, 1))),
+ Math.abs(s) < 0.9999999
+ ? ((this._x = Math.atan2(u, l)), (this._y = Math.atan2(a, r)))
+ : ((this._x = Math.atan2(-c, d)), (this._y = 0));
+ break;
+ default:
+ console.warn(
+ 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' +
+ e
+ );
+ }
+ return (this._order = e), !1 !== n && this._onChangeCallback(), this;
+ }
+ setFromQuaternion(t, e, n) {
+ return (
+ pe.makeRotationFromQuaternion(t), this.setFromRotationMatrix(pe, e, n)
+ );
+ }
+ setFromVector3(t, e) {
+ return this.set(t.x, t.y, t.z, e || this._order);
+ }
+ reorder(t) {
+ return me.setFromEuler(this), this.setFromQuaternion(me, t);
+ }
+ equals(t) {
+ return (
+ t._x === this._x &&
+ t._y === this._y &&
+ t._z === this._z &&
+ t._order === this._order
+ );
+ }
+ fromArray(t) {
+ return (
+ (this._x = t[0]),
+ (this._y = t[1]),
+ (this._z = t[2]),
+ void 0 !== t[3] && (this._order = t[3]),
+ this._onChangeCallback(),
+ this
+ );
+ }
+ toArray(t = [], e = 0) {
+ return (
+ (t[e] = this._x),
+ (t[e + 1] = this._y),
+ (t[e + 2] = this._z),
+ (t[e + 3] = this._order),
+ t
+ );
+ }
+ toVector3(t) {
+ return t
+ ? t.set(this._x, this._y, this._z)
+ : new Lt(this._x, this._y, this._z);
+ }
+ _onChange(t) {
+ return (this._onChangeCallback = t), this;
+ }
+ _onChangeCallback() {}
+ }
+ (fe.prototype.isEuler = !0),
+ (fe.DefaultOrder = 'XYZ'),
+ (fe.RotationOrders = ['XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX']);
+ class ge {
+ constructor() {
+ this.mask = 1;
+ }
+ set(t) {
+ this.mask = (1 << t) | 0;
+ }
+ enable(t) {
+ this.mask |= (1 << t) | 0;
+ }
+ enableAll() {
+ this.mask = -1;
+ }
+ toggle(t) {
+ this.mask ^= (1 << t) | 0;
+ }
+ disable(t) {
+ this.mask &= ~((1 << t) | 0);
+ }
+ disableAll() {
+ this.mask = 0;
+ }
+ test(t) {
+ return 0 != (this.mask & t.mask);
+ }
+ }
+ let ve = 0;
+ const ye = new Lt(),
+ xe = new At(),
+ _e = new se(),
+ we = new Lt(),
+ be = new Lt(),
+ Me = new Lt(),
+ Se = new At(),
+ Te = new Lt(1, 0, 0),
+ Ee = new Lt(0, 1, 0),
+ Ae = new Lt(0, 0, 1),
+ Le = { type: 'added' },
+ Re = { type: 'removed' };
+ class Ce extends rt {
+ constructor() {
+ super(),
+ Object.defineProperty(this, 'id', { value: ve++ }),
+ (this.uuid = ct()),
+ (this.name = ''),
+ (this.type = 'Object3D'),
+ (this.parent = null),
+ (this.children = []),
+ (this.up = Ce.DefaultUp.clone());
+ const t = new Lt(),
+ e = new fe(),
+ n = new At(),
+ i = new Lt(1, 1, 1);
+ e._onChange(function () {
+ n.setFromEuler(e, !1);
+ }),
+ n._onChange(function () {
+ e.setFromQuaternion(n, void 0, !1);
+ }),
+ Object.defineProperties(this, {
+ position: { configurable: !0, enumerable: !0, value: t },
+ rotation: { configurable: !0, enumerable: !0, value: e },
+ quaternion: { configurable: !0, enumerable: !0, value: n },
+ scale: { configurable: !0, enumerable: !0, value: i },
+ modelViewMatrix: { value: new se() },
+ normalMatrix: { value: new yt() },
+ }),
+ (this.matrix = new se()),
+ (this.matrixWorld = new se()),
+ (this.matrixAutoUpdate = Ce.DefaultMatrixAutoUpdate),
+ (this.matrixWorldNeedsUpdate = !1),
+ (this.layers = new ge()),
+ (this.visible = !0),
+ (this.castShadow = !1),
+ (this.receiveShadow = !1),
+ (this.frustumCulled = !0),
+ (this.renderOrder = 0),
+ (this.animations = []),
+ (this.userData = {});
+ }
+ onBeforeRender() {}
+ onAfterRender() {}
+ applyMatrix4(t) {
+ this.matrixAutoUpdate && this.updateMatrix(),
+ this.matrix.premultiply(t),
+ this.matrix.decompose(this.position, this.quaternion, this.scale);
+ }
+ applyQuaternion(t) {
+ return this.quaternion.premultiply(t), this;
+ }
+ setRotationFromAxisAngle(t, e) {
+ this.quaternion.setFromAxisAngle(t, e);
+ }
+ setRotationFromEuler(t) {
+ this.quaternion.setFromEuler(t, !0);
+ }
+ setRotationFromMatrix(t) {
+ this.quaternion.setFromRotationMatrix(t);
+ }
+ setRotationFromQuaternion(t) {
+ this.quaternion.copy(t);
+ }
+ rotateOnAxis(t, e) {
+ return xe.setFromAxisAngle(t, e), this.quaternion.multiply(xe), this;
+ }
+ rotateOnWorldAxis(t, e) {
+ return xe.setFromAxisAngle(t, e), this.quaternion.premultiply(xe), this;
+ }
+ rotateX(t) {
+ return this.rotateOnAxis(Te, t);
+ }
+ rotateY(t) {
+ return this.rotateOnAxis(Ee, t);
+ }
+ rotateZ(t) {
+ return this.rotateOnAxis(Ae, t);
+ }
+ translateOnAxis(t, e) {
+ return (
+ ye.copy(t).applyQuaternion(this.quaternion),
+ this.position.add(ye.multiplyScalar(e)),
+ this
+ );
+ }
+ translateX(t) {
+ return this.translateOnAxis(Te, t);
+ }
+ translateY(t) {
+ return this.translateOnAxis(Ee, t);
+ }
+ translateZ(t) {
+ return this.translateOnAxis(Ae, t);
+ }
+ localToWorld(t) {
+ return t.applyMatrix4(this.matrixWorld);
+ }
+ worldToLocal(t) {
+ return t.applyMatrix4(_e.copy(this.matrixWorld).invert());
+ }
+ lookAt(t, e, n) {
+ t.isVector3 ? we.copy(t) : we.set(t, e, n);
+ const i = this.parent;
+ this.updateWorldMatrix(!0, !1),
+ be.setFromMatrixPosition(this.matrixWorld),
+ this.isCamera || this.isLight
+ ? _e.lookAt(be, we, this.up)
+ : _e.lookAt(we, be, this.up),
+ this.quaternion.setFromRotationMatrix(_e),
+ i &&
+ (_e.extractRotation(i.matrixWorld),
+ xe.setFromRotationMatrix(_e),
+ this.quaternion.premultiply(xe.invert()));
+ }
+ add(t) {
+ if (arguments.length > 1) {
+ for (let t = 0; t < arguments.length; t++) this.add(arguments[t]);
+ return this;
+ }
+ return t === this
+ ? (console.error(
+ "THREE.Object3D.add: object can't be added as a child of itself.",
+ t
+ ),
+ this)
+ : (t && t.isObject3D
+ ? (null !== t.parent && t.parent.remove(t),
+ (t.parent = this),
+ this.children.push(t),
+ t.dispatchEvent(Le))
+ : console.error(
+ 'THREE.Object3D.add: object not an instance of THREE.Object3D.',
+ t
+ ),
+ this);
+ }
+ remove(t) {
+ if (arguments.length > 1) {
+ for (let t = 0; t < arguments.length; t++) this.remove(arguments[t]);
+ return this;
+ }
+ const e = this.children.indexOf(t);
+ return (
+ -1 !== e &&
+ ((t.parent = null), this.children.splice(e, 1), t.dispatchEvent(Re)),
+ this
+ );
+ }
+ clear() {
+ for (let t = 0; t < this.children.length; t++) {
+ const e = this.children[t];
+ (e.parent = null), e.dispatchEvent(Re);
+ }
+ return (this.children.length = 0), this;
+ }
+ attach(t) {
+ return (
+ this.updateWorldMatrix(!0, !1),
+ _e.copy(this.matrixWorld).invert(),
+ null !== t.parent &&
+ (t.parent.updateWorldMatrix(!0, !1),
+ _e.multiply(t.parent.matrixWorld)),
+ t.applyMatrix4(_e),
+ this.add(t),
+ t.updateWorldMatrix(!1, !0),
+ this
+ );
+ }
+ getObjectById(t) {
+ return this.getObjectByProperty('id', t);
+ }
+ getObjectByName(t) {
+ return this.getObjectByProperty('name', t);
+ }
+ getObjectByProperty(t, e) {
+ if (this[t] === e) return this;
+ for (let n = 0, i = this.children.length; n < i; n++) {
+ const i = this.children[n].getObjectByProperty(t, e);
+ if (void 0 !== i) return i;
+ }
+ }
+ getWorldPosition(t) {
+ return (
+ void 0 === t &&
+ (console.warn(
+ 'THREE.Object3D: .getWorldPosition() target is now required'
+ ),
+ (t = new Lt())),
+ this.updateWorldMatrix(!0, !1),
+ t.setFromMatrixPosition(this.matrixWorld)
+ );
+ }
+ getWorldQuaternion(t) {
+ return (
+ void 0 === t &&
+ (console.warn(
+ 'THREE.Object3D: .getWorldQuaternion() target is now required'
+ ),
+ (t = new At())),
+ this.updateWorldMatrix(!0, !1),
+ this.matrixWorld.decompose(be, t, Me),
+ t
+ );
+ }
+ getWorldScale(t) {
+ return (
+ void 0 === t &&
+ (console.warn(
+ 'THREE.Object3D: .getWorldScale() target is now required'
+ ),
+ (t = new Lt())),
+ this.updateWorldMatrix(!0, !1),
+ this.matrixWorld.decompose(be, Se, t),
+ t
+ );
+ }
+ getWorldDirection(t) {
+ void 0 === t &&
+ (console.warn(
+ 'THREE.Object3D: .getWorldDirection() target is now required'
+ ),
+ (t = new Lt())),
+ this.updateWorldMatrix(!0, !1);
+ const e = this.matrixWorld.elements;
+ return t.set(e[8], e[9], e[10]).normalize();
+ }
+ raycast() {}
+ traverse(t) {
+ t(this);
+ const e = this.children;
+ for (let n = 0, i = e.length; n < i; n++) e[n].traverse(t);
+ }
+ traverseVisible(t) {
+ if (!1 === this.visible) return;
+ t(this);
+ const e = this.children;
+ for (let n = 0, i = e.length; n < i; n++) e[n].traverseVisible(t);
+ }
+ traverseAncestors(t) {
+ const e = this.parent;
+ null !== e && (t(e), e.traverseAncestors(t));
+ }
+ updateMatrix() {
+ this.matrix.compose(this.position, this.quaternion, this.scale),
+ (this.matrixWorldNeedsUpdate = !0);
+ }
+ updateMatrixWorld(t) {
+ this.matrixAutoUpdate && this.updateMatrix(),
+ (this.matrixWorldNeedsUpdate || t) &&
+ (null === this.parent
+ ? this.matrixWorld.copy(this.matrix)
+ : this.matrixWorld.multiplyMatrices(
+ this.parent.matrixWorld,
+ this.matrix
+ ),
+ (this.matrixWorldNeedsUpdate = !1),
+ (t = !0));
+ const e = this.children;
+ for (let n = 0, i = e.length; n < i; n++) e[n].updateMatrixWorld(t);
+ }
+ updateWorldMatrix(t, e) {
+ const n = this.parent;
+ if (
+ (!0 === t && null !== n && n.updateWorldMatrix(!0, !1),
+ this.matrixAutoUpdate && this.updateMatrix(),
+ null === this.parent
+ ? this.matrixWorld.copy(this.matrix)
+ : this.matrixWorld.multiplyMatrices(
+ this.parent.matrixWorld,
+ this.matrix
+ ),
+ !0 === e)
+ ) {
+ const t = this.children;
+ for (let e = 0, n = t.length; e < n; e++)
+ t[e].updateWorldMatrix(!1, !0);
+ }
+ }
+ toJSON(t) {
+ const e = void 0 === t || 'string' == typeof t,
+ n = {};
+ e &&
+ ((t = {
+ geometries: {},
+ materials: {},
+ textures: {},
+ images: {},
+ shapes: {},
+ skeletons: {},
+ animations: {},
+ }),
+ (n.metadata = {
+ version: 4.5,
+ type: 'Object',
+ generator: 'Object3D.toJSON',
+ }));
+ const i = {};
+ function r(e, n) {
+ return void 0 === e[n.uuid] && (e[n.uuid] = n.toJSON(t)), n.uuid;
+ }
+ if (
+ ((i.uuid = this.uuid),
+ (i.type = this.type),
+ '' !== this.name && (i.name = this.name),
+ !0 === this.castShadow && (i.castShadow = !0),
+ !0 === this.receiveShadow && (i.receiveShadow = !0),
+ !1 === this.visible && (i.visible = !1),
+ !1 === this.frustumCulled && (i.frustumCulled = !1),
+ 0 !== this.renderOrder && (i.renderOrder = this.renderOrder),
+ '{}' !== JSON.stringify(this.userData) && (i.userData = this.userData),
+ (i.layers = this.layers.mask),
+ (i.matrix = this.matrix.toArray()),
+ !1 === this.matrixAutoUpdate && (i.matrixAutoUpdate = !1),
+ this.isInstancedMesh &&
+ ((i.type = 'InstancedMesh'),
+ (i.count = this.count),
+ (i.instanceMatrix = this.instanceMatrix.toJSON()),
+ null !== this.instanceColor &&
+ (i.instanceColor = this.instanceColor.toJSON())),
+ this.isMesh || this.isLine || this.isPoints)
+ ) {
+ i.geometry = r(t.geometries, this.geometry);
+ const e = this.geometry.parameters;
+ if (void 0 !== e && void 0 !== e.shapes) {
+ const n = e.shapes;
+ if (Array.isArray(n))
+ for (let e = 0, i = n.length; e < i; e++) {
+ const i = n[e];
+ r(t.shapes, i);
+ }
+ else r(t.shapes, n);
+ }
+ }
+ if (
+ (this.isSkinnedMesh &&
+ ((i.bindMode = this.bindMode),
+ (i.bindMatrix = this.bindMatrix.toArray()),
+ void 0 !== this.skeleton &&
+ (r(t.skeletons, this.skeleton), (i.skeleton = this.skeleton.uuid))),
+ void 0 !== this.material)
+ )
+ if (Array.isArray(this.material)) {
+ const e = [];
+ for (let n = 0, i = this.material.length; n < i; n++)
+ e.push(r(t.materials, this.material[n]));
+ i.material = e;
+ } else i.material = r(t.materials, this.material);
+ if (this.children.length > 0) {
+ i.children = [];
+ for (let e = 0; e < this.children.length; e++)
+ i.children.push(this.children[e].toJSON(t).object);
+ }
+ if (this.animations.length > 0) {
+ i.animations = [];
+ for (let e = 0; e < this.animations.length; e++) {
+ const n = this.animations[e];
+ i.animations.push(r(t.animations, n));
+ }
+ }
+ if (e) {
+ const e = s(t.geometries),
+ i = s(t.materials),
+ r = s(t.textures),
+ a = s(t.images),
+ o = s(t.shapes),
+ l = s(t.skeletons),
+ c = s(t.animations);
+ e.length > 0 && (n.geometries = e),
+ i.length > 0 && (n.materials = i),
+ r.length > 0 && (n.textures = r),
+ a.length > 0 && (n.images = a),
+ o.length > 0 && (n.shapes = o),
+ l.length > 0 && (n.skeletons = l),
+ c.length > 0 && (n.animations = c);
+ }
+ return (n.object = i), n;
+ function s(t) {
+ const e = [];
+ for (const n in t) {
+ const i = t[n];
+ delete i.metadata, e.push(i);
+ }
+ return e;
+ }
+ }
+ clone(t) {
+ return new this.constructor().copy(this, t);
+ }
+ copy(t, e = !0) {
+ if (
+ ((this.name = t.name),
+ this.up.copy(t.up),
+ this.position.copy(t.position),
+ (this.rotation.order = t.rotation.order),
+ this.quaternion.copy(t.quaternion),
+ this.scale.copy(t.scale),
+ this.matrix.copy(t.matrix),
+ this.matrixWorld.copy(t.matrixWorld),
+ (this.matrixAutoUpdate = t.matrixAutoUpdate),
+ (this.matrixWorldNeedsUpdate = t.matrixWorldNeedsUpdate),
+ (this.layers.mask = t.layers.mask),
+ (this.visible = t.visible),
+ (this.castShadow = t.castShadow),
+ (this.receiveShadow = t.receiveShadow),
+ (this.frustumCulled = t.frustumCulled),
+ (this.renderOrder = t.renderOrder),
+ (this.userData = JSON.parse(JSON.stringify(t.userData))),
+ !0 === e)
+ )
+ for (let e = 0; e < t.children.length; e++) {
+ const n = t.children[e];
+ this.add(n.clone());
+ }
+ return this;
+ }
+ }
+ (Ce.DefaultUp = new Lt(0, 1, 0)),
+ (Ce.DefaultMatrixAutoUpdate = !0),
+ (Ce.prototype.isObject3D = !0);
+ const Pe = new Lt(),
+ De = new Lt(),
+ Ie = new yt();
+ class Ne {
+ constructor(t = new Lt(1, 0, 0), e = 0) {
+ (this.normal = t), (this.constant = e);
+ }
+ set(t, e) {
+ return this.normal.copy(t), (this.constant = e), this;
+ }
+ setComponents(t, e, n, i) {
+ return this.normal.set(t, e, n), (this.constant = i), this;
+ }
+ setFromNormalAndCoplanarPoint(t, e) {
+ return this.normal.copy(t), (this.constant = -e.dot(this.normal)), this;
+ }
+ setFromCoplanarPoints(t, e, n) {
+ const i = Pe.subVectors(n, e).cross(De.subVectors(t, e)).normalize();
+ return this.setFromNormalAndCoplanarPoint(i, t), this;
+ }
+ copy(t) {
+ return this.normal.copy(t.normal), (this.constant = t.constant), this;
+ }
+ normalize() {
+ const t = 1 / this.normal.length();
+ return this.normal.multiplyScalar(t), (this.constant *= t), this;
+ }
+ negate() {
+ return (this.constant *= -1), this.normal.negate(), this;
+ }
+ distanceToPoint(t) {
+ return this.normal.dot(t) + this.constant;
+ }
+ distanceToSphere(t) {
+ return this.distanceToPoint(t.center) - t.radius;
+ }
+ projectPoint(t, e) {
+ return (
+ void 0 === e &&
+ (console.warn('THREE.Plane: .projectPoint() target is now required'),
+ (e = new Lt())),
+ e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)
+ );
+ }
+ intersectLine(t, e) {
+ void 0 === e &&
+ (console.warn('THREE.Plane: .intersectLine() target is now required'),
+ (e = new Lt()));
+ const n = t.delta(Pe),
+ i = this.normal.dot(n);
+ if (0 === i)
+ return 0 === this.distanceToPoint(t.start) ? e.copy(t.start) : null;
+ const r = -(t.start.dot(this.normal) + this.constant) / i;
+ return r < 0 || r > 1 ? null : e.copy(n).multiplyScalar(r).add(t.start);
+ }
+ intersectsLine(t) {
+ const e = this.distanceToPoint(t.start),
+ n = this.distanceToPoint(t.end);
+ return (e < 0 && n > 0) || (n < 0 && e > 0);
+ }
+ intersectsBox(t) {
+ return t.intersectsPlane(this);
+ }
+ intersectsSphere(t) {
+ return t.intersectsPlane(this);
+ }
+ coplanarPoint(t) {
+ return (
+ void 0 === t &&
+ (console.warn('THREE.Plane: .coplanarPoint() target is now required'),
+ (t = new Lt())),
+ t.copy(this.normal).multiplyScalar(-this.constant)
+ );
+ }
+ applyMatrix4(t, e) {
+ const n = e || Ie.getNormalMatrix(t),
+ i = this.coplanarPoint(Pe).applyMatrix4(t),
+ r = this.normal.applyMatrix3(n).normalize();
+ return (this.constant = -i.dot(r)), this;
+ }
+ translate(t) {
+ return (this.constant -= t.dot(this.normal)), this;
+ }
+ equals(t) {
+ return t.normal.equals(this.normal) && t.constant === this.constant;
+ }
+ clone() {
+ return new this.constructor().copy(this);
+ }
+ }
+ Ne.prototype.isPlane = !0;
+ const Be = new Lt(),
+ ze = new Lt(),
+ Fe = new Lt(),
+ Oe = new Lt(),
+ He = new Lt(),
+ Ge = new Lt(),
+ Ue = new Lt(),
+ ke = new Lt(),
+ Ve = new Lt(),
+ We = new Lt();
+ class je {
+ constructor(t = new Lt(), e = new Lt(), n = new Lt()) {
+ (this.a = t), (this.b = e), (this.c = n);
+ }
+ static getNormal(t, e, n, i) {
+ void 0 === i &&
+ (console.warn('THREE.Triangle: .getNormal() target is now required'),
+ (i = new Lt())),
+ i.subVectors(n, e),
+ Be.subVectors(t, e),
+ i.cross(Be);
+ const r = i.lengthSq();
+ return r > 0 ? i.multiplyScalar(1 / Math.sqrt(r)) : i.set(0, 0, 0);
+ }
+ static getBarycoord(t, e, n, i, r) {
+ Be.subVectors(i, e), ze.subVectors(n, e), Fe.subVectors(t, e);
+ const s = Be.dot(Be),
+ a = Be.dot(ze),
+ o = Be.dot(Fe),
+ l = ze.dot(ze),
+ c = ze.dot(Fe),
+ h = s * l - a * a;
+ if (
+ (void 0 === r &&
+ (console.warn(
+ 'THREE.Triangle: .getBarycoord() target is now required'
+ ),
+ (r = new Lt())),
+ 0 === h)
+ )
+ return r.set(-2, -1, -1);
+ const u = 1 / h,
+ d = (l * o - a * c) * u,
+ p = (s * c - a * o) * u;
+ return r.set(1 - d - p, p, d);
+ }
+ static containsPoint(t, e, n, i) {
+ return (
+ this.getBarycoord(t, e, n, i, Oe),
+ Oe.x >= 0 && Oe.y >= 0 && Oe.x + Oe.y <= 1
+ );
+ }
+ static getUV(t, e, n, i, r, s, a, o) {
+ return (
+ this.getBarycoord(t, e, n, i, Oe),
+ o.set(0, 0),
+ o.addScaledVector(r, Oe.x),
+ o.addScaledVector(s, Oe.y),
+ o.addScaledVector(a, Oe.z),
+ o
+ );
+ }
+ static isFrontFacing(t, e, n, i) {
+ return Be.subVectors(n, e), ze.subVectors(t, e), Be.cross(ze).dot(i) < 0;
+ }
+ set(t, e, n) {
+ return this.a.copy(t), this.b.copy(e), this.c.copy(n), this;
+ }
+ setFromPointsAndIndices(t, e, n, i) {
+ return this.a.copy(t[e]), this.b.copy(t[n]), this.c.copy(t[i]), this;
+ }
+ clone() {
+ return new this.constructor().copy(this);
+ }
+ copy(t) {
+ return this.a.copy(t.a), this.b.copy(t.b), this.c.copy(t.c), this;
+ }
+ getArea() {
+ return (
+ Be.subVectors(this.c, this.b),
+ ze.subVectors(this.a, this.b),
+ 0.5 * Be.cross(ze).length()
+ );
+ }
+ getMidpoint(t) {
+ return (
+ void 0 === t &&
+ (console.warn(
+ 'THREE.Triangle: .getMidpoint() target is now required'
+ ),
+ (t = new Lt())),
+ t
+ .addVectors(this.a, this.b)
+ .add(this.c)
+ .multiplyScalar(1 / 3)
+ );
+ }
+ getNormal(t) {
+ return je.getNormal(this.a, this.b, this.c, t);
+ }
+ getPlane(t) {
+ return (
+ void 0 === t &&
+ (console.warn('THREE.Triangle: .getPlane() target is now required'),
+ (t = new Ne())),
+ t.setFromCoplanarPoints(this.a, this.b, this.c)
+ );
+ }
+ getBarycoord(t, e) {
+ return je.getBarycoord(t, this.a, this.b, this.c, e);
+ }
+ getUV(t, e, n, i, r) {
+ return je.getUV(t, this.a, this.b, this.c, e, n, i, r);
+ }
+ containsPoint(t) {
+ return je.containsPoint(t, this.a, this.b, this.c);
+ }
+ isFrontFacing(t) {
+ return je.isFrontFacing(this.a, this.b, this.c, t);
+ }
+ intersectsBox(t) {
+ return t.intersectsTriangle(this);
+ }
+ closestPointToPoint(t, e) {
+ void 0 === e &&
+ (console.warn(
+ 'THREE.Triangle: .closestPointToPoint() target is now required'
+ ),
+ (e = new Lt()));
+ const n = this.a,
+ i = this.b,
+ r = this.c;
+ let s, a;
+ He.subVectors(i, n), Ge.subVectors(r, n), ke.subVectors(t, n);
+ const o = He.dot(ke),
+ l = Ge.dot(ke);
+ if (o <= 0 && l <= 0) return e.copy(n);
+ Ve.subVectors(t, i);
+ const c = He.dot(Ve),
+ h = Ge.dot(Ve);
+ if (c >= 0 && h <= c) return e.copy(i);
+ const u = o * h - c * l;
+ if (u <= 0 && o >= 0 && c <= 0)
+ return (s = o / (o - c)), e.copy(n).addScaledVector(He, s);
+ We.subVectors(t, r);
+ const d = He.dot(We),
+ p = Ge.dot(We);
+ if (p >= 0 && d <= p) return e.copy(r);
+ const m = d * l - o * p;
+ if (m <= 0 && l >= 0 && p <= 0)
+ return (a = l / (l - p)), e.copy(n).addScaledVector(Ge, a);
+ const f = c * p - d * h;
+ if (f <= 0 && h - c >= 0 && d - p >= 0)
+ return (
+ Ue.subVectors(r, i),
+ (a = (h - c) / (h - c + (d - p))),
+ e.copy(i).addScaledVector(Ue, a)
+ );
+ const g = 1 / (f + m + u);
+ return (
+ (s = m * g),
+ (a = u * g),
+ e.copy(n).addScaledVector(He, s).addScaledVector(Ge, a)
+ );
+ }
+ equals(t) {
+ return t.a.equals(this.a) && t.b.equals(this.b) && t.c.equals(this.c);
+ }
+ }
+ let qe = 0;
+ function Xe() {
+ Object.defineProperty(this, 'id', { value: qe++ }),
+ (this.uuid = ct()),
+ (this.name = ''),
+ (this.type = 'Material'),
+ (this.fog = !0),
+ (this.blending = 1),
+ (this.side = 0),
+ (this.vertexColors = !1),
+ (this.opacity = 1),
+ (this.transparent = !1),
+ (this.blendSrc = 204),
+ (this.blendDst = 205),
+ (this.blendEquation = n),
+ (this.blendSrcAlpha = null),
+ (this.blendDstAlpha = null),
+ (this.blendEquationAlpha = null),
+ (this.depthFunc = 3),
+ (this.depthTest = !0),
+ (this.depthWrite = !0),
+ (this.stencilWriteMask = 255),
+ (this.stencilFunc = 519),
+ (this.stencilRef = 0),
+ (this.stencilFuncMask = 255),
+ (this.stencilFail = tt),
+ (this.stencilZFail = tt),
+ (this.stencilZPass = tt),
+ (this.stencilWrite = !1),
+ (this.clippingPlanes = null),
+ (this.clipIntersection = !1),
+ (this.clipShadows = !1),
+ (this.shadowSide = null),
+ (this.colorWrite = !0),
+ (this.precision = null),
+ (this.polygonOffset = !1),
+ (this.polygonOffsetFactor = 0),
+ (this.polygonOffsetUnits = 0),
+ (this.dithering = !1),
+ (this.alphaTest = 0),
+ (this.alphaToCoverage = !1),
+ (this.premultipliedAlpha = !1),
+ (this.visible = !0),
+ (this.toneMapped = !0),
+ (this.userData = {}),
+ (this.version = 0);
+ }
+ (Xe.prototype = Object.assign(Object.create(rt.prototype), {
+ constructor: Xe,
+ isMaterial: !0,
+ onBuild: function () {},
+ onBeforeCompile: function () {},
+ customProgramCacheKey: function () {
+ return this.onBeforeCompile.toString();
+ },
+ setValues: function (t) {
+ if (void 0 !== t)
+ for (const e in t) {
+ const n = t[e];
+ if (void 0 === n) {
+ console.warn("THREE.Material: '" + e + "' parameter is undefined.");
+ continue;
+ }
+ if ('shading' === e) {
+ console.warn(
+ 'THREE.' +
+ this.type +
+ ': .shading has been removed. Use the boolean .flatShading instead.'
+ ),
+ (this.flatShading = 1 === n);
+ continue;
+ }
+ const i = this[e];
+ void 0 !== i
+ ? i && i.isColor
+ ? i.set(n)
+ : i && i.isVector3 && n && n.isVector3
+ ? i.copy(n)
+ : (this[e] = n)
+ : console.warn(
+ 'THREE.' +
+ this.type +
+ ": '" +
+ e +
+ "' is not a property of this material."
+ );
+ }
+ },
+ toJSON: function (t) {
+ const e = void 0 === t || 'string' == typeof t;
+ e && (t = { textures: {}, images: {} });
+ const n = {
+ metadata: {
+ version: 4.5,
+ type: 'Material',
+ generator: 'Material.toJSON',
+ },
+ };
+ function i(t) {
+ const e = [];
+ for (const n in t) {
+ const i = t[n];
+ delete i.metadata, e.push(i);
+ }
+ return e;
+ }
+ if (
+ ((n.uuid = this.uuid),
+ (n.type = this.type),
+ '' !== this.name && (n.name = this.name),
+ this.color && this.color.isColor && (n.color = this.color.getHex()),
+ void 0 !== this.roughness && (n.roughness = this.roughness),
+ void 0 !== this.metalness && (n.metalness = this.metalness),
+ this.sheen && this.sheen.isColor && (n.sheen = this.sheen.getHex()),
+ this.emissive &&
+ this.emissive.isColor &&
+ (n.emissive = this.emissive.getHex()),
+ this.emissiveIntensity &&
+ 1 !== this.emissiveIntensity &&
+ (n.emissiveIntensity = this.emissiveIntensity),
+ this.specular &&
+ this.specular.isColor &&
+ (n.specular = this.specular.getHex()),
+ void 0 !== this.shininess && (n.shininess = this.shininess),
+ void 0 !== this.clearcoat && (n.clearcoat = this.clearcoat),
+ void 0 !== this.clearcoatRoughness &&
+ (n.clearcoatRoughness = this.clearcoatRoughness),
+ this.clearcoatMap &&
+ this.clearcoatMap.isTexture &&
+ (n.clearcoatMap = this.clearcoatMap.toJSON(t).uuid),
+ this.clearcoatRoughnessMap &&
+ this.clearcoatRoughnessMap.isTexture &&
+ (n.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(t).uuid),
+ this.clearcoatNormalMap &&
+ this.clearcoatNormalMap.isTexture &&
+ ((n.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(t).uuid),
+ (n.clearcoatNormalScale = this.clearcoatNormalScale.toArray())),
+ this.map && this.map.isTexture && (n.map = this.map.toJSON(t).uuid),
+ this.matcap &&
+ this.matcap.isTexture &&
+ (n.matcap = this.matcap.toJSON(t).uuid),
+ this.alphaMap &&
+ this.alphaMap.isTexture &&
+ (n.alphaMap = this.alphaMap.toJSON(t).uuid),
+ this.lightMap &&
+ this.lightMap.isTexture &&
+ ((n.lightMap = this.lightMap.toJSON(t).uuid),
+ (n.lightMapIntensity = this.lightMapIntensity)),
+ this.aoMap &&
+ this.aoMap.isTexture &&
+ ((n.aoMap = this.aoMap.toJSON(t).uuid),
+ (n.aoMapIntensity = this.aoMapIntensity)),
+ this.bumpMap &&
+ this.bumpMap.isTexture &&
+ ((n.bumpMap = this.bumpMap.toJSON(t).uuid),
+ (n.bumpScale = this.bumpScale)),
+ this.normalMap &&
+ this.normalMap.isTexture &&
+ ((n.normalMap = this.normalMap.toJSON(t).uuid),
+ (n.normalMapType = this.normalMapType),
+ (n.normalScale = this.normalScale.toArray())),
+ this.displacementMap &&
+ this.displacementMap.isTexture &&
+ ((n.displacementMap = this.displacementMap.toJSON(t).uuid),
+ (n.displacementScale = this.displacementScale),
+ (n.displacementBias = this.displacementBias)),
+ this.roughnessMap &&
+ this.roughnessMap.isTexture &&
+ (n.roughnessMap = this.roughnessMap.toJSON(t).uuid),
+ this.metalnessMap &&
+ this.metalnessMap.isTexture &&
+ (n.metalnessMap = this.metalnessMap.toJSON(t).uuid),
+ this.emissiveMap &&
+ this.emissiveMap.isTexture &&
+ (n.emissiveMap = this.emissiveMap.toJSON(t).uuid),
+ this.specularMap &&
+ this.specularMap.isTexture &&
+ (n.specularMap = this.specularMap.toJSON(t).uuid),
+ this.envMap &&
+ this.envMap.isTexture &&
+ ((n.envMap = this.envMap.toJSON(t).uuid),
+ void 0 !== this.combine && (n.combine = this.combine)),
+ void 0 !== this.envMapIntensity &&
+ (n.envMapIntensity = this.envMapIntensity),
+ void 0 !== this.reflectivity && (n.reflectivity = this.reflectivity),
+ void 0 !== this.refractionRatio &&
+ (n.refractionRatio = this.refractionRatio),
+ this.gradientMap &&
+ this.gradientMap.isTexture &&
+ (n.gradientMap = this.gradientMap.toJSON(t).uuid),
+ void 0 !== this.size && (n.size = this.size),
+ null !== this.shadowSide && (n.shadowSide = this.shadowSide),
+ void 0 !== this.sizeAttenuation &&
+ (n.sizeAttenuation = this.sizeAttenuation),
+ 1 !== this.blending && (n.blending = this.blending),
+ 0 !== this.side && (n.side = this.side),
+ this.vertexColors && (n.vertexColors = !0),
+ this.opacity < 1 && (n.opacity = this.opacity),
+ !0 === this.transparent && (n.transparent = this.transparent),
+ (n.depthFunc = this.depthFunc),
+ (n.depthTest = this.depthTest),
+ (n.depthWrite = this.depthWrite),
+ (n.colorWrite = this.colorWrite),
+ (n.stencilWrite = this.stencilWrite),
+ (n.stencilWriteMask = this.stencilWriteMask),
+ (n.stencilFunc = this.stencilFunc),
+ (n.stencilRef = this.stencilRef),
+ (n.stencilFuncMask = this.stencilFuncMask),
+ (n.stencilFail = this.stencilFail),
+ (n.stencilZFail = this.stencilZFail),
+ (n.stencilZPass = this.stencilZPass),
+ this.rotation && 0 !== this.rotation && (n.rotation = this.rotation),
+ !0 === this.polygonOffset && (n.polygonOffset = !0),
+ 0 !== this.polygonOffsetFactor &&
+ (n.polygonOffsetFactor = this.polygonOffsetFactor),
+ 0 !== this.polygonOffsetUnits &&
+ (n.polygonOffsetUnits = this.polygonOffsetUnits),
+ this.linewidth &&
+ 1 !== this.linewidth &&
+ (n.linewidth = this.linewidth),
+ void 0 !== this.dashSize && (n.dashSize = this.dashSize),
+ void 0 !== this.gapSize && (n.gapSize = this.gapSize),
+ void 0 !== this.scale && (n.scale = this.scale),
+ !0 === this.dithering && (n.dithering = !0),
+ this.alphaTest > 0 && (n.alphaTest = this.alphaTest),
+ !0 === this.alphaToCoverage &&
+ (n.alphaToCoverage = this.alphaToCoverage),
+ !0 === this.premultipliedAlpha &&
+ (n.premultipliedAlpha = this.premultipliedAlpha),
+ !0 === this.wireframe && (n.wireframe = this.wireframe),
+ this.wireframeLinewidth > 1 &&
+ (n.wireframeLinewidth = this.wireframeLinewidth),
+ 'round' !== this.wireframeLinecap &&
+ (n.wireframeLinecap = this.wireframeLinecap),
+ 'round' !== this.wireframeLinejoin &&
+ (n.wireframeLinejoin = this.wireframeLinejoin),
+ !0 === this.morphTargets && (n.morphTargets = !0),
+ !0 === this.morphNormals && (n.morphNormals = !0),
+ !0 === this.skinning && (n.skinning = !0),
+ !0 === this.flatShading && (n.flatShading = this.flatShading),
+ !1 === this.visible && (n.visible = !1),
+ !1 === this.toneMapped && (n.toneMapped = !1),
+ '{}' !== JSON.stringify(this.userData) && (n.userData = this.userData),
+ e)
+ ) {
+ const e = i(t.textures),
+ r = i(t.images);
+ e.length > 0 && (n.textures = e), r.length > 0 && (n.images = r);
+ }
+ return n;
+ },
+ clone: function () {
+ return new this.constructor().copy(this);
+ },
+ copy: function (t) {
+ (this.name = t.name),
+ (this.fog = t.fog),
+ (this.blending = t.blending),
+ (this.side = t.side),
+ (this.vertexColors = t.vertexColors),
+ (this.opacity = t.opacity),
+ (this.transparent = t.transparent),
+ (this.blendSrc = t.blendSrc),
+ (this.blendDst = t.blendDst),
+ (this.blendEquation = t.blendEquation),
+ (this.blendSrcAlpha = t.blendSrcAlpha),
+ (this.blendDstAlpha = t.blendDstAlpha),
+ (this.blendEquationAlpha = t.blendEquationAlpha),
+ (this.depthFunc = t.depthFunc),
+ (this.depthTest = t.depthTest),
+ (this.depthWrite = t.depthWrite),
+ (this.stencilWriteMask = t.stencilWriteMask),
+ (this.stencilFunc = t.stencilFunc),
+ (this.stencilRef = t.stencilRef),
+ (this.stencilFuncMask = t.stencilFuncMask),
+ (this.stencilFail = t.stencilFail),
+ (this.stencilZFail = t.stencilZFail),
+ (this.stencilZPass = t.stencilZPass),
+ (this.stencilWrite = t.stencilWrite);
+ const e = t.clippingPlanes;
+ let n = null;
+ if (null !== e) {
+ const t = e.length;
+ n = new Array(t);
+ for (let i = 0; i !== t; ++i) n[i] = e[i].clone();
+ }
+ return (
+ (this.clippingPlanes = n),
+ (this.clipIntersection = t.clipIntersection),
+ (this.clipShadows = t.clipShadows),
+ (this.shadowSide = t.shadowSide),
+ (this.colorWrite = t.colorWrite),
+ (this.precision = t.precision),
+ (this.polygonOffset = t.polygonOffset),
+ (this.polygonOffsetFactor = t.polygonOffsetFactor),
+ (this.polygonOffsetUnits = t.polygonOffsetUnits),
+ (this.dithering = t.dithering),
+ (this.alphaTest = t.alphaTest),
+ (this.alphaToCoverage = t.alphaToCoverage),
+ (this.premultipliedAlpha = t.premultipliedAlpha),
+ (this.visible = t.visible),
+ (this.toneMapped = t.toneMapped),
+ (this.userData = JSON.parse(JSON.stringify(t.userData))),
+ this
+ );
+ },
+ dispose: function () {
+ this.dispatchEvent({ type: 'dispose' });
+ },
+ })),
+ Object.defineProperty(Xe.prototype, 'needsUpdate', {
+ set: function (t) {
+ !0 === t && this.version++;
+ },
+ });
+ const Ye = {
+ aliceblue: 15792383,
+ antiquewhite: 16444375,
+ aqua: 65535,
+ aquamarine: 8388564,
+ azure: 15794175,
+ beige: 16119260,
+ bisque: 16770244,
+ black: 0,
+ blanchedalmond: 16772045,
+ blue: 255,
+ blueviolet: 9055202,
+ brown: 10824234,
+ burlywood: 14596231,
+ cadetblue: 6266528,
+ chartreuse: 8388352,
+ chocolate: 13789470,
+ coral: 16744272,
+ cornflowerblue: 6591981,
+ cornsilk: 16775388,
+ crimson: 14423100,
+ cyan: 65535,
+ darkblue: 139,
+ darkcyan: 35723,
+ darkgoldenrod: 12092939,
+ darkgray: 11119017,
+ darkgreen: 25600,
+ darkgrey: 11119017,
+ darkkhaki: 12433259,
+ darkmagenta: 9109643,
+ darkolivegreen: 5597999,
+ darkorange: 16747520,
+ darkorchid: 10040012,
+ darkred: 9109504,
+ darksalmon: 15308410,
+ darkseagreen: 9419919,
+ darkslateblue: 4734347,
+ darkslategray: 3100495,
+ darkslategrey: 3100495,
+ darkturquoise: 52945,
+ darkviolet: 9699539,
+ deeppink: 16716947,
+ deepskyblue: 49151,
+ dimgray: 6908265,
+ dimgrey: 6908265,
+ dodgerblue: 2003199,
+ firebrick: 11674146,
+ floralwhite: 16775920,
+ forestgreen: 2263842,
+ fuchsia: 16711935,
+ gainsboro: 14474460,
+ ghostwhite: 16316671,
+ gold: 16766720,
+ goldenrod: 14329120,
+ gray: 8421504,
+ green: 32768,
+ greenyellow: 11403055,
+ grey: 8421504,
+ honeydew: 15794160,
+ hotpink: 16738740,
+ indianred: 13458524,
+ indigo: 4915330,
+ ivory: 16777200,
+ khaki: 15787660,
+ lavender: 15132410,
+ lavenderblush: 16773365,
+ lawngreen: 8190976,
+ lemonchiffon: 16775885,
+ lightblue: 11393254,
+ lightcoral: 15761536,
+ lightcyan: 14745599,
+ lightgoldenrodyellow: 16448210,
+ lightgray: 13882323,
+ lightgreen: 9498256,
+ lightgrey: 13882323,
+ lightpink: 16758465,
+ lightsalmon: 16752762,
+ lightseagreen: 2142890,
+ lightskyblue: 8900346,
+ lightslategray: 7833753,
+ lightslategrey: 7833753,
+ lightsteelblue: 11584734,
+ lightyellow: 16777184,
+ lime: 65280,
+ limegreen: 3329330,
+ linen: 16445670,
+ magenta: 16711935,
+ maroon: 8388608,
+ mediumaquamarine: 6737322,
+ mediumblue: 205,
+ mediumorchid: 12211667,
+ mediumpurple: 9662683,
+ mediumseagreen: 3978097,
+ mediumslateblue: 8087790,
+ mediumspringgreen: 64154,
+ mediumturquoise: 4772300,
+ mediumvioletred: 13047173,
+ midnightblue: 1644912,
+ mintcream: 16121850,
+ mistyrose: 16770273,
+ moccasin: 16770229,
+ navajowhite: 16768685,
+ navy: 128,
+ oldlace: 16643558,
+ olive: 8421376,
+ olivedrab: 7048739,
+ orange: 16753920,
+ orangered: 16729344,
+ orchid: 14315734,
+ palegoldenrod: 15657130,
+ palegreen: 10025880,
+ paleturquoise: 11529966,
+ palevioletred: 14381203,
+ papayawhip: 16773077,
+ peachpuff: 16767673,
+ peru: 13468991,
+ pink: 16761035,
+ plum: 14524637,
+ powderblue: 11591910,
+ purple: 8388736,
+ rebeccapurple: 6697881,
+ red: 16711680,
+ rosybrown: 12357519,
+ royalblue: 4286945,
+ saddlebrown: 9127187,
+ salmon: 16416882,
+ sandybrown: 16032864,
+ seagreen: 3050327,
+ seashell: 16774638,
+ sienna: 10506797,
+ silver: 12632256,
+ skyblue: 8900331,
+ slateblue: 6970061,
+ slategray: 7372944,
+ slategrey: 7372944,
+ snow: 16775930,
+ springgreen: 65407,
+ steelblue: 4620980,
+ tan: 13808780,
+ teal: 32896,
+ thistle: 14204888,
+ tomato: 16737095,
+ turquoise: 4251856,
+ violet: 15631086,
+ wheat: 16113331,
+ white: 16777215,
+ whitesmoke: 16119285,
+ yellow: 16776960,
+ yellowgreen: 10145074,
+ },
+ Ze = { h: 0, s: 0, l: 0 },
+ Je = { h: 0, s: 0, l: 0 };
+ function Qe(t, e, n) {
+ return (
+ n < 0 && (n += 1),
+ n > 1 && (n -= 1),
+ n < 1 / 6
+ ? t + 6 * (e - t) * n
+ : n < 0.5
+ ? e
+ : n < 2 / 3
+ ? t + 6 * (e - t) * (2 / 3 - n)
+ : t
+ );
+ }
+ function Ke(t) {
+ return t < 0.04045
+ ? 0.0773993808 * t
+ : Math.pow(0.9478672986 * t + 0.0521327014, 2.4);
+ }
+ function $e(t) {
+ return t < 0.0031308 ? 12.92 * t : 1.055 * Math.pow(t, 0.41666) - 0.055;
+ }
+ class tn {
+ constructor(t, e, n) {
+ return void 0 === e && void 0 === n ? this.set(t) : this.setRGB(t, e, n);
+ }
+ set(t) {
+ return (
+ t && t.isColor
+ ? this.copy(t)
+ : 'number' == typeof t
+ ? this.setHex(t)
+ : 'string' == typeof t && this.setStyle(t),
+ this
+ );
+ }
+ setScalar(t) {
+ return (this.r = t), (this.g = t), (this.b = t), this;
+ }
+ setHex(t) {
+ return (
+ (t = Math.floor(t)),
+ (this.r = ((t >> 16) & 255) / 255),
+ (this.g = ((t >> 8) & 255) / 255),
+ (this.b = (255 & t) / 255),
+ this
+ );
+ }
+ setRGB(t, e, n) {
+ return (this.r = t), (this.g = e), (this.b = n), this;
+ }
+ setHSL(t, e, n) {
+ if (((t = ut(t, 1)), (e = ht(e, 0, 1)), (n = ht(n, 0, 1)), 0 === e))
+ this.r = this.g = this.b = n;
+ else {
+ const i = n <= 0.5 ? n * (1 + e) : n + e - n * e,
+ r = 2 * n - i;
+ (this.r = Qe(r, i, t + 1 / 3)),
+ (this.g = Qe(r, i, t)),
+ (this.b = Qe(r, i, t - 1 / 3));
+ }
+ return this;
+ }
+ setStyle(t) {
+ function e(e) {
+ void 0 !== e &&
+ parseFloat(e) < 1 &&
+ console.warn(
+ 'THREE.Color: Alpha component of ' + t + ' will be ignored.'
+ );
+ }
+ let n;
+ if ((n = /^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t))) {
+ let t;
+ const i = n[1],
+ r = n[2];
+ switch (i) {
+ case 'rgb':
+ case 'rgba':
+ if (
+ (t =
+ /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(
+ r
+ ))
+ )
+ return (
+ (this.r = Math.min(255, parseInt(t[1], 10)) / 255),
+ (this.g = Math.min(255, parseInt(t[2], 10)) / 255),
+ (this.b = Math.min(255, parseInt(t[3], 10)) / 255),
+ e(t[4]),
+ this
+ );
+ if (
+ (t =
+ /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(
+ r
+ ))
+ )
+ return (
+ (this.r = Math.min(100, parseInt(t[1], 10)) / 100),
+ (this.g = Math.min(100, parseInt(t[2], 10)) / 100),
+ (this.b = Math.min(100, parseInt(t[3], 10)) / 100),
+ e(t[4]),
+ this
+ );
+ break;
+ case 'hsl':
+ case 'hsla':
+ if (
+ (t =
+ /^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(
+ r
+ ))
+ ) {
+ const n = parseFloat(t[1]) / 360,
+ i = parseInt(t[2], 10) / 100,
+ r = parseInt(t[3], 10) / 100;
+ return e(t[4]), this.setHSL(n, i, r);
+ }
+ }
+ } else if ((n = /^\#([A-Fa-f\d]+)$/.exec(t))) {
+ const t = n[1],
+ e = t.length;
+ if (3 === e)
+ return (
+ (this.r = parseInt(t.charAt(0) + t.charAt(0), 16) / 255),
+ (this.g = parseInt(t.charAt(1) + t.charAt(1), 16) / 255),
+ (this.b = parseInt(t.charAt(2) + t.charAt(2), 16) / 255),
+ this
+ );
+ if (6 === e)
+ return (
+ (this.r = parseInt(t.charAt(0) + t.charAt(1), 16) / 255),
+ (this.g = parseInt(t.charAt(2) + t.charAt(3), 16) / 255),
+ (this.b = parseInt(t.charAt(4) + t.charAt(5), 16) / 255),
+ this
+ );
+ }
+ return t && t.length > 0 ? this.setColorName(t) : this;
+ }
+ setColorName(t) {
+ const e = Ye[t.toLowerCase()];
+ return (
+ void 0 !== e
+ ? this.setHex(e)
+ : console.warn('THREE.Color: Unknown color ' + t),
+ this
+ );
+ }
+ clone() {
+ return new this.constructor(this.r, this.g, this.b);
+ }
+ copy(t) {
+ return (this.r = t.r), (this.g = t.g), (this.b = t.b), this;
+ }
+ copyGammaToLinear(t, e = 2) {
+ return (
+ (this.r = Math.pow(t.r, e)),
+ (this.g = Math.pow(t.g, e)),
+ (this.b = Math.pow(t.b, e)),
+ this
+ );
+ }
+ copyLinearToGamma(t, e = 2) {
+ const n = e > 0 ? 1 / e : 1;
+ return (
+ (this.r = Math.pow(t.r, n)),
+ (this.g = Math.pow(t.g, n)),
+ (this.b = Math.pow(t.b, n)),
+ this
+ );
+ }
+ convertGammaToLinear(t) {
+ return this.copyGammaToLinear(this, t), this;
+ }
+ convertLinearToGamma(t) {
+ return this.copyLinearToGamma(this, t), this;
+ }
+ copySRGBToLinear(t) {
+ return (this.r = Ke(t.r)), (this.g = Ke(t.g)), (this.b = Ke(t.b)), this;
+ }
+ copyLinearToSRGB(t) {
+ return (this.r = $e(t.r)), (this.g = $e(t.g)), (this.b = $e(t.b)), this;
+ }
+ convertSRGBToLinear() {
+ return this.copySRGBToLinear(this), this;
+ }
+ convertLinearToSRGB() {
+ return this.copyLinearToSRGB(this), this;
+ }
+ getHex() {
+ return (
+ ((255 * this.r) << 16) ^ ((255 * this.g) << 8) ^ ((255 * this.b) << 0)
+ );
+ }
+ getHexString() {
+ return ('000000' + this.getHex().toString(16)).slice(-6);
+ }
+ getHSL(t) {
+ void 0 === t &&
+ (console.warn('THREE.Color: .getHSL() target is now required'),
+ (t = { h: 0, s: 0, l: 0 }));
+ const e = this.r,
+ n = this.g,
+ i = this.b,
+ r = Math.max(e, n, i),
+ s = Math.min(e, n, i);
+ let a, o;
+ const l = (s + r) / 2;
+ if (s === r) (a = 0), (o = 0);
+ else {
+ const t = r - s;
+ switch (((o = l <= 0.5 ? t / (r + s) : t / (2 - r - s)), r)) {
+ case e:
+ a = (n - i) / t + (n < i ? 6 : 0);
+ break;
+ case n:
+ a = (i - e) / t + 2;
+ break;
+ case i:
+ a = (e - n) / t + 4;
+ }
+ a /= 6;
+ }
+ return (t.h = a), (t.s = o), (t.l = l), t;
+ }
+ getStyle() {
+ return (
+ 'rgb(' +
+ ((255 * this.r) | 0) +
+ ',' +
+ ((255 * this.g) | 0) +
+ ',' +
+ ((255 * this.b) | 0) +
+ ')'
+ );
+ }
+ offsetHSL(t, e, n) {
+ return (
+ this.getHSL(Ze),
+ (Ze.h += t),
+ (Ze.s += e),
+ (Ze.l += n),
+ this.setHSL(Ze.h, Ze.s, Ze.l),
+ this
+ );
+ }
+ add(t) {
+ return (this.r += t.r), (this.g += t.g), (this.b += t.b), this;
+ }
+ addColors(t, e) {
+ return (
+ (this.r = t.r + e.r), (this.g = t.g + e.g), (this.b = t.b + e.b), this
+ );
+ }
+ addScalar(t) {
+ return (this.r += t), (this.g += t), (this.b += t), this;
+ }
+ sub(t) {
+ return (
+ (this.r = Math.max(0, this.r - t.r)),
+ (this.g = Math.max(0, this.g - t.g)),
+ (this.b = Math.max(0, this.b - t.b)),
+ this
+ );
+ }
+ multiply(t) {
+ return (this.r *= t.r), (this.g *= t.g), (this.b *= t.b), this;
+ }
+ multiplyScalar(t) {
+ return (this.r *= t), (this.g *= t), (this.b *= t), this;
+ }
+ lerp(t, e) {
+ return (
+ (this.r += (t.r - this.r) * e),
+ (this.g += (t.g - this.g) * e),
+ (this.b += (t.b - this.b) * e),
+ this
+ );
+ }
+ lerpColors(t, e, n) {
+ return (
+ (this.r = t.r + (e.r - t.r) * n),
+ (this.g = t.g + (e.g - t.g) * n),
+ (this.b = t.b + (e.b - t.b) * n),
+ this
+ );
+ }
+ lerpHSL(t, e) {
+ this.getHSL(Ze), t.getHSL(Je);
+ const n = dt(Ze.h, Je.h, e),
+ i = dt(Ze.s, Je.s, e),
+ r = dt(Ze.l, Je.l, e);
+ return this.setHSL(n, i, r), this;
+ }
+ equals(t) {
+ return t.r === this.r && t.g === this.g && t.b === this.b;
+ }
+ fromArray(t, e = 0) {
+ return (this.r = t[e]), (this.g = t[e + 1]), (this.b = t[e + 2]), this;
+ }
+ toArray(t = [], e = 0) {
+ return (t[e] = this.r), (t[e + 1] = this.g), (t[e + 2] = this.b), t;
+ }
+ fromBufferAttribute(t, e) {
+ return (
+ (this.r = t.getX(e)),
+ (this.g = t.getY(e)),
+ (this.b = t.getZ(e)),
+ !0 === t.normalized &&
+ ((this.r /= 255), (this.g /= 255), (this.b /= 255)),
+ this
+ );
+ }
+ toJSON() {
+ return this.getHex();
+ }
+ }
+ (tn.NAMES = Ye),
+ (tn.prototype.isColor = !0),
+ (tn.prototype.r = 1),
+ (tn.prototype.g = 1),
+ (tn.prototype.b = 1);
+ class en extends Xe {
+ constructor(t) {
+ super(),
+ (this.type = 'MeshBasicMaterial'),
+ (this.color = new tn(16777215)),
+ (this.map = null),
+ (this.lightMap = null),
+ (this.lightMapIntensity = 1),
+ (this.aoMap = null),
+ (this.aoMapIntensity = 1),
+ (this.specularMap = null),
+ (this.alphaMap = null),
+ (this.envMap = null),
+ (this.combine = 0),
+ (this.reflectivity = 1),
+ (this.refractionRatio = 0.98),
+ (this.wireframe = !1),
+ (this.wireframeLinewidth = 1),
+ (this.wireframeLinecap = 'round'),
+ (this.wireframeLinejoin = 'round'),
+ (this.skinning = !1),
+ (this.morphTargets = !1),
+ this.setValues(t);
+ }
+ copy(t) {
+ return (
+ super.copy(t),
+ this.color.copy(t.color),
+ (this.map = t.map),
+ (this.lightMap = t.lightMap),
+ (this.lightMapIntensity = t.lightMapIntensity),
+ (this.aoMap = t.aoMap),
+ (this.aoMapIntensity = t.aoMapIntensity),
+ (this.specularMap = t.specularMap),
+ (this.alphaMap = t.alphaMap),
+ (this.envMap = t.envMap),
+ (this.combine = t.combine),
+ (this.reflectivity = t.reflectivity),
+ (this.refractionRatio = t.refractionRatio),
+ (this.wireframe = t.wireframe),
+ (this.wireframeLinewidth = t.wireframeLinewidth),
+ (this.wireframeLinecap = t.wireframeLinecap),
+ (this.wireframeLinejoin = t.wireframeLinejoin),
+ (this.skinning = t.skinning),
+ (this.morphTargets = t.morphTargets),
+ this
+ );
+ }
+ }
+ en.prototype.isMeshBasicMaterial = !0;
+ const nn = new Lt(),
+ rn = new vt();
+ class sn {
+ constructor(t, e, n) {
+ if (Array.isArray(t))
+ throw new TypeError(
+ 'THREE.BufferAttribute: array should be a Typed Array.'
+ );
+ (this.name = ''),
+ (this.array = t),
+ (this.itemSize = e),
+ (this.count = void 0 !== t ? t.length / e : 0),
+ (this.normalized = !0 === n),
+ (this.usage = et),
+ (this.updateRange = { offset: 0, count: -1 }),
+ (this.version = 0),
+ (this.onUploadCallback = function () {});
+ }
+ set needsUpdate(t) {
+ !0 === t && this.version++;
+ }
+ setUsage(t) {
+ return (this.usage = t), this;
+ }
+ copy(t) {
+ return (
+ (this.name = t.name),
+ (this.array = new t.array.constructor(t.array)),
+ (this.itemSize = t.itemSize),
+ (this.count = t.count),
+ (this.normalized = t.normalized),
+ (this.usage = t.usage),
+ this
+ );
+ }
+ copyAt(t, e, n) {
+ (t *= this.itemSize), (n *= e.itemSize);
+ for (let i = 0, r = this.itemSize; i < r; i++)
+ this.array[t + i] = e.array[n + i];
+ return this;
+ }
+ copyArray(t) {
+ return this.array.set(t), this;
+ }
+ copyColorsArray(t) {
+ const e = this.array;
+ let n = 0;
+ for (let i = 0, r = t.length; i < r; i++) {
+ let r = t[i];
+ void 0 === r &&
+ (console.warn(
+ 'THREE.BufferAttribute.copyColorsArray(): color is undefined',
+ i
+ ),
+ (r = new tn())),
+ (e[n++] = r.r),
+ (e[n++] = r.g),
+ (e[n++] = r.b);
+ }
+ return this;
+ }
+ copyVector2sArray(t) {
+ const e = this.array;
+ let n = 0;
+ for (let i = 0, r = t.length; i < r; i++) {
+ let r = t[i];
+ void 0 === r &&
+ (console.warn(
+ 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined',
+ i
+ ),
+ (r = new vt())),
+ (e[n++] = r.x),
+ (e[n++] = r.y);
+ }
+ return this;
+ }
+ copyVector3sArray(t) {
+ const e = this.array;
+ let n = 0;
+ for (let i = 0, r = t.length; i < r; i++) {
+ let r = t[i];
+ void 0 === r &&
+ (console.warn(
+ 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined',
+ i
+ ),
+ (r = new Lt())),
+ (e[n++] = r.x),
+ (e[n++] = r.y),
+ (e[n++] = r.z);
+ }
+ return this;
+ }
+ copyVector4sArray(t) {
+ const e = this.array;
+ let n = 0;
+ for (let i = 0, r = t.length; i < r; i++) {
+ let r = t[i];
+ void 0 === r &&
+ (console.warn(
+ 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined',
+ i
+ ),
+ (r = new St())),
+ (e[n++] = r.x),
+ (e[n++] = r.y),
+ (e[n++] = r.z),
+ (e[n++] = r.w);
+ }
+ return this;
+ }
+ applyMatrix3(t) {
+ if (2 === this.itemSize)
+ for (let e = 0, n = this.count; e < n; e++)
+ rn.fromBufferAttribute(this, e),
+ rn.applyMatrix3(t),
+ this.setXY(e, rn.x, rn.y);
+ else if (3 === this.itemSize)
+ for (let e = 0, n = this.count; e < n; e++)
+ nn.fromBufferAttribute(this, e),
+ nn.applyMatrix3(t),
+ this.setXYZ(e, nn.x, nn.y, nn.z);
+ return this;
+ }
+ applyMatrix4(t) {
+ for (let e = 0, n = this.count; e < n; e++)
+ (nn.x = this.getX(e)),
+ (nn.y = this.getY(e)),
+ (nn.z = this.getZ(e)),
+ nn.applyMatrix4(t),
+ this.setXYZ(e, nn.x, nn.y, nn.z);
+ return this;
+ }
+ applyNormalMatrix(t) {
+ for (let e = 0, n = this.count; e < n; e++)
+ (nn.x = this.getX(e)),
+ (nn.y = this.getY(e)),
+ (nn.z = this.getZ(e)),
+ nn.applyNormalMatrix(t),
+ this.setXYZ(e, nn.x, nn.y, nn.z);
+ return this;
+ }
+ transformDirection(t) {
+ for (let e = 0, n = this.count; e < n; e++)
+ (nn.x = this.getX(e)),
+ (nn.y = this.getY(e)),
+ (nn.z = this.getZ(e)),
+ nn.transformDirection(t),
+ this.setXYZ(e, nn.x, nn.y, nn.z);
+ return this;
+ }
+ set(t, e = 0) {
+ return this.array.set(t, e), this;
+ }
+ getX(t) {
+ return this.array[t * this.itemSize];
+ }
+ setX(t, e) {
+ return (this.array[t * this.itemSize] = e), this;
+ }
+ getY(t) {
+ return this.array[t * this.itemSize + 1];
+ }
+ setY(t, e) {
+ return (this.array[t * this.itemSize + 1] = e), this;
+ }
+ getZ(t) {
+ return this.array[t * this.itemSize + 2];
+ }
+ setZ(t, e) {
+ return (this.array[t * this.itemSize + 2] = e), this;
+ }
+ getW(t) {
+ return this.array[t * this.itemSize + 3];
+ }
+ setW(t, e) {
+ return (this.array[t * this.itemSize + 3] = e), this;
+ }
+ setXY(t, e, n) {
+ return (
+ (t *= this.itemSize),
+ (this.array[t + 0] = e),
+ (this.array[t + 1] = n),
+ this
+ );
+ }
+ setXYZ(t, e, n, i) {
+ return (
+ (t *= this.itemSize),
+ (this.array[t + 0] = e),
+ (this.array[t + 1] = n),
+ (this.array[t + 2] = i),
+ this
+ );
+ }
+ setXYZW(t, e, n, i, r) {
+ return (
+ (t *= this.itemSize),
+ (this.array[t + 0] = e),
+ (this.array[t + 1] = n),
+ (this.array[t + 2] = i),
+ (this.array[t + 3] = r),
+ this
+ );
+ }
+ onUpload(t) {
+ return (this.onUploadCallback = t), this;
+ }
+ clone() {
+ return new this.constructor(this.array, this.itemSize).copy(this);
+ }
+ toJSON() {
+ const t = {
+ itemSize: this.itemSize,
+ type: this.array.constructor.name,
+ array: Array.prototype.slice.call(this.array),
+ normalized: this.normalized,
+ };
+ return (
+ '' !== this.name && (t.name = this.name),
+ this.usage !== et && (t.usage = this.usage),
+ (0 === this.updateRange.offset && -1 === this.updateRange.count) ||
+ (t.updateRange = this.updateRange),
+ t
+ );
+ }
+ }
+ sn.prototype.isBufferAttribute = !0;
+ class an extends sn {
+ constructor(t, e, n) {
+ super(new Int8Array(t), e, n);
+ }
+ }
+ class on extends sn {
+ constructor(t, e, n) {
+ super(new Uint8Array(t), e, n);
+ }
+ }
+ class ln extends sn {
+ constructor(t, e, n) {
+ super(new Uint8ClampedArray(t), e, n);
+ }
+ }
+ class cn extends sn {
+ constructor(t, e, n) {
+ super(new Int16Array(t), e, n);
+ }
+ }
+ class hn extends sn {
+ constructor(t, e, n) {
+ super(new Uint16Array(t), e, n);
+ }
+ }
+ class un extends sn {
+ constructor(t, e, n) {
+ super(new Int32Array(t), e, n);
+ }
+ }
+ class dn extends sn {
+ constructor(t, e, n) {
+ super(new Uint32Array(t), e, n);
+ }
+ }
+ class pn extends sn {
+ constructor(t, e, n) {
+ super(new Uint16Array(t), e, n);
+ }
+ }
+ pn.prototype.isFloat16BufferAttribute = !0;
+ class mn extends sn {
+ constructor(t, e, n) {
+ super(new Float32Array(t), e, n);
+ }
+ }
+ class fn extends sn {
+ constructor(t, e, n) {
+ super(new Float64Array(t), e, n);
+ }
+ }
+ function gn(t) {
+ if (0 === t.length) return -1 / 0;
+ let e = t[0];
+ for (let n = 1, i = t.length; n < i; ++n) t[n] > e && (e = t[n]);
+ return e;
+ }
+ const vn = {
+ Int8Array: Int8Array,
+ Uint8Array: Uint8Array,
+ Uint8ClampedArray: Uint8ClampedArray,
+ Int16Array: Int16Array,
+ Uint16Array: Uint16Array,
+ Int32Array: Int32Array,
+ Uint32Array: Uint32Array,
+ Float32Array: Float32Array,
+ Float64Array: Float64Array,
+ };
+ function yn(t, e) {
+ return new vn[t](e);
+ }
+ let xn = 0;
+ const _n = new se(),
+ wn = new Ce(),
+ bn = new Lt(),
+ Mn = new Pt(),
+ Sn = new Pt(),
+ Tn = new Lt();
+ class En extends rt {
+ constructor() {
+ super(),
+ Object.defineProperty(this, 'id', { value: xn++ }),
+ (this.uuid = ct()),
+ (this.name = ''),
+ (this.type = 'BufferGeometry'),
+ (this.index = null),
+ (this.attributes = {}),
+ (this.morphAttributes = {}),
+ (this.morphTargetsRelative = !1),
+ (this.groups = []),
+ (this.boundingBox = null),
+ (this.boundingSphere = null),
+ (this.drawRange = { start: 0, count: 1 / 0 }),
+ (this.userData = {});
+ }
+ getIndex() {
+ return this.index;
+ }
+ setIndex(t) {
+ return (
+ Array.isArray(t)
+ ? (this.index = new (gn(t) > 65535 ? dn : hn)(t, 1))
+ : (this.index = t),
+ this
+ );
+ }
+ getAttribute(t) {
+ return this.attributes[t];
+ }
+ setAttribute(t, e) {
+ return (this.attributes[t] = e), this;
+ }
+ deleteAttribute(t) {
+ return delete this.attributes[t], this;
+ }
+ hasAttribute(t) {
+ return void 0 !== this.attributes[t];
+ }
+ addGroup(t, e, n = 0) {
+ this.groups.push({ start: t, count: e, materialIndex: n });
+ }
+ clearGroups() {
+ this.groups = [];
+ }
+ setDrawRange(t, e) {
+ (this.drawRange.start = t), (this.drawRange.count = e);
+ }
+ applyMatrix4(t) {
+ const e = this.attributes.position;
+ void 0 !== e && (e.applyMatrix4(t), (e.needsUpdate = !0));
+ const n = this.attributes.normal;
+ if (void 0 !== n) {
+ const e = new yt().getNormalMatrix(t);
+ n.applyNormalMatrix(e), (n.needsUpdate = !0);
+ }
+ const i = this.attributes.tangent;
+ return (
+ void 0 !== i && (i.transformDirection(t), (i.needsUpdate = !0)),
+ null !== this.boundingBox && this.computeBoundingBox(),
+ null !== this.boundingSphere && this.computeBoundingSphere(),
+ this
+ );
+ }
+ rotateX(t) {
+ return _n.makeRotationX(t), this.applyMatrix4(_n), this;
+ }
+ rotateY(t) {
+ return _n.makeRotationY(t), this.applyMatrix4(_n), this;
+ }
+ rotateZ(t) {
+ return _n.makeRotationZ(t), this.applyMatrix4(_n), this;
+ }
+ translate(t, e, n) {
+ return _n.makeTranslation(t, e, n), this.applyMatrix4(_n), this;
+ }
+ scale(t, e, n) {
+ return _n.makeScale(t, e, n), this.applyMatrix4(_n), this;
+ }
+ lookAt(t) {
+ return (
+ wn.lookAt(t), wn.updateMatrix(), this.applyMatrix4(wn.matrix), this
+ );
+ }
+ center() {
+ return (
+ this.computeBoundingBox(),
+ this.boundingBox.getCenter(bn).negate(),
+ this.translate(bn.x, bn.y, bn.z),
+ this
+ );
+ }
+ setFromPoints(t) {
+ const e = [];
+ for (let n = 0, i = t.length; n < i; n++) {
+ const i = t[n];
+ e.push(i.x, i.y, i.z || 0);
+ }
+ return this.setAttribute('position', new mn(e, 3)), this;
+ }
+ computeBoundingBox() {
+ null === this.boundingBox && (this.boundingBox = new Pt());
+ const t = this.attributes.position,
+ e = this.morphAttributes.position;
+ if (t && t.isGLBufferAttribute)
+ return (
+ console.error(
+ 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".',
+ this
+ ),
+ void this.boundingBox.set(
+ new Lt(-1 / 0, -1 / 0, -1 / 0),
+ new Lt(1 / 0, 1 / 0, 1 / 0)
+ )
+ );
+ if (void 0 !== t) {
+ if ((this.boundingBox.setFromBufferAttribute(t), e))
+ for (let t = 0, n = e.length; t < n; t++) {
+ const n = e[t];
+ Mn.setFromBufferAttribute(n),
+ this.morphTargetsRelative
+ ? (Tn.addVectors(this.boundingBox.min, Mn.min),
+ this.boundingBox.expandByPoint(Tn),
+ Tn.addVectors(this.boundingBox.max, Mn.max),
+ this.boundingBox.expandByPoint(Tn))
+ : (this.boundingBox.expandByPoint(Mn.min),
+ this.boundingBox.expandByPoint(Mn.max));
+ }
+ } else this.boundingBox.makeEmpty();
+ (isNaN(this.boundingBox.min.x) ||
+ isNaN(this.boundingBox.min.y) ||
+ isNaN(this.boundingBox.min.z)) &&
+ console.error(
+ 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',
+ this
+ );
+ }
+ computeBoundingSphere() {
+ null === this.boundingSphere && (this.boundingSphere = new Jt());
+ const t = this.attributes.position,
+ e = this.morphAttributes.position;
+ if (t && t.isGLBufferAttribute)
+ return (
+ console.error(
+ 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "false".',
+ this
+ ),
+ void this.boundingSphere.set(new Lt(), 1 / 0)
+ );
+ if (t) {
+ const n = this.boundingSphere.center;
+ if ((Mn.setFromBufferAttribute(t), e))
+ for (let t = 0, n = e.length; t < n; t++) {
+ const n = e[t];
+ Sn.setFromBufferAttribute(n),
+ this.morphTargetsRelative
+ ? (Tn.addVectors(Mn.min, Sn.min),
+ Mn.expandByPoint(Tn),
+ Tn.addVectors(Mn.max, Sn.max),
+ Mn.expandByPoint(Tn))
+ : (Mn.expandByPoint(Sn.min), Mn.expandByPoint(Sn.max));
+ }
+ Mn.getCenter(n);
+ let i = 0;
+ for (let e = 0, r = t.count; e < r; e++)
+ Tn.fromBufferAttribute(t, e),
+ (i = Math.max(i, n.distanceToSquared(Tn)));
+ if (e)
+ for (let r = 0, s = e.length; r < s; r++) {
+ const s = e[r],
+ a = this.morphTargetsRelative;
+ for (let e = 0, r = s.count; e < r; e++)
+ Tn.fromBufferAttribute(s, e),
+ a && (bn.fromBufferAttribute(t, e), Tn.add(bn)),
+ (i = Math.max(i, n.distanceToSquared(Tn)));
+ }
+ (this.boundingSphere.radius = Math.sqrt(i)),
+ isNaN(this.boundingSphere.radius) &&
+ console.error(
+ 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',
+ this
+ );
+ }
+ }
+ computeFaceNormals() {}
+ computeTangents() {
+ const t = this.index,
+ e = this.attributes;
+ if (
+ null === t ||
+ void 0 === e.position ||
+ void 0 === e.normal ||
+ void 0 === e.uv
+ )
+ return void console.error(
+ 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)'
+ );
+ const n = t.array,
+ i = e.position.array,
+ r = e.normal.array,
+ s = e.uv.array,
+ a = i.length / 3;
+ void 0 === e.tangent &&
+ this.setAttribute('tangent', new sn(new Float32Array(4 * a), 4));
+ const o = e.tangent.array,
+ l = [],
+ c = [];
+ for (let t = 0; t < a; t++) (l[t] = new Lt()), (c[t] = new Lt());
+ const h = new Lt(),
+ u = new Lt(),
+ d = new Lt(),
+ p = new vt(),
+ m = new vt(),
+ f = new vt(),
+ g = new Lt(),
+ v = new Lt();
+ function y(t, e, n) {
+ h.fromArray(i, 3 * t),
+ u.fromArray(i, 3 * e),
+ d.fromArray(i, 3 * n),
+ p.fromArray(s, 2 * t),
+ m.fromArray(s, 2 * e),
+ f.fromArray(s, 2 * n),
+ u.sub(h),
+ d.sub(h),
+ m.sub(p),
+ f.sub(p);
+ const r = 1 / (m.x * f.y - f.x * m.y);
+ isFinite(r) &&
+ (g
+ .copy(u)
+ .multiplyScalar(f.y)
+ .addScaledVector(d, -m.y)
+ .multiplyScalar(r),
+ v
+ .copy(d)
+ .multiplyScalar(m.x)
+ .addScaledVector(u, -f.x)
+ .multiplyScalar(r),
+ l[t].add(g),
+ l[e].add(g),
+ l[n].add(g),
+ c[t].add(v),
+ c[e].add(v),
+ c[n].add(v));
+ }
+ let x = this.groups;
+ 0 === x.length && (x = [{ start: 0, count: n.length }]);
+ for (let t = 0, e = x.length; t < e; ++t) {
+ const e = x[t],
+ i = e.start;
+ for (let t = i, r = i + e.count; t < r; t += 3)
+ y(n[t + 0], n[t + 1], n[t + 2]);
+ }
+ const _ = new Lt(),
+ w = new Lt(),
+ b = new Lt(),
+ M = new Lt();
+ function S(t) {
+ b.fromArray(r, 3 * t), M.copy(b);
+ const e = l[t];
+ _.copy(e),
+ _.sub(b.multiplyScalar(b.dot(e))).normalize(),
+ w.crossVectors(M, e);
+ const n = w.dot(c[t]) < 0 ? -1 : 1;
+ (o[4 * t] = _.x),
+ (o[4 * t + 1] = _.y),
+ (o[4 * t + 2] = _.z),
+ (o[4 * t + 3] = n);
+ }
+ for (let t = 0, e = x.length; t < e; ++t) {
+ const e = x[t],
+ i = e.start;
+ for (let t = i, r = i + e.count; t < r; t += 3)
+ S(n[t + 0]), S(n[t + 1]), S(n[t + 2]);
+ }
+ }
+ computeVertexNormals() {
+ const t = this.index,
+ e = this.getAttribute('position');
+ if (void 0 !== e) {
+ let n = this.getAttribute('normal');
+ if (void 0 === n)
+ (n = new sn(new Float32Array(3 * e.count), 3)),
+ this.setAttribute('normal', n);
+ else for (let t = 0, e = n.count; t < e; t++) n.setXYZ(t, 0, 0, 0);
+ const i = new Lt(),
+ r = new Lt(),
+ s = new Lt(),
+ a = new Lt(),
+ o = new Lt(),
+ l = new Lt(),
+ c = new Lt(),
+ h = new Lt();
+ if (t)
+ for (let u = 0, d = t.count; u < d; u += 3) {
+ const d = t.getX(u + 0),
+ p = t.getX(u + 1),
+ m = t.getX(u + 2);
+ i.fromBufferAttribute(e, d),
+ r.fromBufferAttribute(e, p),
+ s.fromBufferAttribute(e, m),
+ c.subVectors(s, r),
+ h.subVectors(i, r),
+ c.cross(h),
+ a.fromBufferAttribute(n, d),
+ o.fromBufferAttribute(n, p),
+ l.fromBufferAttribute(n, m),
+ a.add(c),
+ o.add(c),
+ l.add(c),
+ n.setXYZ(d, a.x, a.y, a.z),
+ n.setXYZ(p, o.x, o.y, o.z),
+ n.setXYZ(m, l.x, l.y, l.z);
+ }
+ else
+ for (let t = 0, a = e.count; t < a; t += 3)
+ i.fromBufferAttribute(e, t + 0),
+ r.fromBufferAttribute(e, t + 1),
+ s.fromBufferAttribute(e, t + 2),
+ c.subVectors(s, r),
+ h.subVectors(i, r),
+ c.cross(h),
+ n.setXYZ(t + 0, c.x, c.y, c.z),
+ n.setXYZ(t + 1, c.x, c.y, c.z),
+ n.setXYZ(t + 2, c.x, c.y, c.z);
+ this.normalizeNormals(), (n.needsUpdate = !0);
+ }
+ }
+ merge(t, e) {
+ if (!t || !t.isBufferGeometry)
+ return void console.error(
+ 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.',
+ t
+ );
+ void 0 === e &&
+ ((e = 0),
+ console.warn(
+ 'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'
+ ));
+ const n = this.attributes;
+ for (const i in n) {
+ if (void 0 === t.attributes[i]) continue;
+ const r = n[i].array,
+ s = t.attributes[i],
+ a = s.array,
+ o = s.itemSize * e,
+ l = Math.min(a.length, r.length - o);
+ for (let t = 0, e = o; t < l; t++, e++) r[e] = a[t];
+ }
+ return this;
+ }
+ normalizeNormals() {
+ const t = this.attributes.normal;
+ for (let e = 0, n = t.count; e < n; e++)
+ Tn.fromBufferAttribute(t, e),
+ Tn.normalize(),
+ t.setXYZ(e, Tn.x, Tn.y, Tn.z);
+ }
+ toNonIndexed() {
+ function t(t, e) {
+ const n = t.array,
+ i = t.itemSize,
+ r = t.normalized,
+ s = new n.constructor(e.length * i);
+ let a = 0,
+ o = 0;
+ for (let t = 0, r = e.length; t < r; t++) {
+ a = e[t] * i;
+ for (let t = 0; t < i; t++) s[o++] = n[a++];
+ }
+ return new sn(s, i, r);
+ }
+ if (null === this.index)
+ return (
+ console.warn(
+ 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.'
+ ),
+ this
+ );
+ const e = new En(),
+ n = this.index.array,
+ i = this.attributes;
+ for (const r in i) {
+ const s = t(i[r], n);
+ e.setAttribute(r, s);
+ }
+ const r = this.morphAttributes;
+ for (const i in r) {
+ const s = [],
+ a = r[i];
+ for (let e = 0, i = a.length; e < i; e++) {
+ const i = t(a[e], n);
+ s.push(i);
+ }
+ e.morphAttributes[i] = s;
+ }
+ e.morphTargetsRelative = this.morphTargetsRelative;
+ const s = this.groups;
+ for (let t = 0, n = s.length; t < n; t++) {
+ const n = s[t];
+ e.addGroup(n.start, n.count, n.materialIndex);
+ }
+ return e;
+ }
+ toJSON() {
+ const t = {
+ metadata: {
+ version: 4.5,
+ type: 'BufferGeometry',
+ generator: 'BufferGeometry.toJSON',
+ },
+ };
+ if (
+ ((t.uuid = this.uuid),
+ (t.type = this.type),
+ '' !== this.name && (t.name = this.name),
+ Object.keys(this.userData).length > 0 && (t.userData = this.userData),
+ void 0 !== this.parameters)
+ ) {
+ const e = this.parameters;
+ for (const n in e) void 0 !== e[n] && (t[n] = e[n]);
+ return t;
+ }
+ t.data = { attributes: {} };
+ const e = this.index;
+ null !== e &&
+ (t.data.index = {
+ type: e.array.constructor.name,
+ array: Array.prototype.slice.call(e.array),
+ });
+ const n = this.attributes;
+ for (const e in n) {
+ const i = n[e];
+ t.data.attributes[e] = i.toJSON(t.data);
+ }
+ const i = {};
+ let r = !1;
+ for (const e in this.morphAttributes) {
+ const n = this.morphAttributes[e],
+ s = [];
+ for (let e = 0, i = n.length; e < i; e++) {
+ const i = n[e];
+ s.push(i.toJSON(t.data));
+ }
+ s.length > 0 && ((i[e] = s), (r = !0));
+ }
+ r &&
+ ((t.data.morphAttributes = i),
+ (t.data.morphTargetsRelative = this.morphTargetsRelative));
+ const s = this.groups;
+ s.length > 0 && (t.data.groups = JSON.parse(JSON.stringify(s)));
+ const a = this.boundingSphere;
+ return (
+ null !== a &&
+ (t.data.boundingSphere = {
+ center: a.center.toArray(),
+ radius: a.radius,
+ }),
+ t
+ );
+ }
+ clone() {
+ return new En().copy(this);
+ }
+ copy(t) {
+ (this.index = null),
+ (this.attributes = {}),
+ (this.morphAttributes = {}),
+ (this.groups = []),
+ (this.boundingBox = null),
+ (this.boundingSphere = null);
+ const e = {};
+ this.name = t.name;
+ const n = t.index;
+ null !== n && this.setIndex(n.clone(e));
+ const i = t.attributes;
+ for (const t in i) {
+ const n = i[t];
+ this.setAttribute(t, n.clone(e));
+ }
+ const r = t.morphAttributes;
+ for (const t in r) {
+ const n = [],
+ i = r[t];
+ for (let t = 0, r = i.length; t < r; t++) n.push(i[t].clone(e));
+ this.morphAttributes[t] = n;
+ }
+ this.morphTargetsRelative = t.morphTargetsRelative;
+ const s = t.groups;
+ for (let t = 0, e = s.length; t < e; t++) {
+ const e = s[t];
+ this.addGroup(e.start, e.count, e.materialIndex);
+ }
+ const a = t.boundingBox;
+ null !== a && (this.boundingBox = a.clone());
+ const o = t.boundingSphere;
+ return (
+ null !== o && (this.boundingSphere = o.clone()),
+ (this.drawRange.start = t.drawRange.start),
+ (this.drawRange.count = t.drawRange.count),
+ (this.userData = t.userData),
+ this
+ );
+ }
+ dispose() {
+ this.dispatchEvent({ type: 'dispose' });
+ }
+ }
+ En.prototype.isBufferGeometry = !0;
+ const An = new se(),
+ Ln = new re(),
+ Rn = new Jt(),
+ Cn = new Lt(),
+ Pn = new Lt(),
+ Dn = new Lt(),
+ In = new Lt(),
+ Nn = new Lt(),
+ Bn = new Lt(),
+ zn = new Lt(),
+ Fn = new Lt(),
+ On = new Lt(),
+ Hn = new vt(),
+ Gn = new vt(),
+ Un = new vt(),
+ kn = new Lt(),
+ Vn = new Lt();
+ class Wn extends Ce {
+ constructor(t = new En(), e = new en()) {
+ super(),
+ (this.type = 'Mesh'),
+ (this.geometry = t),
+ (this.material = e),
+ this.updateMorphTargets();
+ }
+ copy(t) {
+ return (
+ super.copy(t),
+ void 0 !== t.morphTargetInfluences &&
+ (this.morphTargetInfluences = t.morphTargetInfluences.slice()),
+ void 0 !== t.morphTargetDictionary &&
+ (this.morphTargetDictionary = Object.assign(
+ {},
+ t.morphTargetDictionary
+ )),
+ (this.material = t.material),
+ (this.geometry = t.geometry),
+ this
+ );
+ }
+ updateMorphTargets() {
+ const t = this.geometry;
+ if (t.isBufferGeometry) {
+ const e = t.morphAttributes,
+ n = Object.keys(e);
+ if (n.length > 0) {
+ const t = e[n[0]];
+ if (void 0 !== t) {
+ (this.morphTargetInfluences = []),
+ (this.morphTargetDictionary = {});
+ for (let e = 0, n = t.length; e < n; e++) {
+ const n = t[e].name || String(e);
+ this.morphTargetInfluences.push(0),
+ (this.morphTargetDictionary[n] = e);
+ }
+ }
+ }
+ } else {
+ const e = t.morphTargets;
+ void 0 !== e &&
+ e.length > 0 &&
+ console.error(
+ 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.'
+ );
+ }
+ }
+ raycast(t, e) {
+ const n = this.geometry,
+ i = this.material,
+ r = this.matrixWorld;
+ if (void 0 === i) return;
+ if (
+ (null === n.boundingSphere && n.computeBoundingSphere(),
+ Rn.copy(n.boundingSphere),
+ Rn.applyMatrix4(r),
+ !1 === t.ray.intersectsSphere(Rn))
+ )
+ return;
+ if (
+ (An.copy(r).invert(),
+ Ln.copy(t.ray).applyMatrix4(An),
+ null !== n.boundingBox && !1 === Ln.intersectsBox(n.boundingBox))
+ )
+ return;
+ let s;
+ if (n.isBufferGeometry) {
+ const r = n.index,
+ a = n.attributes.position,
+ o = n.morphAttributes.position,
+ l = n.morphTargetsRelative,
+ c = n.attributes.uv,
+ h = n.attributes.uv2,
+ u = n.groups,
+ d = n.drawRange;
+ if (null !== r)
+ if (Array.isArray(i))
+ for (let n = 0, p = u.length; n < p; n++) {
+ const p = u[n],
+ m = i[p.materialIndex];
+ for (
+ let n = Math.max(p.start, d.start),
+ i = Math.min(p.start + p.count, d.start + d.count);
+ n < i;
+ n += 3
+ ) {
+ const i = r.getX(n),
+ u = r.getX(n + 1),
+ d = r.getX(n + 2);
+ (s = jn(this, m, t, Ln, a, o, l, c, h, i, u, d)),
+ s &&
+ ((s.faceIndex = Math.floor(n / 3)),
+ (s.face.materialIndex = p.materialIndex),
+ e.push(s));
+ }
+ }
+ else {
+ for (
+ let n = Math.max(0, d.start),
+ u = Math.min(r.count, d.start + d.count);
+ n < u;
+ n += 3
+ ) {
+ const u = r.getX(n),
+ d = r.getX(n + 1),
+ p = r.getX(n + 2);
+ (s = jn(this, i, t, Ln, a, o, l, c, h, u, d, p)),
+ s && ((s.faceIndex = Math.floor(n / 3)), e.push(s));
+ }
+ }
+ else if (void 0 !== a)
+ if (Array.isArray(i))
+ for (let n = 0, r = u.length; n < r; n++) {
+ const r = u[n],
+ p = i[r.materialIndex];
+ for (
+ let n = Math.max(r.start, d.start),
+ i = Math.min(r.start + r.count, d.start + d.count);
+ n < i;
+ n += 3
+ ) {
+ (s = jn(this, p, t, Ln, a, o, l, c, h, n, n + 1, n + 2)),
+ s &&
+ ((s.faceIndex = Math.floor(n / 3)),
+ (s.face.materialIndex = r.materialIndex),
+ e.push(s));
+ }
+ }
+ else {
+ for (
+ let n = Math.max(0, d.start),
+ r = Math.min(a.count, d.start + d.count);
+ n < r;
+ n += 3
+ ) {
+ (s = jn(this, i, t, Ln, a, o, l, c, h, n, n + 1, n + 2)),
+ s && ((s.faceIndex = Math.floor(n / 3)), e.push(s));
+ }
+ }
+ } else
+ n.isGeometry &&
+ console.error(
+ 'THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.'
+ );
+ }
+ }
+ function jn(t, e, n, i, r, s, a, o, l, c, h, u) {
+ Cn.fromBufferAttribute(r, c),
+ Pn.fromBufferAttribute(r, h),
+ Dn.fromBufferAttribute(r, u);
+ const d = t.morphTargetInfluences;
+ if (e.morphTargets && s && d) {
+ zn.set(0, 0, 0), Fn.set(0, 0, 0), On.set(0, 0, 0);
+ for (let t = 0, e = s.length; t < e; t++) {
+ const e = d[t],
+ n = s[t];
+ 0 !== e &&
+ (In.fromBufferAttribute(n, c),
+ Nn.fromBufferAttribute(n, h),
+ Bn.fromBufferAttribute(n, u),
+ a
+ ? (zn.addScaledVector(In, e),
+ Fn.addScaledVector(Nn, e),
+ On.addScaledVector(Bn, e))
+ : (zn.addScaledVector(In.sub(Cn), e),
+ Fn.addScaledVector(Nn.sub(Pn), e),
+ On.addScaledVector(Bn.sub(Dn), e)));
+ }
+ Cn.add(zn), Pn.add(Fn), Dn.add(On);
+ }
+ t.isSkinnedMesh &&
+ e.skinning &&
+ (t.boneTransform(c, Cn), t.boneTransform(h, Pn), t.boneTransform(u, Dn));
+ const p = (function (t, e, n, i, r, s, a, o) {
+ let l;
+ if (
+ ((l =
+ 1 === e.side
+ ? i.intersectTriangle(a, s, r, !0, o)
+ : i.intersectTriangle(r, s, a, 2 !== e.side, o)),
+ null === l)
+ )
+ return null;
+ Vn.copy(o), Vn.applyMatrix4(t.matrixWorld);
+ const c = n.ray.origin.distanceTo(Vn);
+ return c < n.near || c > n.far
+ ? null
+ : { distance: c, point: Vn.clone(), object: t };
+ })(t, e, n, i, Cn, Pn, Dn, kn);
+ if (p) {
+ o &&
+ (Hn.fromBufferAttribute(o, c),
+ Gn.fromBufferAttribute(o, h),
+ Un.fromBufferAttribute(o, u),
+ (p.uv = je.getUV(kn, Cn, Pn, Dn, Hn, Gn, Un, new vt()))),
+ l &&
+ (Hn.fromBufferAttribute(l, c),
+ Gn.fromBufferAttribute(l, h),
+ Un.fromBufferAttribute(l, u),
+ (p.uv2 = je.getUV(kn, Cn, Pn, Dn, Hn, Gn, Un, new vt())));
+ const t = { a: c, b: h, c: u, normal: new Lt(), materialIndex: 0 };
+ je.getNormal(Cn, Pn, Dn, t.normal), (p.face = t);
+ }
+ return p;
+ }
+ Wn.prototype.isMesh = !0;
+ class qn extends En {
+ constructor(t = 1, e = 1, n = 1, i = 1, r = 1, s = 1) {
+ super(),
+ (this.type = 'BoxGeometry'),
+ (this.parameters = {
+ width: t,
+ height: e,
+ depth: n,
+ widthSegments: i,
+ heightSegments: r,
+ depthSegments: s,
+ });
+ const a = this;
+ (i = Math.floor(i)), (r = Math.floor(r)), (s = Math.floor(s));
+ const o = [],
+ l = [],
+ c = [],
+ h = [];
+ let u = 0,
+ d = 0;
+ function p(t, e, n, i, r, s, p, m, f, g, v) {
+ const y = s / f,
+ x = p / g,
+ _ = s / 2,
+ w = p / 2,
+ b = m / 2,
+ M = f + 1,
+ S = g + 1;
+ let T = 0,
+ E = 0;
+ const A = new Lt();
+ for (let s = 0; s < S; s++) {
+ const a = s * x - w;
+ for (let o = 0; o < M; o++) {
+ const u = o * y - _;
+ (A[t] = u * i),
+ (A[e] = a * r),
+ (A[n] = b),
+ l.push(A.x, A.y, A.z),
+ (A[t] = 0),
+ (A[e] = 0),
+ (A[n] = m > 0 ? 1 : -1),
+ c.push(A.x, A.y, A.z),
+ h.push(o / f),
+ h.push(1 - s / g),
+ (T += 1);
+ }
+ }
+ for (let t = 0; t < g; t++)
+ for (let e = 0; e < f; e++) {
+ const n = u + e + M * t,
+ i = u + e + M * (t + 1),
+ r = u + (e + 1) + M * (t + 1),
+ s = u + (e + 1) + M * t;
+ o.push(n, i, s), o.push(i, r, s), (E += 6);
+ }
+ a.addGroup(d, E, v), (d += E), (u += T);
+ }
+ p('z', 'y', 'x', -1, -1, n, e, t, s, r, 0),
+ p('z', 'y', 'x', 1, -1, n, e, -t, s, r, 1),
+ p('x', 'z', 'y', 1, 1, t, n, e, i, s, 2),
+ p('x', 'z', 'y', 1, -1, t, n, -e, i, s, 3),
+ p('x', 'y', 'z', 1, -1, t, e, n, i, r, 4),
+ p('x', 'y', 'z', -1, -1, t, e, -n, i, r, 5),
+ this.setIndex(o),
+ this.setAttribute('position', new mn(l, 3)),
+ this.setAttribute('normal', new mn(c, 3)),
+ this.setAttribute('uv', new mn(h, 2));
+ }
+ }
+ function Xn(t) {
+ const e = {};
+ for (const n in t) {
+ e[n] = {};
+ for (const i in t[n]) {
+ const r = t[n][i];
+ r &&
+ (r.isColor ||
+ r.isMatrix3 ||
+ r.isMatrix4 ||
+ r.isVector2 ||
+ r.isVector3 ||
+ r.isVector4 ||
+ r.isTexture ||
+ r.isQuaternion)
+ ? (e[n][i] = r.clone())
+ : Array.isArray(r)
+ ? (e[n][i] = r.slice())
+ : (e[n][i] = r);
+ }
+ }
+ return e;
+ }
+ function Yn(t) {
+ const e = {};
+ for (let n = 0; n < t.length; n++) {
+ const i = Xn(t[n]);
+ for (const t in i) e[t] = i[t];
+ }
+ return e;
+ }
+ const Zn = { clone: Xn, merge: Yn };
+ class Jn extends Xe {
+ constructor(t) {
+ super(),
+ (this.type = 'ShaderMaterial'),
+ (this.defines = {}),
+ (this.uniforms = {}),
+ (this.vertexShader =
+ 'void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}'),
+ (this.fragmentShader =
+ 'void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}'),
+ (this.linewidth = 1),
+ (this.wireframe = !1),
+ (this.wireframeLinewidth = 1),
+ (this.fog = !1),
+ (this.lights = !1),
+ (this.clipping = !1),
+ (this.skinning = !1),
+ (this.morphTargets = !1),
+ (this.morphNormals = !1),
+ (this.extensions = {
+ derivatives: !1,
+ fragDepth: !1,
+ drawBuffers: !1,
+ shaderTextureLOD: !1,
+ }),
+ (this.defaultAttributeValues = {
+ color: [1, 1, 1],
+ uv: [0, 0],
+ uv2: [0, 0],
+ }),
+ (this.index0AttributeName = void 0),
+ (this.uniformsNeedUpdate = !1),
+ (this.glslVersion = null),
+ void 0 !== t &&
+ (void 0 !== t.attributes &&
+ console.error(
+ 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.'
+ ),
+ this.setValues(t));
+ }
+ copy(t) {
+ return (
+ super.copy(t),
+ (this.fragmentShader = t.fragmentShader),
+ (this.vertexShader = t.vertexShader),
+ (this.uniforms = Xn(t.uniforms)),
+ (this.defines = Object.assign({}, t.defines)),
+ (this.wireframe = t.wireframe),
+ (this.wireframeLinewidth = t.wireframeLinewidth),
+ (this.lights = t.lights),
+ (this.clipping = t.clipping),
+ (this.skinning = t.skinning),
+ (this.morphTargets = t.morphTargets),
+ (this.morphNormals = t.morphNormals),
+ (this.extensions = Object.assign({}, t.extensions)),
+ (this.glslVersion = t.glslVersion),
+ this
+ );
+ }
+ toJSON(t) {
+ const e = super.toJSON(t);
+ (e.glslVersion = this.glslVersion), (e.uniforms = {});
+ for (const n in this.uniforms) {
+ const i = this.uniforms[n].value;
+ i && i.isTexture
+ ? (e.uniforms[n] = { type: 't', value: i.toJSON(t).uuid })
+ : i && i.isColor
+ ? (e.uniforms[n] = { type: 'c', value: i.getHex() })
+ : i && i.isVector2
+ ? (e.uniforms[n] = { type: 'v2', value: i.toArray() })
+ : i && i.isVector3
+ ? (e.uniforms[n] = { type: 'v3', value: i.toArray() })
+ : i && i.isVector4
+ ? (e.uniforms[n] = { type: 'v4', value: i.toArray() })
+ : i && i.isMatrix3
+ ? (e.uniforms[n] = { type: 'm3', value: i.toArray() })
+ : i && i.isMatrix4
+ ? (e.uniforms[n] = { type: 'm4', value: i.toArray() })
+ : (e.uniforms[n] = { value: i });
+ }
+ Object.keys(this.defines).length > 0 && (e.defines = this.defines),
+ (e.vertexShader = this.vertexShader),
+ (e.fragmentShader = this.fragmentShader);
+ const n = {};
+ for (const t in this.extensions) !0 === this.extensions[t] && (n[t] = !0);
+ return Object.keys(n).length > 0 && (e.extensions = n), e;
+ }
+ }
+ Jn.prototype.isShaderMaterial = !0;
+ class Qn extends Ce {
+ constructor() {
+ super(),
+ (this.type = 'Camera'),
+ (this.matrixWorldInverse = new se()),
+ (this.projectionMatrix = new se()),
+ (this.projectionMatrixInverse = new se());
+ }
+ copy(t, e) {
+ return (
+ super.copy(t, e),
+ this.matrixWorldInverse.copy(t.matrixWorldInverse),
+ this.projectionMatrix.copy(t.projectionMatrix),
+ this.projectionMatrixInverse.copy(t.projectionMatrixInverse),
+ this
+ );
+ }
+ getWorldDirection(t) {
+ void 0 === t &&
+ (console.warn(
+ 'THREE.Camera: .getWorldDirection() target is now required'
+ ),
+ (t = new Lt())),
+ this.updateWorldMatrix(!0, !1);
+ const e = this.matrixWorld.elements;
+ return t.set(-e[8], -e[9], -e[10]).normalize();
+ }
+ updateMatrixWorld(t) {
+ super.updateMatrixWorld(t),
+ this.matrixWorldInverse.copy(this.matrixWorld).invert();
+ }
+ updateWorldMatrix(t, e) {
+ super.updateWorldMatrix(t, e),
+ this.matrixWorldInverse.copy(this.matrixWorld).invert();
+ }
+ clone() {
+ return new this.constructor().copy(this);
+ }
+ }
+ Qn.prototype.isCamera = !0;
+ class Kn extends Qn {
+ constructor(t = 50, e = 1, n = 0.1, i = 2e3) {
+ super(),
+ (this.type = 'PerspectiveCamera'),
+ (this.fov = t),
+ (this.zoom = 1),
+ (this.near = n),
+ (this.far = i),
+ (this.focus = 10),
+ (this.aspect = e),
+ (this.view = null),
+ (this.filmGauge = 35),
+ (this.filmOffset = 0),
+ this.updateProjectionMatrix();
+ }
+ copy(t, e) {
+ return (
+ super.copy(t, e),
+ (this.fov = t.fov),
+ (this.zoom = t.zoom),
+ (this.near = t.near),
+ (this.far = t.far),
+ (this.focus = t.focus),
+ (this.aspect = t.aspect),
+ (this.view = null === t.view ? null : Object.assign({}, t.view)),
+ (this.filmGauge = t.filmGauge),
+ (this.filmOffset = t.filmOffset),
+ this
+ );
+ }
+ setFocalLength(t) {
+ const e = (0.5 * this.getFilmHeight()) / t;
+ (this.fov = 2 * lt * Math.atan(e)), this.updateProjectionMatrix();
+ }
+ getFocalLength() {
+ const t = Math.tan(0.5 * ot * this.fov);
+ return (0.5 * this.getFilmHeight()) / t;
+ }
+ getEffectiveFOV() {
+ return 2 * lt * Math.atan(Math.tan(0.5 * ot * this.fov) / this.zoom);
+ }
+ getFilmWidth() {
+ return this.filmGauge * Math.min(this.aspect, 1);
+ }
+ getFilmHeight() {
+ return this.filmGauge / Math.max(this.aspect, 1);
+ }
+ setViewOffset(t, e, n, i, r, s) {
+ (this.aspect = t / e),
+ null === this.view &&
+ (this.view = {
+ enabled: !0,
+ fullWidth: 1,
+ fullHeight: 1,
+ offsetX: 0,
+ offsetY: 0,
+ width: 1,
+ height: 1,
+ }),
+ (this.view.enabled = !0),
+ (this.view.fullWidth = t),
+ (this.view.fullHeight = e),
+ (this.view.offsetX = n),
+ (this.view.offsetY = i),
+ (this.view.width = r),
+ (this.view.height = s),
+ this.updateProjectionMatrix();
+ }
+ clearViewOffset() {
+ null !== this.view && (this.view.enabled = !1),
+ this.updateProjectionMatrix();
+ }
+ updateProjectionMatrix() {
+ const t = this.near;
+ let e = (t * Math.tan(0.5 * ot * this.fov)) / this.zoom,
+ n = 2 * e,
+ i = this.aspect * n,
+ r = -0.5 * i;
+ const s = this.view;
+ if (null !== this.view && this.view.enabled) {
+ const t = s.fullWidth,
+ a = s.fullHeight;
+ (r += (s.offsetX * i) / t),
+ (e -= (s.offsetY * n) / a),
+ (i *= s.width / t),
+ (n *= s.height / a);
+ }
+ const a = this.filmOffset;
+ 0 !== a && (r += (t * a) / this.getFilmWidth()),
+ this.projectionMatrix.makePerspective(r, r + i, e, e - n, t, this.far),
+ this.projectionMatrixInverse.copy(this.projectionMatrix).invert();
+ }
+ toJSON(t) {
+ const e = super.toJSON(t);
+ return (
+ (e.object.fov = this.fov),
+ (e.object.zoom = this.zoom),
+ (e.object.near = this.near),
+ (e.object.far = this.far),
+ (e.object.focus = this.focus),
+ (e.object.aspect = this.aspect),
+ null !== this.view && (e.object.view = Object.assign({}, this.view)),
+ (e.object.filmGauge = this.filmGauge),
+ (e.object.filmOffset = this.filmOffset),
+ e
+ );
+ }
+ }
+ Kn.prototype.isPerspectiveCamera = !0;
+ const $n = 90;
+ class ti extends Ce {
+ constructor(t, e, n) {
+ if (
+ (super(), (this.type = 'CubeCamera'), !0 !== n.isWebGLCubeRenderTarget)
+ )
+ return void console.error(
+ 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.'
+ );
+ this.renderTarget = n;
+ const i = new Kn($n, 1, t, e);
+ (i.layers = this.layers),
+ i.up.set(0, -1, 0),
+ i.lookAt(new Lt(1, 0, 0)),
+ this.add(i);
+ const r = new Kn($n, 1, t, e);
+ (r.layers = this.layers),
+ r.up.set(0, -1, 0),
+ r.lookAt(new Lt(-1, 0, 0)),
+ this.add(r);
+ const s = new Kn($n, 1, t, e);
+ (s.layers = this.layers),
+ s.up.set(0, 0, 1),
+ s.lookAt(new Lt(0, 1, 0)),
+ this.add(s);
+ const a = new Kn($n, 1, t, e);
+ (a.layers = this.layers),
+ a.up.set(0, 0, -1),
+ a.lookAt(new Lt(0, -1, 0)),
+ this.add(a);
+ const o = new Kn($n, 1, t, e);
+ (o.layers = this.layers),
+ o.up.set(0, -1, 0),
+ o.lookAt(new Lt(0, 0, 1)),
+ this.add(o);
+ const l = new Kn($n, 1, t, e);
+ (l.layers = this.layers),
+ l.up.set(0, -1, 0),
+ l.lookAt(new Lt(0, 0, -1)),
+ this.add(l);
+ }
+ update(t, e) {
+ null === this.parent && this.updateMatrixWorld();
+ const n = this.renderTarget,
+ [i, r, s, a, o, l] = this.children,
+ c = t.xr.enabled,
+ h = t.getRenderTarget();
+ t.xr.enabled = !1;
+ const u = n.texture.generateMipmaps;
+ (n.texture.generateMipmaps = !1),
+ t.setRenderTarget(n, 0),
+ t.render(e, i),
+ t.setRenderTarget(n, 1),
+ t.render(e, r),
+ t.setRenderTarget(n, 2),
+ t.render(e, s),
+ t.setRenderTarget(n, 3),
+ t.render(e, a),
+ t.setRenderTarget(n, 4),
+ t.render(e, o),
+ (n.texture.generateMipmaps = u),
+ t.setRenderTarget(n, 5),
+ t.render(e, l),
+ t.setRenderTarget(h),
+ (t.xr.enabled = c);
+ }
+ }
+ class ei extends bt {
+ constructor(t, e, n, i, s, a, o, l, c, h) {
+ super(
+ (t = void 0 !== t ? t : []),
+ (e = void 0 !== e ? e : r),
+ n,
+ i,
+ s,
+ a,
+ (o = void 0 !== o ? o : T),
+ l,
+ c,
+ h
+ ),
+ (this._needsFlipEnvMap = !0),
+ (this.flipY = !1);
+ }
+ get images() {
+ return this.image;
+ }
+ set images(t) {
+ this.image = t;
+ }
+ }
+ ei.prototype.isCubeTexture = !0;
+ class ni extends Tt {
+ constructor(t, e, n) {
+ Number.isInteger(e) &&
+ (console.warn(
+ 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )'
+ ),
+ (e = n)),
+ super(t, t, e),
+ (e = e || {}),
+ (this.texture = new ei(
+ void 0,
+ e.mapping,
+ e.wrapS,
+ e.wrapT,
+ e.magFilter,
+ e.minFilter,
+ e.format,
+ e.type,
+ e.anisotropy,
+ e.encoding
+ )),
+ (this.texture.generateMipmaps =
+ void 0 !== e.generateMipmaps && e.generateMipmaps),
+ (this.texture.minFilter = void 0 !== e.minFilter ? e.minFilter : g),
+ (this.texture._needsFlipEnvMap = !1);
+ }
+ fromEquirectangularTexture(t, e) {
+ (this.texture.type = e.type),
+ (this.texture.format = E),
+ (this.texture.encoding = e.encoding),
+ (this.texture.generateMipmaps = e.generateMipmaps),
+ (this.texture.minFilter = e.minFilter),
+ (this.texture.magFilter = e.magFilter);
+ const n = {
+ uniforms: { tEquirect: { value: null } },
+ vertexShader:
+ '\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t',
+ fragmentShader:
+ '\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t',
+ },
+ i = new qn(5, 5, 5),
+ r = new Jn({
+ name: 'CubemapFromEquirect',
+ uniforms: Xn(n.uniforms),
+ vertexShader: n.vertexShader,
+ fragmentShader: n.fragmentShader,
+ side: 1,
+ blending: 0,
+ });
+ r.uniforms.tEquirect.value = e;
+ const s = new Wn(i, r),
+ a = e.minFilter;
+ e.minFilter === y && (e.minFilter = g);
+ return (
+ new ti(1, 10, this).update(t, s),
+ (e.minFilter = a),
+ s.geometry.dispose(),
+ s.material.dispose(),
+ this
+ );
+ }
+ clear(t, e, n, i) {
+ const r = t.getRenderTarget();
+ for (let r = 0; r < 6; r++) t.setRenderTarget(this, r), t.clear(e, n, i);
+ t.setRenderTarget(r);
+ }
+ }
+ ni.prototype.isWebGLCubeRenderTarget = !0;
+ class ii extends bt {
+ constructor(t, e, n, i, r, s, a, o, l, c, h, u) {
+ super(null, s, a, o, l, c, i, r, h, u),
+ (this.image = { data: t || null, width: e || 1, height: n || 1 }),
+ (this.magFilter = void 0 !== l ? l : p),
+ (this.minFilter = void 0 !== c ? c : p),
+ (this.generateMipmaps = !1),
+ (this.flipY = !1),
+ (this.unpackAlignment = 1),
+ (this.needsUpdate = !0);
+ }
+ }
+ ii.prototype.isDataTexture = !0;
+ const ri = new Jt(),
+ si = new Lt();
+ class ai {
+ constructor(
+ t = new Ne(),
+ e = new Ne(),
+ n = new Ne(),
+ i = new Ne(),
+ r = new Ne(),
+ s = new Ne()
+ ) {
+ this.planes = [t, e, n, i, r, s];
+ }
+ set(t, e, n, i, r, s) {
+ const a = this.planes;
+ return (
+ a[0].copy(t),
+ a[1].copy(e),
+ a[2].copy(n),
+ a[3].copy(i),
+ a[4].copy(r),
+ a[5].copy(s),
+ this
+ );
+ }
+ copy(t) {
+ const e = this.planes;
+ for (let n = 0; n < 6; n++) e[n].copy(t.planes[n]);
+ return this;
+ }
+ setFromProjectionMatrix(t) {
+ const e = this.planes,
+ n = t.elements,
+ i = n[0],
+ r = n[1],
+ s = n[2],
+ a = n[3],
+ o = n[4],
+ l = n[5],
+ c = n[6],
+ h = n[7],
+ u = n[8],
+ d = n[9],
+ p = n[10],
+ m = n[11],
+ f = n[12],
+ g = n[13],
+ v = n[14],
+ y = n[15];
+ return (
+ e[0].setComponents(a - i, h - o, m - u, y - f).normalize(),
+ e[1].setComponents(a + i, h + o, m + u, y + f).normalize(),
+ e[2].setComponents(a + r, h + l, m + d, y + g).normalize(),
+ e[3].setComponents(a - r, h - l, m - d, y - g).normalize(),
+ e[4].setComponents(a - s, h - c, m - p, y - v).normalize(),
+ e[5].setComponents(a + s, h + c, m + p, y + v).normalize(),
+ this
+ );
+ }
+ intersectsObject(t) {
+ const e = t.geometry;
+ return (
+ null === e.boundingSphere && e.computeBoundingSphere(),
+ ri.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),
+ this.intersectsSphere(ri)
+ );
+ }
+ intersectsSprite(t) {
+ return (
+ ri.center.set(0, 0, 0),
+ (ri.radius = 0.7071067811865476),
+ ri.applyMatrix4(t.matrixWorld),
+ this.intersectsSphere(ri)
+ );
+ }
+ intersectsSphere(t) {
+ const e = this.planes,
+ n = t.center,
+ i = -t.radius;
+ for (let t = 0; t < 6; t++) {
+ if (e[t].distanceToPoint(n) < i) return !1;
+ }
+ return !0;
+ }
+ intersectsBox(t) {
+ const e = this.planes;
+ for (let n = 0; n < 6; n++) {
+ const i = e[n];
+ if (
+ ((si.x = i.normal.x > 0 ? t.max.x : t.min.x),
+ (si.y = i.normal.y > 0 ? t.max.y : t.min.y),
+ (si.z = i.normal.z > 0 ? t.max.z : t.min.z),
+ i.distanceToPoint(si) < 0)
+ )
+ return !1;
+ }
+ return !0;
+ }
+ containsPoint(t) {
+ const e = this.planes;
+ for (let n = 0; n < 6; n++) if (e[n].distanceToPoint(t) < 0) return !1;
+ return !0;
+ }
+ clone() {
+ return new this.constructor().copy(this);
+ }
+ }
+ function oi() {
+ let t = null,
+ e = !1,
+ n = null,
+ i = null;
+ function r(e, s) {
+ n(e, s), (i = t.requestAnimationFrame(r));
+ }
+ return {
+ start: function () {
+ !0 !== e && null !== n && ((i = t.requestAnimationFrame(r)), (e = !0));
+ },
+ stop: function () {
+ t.cancelAnimationFrame(i), (e = !1);
+ },
+ setAnimationLoop: function (t) {
+ n = t;
+ },
+ setContext: function (e) {
+ t = e;
+ },
+ };
+ }
+ function li(t, e) {
+ const n = e.isWebGL2,
+ i = new WeakMap();
+ return {
+ get: function (t) {
+ return t.isInterleavedBufferAttribute && (t = t.data), i.get(t);
+ },
+ remove: function (e) {
+ e.isInterleavedBufferAttribute && (e = e.data);
+ const n = i.get(e);
+ n && (t.deleteBuffer(n.buffer), i.delete(e));
+ },
+ update: function (e, r) {
+ if (e.isGLBufferAttribute) {
+ const t = i.get(e);
+ return void (
+ (!t || t.version < e.version) &&
+ i.set(e, {
+ buffer: e.buffer,
+ type: e.type,
+ bytesPerElement: e.elementSize,
+ version: e.version,
+ })
+ );
+ }
+ e.isInterleavedBufferAttribute && (e = e.data);
+ const s = i.get(e);
+ void 0 === s
+ ? i.set(
+ e,
+ (function (e, i) {
+ const r = e.array,
+ s = e.usage,
+ a = t.createBuffer();
+ t.bindBuffer(i, a), t.bufferData(i, r, s), e.onUploadCallback();
+ let o = 5126;
+ return (
+ r instanceof Float32Array
+ ? (o = 5126)
+ : r instanceof Float64Array
+ ? console.warn(
+ 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.'
+ )
+ : r instanceof Uint16Array
+ ? e.isFloat16BufferAttribute
+ ? n
+ ? (o = 5131)
+ : console.warn(
+ 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.'
+ )
+ : (o = 5123)
+ : r instanceof Int16Array
+ ? (o = 5122)
+ : r instanceof Uint32Array
+ ? (o = 5125)
+ : r instanceof Int32Array
+ ? (o = 5124)
+ : r instanceof Int8Array
+ ? (o = 5120)
+ : r instanceof Uint8Array && (o = 5121),
+ {
+ buffer: a,
+ type: o,
+ bytesPerElement: r.BYTES_PER_ELEMENT,
+ version: e.version,
+ }
+ );
+ })(e, r)
+ )
+ : s.version < e.version &&
+ (!(function (e, i, r) {
+ const s = i.array,
+ a = i.updateRange;
+ t.bindBuffer(r, e),
+ -1 === a.count
+ ? t.bufferSubData(r, 0, s)
+ : (n
+ ? t.bufferSubData(
+ r,
+ a.offset * s.BYTES_PER_ELEMENT,
+ s,
+ a.offset,
+ a.count
+ )
+ : t.bufferSubData(
+ r,
+ a.offset * s.BYTES_PER_ELEMENT,
+ s.subarray(a.offset, a.offset + a.count)
+ ),
+ (a.count = -1));
+ })(s.buffer, e, r),
+ (s.version = e.version));
+ },
+ };
+ }
+ class ci extends En {
+ constructor(t = 1, e = 1, n = 1, i = 1) {
+ super(),
+ (this.type = 'PlaneGeometry'),
+ (this.parameters = {
+ width: t,
+ height: e,
+ widthSegments: n,
+ heightSegments: i,
+ });
+ const r = t / 2,
+ s = e / 2,
+ a = Math.floor(n),
+ o = Math.floor(i),
+ l = a + 1,
+ c = o + 1,
+ h = t / a,
+ u = e / o,
+ d = [],
+ p = [],
+ m = [],
+ f = [];
+ for (let t = 0; t < c; t++) {
+ const e = t * u - s;
+ for (let n = 0; n < l; n++) {
+ const i = n * h - r;
+ p.push(i, -e, 0), m.push(0, 0, 1), f.push(n / a), f.push(1 - t / o);
+ }
+ }
+ for (let t = 0; t < o; t++)
+ for (let e = 0; e < a; e++) {
+ const n = e + l * t,
+ i = e + l * (t + 1),
+ r = e + 1 + l * (t + 1),
+ s = e + 1 + l * t;
+ d.push(n, i, s), d.push(i, r, s);
+ }
+ this.setIndex(d),
+ this.setAttribute('position', new mn(p, 3)),
+ this.setAttribute('normal', new mn(m, 3)),
+ this.setAttribute('uv', new mn(f, 2));
+ }
+ }
+ const hi = {
+ alphamap_fragment:
+ '#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif',
+ alphamap_pars_fragment:
+ '#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif',
+ alphatest_fragment:
+ '#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif',
+ aomap_fragment:
+ '#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif',
+ aomap_pars_fragment:
+ '#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif',
+ begin_vertex: 'vec3 transformed = vec3( position );',
+ beginnormal_vertex:
+ 'vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif',
+ bsdfs:
+ 'vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif',
+ bumpmap_pars_fragment:
+ '#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif',
+ clipping_planes_fragment:
+ '#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif',
+ clipping_planes_pars_fragment:
+ '#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif',
+ clipping_planes_pars_vertex:
+ '#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif',
+ clipping_planes_vertex:
+ '#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif',
+ color_fragment:
+ '#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif',
+ color_pars_fragment:
+ '#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif',
+ color_pars_vertex:
+ '#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif',
+ color_vertex:
+ '#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif',
+ common:
+ '#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}',
+ cube_uv_reflection_fragment:
+ '#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif',
+ defaultnormal_vertex:
+ 'vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif',
+ displacementmap_pars_vertex:
+ '#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif',
+ displacementmap_vertex:
+ '#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif',
+ emissivemap_fragment:
+ '#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif',
+ emissivemap_pars_fragment:
+ '#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif',
+ encodings_fragment: 'gl_FragColor = linearToOutputTexel( gl_FragColor );',
+ encodings_pars_fragment:
+ '\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}',
+ envmap_fragment:
+ '#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif',
+ envmap_common_pars_fragment:
+ '#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif',
+ envmap_pars_fragment:
+ '#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif',
+ envmap_pars_vertex:
+ '#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif',
+ envmap_physical_pars_fragment:
+ '#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif',
+ envmap_vertex:
+ '#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif',
+ fog_vertex: '#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif',
+ fog_pars_vertex: '#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif',
+ fog_fragment:
+ '#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif',
+ fog_pars_fragment:
+ '#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif',
+ gradientmap_pars_fragment:
+ '#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}',
+ lightmap_fragment:
+ '#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif',
+ lightmap_pars_fragment:
+ '#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif',
+ lights_lambert_vertex:
+ 'vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif',
+ lights_pars_begin:
+ 'uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif',
+ lights_toon_fragment:
+ 'ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;',
+ lights_toon_pars_fragment:
+ 'varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)',
+ lights_phong_fragment:
+ 'BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;',
+ lights_phong_pars_fragment:
+ 'varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)',
+ lights_physical_fragment:
+ 'PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif',
+ lights_physical_pars_fragment:
+ 'struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3(\t\t0, 1,\t\t0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}',
+ lights_fragment_begin:
+ '\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif',
+ lights_fragment_maps:
+ '#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif',
+ lights_fragment_end:
+ '#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif',
+ logdepthbuf_fragment:
+ '#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif',
+ logdepthbuf_pars_fragment:
+ '#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif',
+ logdepthbuf_pars_vertex:
+ '#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif',
+ logdepthbuf_vertex:
+ '#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif',
+ map_fragment:
+ '#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif',
+ map_pars_fragment: '#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif',
+ map_particle_fragment:
+ '#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif',
+ map_particle_pars_fragment:
+ '#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif',
+ metalnessmap_fragment:
+ 'float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif',
+ metalnessmap_pars_fragment:
+ '#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif',
+ morphnormal_vertex:
+ '#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif',
+ morphtarget_pars_vertex:
+ '#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif',
+ morphtarget_vertex:
+ '#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif',
+ normal_fragment_begin:
+ 'float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;',
+ normal_fragment_maps:
+ '#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif',
+ normalmap_pars_fragment:
+ '#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif',
+ clearcoat_normal_fragment_begin:
+ '#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif',
+ clearcoat_normal_fragment_maps:
+ '#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif',
+ clearcoat_pars_fragment:
+ '#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif',
+ packing:
+ 'vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}',
+ premultiplied_alpha_fragment:
+ '#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif',
+ project_vertex:
+ 'vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;',
+ dithering_fragment:
+ '#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif',
+ dithering_pars_fragment:
+ '#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif',
+ roughnessmap_fragment:
+ 'float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif',
+ roughnessmap_pars_fragment:
+ '#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif',
+ shadowmap_pars_fragment:
+ '#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif',
+ shadowmap_pars_vertex:
+ '#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif',
+ shadowmap_vertex:
+ '#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif',
+ shadowmask_pars_fragment:
+ 'float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}',
+ skinbase_vertex:
+ '#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif',
+ skinning_pars_vertex:
+ '#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif',
+ skinning_vertex:
+ '#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif',
+ skinnormal_vertex:
+ '#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif',
+ specularmap_fragment:
+ 'float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif',
+ specularmap_pars_fragment:
+ '#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif',
+ tonemapping_fragment:
+ '#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif',
+ tonemapping_pars_fragment:
+ '#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3(\t1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108,\t1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605,\t1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }',
+ transmissionmap_fragment:
+ '#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif',
+ transmissionmap_pars_fragment:
+ '#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif',
+ uv_pars_fragment:
+ '#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif',
+ uv_pars_vertex:
+ '#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif',
+ uv_vertex:
+ '#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif',
+ uv2_pars_fragment:
+ '#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif',
+ uv2_pars_vertex:
+ '#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif',
+ uv2_vertex:
+ '#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif',
+ worldpos_vertex:
+ '#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif',
+ background_frag:
+ 'uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}',
+ background_vert:
+ 'varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}',
+ cube_frag:
+ '#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}',
+ cube_vert:
+ 'varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}',
+ depth_frag:
+ '#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}',
+ depth_vert:
+ '#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}',
+ distanceRGBA_frag:
+ '#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}',
+ distanceRGBA_vert:
+ '#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}',
+ equirect_frag:
+ 'uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}',
+ equirect_vert:
+ 'varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}',
+ linedashed_frag:
+ 'uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}',
+ linedashed_vert:
+ 'uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}',
+ meshbasic_frag:
+ 'uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}',
+ meshbasic_vert:
+ '#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}',
+ meshlambert_frag:
+ 'uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}',
+ meshlambert_vert:
+ '#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}',
+ meshmatcap_frag:
+ '#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include