commit 60b0072bcc992e68b51e78e0b97a21c3cdc8afdd Author: Oliver Date: Wed Aug 28 21:23:31 2024 -0600 Initial commit diff --git a/.github/draft-release.yaml b/.github/draft-release.yaml new file mode 100644 index 0000000..e8c1a16 --- /dev/null +++ b/.github/draft-release.yaml @@ -0,0 +1,58 @@ +name: Create Draft Release +on: [workflow_dispatch] +jobs: + everything: + runs-on: ubuntu-latest + steps: + # Checkout the repository + - uses: actions/checkout@v4 + + # Install node and NPM + - uses: actions/setup-node@v4 + with: + node-version: "20" + + # Install required packages + - run: npm install + + - name: Reading the system.json for the version + id: "version" + run: cat system.json | echo version=`jq -r ".version"` >> "$GITHUB_OUTPUT" + + # Check that tag doesn't exist + - uses: mukunku/tag-exists-action@v1.5.0 + id: check-tag + with: + tag: "v${{ steps.version.outputs.version }}" + + - name: "Ensure that the tag doesn't exist" + if: ${{ steps.check-tag.outputs.exists == 'true' }} + run: exit 1 + + - name: Ensure there are specific files to release + if: ${{ vars.files_to_release == '' }} + run: exit 1 + + # Compile the stuff that needs to be compiled + - run: npm run build + - run: node scripts/buildCompendia.mjs + + - name: Move system.json to a temp file + id: manifest-move + run: mv system.json system.temp.json + + - name: Update the download property in the manifest + id: manifest-update + run: cat system.temp.json | jq -r --tab '.download = "https://github.com/${{ github.repository }}/releases/download/v${{ steps.version.outputs.version }}/${{ vars.zip_name }}.zip"' > system.json + + - name: Create the zip + run: zip -r ${{ vars.zip_name || 'release' }}.zip ${{ vars.files_to_release }} + + - name: Create the draft release + uses: ncipollo/release-action@v1 + with: + tag: "v${{ steps.version.outputs.version }}" + commit: ${{ github.ref }} + draft: true + generateReleaseNotes: true + artifacts: "${{vars.zip_name || 'release'}}.zip,system.json" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..40b878d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/.vscode/components.html-data.json b/.vscode/components.html-data.json new file mode 100644 index 0000000..e1c3ebd --- /dev/null +++ b/.vscode/components.html-data.json @@ -0,0 +1,27 @@ +{ + "version": 1.1, + "tags": [ + { + "name": "dd-incrementer", + "description": "A number input that allows more flexible increase/decrease buttons", + "attributes": [ + { "name": "value", "description": "The initial value to put in the input" }, + { "name": "name", "description": "The form name to use when this input is used to submit data" }, + { "name": "min", "description": "The minimum value that this input can contain" }, + { "name": "max", "description": "The maximum value that this input can contain" }, + { "name": "smallStep", "description": "The value that the input is changed by when clicking a delta button or using the up/down arrow key" }, + { "name": "largeStep", "description": "The value that the input is changed by when clicking a delta button with control held or using the page up/ page down arrow key" } + ] + }, + { + "name": "dd-icon", + "description": "Loads an icon asynchronously, caching the result for future uses", + "attributes": [ + { "name": "name", "description": "The name of the icon, this is relative to the assets folder of the dotdungeon system" }, + { "name": "path", "description": "The full path of the icon, this will only be used if `name` isn't provided or fails to fetch." } + ] + } + ], + "globalAttributes": [], + "valueSets": [] +} diff --git a/.vscode/handlebars.code-snippets b/.vscode/handlebars.code-snippets new file mode 100644 index 0000000..e922f13 --- /dev/null +++ b/.vscode/handlebars.code-snippets @@ -0,0 +1,37 @@ +{ + // Place your foundry.dungeon workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and + // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope + // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is + // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. + // Placeholders with the same ids are connected. + // Example: + // "Print to console": { + // "scope": "javascript,typescript", + // "prefix": "log", + // "body": [ + // "console.log('$1');", + // "$2" + // ], + // "description": "Log output to console" + // } + "Localization Shortcut (concat)": { + "scope": "handlebars,html", + "prefix": "i18n", + "body": ["localize (concat \"dotdungeon.$1\" $2)"] + }, + "Localization Shortcut (no concat)": { + "scope": "handlebars,html", + "prefix": "i18n", + "body": ["localize \"dotdungeon.$1\""] + }, + "Icon": { + "scope": "handlebars,html", + "prefix": "icon", + "body": [ + "
", + "\t{{{ $2 }}}", + "
" + ] + } +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9fce672 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,18 @@ +{ + "files.autoSave": "onWindowChange", + "editor.tabSize": 2, + "[yaml,yml]": { + "editor.insertSpaces": true, + "editor.tabSize": 2 + }, + "git.branchProtection": [], + "files.exclude": { + "*.lock": true, + ".styles": true, + "node_modules": true, + "packs": true, + }, + "html.customData": [ + "./.vscode/components.html-data.json" + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..cdf72fc --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# foundry-system-template \ No newline at end of file diff --git a/augments.d.ts b/augments.d.ts new file mode 100644 index 0000000..df16590 --- /dev/null +++ b/augments.d.ts @@ -0,0 +1,9 @@ +interface Actor { + /** The system-specific data */ + system: any; +}; + +interface Item { + /** The system-specific data */ + system: any; +}; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..e3f0a8c --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,88 @@ +import globals from "globals"; +import pluginJs from "@eslint/js"; +import stylistic from "@stylistic/eslint-plugin"; + +export default [ + // Tell eslint to ignore files that I don't mind being formatted slightly differently + { ignores: [ `scripts/` ] }, + { + languageOptions: { + globals: globals.browser, + }, + }, + pluginJs.configs.recommended, + // MARK: Foundry Globals + { + languageOptions: { + globals: { + CONFIG: `writable`, + game: `readonly`, + Handlebars: `readonly`, + Hooks: `readonly`, + ui: `readonly`, + Actor: `readonly`, + Actors: `readonly`, + Item: `readonly`, + Items: `readonly`, + ActorSheet: `readonly`, + ItemSheet: `readonly`, + foundry: `readonly`, + ChatMessage: `readonly`, + ActiveEffect: `readonly`, + Dialog: `readonly`, + }, + }, + }, + // MARK: Project Specific + { + plugins: { + "@stylistic": stylistic, + }, + languageOptions: { + globals: { + Logger: `readonly`, + }, + }, + rules: { + "curly": `error`, + "func-names": [`warn`, `as-needed`], + "grouped-accessor-pairs": `error`, + "no-alert": `error`, + "no-implied-eval": `error`, + "no-invalid-this": `error`, + "no-lonely-if": `error`, + "no-unneeded-ternary": `error`, + "no-nested-ternary": `error`, + "no-var": `error`, + "no-unused-vars": [ + `error`, + { + "vars": `local`, + "args": `after-used`, + "varsIgnorePattern": `^_`, + "argsIgnorePattern": `^_`, + }, + ], + "sort-imports": [`warn`, { "ignoreCase": true, "allowSeparatedGroups": true }], + "@stylistic/semi": [`warn`, `always`, { "omitLastInOneLineBlock": true }], + "@stylistic/no-trailing-spaces": `warn`, + "@stylistic/space-before-blocks": [`warn`, `always`], + "@stylistic/space-infix-ops": `warn`, + "@stylistic/eol-last": `warn`, + "@stylistic/operator-linebreak": [`warn`, `before`], + "@stylistic/indent": [`warn`, `tab`], + "@stylistic/brace-style": [`warn`, `1tbs`, { "allowSingleLine": true }], + "@stylistic/quotes": [`warn`, `backtick`, { "avoidEscape": true }], + "@stylistic/comma-dangle": [`warn`, { arrays: `always-multiline`, objects: `always-multiline`, imports: `always-multiline`, exports: `always-multiline`, functions: `always-multiline` }], + "@stylistic/comma-style": [`warn`, `last`], + "@stylistic/dot-location": [`error`, `property`], + "@stylistic/no-confusing-arrow": `error`, + "@stylistic/no-whitespace-before-property": `error`, + "@stylistic/nonblock-statement-body-position": [ + `error`, + `beside`, + { "overrides": { "while": `below` } }, + ], + }, + }, +]; diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..231558c --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "types": [ + "./augments.d.ts" + ] + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..a159d80 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5058 @@ +{ + "name": "foundry-system-template", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "@eslint/js": "^9.8.0", + "@foundryvtt/foundryvtt-cli": "^1.0.3", + "@league-of-foundry-developers/foundry-vtt-types": "^9.280.0", + "@stylistic/eslint-plugin": "^2.6.1", + "eslint": "^9.8.0", + "globals": "^15.9.0", + "sass": "^1.77.8" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.1.tgz", + "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.8.0.tgz", + "integrity": "sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@foundryvtt/foundryvtt-cli": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@foundryvtt/foundryvtt-cli/-/foundryvtt-cli-1.0.3.tgz", + "integrity": "sha512-M8NrMXFYpOEsLAbgRWfuMvUa9F6HwrROLtqhhBljqfVS1lgm0RJJY/7MObuXsTJOC6+Uu+QOPZTlw4k+hguG7w==", + "dev": true, + "dependencies": { + "chalk": "^5.2.0", + "classic-level": "^1.2.0", + "esm": "^3.2.25", + "js-yaml": "^4.1.0", + "mkdirp": "^3.0.0", + "nedb-promises": "^6.2.1", + "yargs": "^17.7.1" + }, + "bin": { + "fvtt": "fvtt.mjs" + }, + "engines": { + "node": ">17.0.0" + } + }, + "node_modules/@foundryvtt/foundryvtt-cli/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@league-of-foundry-developers/foundry-vtt-types": { + "version": "9.280.0", + "resolved": "https://registry.npmjs.org/@league-of-foundry-developers/foundry-vtt-types/-/foundry-vtt-types-9.280.0.tgz", + "integrity": "sha512-Dv8/+kgAnI2F5snSWcnMnZsgO/87AFyBruflluZkWDbP7Pm5qi32GlNYCDEg7HMKybzyKmgLV2qXMmYPHtCT7w==", + "dev": true, + "dependencies": { + "@pixi/graphics-smooth": "0.0.22", + "@types/jquery": "~3.5.9", + "@types/simple-peer": "~9.11.1", + "handlebars": "4.7.7", + "pixi-particles": "4.3.1", + "pixi.js": "5.3.11", + "socket.io-client": "4.3.2", + "tinymce": "5.10.1" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pixi/accessibility": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/accessibility/-/accessibility-5.3.11.tgz", + "integrity": "sha512-/oSizd8/g6KUCeAlknMLJ9CRxBt+vWs6e2DrOctMoRupEHcmhICCjIyAp5GF6RZy9T9gNHDOU5p7vo7qEyVxgQ==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/accessibility/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/app": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/app/-/app-5.3.11.tgz", + "integrity": "sha512-ZWrOjGvVl+lK5OJQT3OqSnSRtU2XgQSe/ULg2uGsSWUqMkJews33JIGOjvk4tIsjm4ekSKiPZRMdYFHzPfgEJg==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11" + } + }, + "node_modules/@pixi/app/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/app/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/app/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/app/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/app/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/app/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/app/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/app/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/constants": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-6.5.10.tgz", + "integrity": "sha512-PUF2Y9YISRu5eVrVVHhHCWpc/KmxQTg3UH8rIUs8UI9dCK41/wsPd3pEahzf7H47v7x1HCohVZcFO3XQc1bUDw==", + "dev": true, + "peer": true + }, + "node_modules/@pixi/core": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-6.5.10.tgz", + "integrity": "sha512-Gdzp5ENypyglvsh5Gv3teUZnZnmizo4xOsL+QqmWALdFlJXJwLJMVhKVThV/q/095XR6i4Ou54oshn+m4EkuFw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/offscreencanvas": "^2019.6.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + }, + "peerDependencies": { + "@pixi/constants": "6.5.10", + "@pixi/extensions": "6.5.10", + "@pixi/math": "6.5.10", + "@pixi/runner": "6.5.10", + "@pixi/settings": "6.5.10", + "@pixi/ticker": "6.5.10", + "@pixi/utils": "6.5.10" + } + }, + "node_modules/@pixi/display": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-6.5.10.tgz", + "integrity": "sha512-NxFdDDxlbH5fQkzGHraLGoTMucW9pVgXqQm13TSmkA3NWIi/SItHL4qT2SI8nmclT9Vid1VDEBCJFAbdeuQw1Q==", + "dev": true, + "peer": true, + "peerDependencies": { + "@pixi/constants": "6.5.10", + "@pixi/math": "6.5.10", + "@pixi/settings": "6.5.10", + "@pixi/utils": "6.5.10" + } + }, + "node_modules/@pixi/extensions": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/extensions/-/extensions-6.5.10.tgz", + "integrity": "sha512-EIUGza+E+sCy3dupuIjvRK/WyVyfSzHb5XsxRaxNrPwvG1iIUIqNqZ3owLYCo4h17fJWrj/yXVufNNtUKQccWQ==", + "dev": true, + "peer": true + }, + "node_modules/@pixi/extract": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/extract/-/extract-5.3.11.tgz", + "integrity": "sha512-YeBrpIO3E5HUgcdKEldCUqwwDNHm5OBe98YFcdLr5Z0+dQaHnxp9Dm4n75/NojoGb5guYdrV00x+gU2UPHsVdw==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/extract/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/extract/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/extract/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/extract/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/extract/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/extract/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/extract/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/filter-alpha": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/filter-alpha/-/filter-alpha-5.3.11.tgz", + "integrity": "sha512-HC4PbiEqDWSi3A715av7knFqD3knSXRxPJKG9mWat2CU9eCizSw+JxXp/okMU/fL4ewooiqQWVU2l1wXOHhVFw==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11" + } + }, + "node_modules/@pixi/filter-alpha/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/filter-alpha/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/filter-alpha/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/filter-alpha/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/filter-alpha/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/filter-alpha/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/filter-alpha/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/filter-blur": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/filter-blur/-/filter-blur-5.3.11.tgz", + "integrity": "sha512-iW5cOMEcDiJidOV95bUfhxdcvwM9JzCoWAd+92gAie8L+ElRSHpu1jxXbKHjo/QczQV1LulOlheyDaJNpaBCDg==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/filter-blur/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/filter-blur/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/filter-blur/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/filter-blur/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/filter-blur/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/filter-blur/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/filter-blur/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/filter-color-matrix": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/filter-color-matrix/-/filter-color-matrix-5.3.11.tgz", + "integrity": "sha512-u9NT4+N1I3XV9ygwsmF8/jIwCLqNCLeFOdM4f73kbw/UmakZZ6i6xjjJMc5YFUpC25qDr1TFlqgdGGGHAPl4ug==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11" + } + }, + "node_modules/@pixi/filter-color-matrix/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/filter-color-matrix/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/filter-color-matrix/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/filter-color-matrix/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/filter-color-matrix/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/filter-color-matrix/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/filter-color-matrix/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/filter-displacement": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/filter-displacement/-/filter-displacement-5.3.11.tgz", + "integrity": "sha512-CTIy7C/L9I1X3VNx4nMzQbMFvznsGk2viQh0dSo8r5NLgmaAdxhkGI0KUpNjLBz30278tzFfNuRe59K1y1kHuw==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/math": "5.3.11" + } + }, + "node_modules/@pixi/filter-displacement/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/filter-displacement/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/filter-displacement/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/filter-displacement/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/filter-displacement/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/filter-displacement/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/filter-displacement/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/filter-fxaa": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/filter-fxaa/-/filter-fxaa-5.3.11.tgz", + "integrity": "sha512-0ahjui5385e1vRvd7zCc0n5W8ULtNI1uVbDJHP9ueeiF25TKC0GqtZzntNwrQPoU46q8zXdnIGjzMpikbbAasg==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11" + } + }, + "node_modules/@pixi/filter-fxaa/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/filter-fxaa/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/filter-fxaa/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/filter-fxaa/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/filter-fxaa/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/filter-fxaa/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/filter-fxaa/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/filter-noise": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/filter-noise/-/filter-noise-5.3.11.tgz", + "integrity": "sha512-98WC9Nd5u2F03Ned9T3vnbmO/YF1jLSioZ623z9wjqpd5DosZgRtYTSGxjVcXTSfpviIuiJpkyF+X097pbVprg==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11" + } + }, + "node_modules/@pixi/filter-noise/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/filter-noise/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/filter-noise/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/filter-noise/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/filter-noise/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/filter-noise/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/filter-noise/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/graphics": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/graphics/-/graphics-6.5.10.tgz", + "integrity": "sha512-KPHGJ910fi8bRQQ+VcTIgrK+bKIm8yAQaZKPqMtm14HzHPGcES6HkgeNY1sd7m8J4aS9btm5wOSyFu0p5IzTpA==", + "dev": true, + "peer": true, + "peerDependencies": { + "@pixi/constants": "6.5.10", + "@pixi/core": "6.5.10", + "@pixi/display": "6.5.10", + "@pixi/math": "6.5.10", + "@pixi/sprite": "6.5.10", + "@pixi/utils": "6.5.10" + } + }, + "node_modules/@pixi/graphics-smooth": { + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/@pixi/graphics-smooth/-/graphics-smooth-0.0.22.tgz", + "integrity": "sha512-qq2u+BJBIDBuuSTc2Xzm1D/8RiiKBdxnVDiMb7Go5v8achnV5ctC6m+rf8Mq0sWm66mbOqu1aq/9efT4A4sPrA==", + "dev": true, + "engines": { + "node": ">=14", + "npm": ">=7" + }, + "peerDependencies": { + "@pixi/constants": "^6.0.4", + "@pixi/core": "^6.0.4", + "@pixi/display": "^6.0.4", + "@pixi/graphics": "^6.0.4", + "@pixi/math": "^6.0.4", + "@pixi/utils": "^6.0.4" + } + }, + "node_modules/@pixi/interaction": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/interaction/-/interaction-5.3.11.tgz", + "integrity": "sha512-n2K99CYyBcrf8NPxpzmZ5IlJ9TEplsSZfJ/uzMNOEnTObKl4wAhxs51Nb58raH3Ouzwu14YHOpqYrBTEoT1yPA==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/interaction/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/interaction/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/interaction/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/interaction/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/interaction/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/interaction/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/interaction/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/interaction/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/loaders": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/loaders/-/loaders-5.3.11.tgz", + "integrity": "sha512-1HAeb/NFXyhNhZWAbVkngsTPBGpjZEPhQflBTrKycRaub7XDSZ8F0fwPltpKKVRWNDT+HBgU/zDNE2fpjzqfYg==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/utils": "5.3.11", + "resource-loader": "^3.0.1" + } + }, + "node_modules/@pixi/loaders/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/loaders/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/loaders/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/loaders/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/loaders/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/loaders/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/loaders/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/math": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-6.5.10.tgz", + "integrity": "sha512-fxeu7ykVbMGxGV2S3qRTupHToeo1hdWBm8ihyURn3BMqJZe2SkZEECPd5RyvIuuNUtjRnmhkZRnF3Jsz2S+L0g==", + "dev": true, + "peer": true + }, + "node_modules/@pixi/mesh": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/mesh/-/mesh-5.3.11.tgz", + "integrity": "sha512-KWKKksEr0YuUX1uz1FmpIa/Y37b/0pvFUS+87LoyYq0mRtGbKsTY5i3lBPG/taHwN7a2DQAX3JZpw6yhGKoGpA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mesh-extras": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/mesh-extras/-/mesh-extras-5.3.11.tgz", + "integrity": "sha512-1GTCMMUW1xv/72x26cxRysblBXW0wU77TNgqtSIMZ1M6JbleObChklWTvwi9MzQO2vQ3S6Hvcsa5m5EiM2hSPQ==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/mesh": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mesh-extras/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/mesh-extras/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/mesh-extras/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/mesh-extras/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/mesh-extras/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/mesh-extras/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/mesh-extras/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/mesh/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/mesh/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/mesh/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mesh/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/mesh/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/mesh/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/mesh/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/mesh/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/mixin-cache-as-bitmap": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/mixin-cache-as-bitmap/-/mixin-cache-as-bitmap-5.3.11.tgz", + "integrity": "sha512-uQUxatGTTD5zfQ0pWdjibVjT+xEEZJ/xZDZtm/GxC7HSHd4jgoJBcTXWVhbhzwpLPVTnD8+sMnRrGlhoKcpTpQ==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/sprite": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/sprite": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-5.3.11.tgz", + "integrity": "sha512-RM6Sp8kqzsBdX/hDAO25HZywe9VU4uhOronUOQ5Ve0zRe+trdBWQYfi7+5kAcvzqkp25Izc0C+e+4YCqe5OaHQ==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/mixin-cache-as-bitmap/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/mixin-get-child-by-name": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/mixin-get-child-by-name/-/mixin-get-child-by-name-5.3.11.tgz", + "integrity": "sha512-fWFVxWtMYcwJttrgDNmZ4CJrx316p8ToNliC2ILmJZW77me7I4GzJ57gSHQU1xFwdHoOYRC4fnlrZoK5qJ9lDw==", + "dev": true, + "dependencies": { + "@pixi/display": "5.3.11" + } + }, + "node_modules/@pixi/mixin-get-child-by-name/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/mixin-get-child-by-name/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mixin-get-child-by-name/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/mixin-get-child-by-name/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/mixin-get-child-by-name/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/mixin-get-global-position": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/mixin-get-global-position/-/mixin-get-global-position-5.3.11.tgz", + "integrity": "sha512-wrS9i+UUodLM5XL2N0Y+XSKiqLRdJV3ltFUWG6+jPT5yoP0HsKtx3sFAzX526RwIYwRzRusbc/quxHfRA4tvgg==", + "dev": true, + "dependencies": { + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11" + } + }, + "node_modules/@pixi/mixin-get-global-position/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/mixin-get-global-position/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/mixin-get-global-position/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/mixin-get-global-position/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/mixin-get-global-position/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/particles": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/particles/-/particles-5.3.11.tgz", + "integrity": "sha512-+mkt/inWXtRrxQc07RZ29uNIDWV1oMsrRBVBIvHgpR92Kn8EjIDRgoSXNu0jiZ18gRKKCBhwsS4dCXGsZRQ/sA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/particles/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/particles/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/particles/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/particles/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/particles/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/particles/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/particles/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/particles/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/polyfill": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/polyfill/-/polyfill-5.3.11.tgz", + "integrity": "sha512-yQOngcnn+2/L7n6L/g45hCnIDLWdnWmmcCY3UKJrOgbNX+JtLru1RR8AGLifkdsa0R5u48x584YQGqkTAChWVA==", + "dev": true, + "dependencies": { + "es6-promise-polyfill": "^1.2.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/@pixi/prepare": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/prepare/-/prepare-5.3.11.tgz", + "integrity": "sha512-TvjGeg7xPKjv5NxbM5NXReno9yxUCw/N0HtDEtEFRVeBLN3u0Q/dZsXxL6gIvkHoS09NFW+7AwsYQLZrVbppjA==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/graphics": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/text": "5.3.11", + "@pixi/ticker": "5.3.11" + } + }, + "node_modules/@pixi/prepare/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/prepare/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/prepare/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/prepare/node_modules/@pixi/graphics": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/graphics/-/graphics-5.3.11.tgz", + "integrity": "sha512-HLu53LV6mRlY0uFSIM2OrCuL7xqXzeJs5d2QfmUJfKJVVZ9sbHDS+6/N/f0tXzvkRPYhSKXvcNPsNn4HmlIE9w==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/sprite": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/prepare/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/prepare/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/prepare/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/prepare/node_modules/@pixi/sprite": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-5.3.11.tgz", + "integrity": "sha512-RM6Sp8kqzsBdX/hDAO25HZywe9VU4uhOronUOQ5Ve0zRe+trdBWQYfi7+5kAcvzqkp25Izc0C+e+4YCqe5OaHQ==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/prepare/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/prepare/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/runner": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-6.5.10.tgz", + "integrity": "sha512-4HiHp6diCmigJT/DSbnqQP62OfWKmZB7zPWMdV1AEdr4YT1QxzXAW1wHg7dkoEfyTHqZKl0tm/zcqKq/iH7tMA==", + "dev": true, + "peer": true + }, + "node_modules/@pixi/settings": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-6.5.10.tgz", + "integrity": "sha512-ypAS5L7pQ2Qb88yQK72bXtc7sD8OrtLWNXdZ/gnw5kwSWCFaOSoqhKqJCXrR5DQtN98+RQefwbEAmMvqobhFyw==", + "dev": true, + "peer": true, + "peerDependencies": { + "@pixi/constants": "6.5.10" + } + }, + "node_modules/@pixi/sprite": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-6.5.10.tgz", + "integrity": "sha512-UiK+8LgM9XQ/SBDKjRgZ8WggdOSlFRXqiWjEZVmNkiyU8HvXeFzWPRhpc8RR1zDwAUhZWKtMhF8X/ba9m+z2lg==", + "dev": true, + "peer": true, + "peerDependencies": { + "@pixi/constants": "6.5.10", + "@pixi/core": "6.5.10", + "@pixi/display": "6.5.10", + "@pixi/math": "6.5.10", + "@pixi/settings": "6.5.10", + "@pixi/utils": "6.5.10" + } + }, + "node_modules/@pixi/sprite-animated": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite-animated/-/sprite-animated-5.3.11.tgz", + "integrity": "sha512-xU1b6H8nJ1l05h7cBGw2DGo4QdLj7xootstZUx2BrTVX5ZENn5mjAGVD0uRpk8yt7Q6Bj7M+PS7ktzAgBW/hmQ==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/sprite": "5.3.11", + "@pixi/ticker": "5.3.11" + } + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/sprite": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-5.3.11.tgz", + "integrity": "sha512-RM6Sp8kqzsBdX/hDAO25HZywe9VU4uhOronUOQ5Ve0zRe+trdBWQYfi7+5kAcvzqkp25Izc0C+e+4YCqe5OaHQ==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/sprite-animated/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/sprite-tiling": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite-tiling/-/sprite-tiling-5.3.11.tgz", + "integrity": "sha512-KUiWsIumjrnp9QKGMe1BqtrV9Hxm91KoaiOlCBk/gw8753iKvuMmH+/Z0RnzeZylJ1sJsdonTWy/IaLi1jnd0g==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/sprite": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/sprite": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-5.3.11.tgz", + "integrity": "sha512-RM6Sp8kqzsBdX/hDAO25HZywe9VU4uhOronUOQ5Ve0zRe+trdBWQYfi7+5kAcvzqkp25Izc0C+e+4YCqe5OaHQ==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/sprite-tiling/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/spritesheet": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/spritesheet/-/spritesheet-5.3.11.tgz", + "integrity": "sha512-Y9Wiwcz/YOuS1v73Ij9KWQakYBzZfldEy3H8T4GPLK+S19/sypntdkNtRZbmR2wWfhJ4axYEB2/Df86aOAU2qA==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/loaders": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/spritesheet/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/spritesheet/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/spritesheet/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/spritesheet/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/spritesheet/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/spritesheet/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/spritesheet/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/text": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/text/-/text-5.3.11.tgz", + "integrity": "sha512-PmWvJv0wiKyyz3fahnxM19+m8IbF2vpDKIImqb5472WyxRGzKyVBW90xrADf5202tdKMk4b8hqvpof2XULr5PA==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/sprite": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/text-bitmap": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/text-bitmap/-/text-bitmap-5.3.11.tgz", + "integrity": "sha512-Bjc/G4VHaPXc9HJsvyYOm5cNTHdqmX6AgzBAlCfltuMAlnveUgUPuX8D/MJHRRnoVSDHSmCBtnJgTc0y/nIeCw==", + "dev": true, + "dependencies": { + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/loaders": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/mesh": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/text": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/text-bitmap/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/text/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/@pixi/text/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/@pixi/text/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/text/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/@pixi/text/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/@pixi/text/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/text/node_modules/@pixi/sprite": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-5.3.11.tgz", + "integrity": "sha512-RM6Sp8kqzsBdX/hDAO25HZywe9VU4uhOronUOQ5Ve0zRe+trdBWQYfi7+5kAcvzqkp25Izc0C+e+4YCqe5OaHQ==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/@pixi/text/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/@pixi/text/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/@pixi/ticker": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-6.5.10.tgz", + "integrity": "sha512-UqX1XYtzqFSirmTOy8QAK4Ccg4KkIZztrBdRPKwFSOEiKAJoGDCSBmyQBo/9aYQKGObbNnrJ7Hxv3/ucg3/1GA==", + "dev": true, + "peer": true, + "peerDependencies": { + "@pixi/extensions": "6.5.10", + "@pixi/settings": "6.5.10" + } + }, + "node_modules/@pixi/utils": { + "version": "6.5.10", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-6.5.10.tgz", + "integrity": "sha512-4f4qDMmAz9IoSAe08G2LAxUcEtG9jSdudfsMQT2MG+OpfToirboE6cNoO0KnLCvLzDVE/mfisiQ9uJbVA9Ssdw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/earcut": "^2.1.0", + "earcut": "^2.2.4", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + }, + "peerDependencies": { + "@pixi/constants": "6.5.10", + "@pixi/settings": "6.5.10" + } + }, + "node_modules/@seald-io/binary-search-tree": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.3.tgz", + "integrity": "sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA==", + "dev": true + }, + "node_modules/@seald-io/nedb": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@seald-io/nedb/-/nedb-4.0.4.tgz", + "integrity": "sha512-CUNcMio7QUHTA+sIJ/DC5JzVNNsHe743TPmC4H5Gij9zDLMbmrCT2li3eVB72/gF63BPS8pWEZrjlAMRKA8FDw==", + "dev": true, + "dependencies": { + "@seald-io/binary-search-tree": "^1.0.3", + "localforage": "^1.9.0", + "util": "^0.12.4" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz", + "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==", + "dev": true + }, + "node_modules/@stylistic/eslint-plugin": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.6.1.tgz", + "integrity": "sha512-UT0f4t+3sQ/GKW7875NiIIjZJ1Bh4gd7JNfoIkwIQyWqO7wGd0Pqzu0Ho30Ka8MNF5lm++SkVeqAk26vGxoUpg==", + "dev": true, + "dependencies": { + "@stylistic/eslint-plugin-js": "2.6.1", + "@stylistic/eslint-plugin-jsx": "2.6.1", + "@stylistic/eslint-plugin-plus": "2.6.1", + "@stylistic/eslint-plugin-ts": "2.6.1", + "@types/eslint": "^9.6.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin-js": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.6.1.tgz", + "integrity": "sha512-iLOiVzcvqzDGD9U0EuVOX680v+XOPiPAjkxWj+Q6iV2GLOM5NB27tKVOpJY7AzBhidwpRbaLTgg3T4UzYx09jw==", + "dev": true, + "dependencies": { + "@types/eslint": "^9.6.0", + "acorn": "^8.12.1", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin-jsx": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-2.6.1.tgz", + "integrity": "sha512-5qHLXqxfY6jubAQfDqrifv41fx7gaqA9svDaChxMI6JiHpEBfh+PXxmm3g+B8gJCYVBTC62Rjl0Ny5QabK58bw==", + "dev": true, + "dependencies": { + "@stylistic/eslint-plugin-js": "^2.6.1", + "@types/eslint": "^9.6.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin-plus": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-2.6.1.tgz", + "integrity": "sha512-z/IYu/q8ipApzNam5utSU+BrXg4pK/Gv9xNbr4eWv/bZppvTWJU62xCO4nw/6r2dHNPnqc7uCHEC7GMlBnPY0A==", + "dev": true, + "dependencies": { + "@types/eslint": "^9.6.0", + "@typescript-eslint/utils": "^8.0.0" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@stylistic/eslint-plugin-ts": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.6.1.tgz", + "integrity": "sha512-Mxl1VMorEG1Hc6oBYPD0+KIJOWkjEF1R0liL7wWgKfwpqOkgmnh5lVdZBrYyfRKOE4RlGcwEFTNai1IW6orgVg==", + "dev": true, + "dependencies": { + "@stylistic/eslint-plugin-js": "2.6.1", + "@types/eslint": "^9.6.0", + "@typescript-eslint/utils": "^8.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@types/earcut": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/earcut/-/earcut-2.1.4.tgz", + "integrity": "sha512-qp3m9PPz4gULB9MhjGID7wpo3gJ4bTGXm7ltNDsmOvsPduTeHp8wSW9YckBj3mljeOh4F0m2z/0JKAALRKbmLQ==", + "dev": true, + "peer": true + }, + "node_modules/@types/eslint": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/jquery": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz", + "integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==", + "dev": true, + "dependencies": { + "@types/sizzle": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.4.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.4.1.tgz", + "integrity": "sha512-1tbpb9325+gPnKK0dMm+/LMriX0vKxf6RnB0SZUqfyVkQ4fMgUSySqhxE/y8Jvs4NyF1yHzTfG9KlnkIODxPKg==", + "dev": true, + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/offscreencanvas": { + "version": "2019.7.3", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", + "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==", + "dev": true, + "peer": true + }, + "node_modules/@types/simple-peer": { + "version": "9.11.8", + "resolved": "https://registry.npmjs.org/@types/simple-peer/-/simple-peer-9.11.8.tgz", + "integrity": "sha512-rvqefdp2rvIA6wiomMgKWd2UZNPe6LM2EV5AuY3CPQJF+8TbdrL5TjYdMf0VAjGczzlkH4l1NjDkihwbj3Xodw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/sizzle": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", + "dev": true + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.1.tgz", + "integrity": "sha512-NpixInP5dm7uukMiRyiHjRKkom5RIFA4dfiHvalanD2cF0CLUuQqxfg8PtEUo9yqJI2bBhF+pcSafqnG3UBnRQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/visitor-keys": "8.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.1.tgz", + "integrity": "sha512-PpqTVT3yCA/bIgJ12czBuE3iBlM3g4inRSC5J0QOdQFAn07TYrYEQBBKgXH1lQpglup+Zy6c1fxuwTk4MTNKIw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.1.tgz", + "integrity": "sha512-8V9hriRvZQXPWU3bbiUV4Epo7EvgM6RTs+sUmxp5G//dBGy402S7Fx0W0QkB2fb4obCF8SInoUzvTYtc3bkb5w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/visitor-keys": "8.0.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.1.tgz", + "integrity": "sha512-CBFR0G0sCt0+fzfnKaciu9IBsKvEKYwN9UZ+eeogK1fYHg4Qxk1yf/wLQkLXlq8wbU2dFlgAesxt8Gi76E8RTA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.0.1", + "@typescript-eslint/types": "8.0.1", + "@typescript-eslint/typescript-estree": "8.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.1.tgz", + "integrity": "sha512-W5E+o0UfUcK5EgchLZsyVWqARmsM7v54/qEq6PY3YI5arkgmCzHiuk0zKSJJbm71V0xdRna4BGomkCTXz2/LkQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.0.1", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/abstract-level": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.4.tgz", + "integrity": "sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "catering": "^2.1.0", + "is-buffer": "^2.0.5", + "level-supports": "^4.0.0", + "level-transcoder": "^1.0.1", + "module-error": "^1.0.1", + "queue-microtask": "^1.2.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/catering": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", + "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/classic-level": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.4.1.tgz", + "integrity": "sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "abstract-level": "^1.0.2", + "catering": "^2.1.0", + "module-error": "^1.0.1", + "napi-macros": "^2.2.2", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/engine.io-client": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.0.3.tgz", + "integrity": "sha512-IH8ZhDIwiLv0d/wXVzmjfV9Y82hbJIDhCGSVUV8o1kcpDe2I6Y3bZA3ZbJy4Ls7k7IVmcy/qn4k9RKWFhUGf5w==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~8.2.3", + "xmlhttprequest-ssl": "~2.0.0", + "yeast": "0.1.2" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.7.tgz", + "integrity": "sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-promise-polyfill": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es6-promise-polyfill/-/es6-promise-polyfill-1.2.0.tgz", + "integrity": "sha512-HHb0vydCpoclpd0ySPkRXMmBw80MRt1wM4RBJBlXkux97K7gleabZdsR0gvE1nNPM9mgOZIBTzjjXiPxf4lIqQ==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.8.0.tgz", + "integrity": "sha512-K8qnZ/QJzT2dLKdZJVX6W4XOwBzutMYmt0lqUS+JdXgd+HTYFlonFgkJ8s44d/zMPPCnOOk0kMWCApCPhiOy9A==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.17.1", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.8.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/eslint-scope": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/espree": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "dev": true, + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", + "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/ismobilejs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ismobilejs/-/ismobilejs-1.1.1.tgz", + "integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/level-supports": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/level-transcoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", + "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "module-error": "^1.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "dev": true, + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "dev": true, + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mini-signals": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mini-signals/-/mini-signals-1.2.0.tgz", + "integrity": "sha512-alffqMkGCjjTSwvYMVLx+7QeJ6sTuxbXqBkP21my4iWU5+QpTQAJt3h7htA1OKm9F3BpMM0vnu72QIoiJakrLA==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/module-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/napi-macros": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", + "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/nedb-promises": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/nedb-promises/-/nedb-promises-6.2.3.tgz", + "integrity": "sha512-enq0IjNyBz9Qy9W/QPCcLGh/QORGBjXbIeZeWvIjO3OMLyAvlKT3hiJubP2BKEiFniUlR3L01o18ktqgn5jxqA==", + "dev": true, + "dependencies": { + "@seald-io/nedb": "^4.0.2" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-gyp-build": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-uri": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/parse-uri/-/parse-uri-1.0.9.tgz", + "integrity": "sha512-YZfRHHkEZa6qTfPF/xgZ1ErQYCABfud/Vcqp1Q1GNa7RKwv6Oe0YaxXfQQMnQsGdNTo3fwaT0GbVEX7dMAr7tw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true + }, + "node_modules/parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pixi-particles": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/pixi-particles/-/pixi-particles-4.3.1.tgz", + "integrity": "sha512-XSqDFgYwm/7FRCgP5I2Fc57d98qvb1ql/x4uTjdP4uXDUGgjdO8OW/2A0HVWS1CkOht/1x6dQzsM1oCJAUlaow==", + "dev": true, + "peerDependencies": { + "pixi.js": ">=4.0.0" + } + }, + "node_modules/pixi.js": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-5.3.11.tgz", + "integrity": "sha512-/9td6IHDQqG0Po5lyQ5aKDzrnEVD1SvGourI4Nqp0mvNI0Cbm74tMHLjk1V5foqGPAS9pochENr6Y3ft/2cDiQ==", + "dev": true, + "dependencies": { + "@pixi/accessibility": "5.3.11", + "@pixi/app": "5.3.11", + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/extract": "5.3.11", + "@pixi/filter-alpha": "5.3.11", + "@pixi/filter-blur": "5.3.11", + "@pixi/filter-color-matrix": "5.3.11", + "@pixi/filter-displacement": "5.3.11", + "@pixi/filter-fxaa": "5.3.11", + "@pixi/filter-noise": "5.3.11", + "@pixi/graphics": "5.3.11", + "@pixi/interaction": "5.3.11", + "@pixi/loaders": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/mesh": "5.3.11", + "@pixi/mesh-extras": "5.3.11", + "@pixi/mixin-cache-as-bitmap": "5.3.11", + "@pixi/mixin-get-child-by-name": "5.3.11", + "@pixi/mixin-get-global-position": "5.3.11", + "@pixi/particles": "5.3.11", + "@pixi/polyfill": "5.3.11", + "@pixi/prepare": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/sprite": "5.3.11", + "@pixi/sprite-animated": "5.3.11", + "@pixi/sprite-tiling": "5.3.11", + "@pixi/spritesheet": "5.3.11", + "@pixi/text": "5.3.11", + "@pixi/text-bitmap": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/pixi.js/node_modules/@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "node_modules/pixi.js/node_modules/@pixi/core": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", + "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/runner": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/ticker": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + } + }, + "node_modules/pixi.js/node_modules/@pixi/display": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.11.tgz", + "integrity": "sha512-rxUyB+RMJ7esEa11HdvzsularDGkYlRqpUn1ju9ZsRuB/Qo9JiVolywvWGSWxN/WnDGfrU2GjDpq9id10nwiag==", + "dev": true, + "dependencies": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/pixi.js/node_modules/@pixi/graphics": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/graphics/-/graphics-5.3.11.tgz", + "integrity": "sha512-HLu53LV6mRlY0uFSIM2OrCuL7xqXzeJs5d2QfmUJfKJVVZ9sbHDS+6/N/f0tXzvkRPYhSKXvcNPsNn4HmlIE9w==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/sprite": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/pixi.js/node_modules/@pixi/math": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.11.tgz", + "integrity": "sha512-GAupgFWVuOKxh8A322x8IctNgKi0/pLTJAXxmsLxcUw5PIQGgDw894HvzUriI+C0fsa9cEZHUbOCfyBKPQDLzw==", + "dev": true + }, + "node_modules/pixi.js/node_modules/@pixi/runner": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.11.tgz", + "integrity": "sha512-Mtb0rnSG+6KOIbr/48AtrILr8PZQepYwqYixVEXM6UHl+7+Z5NIx9fOByiicdjEKJvHIAYveu8yp2/L1vkF+qw==", + "dev": true + }, + "node_modules/pixi.js/node_modules/@pixi/settings": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.11.tgz", + "integrity": "sha512-ny/rjSmP+64WqxwmoY17KsFplxpuWbiMQ5SNAgkpi36z6k+utIGT05nIIhyMx3AAGSY+6dRbKmLeKyqCj8q4zw==", + "dev": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/pixi.js/node_modules/@pixi/sprite": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-5.3.11.tgz", + "integrity": "sha512-RM6Sp8kqzsBdX/hDAO25HZywe9VU4uhOronUOQ5Ve0zRe+trdBWQYfi7+5kAcvzqkp25Izc0C+e+4YCqe5OaHQ==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "node_modules/pixi.js/node_modules/@pixi/ticker": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.11.tgz", + "integrity": "sha512-J1CChbSo1SQib1zL5f+FcFJZ6wN7LnWpztJVpKKYy3ZM/v4HSh48UnrGDKn5SLwSq4K7BxvZduwMQ8m4Paz1gQ==", + "dev": true, + "dependencies": { + "@pixi/settings": "5.3.11" + } + }, + "node_modules/pixi.js/node_modules/@pixi/utils": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.11.tgz", + "integrity": "sha512-25ZSCTrfV8da28IzvLnTK0BGWB4dHpq5P9IEgFymJvVLK7sAyT+RPz18ewRbBHgALHsszDpfC+qrHp3i+VZP0Q==", + "dev": true, + "dependencies": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resource-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/resource-loader/-/resource-loader-3.0.1.tgz", + "integrity": "sha512-fBuCRbEHdLCI1eglzQhUv9Rrdcmqkydr1r6uHE2cYHvRBrcLXeSmbE/qI/urFt8rPr/IGxir3BUwM5kUK8XoyA==", + "dev": true, + "dependencies": { + "mini-signals": "^1.2.0", + "parse-uri": "^1.0.0" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/sass": { + "version": "1.77.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", + "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/socket.io-client": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.3.2.tgz", + "integrity": "sha512-2B9LqSunN60yV8F7S84CCEEcgbYNfrn7ejIInZtLZ7ppWtiX8rGZAjvdCvbnC8bqo/9RlCNOUsORLyskxSFP1g==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "backo2": "~1.0.2", + "debug": "~4.3.2", + "engine.io-client": "~6.0.1", + "parseuri": "0.0.6", + "socket.io-parser": "~4.1.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.2.tgz", + "integrity": "sha512-j3kk71QLJuyQ/hh5F/L2t1goqzdTL0gvDzuhTuNSwihfuFUrcSji0qFZmJJPtG6Rmug153eOPsUizeirf1IIog==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.0.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/tinymce": { + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-5.10.1.tgz", + "integrity": "sha512-aIsFTYiuESpoYkCgkoojpVtPwrSvYBxp4mMEGsj20CnUruLCWosywkbYHDII+j7KlQZZn3p+xK89f5gT3QyuGw==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uglify-js": { + "version": "3.19.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.2.tgz", + "integrity": "sha512-S8KA6DDI47nQXJSi2ctQ629YzwOVs+bQML6DAtvy0wgNdpi+0ySpQK0g2pxBq2xfF2z3YCscu7NNA8nXT9PlIQ==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici-types": { + "version": "6.19.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.6.tgz", + "integrity": "sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==", + "dev": true + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "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.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b58c939 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "devDependencies": { + "@eslint/js": "^9.8.0", + "@foundryvtt/foundryvtt-cli": "^1.0.3", + "@league-of-foundry-developers/foundry-vtt-types": "^9.280.0", + "@stylistic/eslint-plugin": "^2.6.1", + "eslint": "^9.8.0", + "globals": "^15.9.0", + "sass": "^1.77.8" + }, + "scripts": { + "css": "sass --watch --embed-source-map --no-error-css styles/:.styles/", + "build": "sass --embed-source-map --no-error-css styles/:.styles/", + "lint": "eslint --fix", + "lint:nofix": "eslint" + } +} diff --git a/scripts/buildCompendia.mjs b/scripts/buildCompendia.mjs new file mode 100644 index 0000000..a9f3152 --- /dev/null +++ b/scripts/buildCompendia.mjs @@ -0,0 +1,32 @@ +import { compilePack } from "@foundryvtt/foundryvtt-cli"; +import { existsSync } from "fs"; +import { join } from "path"; +import { readFile } from "fs/promises"; + +async function main() { + const system = JSON.parse(await readFile(`./system.json`, `utf-8`)); + + if (!system.packs || system.packs.length === 0) { + console.log(`No compendium packs defined`); + process.exit(0); + }; + + for (const compendium of system.packs) { + console.debug(`Packing ${compendium.label} (${compendium.name})`); + let src = join(process.cwd(), compendium.path, `_source`); + if (!existsSync(src)) { + console.warn(`${compendium.path} doesn't exist, skipping.`) + continue; + }; + await compilePack( + src, + join(process.cwd(), compendium.path), + { recursive: true }, + ); + console.debug(`Finished packing ${compendium.name}`); + }; + + console.log(`Finished packing compendia`) +}; + +main(); diff --git a/scripts/extractCompendia.mjs b/scripts/extractCompendia.mjs new file mode 100644 index 0000000..32935c9 --- /dev/null +++ b/scripts/extractCompendia.mjs @@ -0,0 +1,27 @@ +import { readFile } from "fs/promises"; +import { join } from "path"; +import { extractPack } from "@foundryvtt/foundryvtt-cli"; + +async function main() { + const system = JSON.parse(await readFile(`./system.json`, `utf-8`)); + + if (!system.packs || system.packs.length === 0) { + console.log(`No compendium packs defined`); + process.exit(0); + }; + + for (const compendium of system.packs) { + console.debug(`Unpacking ${compendium.label} (${compendium.name})`); + let src = join(process.cwd(), compendium.path, `_source`); + await extractPack( + join(process.cwd(), compendium.path), + src, + { recursive: true }, + ); + console.debug(`Finished packing ${compendium.name}`); + }; + + console.log(`Finished unpacking compendia`); +}; + +main(); diff --git a/scripts/macros/deleteInvalidActors.mjs b/scripts/macros/deleteInvalidActors.mjs new file mode 100644 index 0000000..c8f09e6 --- /dev/null +++ b/scripts/macros/deleteInvalidActors.mjs @@ -0,0 +1,4 @@ +const invalids = game.actors.invalidDocumentIds; +invalids.forEach(id => { + game.actors.getInvalid(id).delete(); +}); diff --git a/scripts/macros/deleteInvalidItems.mjs b/scripts/macros/deleteInvalidItems.mjs new file mode 100644 index 0000000..6fcbdc9 --- /dev/null +++ b/scripts/macros/deleteInvalidItems.mjs @@ -0,0 +1,4 @@ +const invalids = game.items.invalidDocumentIds; +invalids.forEach(id => { + game.items.getInvalid(id).delete(); +}); diff --git a/src/components/_index.mjs b/src/components/_index.mjs new file mode 100644 index 0000000..44133d9 --- /dev/null +++ b/src/components/_index.mjs @@ -0,0 +1,32 @@ +import { SystemIcon } from "./icon.mjs"; +import { SystemIncrementer } from "./incrementer.mjs"; +import { SystemRange } from "./range.mjs"; + +/** + * A list of element classes to register, expects all of them to have a static + * property of "elementName" that is the namespaced name that the component will + * be registered under. Any elements that are formAssociated have their name added + * to the "CONFIG.CACHE.componentListeners" array and should be listened to for + * "change" events in sheets. + */ +const components = [ + SystemIcon, + SystemIncrementer, + SystemRange, +]; + +export function registerCustomComponents() { + (CONFIG.CACHE ??= {}).componentListeners ??= []; + for (const component of components) { + if (!window.customElements.get(component.elementName)) { + console.debug(`${game.system.id} | Registering component "${component.elementName}"`); + window.customElements.define( + component.elementName, + component, + ); + if (component.formAssociated) { + CONFIG.CACHE.componentListeners.push(component.elementName); + } + }; + }; +}; diff --git a/src/components/icon.mjs b/src/components/icon.mjs new file mode 100644 index 0000000..430076d --- /dev/null +++ b/src/components/icon.mjs @@ -0,0 +1,125 @@ +import { StyledShadowElement } from "./mixins/Styles.mjs"; + +/** +Attributes: +@property {string} name - The name of the icon, takes precedence over the path +@property {string} path - The path of the icon file +*/ +export class SystemIcon extends StyledShadowElement(HTMLElement) { + static elementName = `dd-icon`; + static formAssociated = false; + + /* Stuff for the mixin to use */ + static _stylePath = ``; + + + static _cache = new Map(); + #container; + /** @type {null | string} */ + _name; + /** @type {null | string} */ + _path; + + /* Stored IDs for all of the hooks that are in this component */ + #svgHmr; + + constructor() { + super(); + // this._shadow = this.attachShadow({ mode: `open`, delegatesFocus: true }); + + this.#container = document.createElement(`div`); + this._shadow.appendChild(this.#container); + }; + + _mounted = false; + async connectedCallback() { + super.connectedCallback(); + if (this._mounted) { return } + + this._name = this.getAttribute(`name`); + this._path = this.getAttribute(`path`); + + /* + This converts all of the double-dash prefixed properties on the element to + CSS variables so that they don't all need to be provided by doing style="" + */ + for (const attrVar of this.attributes) { + if (attrVar.name?.startsWith(`var:`)) { + const prop = attrVar.name.replace(`var:`, ``); + this.style.setProperty(`--` + prop, attrVar.value); + }; + }; + + /* + Try to retrieve the icon if it isn't present, try the path then default to + the slot content, as then we can have a default per-icon usage + */ + let content; + if (this._name) { + content = await this.#getIcon(`./systems/dotdungeon/assets/${this._name}.svg`); + }; + + if (this._path && !content) { + content = await this.#getIcon(this._path); + }; + + if (content) { + this.#container.appendChild(content.cloneNode(true)); + }; + + /* + This is so that when we get an HMR event from Foundry we can appropriately + handle it using our logic to update the component and the icon cache. + */ + if (game.settings.get(game.system.id, `devMode`)) { + this.#svgHmr = Hooks.on(`${game.system.id}-hmr:svg`, (iconName, data) => { + if (this._name === iconName || this._path?.endsWith(data.path)) { + const svg = this.#parseSVG(data.content); + this.constructor._cache.set(iconName, svg); + this.#container.replaceChildren(svg.cloneNode(true)); + }; + }); + }; + + this._mounted = true; + }; + + disconnectedCallback() { + super.disconnectedCallback(); + if (!this._mounted) { return } + + Hooks.off(`${game.system.id}-hmr:svg`, this.#svgHmr); + + this._mounted = false; + }; + + async #getIcon(path) { + // Cache hit! + if (this.constructor._cache.has(path)) { + Logger.debug(`Icon ${path} cache hit`); + return this.constructor._cache.get(path); + }; + + const r = await fetch(path); + switch (r.status) { + case 200: + case 201: + break; + default: + Logger.error(`Failed to fetch icon: ${path}`); + return; + }; + + Logger.debug(`Adding icon ${path} to the cache`); + const svg = this.#parseSVG(await r.text()); + this.constructor._cache.set(path, svg); + return svg; + }; + + /** Takes an SVG string and returns it as a DOM node */ + #parseSVG(content) { + const temp = document.createElement(`div`); + temp.innerHTML = content; + return temp.querySelector(`svg`); + }; +}; diff --git a/src/components/incrementer.mjs b/src/components/incrementer.mjs new file mode 100644 index 0000000..cde1cec --- /dev/null +++ b/src/components/incrementer.mjs @@ -0,0 +1,153 @@ +import { StyledShadowElement } from "./mixins/Styles.mjs"; +import { SystemIcon } from "./icon.mjs"; + +/** +Attributes: +@property {string} name - The path to the value to update +@property {number} value - The actual value of the input +@property {number} min - The minimum value of the input +@property {number} max - The maximum value of the input +@property {number?} smallStep - The step size used for the buttons and arrow keys +@property {number?} largeStep - The step size used for the buttons + Ctrl and page up / down + +Styling: +- `--height`: Controls the height of the element + the width of the buttons (default: 1.25rem) +- `--width`: Controls the width of the number input (default 50px) +*/ +export class SystemIncrementer extends StyledShadowElement(HTMLElement) { + static elementName = `dd-incrementer`; + static formAssociated = true; + + static _stylePath = `v1/components/incrementer.scss`; + + _internals; + #input; + + _min; + _max; + _smallStep; + _largeStep; + + constructor() { + super(); + + // Form internals + this._internals = this.attachInternals(); + this._internals.role = `spinbutton`; + }; + + get form() { + return this._internals.form; + } + + get name() { + return this.getAttribute(`name`); + } + set name(value) { + this.setAttribute(`name`, value); + } + + get value() { + return this.getAttribute(`value`); + }; + set value(value) { + this.setAttribute(`value`, value); + }; + + get type() { + return `number`; + } + + connectedCallback() { + super.connectedCallback(); + this.replaceChildren(); + + // Attribute parsing / registration + const value = this.getAttribute(`value`); + this._min = parseInt(this.getAttribute(`min`) ?? 0); + this._max = parseInt(this.getAttribute(`max`) ?? 0); + this._smallStep = parseInt(this.getAttribute(`smallStep`) ?? 1); + this._largeStep = parseInt(this.getAttribute(`largeStep`) ?? 5); + + this._internals.ariaValueMin = this._min; + this._internals.ariaValueMax = this._max; + + const container = document.createElement(`div`); + + // The input that the user can see / modify + const input = document.createElement(`input`); + this.#input = input; + input.type = `number`; + input.ariaHidden = true; + input.min = this.getAttribute(`min`); + input.max = this.getAttribute(`max`); + input.addEventListener(`change`, this.#updateValue.bind(this)); + input.value = value; + + // plus button + const increment = document.createElement(SystemIcon.elementName); + increment.setAttribute(`name`, `ui/plus`); + increment.setAttribute(`var:size`, `0.75rem`); + increment.setAttribute(`var:fill`, `currentColor`); + increment.ariaHidden = true; + increment.classList.value = `increment`; + increment.addEventListener(`mousedown`, this.#increment.bind(this)); + + // minus button + const decrement = document.createElement(SystemIcon.elementName); + decrement.setAttribute(`name`, `ui/minus`); + decrement.setAttribute(`var:size`, `0.75rem`); + decrement.setAttribute(`var:fill`, `currentColor`); + decrement.ariaHidden = true; + decrement.classList.value = `decrement`; + decrement.addEventListener(`mousedown`, this.#decrement.bind(this)); + + // Construct the DOM + container.appendChild(decrement); + container.appendChild(input); + container.appendChild(increment); + this._shadow.appendChild(container); + + /* + This converts all of the namespace prefixed properties on the element to + CSS variables so that they don't all need to be provided by doing style="" + */ + for (const attrVar of this.attributes) { + if (attrVar.name?.startsWith(`var:`)) { + const prop = attrVar.name.replace(`var:`, ``); + this.style.setProperty(`--` + prop, attrVar.value); + }; + }; + }; + + #updateValue() { + let value = parseInt(this.#input.value); + if (this.getAttribute(`min`)) { + value = Math.max(this._min, value); + } + if (this.getAttribute(`max`)) { + value = Math.min(this._max, value); + } + this.#input.value = value; + this.value = value; + this.dispatchEvent(new Event(`change`, { bubbles: true })); + }; + + /** @param {Event} $e */ + #increment($e) { + $e.preventDefault(); + let value = parseInt(this.#input.value); + value += $e.ctrlKey ? this._largeStep : this._smallStep; + this.#input.value = value; + this.#updateValue(); + }; + + /** @param {Event} $e */ + #decrement($e) { + $e.preventDefault(); + let value = parseInt(this.#input.value); + value -= $e.ctrlKey ? this._largeStep : this._smallStep; + this.#input.value = value; + this.#updateValue(); + }; +}; diff --git a/src/components/mixins/Styles.mjs b/src/components/mixins/Styles.mjs new file mode 100644 index 0000000..b76dd29 --- /dev/null +++ b/src/components/mixins/Styles.mjs @@ -0,0 +1,80 @@ +/** + * @param {HTMLElement} Base + */ +export function StyledShadowElement(Base) { + return class extends Base { + /** + * The path to the CSS that is loaded + * @type {string} + */ + static _stylePath; + + /** + * The stringified CSS to use + * @type {string} + */ + static _styles; + + /** + * The HTML element of the stylesheet + * @type {HTMLStyleElement} + */ + _style; + + /** @type {ShadowRoot} */ + _shadow; + + /** + * The hook ID for this element's CSS hot reload + * @type {number} + */ + #cssHmr; + + constructor() { + super(); + + this._shadow = this.attachShadow({ mode: `open` }); + this._style = document.createElement(`style`); + this._shadow.appendChild(this._style); + }; + + #mounted = false; + connectedCallback() { + if (this.#mounted) { return } + + this._getStyles(); + + if (game.settings.get(`dotdungeon`, `devMode`)) { + this.#cssHmr = Hooks.on(`dd-hmr:css`, (data) => { + if (data.path.endsWith(this.constructor._stylePath)) { + this._style.innerHTML = data.content; + }; + }); + }; + + this.#mounted = true; + }; + + disconnectedCallback() { + if (!this.#mounted) { return } + if (this.#cssHmr != null) { + Hooks.off(`dd-hmr:css`, this.#cssHmr); + this.#cssHmr = null; + }; + this.#mounted = false; + }; + + _getStyles() { + if (this.constructor._styles) { + this._style.innerHTML = this.constructor._styles; + } else { + fetch(`./systems/dotdungeon/.styles/${this.constructor._stylePath}`) + .then(r => r.text()) + .then(t => { + this.constructor._styles = t; + this._style.innerHTML = t; + }); + } + }; + }; +}; diff --git a/src/components/range.mjs b/src/components/range.mjs new file mode 100644 index 0000000..f40b985 --- /dev/null +++ b/src/components/range.mjs @@ -0,0 +1,138 @@ +import { StyledShadowElement } from "./mixins/Styles.mjs"; + +/** +Attributes: +@property {string} name - The path to the value to update in the datamodel +@property {number} value - The actual value of the input +@property {number} max - The maximum value that this range has + +@extends {HTMLElement} +*/ +export class SystemRange + extends StyledShadowElement( + HTMLElement, + { mode: `open`, delegatesFocus: true }, + ) { + static elementName = `dd-range`; + static formAssociated = true; + + static observedAttributes = [`max`]; + + static _stylePath = `v3/components/range.css`; + + _internals; + #input; + + constructor() { + super(); + + // Form internals + this._internals = this.attachInternals(); + this._internals.role = `spinbutton`; + }; + + get form() { + return this._internals.form; + }; + + get name() { + return this.getAttribute(`name`); + }; + set name(value) { + this.setAttribute(`name`, value); + }; + + get value() { + try { + return parseInt(this.getAttribute(`value`)); + } catch { + throw new Error(`Failed to parse attribute: "value" - Make sure it's an integer`); + }; + }; + set value(value) { + this.setAttribute(`value`, value); + }; + + get max() { + try { + return parseInt(this.getAttribute(`max`)); + } catch { + throw new Error(`Failed to parse attribute: "max" - Make sure it's an integer`); + }; + }; + set max(value) { + this.setAttribute(`max`, value); + }; + + get type() { + return `number`; + }; + + connectedCallback() { + super.connectedCallback(); + + // Attribute validation + if (!this.hasAttribute(`max`)) { + throw new Error(`dotdungeon | Cannot have a range without a maximum value`); + }; + + // Keyboard accessible input for the thing + this.#input = document.createElement(`input`); + this.#input.type = `number`; + this.#input.min = 0; + this.#input.max = this.max; + this.#input.value = this.value; + this.#input.addEventListener(`change`, () => { + const inputValue = parseInt(this.#input.value); + if (inputValue === this.value) { return }; + this._updateValue.bind(this)(Math.sign(this.value - inputValue)); + this._updateValue(Math.sign(this.value - inputValue)); + }); + this._shadow.appendChild(this.#input); + + // Shadow-DOM construction + this._elements = new Array(this.max); + const container = document.createElement(`div`); + container.classList.add(`container`); + + // Creating the node for filled content + const filledContainer = document.createElement(`div`); + filledContainer.classList.add(`range-increment`, `filled`); + const filledNode = this.querySelector(`[slot="filled"]`); + if (filledNode) { filledContainer.appendChild(filledNode) }; + + const emptyContainer = document.createElement(`div`); + emptyContainer.classList.add(`range-increment`, `empty`); + const emptyNode = this.querySelector(`[slot="empty"]`); + if (emptyNode) { emptyContainer.appendChild(emptyNode) }; + + this._elements.fill(filledContainer, 0, this.value); + this._elements.fill(emptyContainer, this.value); + container.append(...this._elements.map((slot, i) => { + const node = slot.cloneNode(true); + node.setAttribute(`data-index`, i + 1); + node.addEventListener(`click`, () => { + const filled = node.classList.contains(`filled`); + this._updateValue(filled ? -1 : 1); + }); + return node; + })); + this._shadow.appendChild(container); + + /* + This converts all of the namespace prefixed properties on the element to + CSS variables so that they don't all need to be provided by doing style="" + */ + for (const attrVar of this.attributes) { + if (attrVar.name?.startsWith(`var:`)) { + const prop = attrVar.name.replace(`var:`, ``); + this.style.setProperty(`--` + prop, attrVar.value); + }; + }; + }; + + _updateValue(delta) { + this.value += delta; + this.dispatchEvent(new Event(`change`, { bubbles: true })); + }; +}; diff --git a/src/documents/ActiveEffect/_proxy.mjs b/src/documents/ActiveEffect/_proxy.mjs new file mode 100644 index 0000000..6f75118 --- /dev/null +++ b/src/documents/ActiveEffect/_proxy.mjs @@ -0,0 +1,11 @@ +import { createDocumentProxy } from "../../utils/createDocumentProxy.mjs"; + +/** + * An object of Foundry-types to in-code Document classes. + */ +const classes = {}; + +/** The class that will be used if no type-specific class is defined */ +const defaultClass = ActiveEffect; + +export const ActiveEffectProxy = createDocumentProxy(defaultClass, classes); diff --git a/src/documents/Actor/Player/Document.mjs b/src/documents/Actor/Player/Document.mjs new file mode 100644 index 0000000..287e30f --- /dev/null +++ b/src/documents/Actor/Player/Document.mjs @@ -0,0 +1,5 @@ +export class Player extends Actor { + getRollData() { + return this.system; + }; +}; diff --git a/src/documents/Actor/Player/Model.mjs b/src/documents/Actor/Player/Model.mjs new file mode 100644 index 0000000..b850ff3 --- /dev/null +++ b/src/documents/Actor/Player/Model.mjs @@ -0,0 +1,6 @@ +export class PlayerData extends foundry.abstract.TypeDataModel { + static defineSchema() { + const fields = foundry.data.fields; + return {}; + }; +}; diff --git a/src/documents/Actor/_proxy.mjs b/src/documents/Actor/_proxy.mjs new file mode 100644 index 0000000..6e7eb18 --- /dev/null +++ b/src/documents/Actor/_proxy.mjs @@ -0,0 +1,11 @@ +import { createDocumentProxy } from "../../utils/createDocumentProxy.mjs"; + +/** + * An object of Foundry-types to in-code Document classes. + */ +const classes = {}; + +/** The class that will be used if no type-specific class is defined */ +const defaultClass = Actor; + +export const ActorProxy = createDocumentProxy(defaultClass, classes); diff --git a/src/documents/ChatMessage/_proxy.mjs b/src/documents/ChatMessage/_proxy.mjs new file mode 100644 index 0000000..44b44c7 --- /dev/null +++ b/src/documents/ChatMessage/_proxy.mjs @@ -0,0 +1,11 @@ +import { createDocumentProxy } from "../../utils/createDocumentProxy.mjs"; + +/** + * An object of Foundry-types to in-code Document classes. + */ +const classes = {}; + +/** The class that will be used if no type-specific class is defined */ +const defaultClass = ChatMessage; + +export const ChatMessageProxy = createDocumentProxy(defaultClass, classes); diff --git a/src/documents/Item/_proxy.mjs b/src/documents/Item/_proxy.mjs new file mode 100644 index 0000000..8f01bc6 --- /dev/null +++ b/src/documents/Item/_proxy.mjs @@ -0,0 +1,11 @@ +import { createDocumentProxy } from "../../utils/createDocumentProxy.mjs"; + +/** + * An object of Foundry-types to in-code Document classes. + */ +const classes = {}; + +/** The class that will be used if no type-specific class is defined */ +const defaultClass = Item; + +export const ItemProxy = createDocumentProxy(defaultClass, classes); diff --git a/src/helpers/_index.mjs b/src/helpers/_index.mjs new file mode 100644 index 0000000..8d5ed41 --- /dev/null +++ b/src/helpers/_index.mjs @@ -0,0 +1,18 @@ +import { handlebarsLocalizer, localizer } from "../utils/localizer.mjs"; +import { options } from "./options.mjs"; + +export function registerHandlebarsHelpers() { + const helperPrefix = game.system.id; + + return { + // MARK: Complex helpers + [`${helperPrefix}-i18n`]: handlebarsLocalizer, + [`${helperPrefix}-options`]: options, + + // MARK: Simple helpers + [`${helperPrefix}-stringify`]: v => JSON.stringify(v, null, ` `), + [`${helperPrefix}-empty`]: v => v.length == 0, + [`${helperPrefix}-set-has`]: (s, k) => s.has(k), + [`${helperPrefix}-empty-state`]: (v) => v ?? localizer(`${game.system.id}.common.empty`), + }; +}; diff --git a/src/helpers/options.mjs b/src/helpers/options.mjs new file mode 100644 index 0000000..b0df8d0 --- /dev/null +++ b/src/helpers/options.mjs @@ -0,0 +1,35 @@ +import { localizer } from "../utils/localizer.mjs"; + +/** + * @typedef {object} Option + * @property {string} [label] + * @property {string|number} value + * @property {boolean} [disabled] + */ + +/** + * @param {string | number} selected + * @param {Array`, + ); + }; + return htmlOptions.join(`\n`); +}; diff --git a/src/hooks/hotReload.mjs b/src/hooks/hotReload.mjs new file mode 100644 index 0000000..0320dd8 --- /dev/null +++ b/src/hooks/hotReload.mjs @@ -0,0 +1,18 @@ +const loaders = { + svg(data) { + const iconName = data.path.split(`/`).slice(-1)[0].slice(0, -4); + Logger.debug(`hot-reloading icon: ${iconName}`); + Hooks.call(`${game.system.id}-hmr:svg`, iconName, data); + }, + js() {window.location.reload()}, + mjs() {window.location.reload()}, + css(data) { + Logger.debug(`Hot-reloading CSS: ${data.path}`); + Hooks.call(`${game.system.id}-hmr:css`, data); + }, +}; + +Hooks.on(`hotReload`, async (data) => { + if (!loaders[data.extension]) {return} + return loaders[data.extension](data); +}); diff --git a/src/main.mjs b/src/main.mjs new file mode 100644 index 0000000..3e833ff --- /dev/null +++ b/src/main.mjs @@ -0,0 +1,48 @@ +// Document Imports +import { ActiveEffectProxy } from "./documents/ActiveEffect/_proxy.mjs"; +import { ActorProxy } from "./documents/Actor/_proxy.mjs"; +import { ChatMessageProxy } from "./documents/ChatMessage/_proxy.mjs"; +import { ItemProxy } from "./documents/Item/_proxy.mjs"; + + +// Misc Imports +import "./utils/logger.mjs"; +import { registerCustomComponents } from "./components/_index.mjs"; +import { registerHandlebarsHelpers } from "./helpers/_index.mjs"; +import { registerSettings } from "./settings/_index.mjs"; +import { registerSheets } from "./sheets/_index.mjs"; + +// MARK: init hook +Hooks.once(`init`, () => { + Logger.info(`Initializing`); + CONFIG.ActiveEffect.legacyTransferral = false; + + registerSettings(); + + // Update document classes + CONFIG.Actor.documentClass = ActorProxy; + CONFIG.Item.documentClass = ItemProxy; + CONFIG.ActiveEffect.documentClass = ActiveEffectProxy; + CONFIG.ChatMessage.documentClass = ChatMessageProxy; + registerSheets(); + + registerHandlebarsHelpers(); + + registerCustomComponents(); +}); + + +// MARK: ready hook +Hooks.once( `ready`, () => { + Logger.info(`Ready`); + + let defaultTab = game.settings.get(game.system.id, `defaultTab`); + if (defaultTab) { + if (!ui.sidebar?.tabs?.[defaultTab]) { + Logger.error(`Couldn't find a sidebar tab with ID:`, defaultTab); + } else { + Logger.debug(`Switching sidebar tab to:`, defaultTab); + ui.sidebar.tabs[defaultTab].activate(); + }; + }; +}); diff --git a/src/settings/_index.mjs b/src/settings/_index.mjs new file mode 100644 index 0000000..0f65987 --- /dev/null +++ b/src/settings/_index.mjs @@ -0,0 +1,10 @@ +import { registerClientSettings } from "./client_settings.mjs"; +import { registerDevSettings } from "./dev_settings.mjs"; +import { registerWorldSettings } from "./world_settings.mjs"; + +export function registerSettings() { + Logger.debug(`Registering settings`); + registerClientSettings(); + registerWorldSettings(); + registerDevSettings(); +}; diff --git a/src/settings/client_settings.mjs b/src/settings/client_settings.mjs new file mode 100644 index 0000000..7dd2708 --- /dev/null +++ b/src/settings/client_settings.mjs @@ -0,0 +1,2 @@ +export function registerClientSettings() { +}; diff --git a/src/settings/dev_settings.mjs b/src/settings/dev_settings.mjs new file mode 100644 index 0000000..229775c --- /dev/null +++ b/src/settings/dev_settings.mjs @@ -0,0 +1,16 @@ +export function registerDevSettings() { + game.settings.register(game.system.id, `devMode`, { + scope: `client`, + type: Boolean, + config: false, + default: false, + requiresReload: true, + }); + + game.settings.register(game.system.id, `defaultTab`, { + scope: `client`, + type: String, + config: false, + requiresReload: false, + }); +}; diff --git a/src/settings/world_settings.mjs b/src/settings/world_settings.mjs new file mode 100644 index 0000000..ab835d9 --- /dev/null +++ b/src/settings/world_settings.mjs @@ -0,0 +1 @@ +export function registerWorldSettings() {}; diff --git a/src/sheets/Player/v1.mjs b/src/sheets/Player/v1.mjs new file mode 100644 index 0000000..5f48032 --- /dev/null +++ b/src/sheets/Player/v1.mjs @@ -0,0 +1,12 @@ +export class PlayerSheetv1 extends ActorSheet { + static get defaultOptions() { + let opts = foundry.utils.mergeObject( + super.defaultOptions, + { + template: `systems/${game.system.id}/templates/Player/v1/main.hbs`, + }, + ); + opts.classes.push(`style-v1`); + return opts; + }; +} diff --git a/src/sheets/_index.mjs b/src/sheets/_index.mjs new file mode 100644 index 0000000..073a018 --- /dev/null +++ b/src/sheets/_index.mjs @@ -0,0 +1,11 @@ +import { PlayerSheetv1 } from "./Player/v1.mjs"; + +export function registerSheets() { + Logger.debug(`Registering sheets`); + + Actors.registerSheet(game.system.id, PlayerSheetv1, { + makeDefault: true, + types: [`player`], + label: `Hello`, + }); +}; diff --git a/src/utils/DialogManager.mjs b/src/utils/DialogManager.mjs new file mode 100644 index 0000000..430a670 --- /dev/null +++ b/src/utils/DialogManager.mjs @@ -0,0 +1,82 @@ +import { localizer } from "./localizer.mjs"; + +/** + * A utility class that allows managing Dialogs that are created for various + * purposes such as deleting items, help popups, etc. This is a singleton class + * that upon instantiating after the first time will just return the first instance + */ +export class DialogManager { + + /** @type {Map} */ + static #dialogs = new Map(); + + /** + * Focuses a dialog if it already exists, or creates a new one and renders it. + * + * @param {string} dialogId The ID to associate with the dialog, should be unique + * @param {object} data The data to pass to the Dialog constructor + * @param {DialogOptions} opts The options to pass to the Dialog constructor + * @returns {Dialog} The Dialog instance + */ + static async createOrFocus(dialogId, data, opts = {}) { + if (DialogManager.#dialogs.has(dialogId)) { + const dialog = DialogManager.#dialogs.get(dialogId); + dialog.bringToTop(); + return dialog; + }; + + /* + This makes sure that if I provide a close function as a part of the data, + that the dialog still gets removed from the set once it's closed, otherwise + it could lead to dangling references that I don't care to keep. Or if I don't + provide the close function, it just sets the function as there isn't anything + extra that's needed to be called. + */ + if (data?.close) { + const provided = data.close; + data.close = () => { + DialogManager.#dialogs.delete(dialogId); + provided(); + }; + } else { + data.close = () => DialogManager.#dialogs.delete(dialogId); + }; + + // Create the Dialog with the modified data + const dialog = new Dialog(data, opts); + DialogManager.#dialogs.set(dialogId, dialog); + dialog.render(true); + return dialog; + }; + + /** + * Closes a dialog if it is rendered + * + * @param {string} dialogId The ID of the dialog to close + */ + static async close(dialogId) { + const dialog = DialogManager.#dialogs.get(dialogId); + dialog?.close(); + }; + + static async helpDialog( + helpId, + helpContent, + helpTitle = `dotdungeon.common.help`, + localizationData = {}, + ) { + DialogManager.createOrFocus( + helpId, + { + title: localizer(helpTitle, localizationData), + content: localizer(helpContent, localizationData), + buttons: {}, + }, + { resizable: true }, + ); + }; + + static get size() { + return DialogManager.#dialogs.size; + } +}; diff --git a/src/utils/createDocumentProxy.mjs b/src/utils/createDocumentProxy.mjs new file mode 100644 index 0000000..08af7e6 --- /dev/null +++ b/src/utils/createDocumentProxy.mjs @@ -0,0 +1,39 @@ +export function createDocumentProxy(defaultClass, classes) { + // eslint-disable-next-line func-names + return new Proxy(function () {}, { + construct(_target, args) { + const [data] = args; + + if (!classes[data.type]) { + return new defaultClass(...args); + } + + return new classes[data.type](...args); + }, + get(_target, prop, _receiver) { + + if ([`create`, `createDocuments`].includes(prop)) { + return (data, options) => { + if (data.constructor === Array) { + return data.map(i => this.constructor.create(i, options)); + } + + if (!classes[data.type]) { + return defaultClass.create(data, options); + } + + return classes[data.type].create(data, options); + }; + }; + + if (prop == Symbol.hasInstance) { + return (instance) => { + if (instance instanceof defaultClass) {return true} + return Object.values(classes).some(i => instance instanceof i); + }; + }; + + return defaultClass[prop]; + }, + }); +}; diff --git a/src/utils/localizer.mjs b/src/utils/localizer.mjs new file mode 100644 index 0000000..916e54d --- /dev/null +++ b/src/utils/localizer.mjs @@ -0,0 +1,45 @@ +/** A handlebars helper that utilizes the recursive localizer */ +export function handlebarsLocalizer(key, ...args) { + let data = args[0]; + if (args.length === 1) { data = args[0].hash } + if (key instanceof Handlebars.SafeString) {key = key.toString()} + const localized = localizer(key, data); + return localized; +}; + +/** + * A localizer that allows recursively localizing strings so that localized strings + * that want to use other localized strings can. + * + * @param {string} key The localization key to retrieve + * @param {object?} args The arguments provided to the localizer for replacement + * @param {number?} depth The current depth of the localizer + * @returns The localized string + */ +export function localizer(key, args = {}, depth = 0) { + /** @type {string} */ + let localized = game.i18n.format(key, args); + const subkeys = localized.matchAll(/@(?[a-zA-Z.]+)/gm); + + // Short-cut to help prevent infinite recursion + if (depth > 10) { + return localized; + }; + + /* + Helps prevent localization on the same key so that we aren't doing excess work. + */ + const localizedSubkeys = new Map(); + for (const match of subkeys) { + const subkey = match.groups.key; + if (localizedSubkeys.has(subkey)) {continue} + localizedSubkeys.set(subkey, localizer(subkey, args, depth + 1)); + }; + + return localized.replace( + /@(?[a-zA-Z.]+)/gm, + (_fullMatch, subkey) => { + return localizedSubkeys.get(subkey); + }, + ); +}; diff --git a/src/utils/logger.mjs b/src/utils/logger.mjs new file mode 100644 index 0000000..5f9b37e --- /dev/null +++ b/src/utils/logger.mjs @@ -0,0 +1,22 @@ +const augmentedProps = new Set([ + `debug`, + `log`, + `error`, + `info`, + `warn`, + `group`, + `time`, + `timeEnd`, + `timeLog`, + `timeStamp`, +]); + +/** @type {Console} */ +globalThis.Logger = new Proxy(console, { + get(target, prop, _receiver) { + if (augmentedProps.has(prop)) { + return (...args) => target[prop](game.system.id, `|`, ...args); + }; + return target[prop]; + }, +}); diff --git a/styles/root.scss b/styles/root.scss new file mode 100644 index 0000000..e69de29 diff --git a/styles/v1/components/common.scss b/styles/v1/components/common.scss new file mode 100644 index 0000000..59f812d --- /dev/null +++ b/styles/v1/components/common.scss @@ -0,0 +1,7 @@ +// Disclaimer: This CSS is used by a custom web component and is scoped to JUST +// the corresponding web component. This should only be imported by web component +// style files. + +:host { + display: inline-block; +} diff --git a/styles/v1/components/icon.scss b/styles/v1/components/icon.scss new file mode 100644 index 0000000..59a68a9 --- /dev/null +++ b/styles/v1/components/icon.scss @@ -0,0 +1,23 @@ +/* +Disclaimer: This CSS is used by a custom web component and is scoped to JUST +the corresponding web component. Importing this into other files is forbidden +*/ + +$default-size: 1rem; + +@use "./common.scss"; + +div { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; +} + +svg { + width: var(--size, $default-size); + height: var(--size, $default-size); + fill: var(--fill); + stroke: var(--stroke); +} \ No newline at end of file diff --git a/styles/v1/components/incrementer.scss b/styles/v1/components/incrementer.scss new file mode 100644 index 0000000..abe9478 --- /dev/null +++ b/styles/v1/components/incrementer.scss @@ -0,0 +1,63 @@ +/* +Disclaimer: This CSS is used by a custom web component and is scoped to JUST +the corresponding web component. Importing this into other files is forbidden +*/ + +$default-border-radius: 4px; +$default-height: 1.5rem; + +@use "../mixins/material"; +@use "./common.scss"; + +div { + display: grid; + grid-template-columns: var(--height, $default-height) var(--width, 50px) var(--height, $default-height); + grid-template-rows: var(--height, 1fr); + border-radius: var(--border-radius, $default-border-radius); + @include material.elevate(2); + + &:hover { + @include material.elevate(4); + } + + &:focus-within { + @include material.elevate(6); + } +} + +span, input { + border: none; + outline: none; + background: none; + color: inherit; +} + +input { + font-family: var(--font-family, inherit); + text-align: center; + font-size: var(--font-size, inherit); + padding: 2px 4px; + + &::-webkit-inner-spin-button, &::-webkit-outer-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0 + } +} + +.increment, .decrement { + aspect-ratio: 1 / 1; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.increment { + border-radius: 0 var(--border-radius, $default-border-radius) var(--border-radius, 4px) 0; +} +.decrement { + border-radius: var(--border-radius, $default-border-radius) 0 0 var(--border-radius, $default-border-radius); +} diff --git a/styles/v1/index.scss b/styles/v1/index.scss new file mode 100644 index 0000000..97cd162 --- /dev/null +++ b/styles/v1/index.scss @@ -0,0 +1 @@ +// Styling version 1 \ No newline at end of file diff --git a/system.json b/system.json new file mode 100644 index 0000000..9b6affe --- /dev/null +++ b/system.json @@ -0,0 +1,35 @@ +{ + "id": "fst", + "title": "Foundry System Template", + "description": "", + "version": "0.0.0", + "download": "", + "manifest": "", + "url": "", + "compatibility": { + "minimum": 12, + "verified": 12, + "maximum": 12 + }, + "authors": [], + "esmodules": [ + "src/main.mjs" + ], + "styles": [], + "packs": [], + "documentTypes": { + "Actor": { + "player": { + "htmlFields": [], + "filePathFields": {} + } + }, + "Item": {} + }, + "flags": { + "hotReload": { + "extensions": ["css", "hbs", "json", "js", "mjs", "svg"], + "paths": ["templates", "langs", ".styles", "module", "assets"] + } + } +} diff --git a/templates/Player/v1/main.hbs b/templates/Player/v1/main.hbs new file mode 100644 index 0000000..5720ba4 --- /dev/null +++ b/templates/Player/v1/main.hbs @@ -0,0 +1,3 @@ +
+ Hello Foundry +
\ No newline at end of file