From 3d778b8acac44e6035e8281fcf3cfb200ee5810b Mon Sep 17 00:00:00 2001 From: Haxxer Date: Sat, 18 Jun 2022 19:27:27 +0100 Subject: [PATCH 01/93] Blank slate, reworking entire module --- .eslintignore | 9 + .eslintrc | 40 + .gitignore | 3 +- languages/en.json | 216 +- module.json | 12 +- package-lock.json | 15504 ++++++++++++++-- package.json | 29 + rollup.config.mjs | 80 + scripts/api.js | 2450 --- scripts/chathandler.js | 405 - scripts/constants.js | 47 - scripts/flagManager.js | 128 - .../formapplications/drop-currency-dialog.js | 118 - scripts/formapplications/drop-item-dialog.js | 75 - scripts/formapplications/item-pile-config.js | 254 - .../item-pile-currencies-editor.js | 97 - .../item-pile-filters-editor.js | 91 - .../formapplications/item-pile-inventory.js | 625 - .../item-pile-similarities-editor.js | 65 - scripts/formapplications/trade-dialogs.js | 249 - scripts/formapplications/trading-app.js | 489 - scripts/hooks.js | 65 - scripts/hotkeys.js | 134 - scripts/lib/lib.js | 758 - scripts/libwrapper.js | 33 - scripts/module.js | 282 - scripts/settings.js | 366 - scripts/socket.js | 212 - scripts/systems.js | 36 - scripts/systems/d35e.js | 42 - scripts/systems/dnd5e.js | 51 - scripts/systems/pf1.js | 42 - scripts/trade-api.js | 464 - src/api.js | 170 + src/applications/components/Dialog.svelte | 40 + src/applications/components/Tabs.svelte | 67 + src/applications/settings/Setting.svelte | 113 + .../settings/SettingButton.svelte | 83 + src/applications/settings/settings-app.js | 50 + .../settings/settings-shell.svelte | 189 + src/constants.js | 296 + src/lib/lib.js | 39 + src/module.js | 10 + src/settings.js | 17 + src/systems.js | 51 + src/systems/d35e.js | 53 + src/systems/dnd5e.js | 67 + {scripts => src}/systems/ds4.js | 43 +- src/systems/pf1.js | 53 + {scripts => src}/systems/pf2e.js | 5 +- {scripts => src}/systems/sfrpg.js | 0 {scripts => src}/systems/splittermond.js | 37 +- {scripts => src}/systems/swade.js | 19 +- {scripts => src}/systems/tormenta20.js | 43 +- {scripts => src}/systems/wfrp4e.js | 5 +- styles/module.css | 403 - styles/module.css.map | 1 - styles/module.scss | 522 - templates/currencies-editor.html | 51 - templates/drop-currency-dialog.html | 41 - templates/drop-item-dialog.html | 34 - templates/filter-editor.html | 40 - templates/item-pile-config.html | 274 - templates/item-pile-inventory.html | 161 - templates/loot-chat-message.html | 39 - templates/similarities-editor.html | 36 - templates/trade-complete-chat-message.html | 94 - templates/trade-dialog.html | 151 - templates/trade-started-chat-message.html | 17 - templates/trading-app-spectate.html | 157 - templates/trading-app.html | 208 - 71 files changed, 16137 insertions(+), 11013 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc create mode 100644 rollup.config.mjs delete mode 100644 scripts/api.js delete mode 100644 scripts/chathandler.js delete mode 100644 scripts/constants.js delete mode 100644 scripts/flagManager.js delete mode 100644 scripts/formapplications/drop-currency-dialog.js delete mode 100644 scripts/formapplications/drop-item-dialog.js delete mode 100644 scripts/formapplications/item-pile-config.js delete mode 100644 scripts/formapplications/item-pile-currencies-editor.js delete mode 100644 scripts/formapplications/item-pile-filters-editor.js delete mode 100644 scripts/formapplications/item-pile-inventory.js delete mode 100644 scripts/formapplications/item-pile-similarities-editor.js delete mode 100644 scripts/formapplications/trade-dialogs.js delete mode 100644 scripts/formapplications/trading-app.js delete mode 100644 scripts/hooks.js delete mode 100644 scripts/hotkeys.js delete mode 100644 scripts/lib/lib.js delete mode 100644 scripts/libwrapper.js delete mode 100644 scripts/module.js delete mode 100644 scripts/settings.js delete mode 100644 scripts/socket.js delete mode 100644 scripts/systems.js delete mode 100644 scripts/systems/d35e.js delete mode 100644 scripts/systems/dnd5e.js delete mode 100644 scripts/systems/pf1.js delete mode 100644 scripts/trade-api.js create mode 100644 src/api.js create mode 100644 src/applications/components/Dialog.svelte create mode 100644 src/applications/components/Tabs.svelte create mode 100644 src/applications/settings/Setting.svelte create mode 100644 src/applications/settings/SettingButton.svelte create mode 100644 src/applications/settings/settings-app.js create mode 100644 src/applications/settings/settings-shell.svelte create mode 100644 src/constants.js create mode 100644 src/lib/lib.js create mode 100644 src/module.js create mode 100644 src/settings.js create mode 100644 src/systems.js create mode 100644 src/systems/d35e.js create mode 100644 src/systems/dnd5e.js rename {scripts => src}/systems/ds4.js (53%) create mode 100644 src/systems/pf1.js rename {scripts => src}/systems/pf2e.js (91%) rename {scripts => src}/systems/sfrpg.js (100%) rename {scripts => src}/systems/splittermond.js (61%) rename {scripts => src}/systems/swade.js (73%) rename {scripts => src}/systems/tormenta20.js (52%) rename {scripts => src}/systems/wfrp4e.js (91%) delete mode 100644 styles/module.css delete mode 100644 styles/module.css.map delete mode 100644 styles/module.scss delete mode 100644 templates/currencies-editor.html delete mode 100644 templates/drop-currency-dialog.html delete mode 100644 templates/drop-item-dialog.html delete mode 100644 templates/filter-editor.html delete mode 100644 templates/item-pile-config.html delete mode 100644 templates/item-pile-inventory.html delete mode 100644 templates/loot-chat-message.html delete mode 100644 templates/similarities-editor.html delete mode 100644 templates/trade-complete-chat-message.html delete mode 100644 templates/trade-dialog.html delete mode 100644 templates/trade-started-chat-message.html delete mode 100644 templates/trading-app-spectate.html delete mode 100644 templates/trading-app.html diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..2489a350 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,9 @@ +.github/ +dist/ +docs/ +external/ +lang/ +scripts/ +styles/ +templates/ +src/**/*.svelte \ No newline at end of file diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..613a3c84 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,40 @@ +/** + * Loads https://github.com/typhonjs-node-config/typhonjs-config-eslint/blob/master/3.0/basic/es8/server/node/.eslintrc + * Loads https://github.com/typhonjs-fvtt/eslint-config-foundry.js/blob/main/0.8.0.js + * + * NPM: https://www.npmjs.com/package/typhonjs-config-eslint + * NPM: https://www.npmjs.com/package/@typhonjs-fvtt/eslint-config-foundry.js + */ +{ + // ESLint configs are prone to particular choices, so if the first config below doesn't work for you then replace + // with one that you do prefer. The second config defines globals defined in `foundry.js` for use w/ `no-shadow`. + "extends": [ + "@typhonjs-config/eslint-config/esm/2022/browser", + "@typhonjs-fvtt/eslint-config-foundry.js" + ], + + // Defines / overrides a few more environment parameters not provided in the configs above. + "env": { + "jquery": true + }, + + // Prevents overwriting any built in globals particularly from `@typhonjs-fvtt/eslint-config-foundry.js`, but also + // node & browser environments. `event / window.event` shadowing is allowed due to being a common variable name and + // an uncommonly used browser feature. + // + // Note: if you are using Typescript you must use `@typescript-eslint/no-shadow` + "rules": { + "no-shadow": ["error", { + "builtinGlobals": true, + "hoist": "all", + "allow": [ + "document", + "event", + "name", + "parent", + "status", + "top" + ] + }] + } +} diff --git a/.gitignore b/.gitignore index a2801871..1d6df9c6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea/* -node_modules/* \ No newline at end of file +node_modules/* +dist/* \ No newline at end of file diff --git a/languages/en.json b/languages/en.json index a597289c..a0f4c839 100644 --- a/languages/en.json +++ b/languages/en.json @@ -122,98 +122,110 @@ }, "Cancel": "Cancel" }, - "CurrenciesEditor": { - "Title": "Currencies Editor", - "Explanation": "Here you can define which currencies on characters that can be picked up from item piles, such as currencies. In D&D5e, currencies exist on actors on the attribute path \"actor.data.data.currency.gp\", so you'd add your own with the name \"Gold Coins\" and attribute path \"data.currency.gp\".", - "Name": "Currency name", - "Path": "Currency path", - "Icon": "Currency icon", - "AddNew": "Add new currency", - "Submit": "Submit currencies" - }, - "FilterEditor": { - "Title": "Item Filters Editor", - "Explanation": "Here you can define multiple types of filters that will exclude certain types of items. Based on the attribute path given, the item pile could find the \"type\" of an item and based on the filters, it hides those items in the item pile inventory UI.", - "Filters": "Filters", - "Path": "Attribute path", - "AddNew": "Add new filter", - "Submit": "Submit filters" - }, - "SimilaritiesEditor": { - "Title": "Item Similarities Editor", - "Explanation_P1": "Here you can define multiple types of identifiers that helps Item Piles differentiate between similar items. In almost every system, items can be differentiated with their \"name\" and \"type\".", - "Explanation_P2": "But in some cases, such as in Pathfinder 2nd Edition, temporary items may share those with permanent items. So by adding \"data.temporary.value\", you temporary items are considered \"unique\".", - "Path": "Attribute path", - "AddNew": "Add new attribute path", - "Submit": "Submit item similarities" - }, - "Defaults": { - "Title": "Item Pile Configuration", - "Configure": "Item Pile", - "Update": "Update Item Pile", - "Main": { - "Title": "Main Settings", - "EnabledPile": "Enabled", - "EnabledPileExplanation": "Whether this should act as an item pile.", - "InspectItems": "Enable Item Inspect", - "InspectItemsExplanation": "Clicking item names will open the item's sheet.", - "Distance": "Interaction Distance", - "GridUnits": "Grid Units (leave empty for infinite)", - "Macro": "On Interact Macro", - "MacroExplanation": "Name of macro to execute when this pile is interacted with.", - "MacroPlaceholder": "Insert macro name", - "DeleteWhenEmpty": "Delete when empty", - "DeleteWhenEmptyExplanation": "Causes this item pile to auto-delete itself once it's empty.", - "DeleteWhenEmptyDefault": "Default module setting", - "DeleteWhenEmptyYes": "Yes, delete when empty", - "DeleteWhenEmptyNo": "No, don't delete when empty", - "OverrideCurrencies": "Override Currencies", - "OverrideCurrenciesExplanation": "Configure if this pile should be able to transfer other currencies than the default.", - "ConfigureOverrideCurrencies": "Configure Override Currencies", - "OverrideItemFilters": "Override Item Filters", - "OverrideItemFiltersExplanation": "Configure if this pile should be able to transfer other types items than the default.", - "ConfigureOverrideItemFilters": "Configure Override Item Filters" - }, - "Other": { - "Title": "Other Settings" - }, - "SingleItem": { - "Title": "Single Item Settings", - "DisplayOneContainerWarning": "Warning! You have both \"Display Single Item Image\" and \"Is Container\" enabled. In this case, the container images takes priority.", - "DisplayOne": "Display Single Item Image", - "DisplayOneExplanation": "If the pile is made up of a single item, this sets the pile token's image to be the image of the item.", - "OverrideScale": "Override single item token scale", - "Scale": "Single item token scale", - "ItemName": "Use Item Name", - "ItemNameExplanation": "Causes the item pile to be named after the single item it contains." - }, - "Container": { - "Title": "Container Settings", - "IsContainer": "Is Container", - "Locked": "Is Locked", - "Closed": "Is Closed", - "ClosedImagePath": "Closed Image Path", - "EmptyImagePath": "Empty Image Path", - "OpenedImagePath": "Opened Image Path", - "LockedImagePath": "Locked Image Path", - "CloseSoundPath": "Closing Sound Path", - "OpenSoundPath": "Opening Sound Path", - "LockedSoundPath": "Locked Sound Path" - }, - "Sharing": { - "Title": "Sharing Settings", - "ShareItemsEnabled": "Sharing Enabled: Items", - "ShareItemsEnabledExplanation": "When this is enabled, players can only take their share of the quantities of items. Disabled means they can take as much as they want.", - "ShareCurrenciesEnabled": "Sharing Enabled: Currencies", - "ShareCurrenciesEnabledExplanation": "When this is enabled, players can only take their share of the quantities of currencies. Disabled means they can take as much as they want.", - "TakeAllEnabled": "Enable Take All Button", - "TakeAllEnabledExplanation": "Enables the \"Take All\" button when looting this item pile. Requires both of the above sharing settings to be disabled.", - "SplitAllEnabled": "Enable Split With Players Button", - "SplitAllEnabledExplanation": "Enables the \"Split [number] ways\" button when looting this item pile. Pressing this button makes all players (or only active players, see below) receive their share of the item pile.", - "InactivePlayers": "Split Only With Active Players", - "InactivePlayersExplanation": "Only players who are active when this item pile is looted will be given their share of the pile.", - "ResetSharingData": "Reset Sharing Data", - "ResetSharingDataExplanation": "If the Item Pile's content was manually changed while people were looting it, the sharing data may become out of sync with the players' actual shares. Pressing this button will reset everyone's share in this pile." + "Applications": { + "Settings": { + "Title": "Item Piles Module Configuration", + "Local": "Local Settings", + "Module": "Module Settings", + "System": "System Specific Settings", + "Donate": "If you like this module, consider donating to keep it running!", + "MoreToCome": "And with more configuration options to come...", + "Request": "Request new features here.", + "Submit": "Submit Settings" + }, + "CurrenciesEditor": { + "Title": "Currencies Editor", + "Explanation": "Here you can define which currencies on characters that can be picked up from item piles, such as currencies. In D&D5e, currencies exist on actors on the attribute path \"actor.data.data.currency.gp\", so you'd add your own with the name \"Gold Coins\" and attribute path \"data.currency.gp\".", + "Name": "Currency name", + "Path": "Currency path", + "Icon": "Currency icon", + "AddNew": "Add new currency", + "Submit": "Submit currencies" + }, + "FilterEditor": { + "Title": "Item Filters Editor", + "Explanation": "Here you can define multiple types of filters that will exclude certain types of items. Based on the attribute path given, the item pile could find the \"type\" of an item and based on the filters, it hides those items in the item pile inventory UI.", + "Filters": "Filters", + "Path": "Attribute path", + "AddNew": "Add new filter", + "Submit": "Submit filters" + }, + "SimilaritiesEditor": { + "Title": "Item Similarities Editor", + "Explanation_P1": "Here you can define multiple types of identifiers that helps Item Piles differentiate between similar items. In almost every system, items can be differentiated with their \"name\" and \"type\".", + "Explanation_P2": "But in some cases, such as in Pathfinder 2nd Edition, temporary items may share those with permanent items. So by adding \"data.temporary.value\", you temporary items are considered \"unique\".", + "Path": "Attribute path", + "AddNew": "Add new attribute path", + "Submit": "Submit item similarities" + }, + "Defaults": { + "Title": "Item Pile Configuration", + "Configure": "Item Pile", + "Update": "Update Item Pile", + "Main": { + "Title": "Main Settings", + "EnabledPile": "Enabled", + "EnabledPileExplanation": "Whether this should act as an item pile.", + "InspectItems": "Enable Item Inspect", + "InspectItemsExplanation": "Clicking item names will open the item's sheet.", + "Distance": "Interaction Distance", + "GridUnits": "Grid Units (leave empty for infinite)", + "Macro": "On Interact Macro", + "MacroExplanation": "Name of macro to execute when this pile is interacted with.", + "MacroPlaceholder": "Insert macro name", + "DeleteWhenEmpty": "Delete when empty", + "DeleteWhenEmptyExplanation": "Causes this item pile to auto-delete itself once it's empty.", + "DeleteWhenEmptyDefault": "Default module setting", + "DeleteWhenEmptyYes": "Yes, delete when empty", + "DeleteWhenEmptyNo": "No, don't delete when empty", + "OverrideCurrencies": "Override Currencies", + "OverrideCurrenciesExplanation": "Configure if this pile should be able to transfer other currencies than the default.", + "ConfigureOverrideCurrencies": "Configure Override Currencies", + "OverrideItemFilters": "Override Item Filters", + "OverrideItemFiltersExplanation": "Configure if this pile should be able to transfer other types items than the default.", + "ConfigureOverrideItemFilters": "Configure Override Item Filters" + }, + "Other": { + "Title": "Other Settings" + }, + "SingleItem": { + "Title": "Single Item Settings", + "DisplayOneContainerWarning": "Warning! You have both \"Display Single Item Image\" and \"Is Container\" enabled. In this case, the container images takes priority.", + "DisplayOne": "Display Single Item Image", + "DisplayOneExplanation": "If the pile is made up of a single item, this sets the pile token's image to be the image of the item.", + "OverrideScale": "Override single item token scale", + "Scale": "Single item token scale", + "ItemName": "Use Item Name", + "ItemNameExplanation": "Causes the item pile to be named after the single item it contains." + }, + "Container": { + "Title": "Container Settings", + "IsContainer": "Is Container", + "Locked": "Is Locked", + "Closed": "Is Closed", + "ClosedImagePath": "Closed Image Path", + "EmptyImagePath": "Empty Image Path", + "OpenedImagePath": "Opened Image Path", + "LockedImagePath": "Locked Image Path", + "CloseSoundPath": "Closing Sound Path", + "OpenSoundPath": "Opening Sound Path", + "LockedSoundPath": "Locked Sound Path" + }, + "Sharing": { + "Title": "Sharing Settings", + "ShareItemsEnabled": "Sharing Enabled: Items", + "ShareItemsEnabledExplanation": "When this is enabled, players can only take their share of the quantities of items. Disabled means they can take as much as they want.", + "ShareCurrenciesEnabled": "Sharing Enabled: Currencies", + "ShareCurrenciesEnabledExplanation": "When this is enabled, players can only take their share of the quantities of currencies. Disabled means they can take as much as they want.", + "TakeAllEnabled": "Enable Take All Button", + "TakeAllEnabledExplanation": "Enables the \"Take All\" button when looting this item pile. Requires both of the above sharing settings to be disabled.", + "SplitAllEnabled": "Enable Split With Players Button", + "SplitAllEnabledExplanation": "Enables the \"Split [number] ways\" button when looting this item pile. Pressing this button makes all players (or only active players, see below) receive their share of the item pile.", + "InactivePlayers": "Split Only With Active Players", + "InactivePlayersExplanation": "Only players who are active when this item pile is looted will be given their share of the pile.", + "ResetSharingData": "Reset Sharing Data", + "ResetSharingDataExplanation": "If the Item Pile's content was manually changed while people were looting it, the sharing data may become out of sync with the players' actual shares. Pressing this button will reset everyone's share in this pile." + } } }, "HUD": { @@ -263,6 +275,10 @@ "Title": "Item quantity attribute", "Label": "Here you can configure what the attribute path is for each item's quantity. For example, in D&D5e system, each item's quantity is stored in the item's \"item.data.data.quantity\" attribute, so you'd put \"data.quantity\" in this setting." }, + "Price": { + "Title": "Item price attribute", + "Label": "Here you can configure what the attribute path is for each item's price. For example, in D&D5e system, each item's quantity is stored in the item's \"item.data.data.price\" attribute, so you'd put \"data.price\" in this setting." + }, "Currencies": { "Title": "Currencies", "Label": "Configure Currencies", @@ -288,7 +304,7 @@ }, "OutputToChat": { "Title": "Output to chat", - "Label": "Whenever any player picks up items from an item pile, this will send a message showing what was picked up.", + "Hint": "Whenever any player picks up items from an item pile, this will send a message showing what was picked up.", "Off": "Off - turn off messages", "Public": "Public - everyone can see messages", "SelfGM": "Private - only GMs and user can see messages", @@ -296,23 +312,27 @@ }, "InvertSheetOpen": { "Title": "Invert Ctrl + Double Click Open", - "Label": "Normally, you have to hold control when you want to open an item pile's actor sheet. Enabling this makes the item pile actor sheet open by default, and holding control opens the item pile inventory UI." + "Hint": "Normally, you have to hold control when you want to open an item pile's actor sheet. Enabling this makes the item pile actor sheet open by default, and holding control opens the item pile inventory UI." }, "HideActorHeaderText": { "Title": "Hide actor header text", - "Label": "Hides the \"Item Piles\" text in the actor header - useful if you have too many modules, and the header is getting crowded." + "Hint": "Hides the \"Item Piles\" text in the actor header - useful if you have too many modules, and the header is getting crowded." }, "DeleteEmptyPiles": { "Title": "Auto-delete empty piles", - "Label": "This causes item piles to delete themselves once they run out of items. This can be overridden on individual item piles." + "Hint": "This causes item piles to delete themselves once they run out of items. This can be overridden on individual item piles." }, "PreloadFiles": { "Title": "Preload Files", - "Label": "Causes files (images and audio) of piles to be preloaded, resulting in a seamless experience." + "Hint": "Causes files (images and audio) of piles to be preloaded, resulting in a seamless experience." }, "Debug": { "Title": "Enable debugging", - "Label": "Prints debug messages to the console" + "Hint": "Prints debug messages to the console" + }, + "DebugHooks": { + "Title": "Enable debugging of hooks", + "Hint": "Prints the item pile hooks and their contents to the console" } } } diff --git a/module.json b/module.json index 0d38224f..685cfcb7 100644 --- a/module.json +++ b/module.json @@ -2,7 +2,7 @@ "name": "item-piles", "title": "Item Piles", "description": "This module adds the ability for items to be dropped onto the ground, and then picked up.", - "version": "This is auto replaced", + "version": "100.0.0", "library": "false", "manifestPlusVersion": "1.0.0", "minimumCoreVersion": "0.8.9", @@ -15,10 +15,10 @@ } ], "esmodules": [ - "/scripts/module.js" + "/dist/module.js" ], "styles": [ - "/styles/module.css" + "/dist/module.css" ], "languages": [ { @@ -39,10 +39,12 @@ ], "dependencies": [ { - "name": "socketlib" + "name": "socketlib", + "type": "module" }, { - "name": "lib-wrapper" + "name": "lib-wrapper", + "type": "module" } ], "socket": true, diff --git a/package-lock.json b/package-lock.json index 899840bf..13db7edb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,810 +1,9823 @@ { - "name": "item-piles", + "name": "essential-svelte-esm", + "version": "0.0.5", "lockfileVersion": 2, "requires": true, "packages": { "": { + "name": "essential-svelte-esm", + "version": "0.0.5", + "license": "MIT", + "dependencies": { + "@typhonjs-fvtt/runtime": "^0.0.14", + "@typhonjs-fvtt/svelte-standard": "^0.0.1", + "svelte": "^3.48.0" + }, "devDependencies": { - "@league-of-foundry-developers/foundry-vtt-types": "^9.238.1" + "@babel/core": "^7", + "@babel/preset-env": "^7", + "@league-of-foundry-developers/foundry-vtt-types": "^9.238.1", + "@rollup/plugin-babel": "^5", + "@typhonjs-config/eslint-config": "^0.3.0", + "@typhonjs-fvtt/eslint-config-foundry.js": "^0.8.0", + "eslint": "^8", + "rollup": "^2", + "svelte-preprocess": "^4.10.0" } }, - "node_modules/@league-of-foundry-developers/foundry-vtt-types": { - "version": "9.238.1", - "resolved": "https://registry.npmjs.org/@league-of-foundry-developers/foundry-vtt-types/-/foundry-vtt-types-9.238.1.tgz", - "integrity": "sha512-ZnCay8eRsJTU7+y1x87BsGGEnVSSv2tW8+/8d0BHuULWOuu1HA3Tr1wIGUt++/bd6YKg0iR8jnGLtelXamj6+g==", - "dev": true, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "devOptional": true, "dependencies": { - "@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" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "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, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dependencies": { - "@pixi/core": "5.3.11", - "@pixi/display": "5.3.11", - "@pixi/utils": "5.3.11" + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.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/@babel/compat-data": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", + "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", + "devOptional": true, + "engines": { + "node": ">=6.9.0" } }, - "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/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, + "node_modules/@babel/core": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", + "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", + "devOptional": 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" + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.2", + "@babel/parser": "^7.18.5", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.5", + "@babel/types": "^7.18.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/pixijs" + "url": "https://opencollective.com/babel" } }, - "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, + "node_modules/@babel/generator": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "devOptional": true, "dependencies": { - "@pixi/math": "5.3.11", - "@pixi/settings": "5.3.11", - "@pixi/utils": "5.3.11" + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "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, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "devOptional": true, "dependencies": { - "@pixi/core": "5.3.11", - "@pixi/math": "5.3.11", - "@pixi/utils": "5.3.11" + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.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==", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "dev": true, "dependencies": { - "@pixi/core": "5.3.11" + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.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==", + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", "dev": true, "dependencies": { - "@pixi/core": "5.3.11", - "@pixi/settings": "5.3.11" + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.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, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", + "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", + "devOptional": true, "dependencies": { - "@pixi/core": "5.3.11" + "@babel/compat-data": "^7.17.10", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.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==", + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", + "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", "dev": true, "dependencies": { - "@pixi/core": "5.3.11", - "@pixi/math": "5.3.11" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.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==", + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", + "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", "dev": true, "dependencies": { - "@pixi/core": "5.3.11" + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.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==", + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", "dev": true, "dependencies": { - "@pixi/core": "5.3.11" + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" } }, - "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/@babel/helper-environment-visitor": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "devOptional": true, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@pixi/interaction": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/@pixi/interaction/-/interaction-5.3.11.tgz", - "integrity": "sha512-n2K99CYyBcrf8NPxpzmZ5IlJ9TEplsSZfJ/uzMNOEnTObKl4wAhxs51Nb58raH3Ouzwu14YHOpqYrBTEoT1yPA==", + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", "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" + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.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, + "node_modules/@babel/helper-function-name": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "devOptional": true, "dependencies": { - "@pixi/core": "5.3.11", - "@pixi/utils": "5.3.11", - "resource-loader": "^3.0.1" + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "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/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "devOptional": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } }, - "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==", + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", "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" + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "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, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "devOptional": 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" + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.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, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", + "devOptional": 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" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" + }, + "engines": { + "node": ">=6.9.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==", + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", "dev": true, "dependencies": { - "@pixi/display": "5.3.11" + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.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==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", "dev": true, - "dependencies": { - "@pixi/display": "5.3.11", - "@pixi/math": "5.3.11" + "engines": { + "node": ">=6.9.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==", + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", "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" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.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==", + "node_modules/@babel/helper-replace-supers": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", + "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", "dev": true, "dependencies": { - "es6-promise-polyfill": "^1.2.0", - "object-assign": "^4.1.1" + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-member-expression-to-functions": "^7.17.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "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==", + "node_modules/@babel/helper-simple-access": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", + "devOptional": true, + "dependencies": { + "@babel/types": "^7.18.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", "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" + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "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/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "devOptional": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } }, - "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==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "devOptional": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", "dev": true, "dependencies": { - "ismobilejs": "^1.1.0" + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" } }, - "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, + "node_modules/@babel/helpers": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", + "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", + "devOptional": 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" + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "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, + "node_modules/@babel/highlight": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", "dependencies": { - "@pixi/core": "5.3.11", - "@pixi/sprite": "5.3.11", - "@pixi/ticker": "5.3.11" + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.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==", + "node_modules/@babel/parser": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", + "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", + "devOptional": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz", + "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", "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" + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.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==", + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", + "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", "dev": true, "dependencies": { - "@pixi/core": "5.3.11", - "@pixi/loaders": "5.3.11", - "@pixi/math": "5.3.11", - "@pixi/utils": "5.3.11" + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.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==", + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", + "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", "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" + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", + "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", "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" + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", + "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", "dev": true, "dependencies": { - "@pixi/settings": "5.3.11" + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "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==", + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", "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" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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/@types/jquery": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", - "integrity": "sha512-ZxJrup8nz/ZxcU0vantG+TPdboMhB24jad2uSap50zE7Q9rUeYlCF25kFMSmHR33qoeOgqcdHEp3roaookC0Sg==", + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", + "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", "dev": true, "dependencies": { - "@types/sizzle": "*" + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/node": { - "version": "17.0.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.8.tgz", - "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==", - "dev": true - }, - "node_modules/@types/simple-peer": { - "version": "9.11.4", - "resolved": "https://registry.npmjs.org/@types/simple-peer/-/simple-peer-9.11.4.tgz", - "integrity": "sha512-Elje14YvM47k+XEaoyRAeUSvZN7TOLWYL233QCckUaXjT4lRESHnYs0iOK2JoosO5DnCvWu/0Vpl9qnw4KCLWw==", + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", + "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", "dev": true, "dependencies": { - "@types/node": "*" + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, - "node_modules/backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "node_modules/base64-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", - "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", + "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, "engines": { - "node": ">= 0.6.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", + "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", "dev": true, "dependencies": { - "ms": "2.1.2" + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { - "node": ">=6.0" + "node": ">=6.9.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/earcut": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.3.tgz", - "integrity": "sha512-iRDI1QeCQIhMCZk48DRDMVgQSSBDmbzzNhnxIo+pwx3swkfjMh6vh0nWLq1NdvGHLKH6wIrAM3vQWeTj6qeoug==", - "dev": true + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "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==", + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", + "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", "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" + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/engine.io-parser": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.2.tgz", - "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==", + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", "dev": true, "dependencies": { - "base64-arraybuffer": "~1.0.1" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { - "node": ">=10.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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": "sha1-84kl8jyz4+jObNqP93T867sJDN4=", - "dev": true + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", + "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-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/@babel/plugin-proposal-private-methods": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", + "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "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==", + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", + "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", "dev": true, "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, - "bin": { - "handlebars": "bin/handlebars" + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", + "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { - "node": ">=0.4.7" + "node": ">=4" }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "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/mini-signals": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mini-signals/-/mini-signals-1.2.0.tgz", - "integrity": "sha1-RbCAE8X65RokqhqTXNMXye1yHXQ=", - "dev": true + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "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/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "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/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/parse-uri": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/parse-uri/-/parse-uri-1.0.3.tgz", - "integrity": "sha512-upMnGxNcm+45So85HoguwZTVZI9u11i36DdxJfGF2HYWS2eh3TIx7+/tTi7qrEq15qzGkVhsKjesau+kCk48pA==", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz", + "integrity": "sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, "engines": { - "node": ">= 0.10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "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/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "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==", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, "peerDependencies": { - "pixi.js": ">=4.0.0" + "@babel/core": "^7.0.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==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "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" + "@babel/helper-plugin-utils": "^7.10.4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/pixijs" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "engines": { - "node": ">=0.4.x" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "dependencies": { - "mini-signals": "^1.2.0", - "parse-uri": "^1.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "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" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=10.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/socket.io-parser": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.1.tgz", - "integrity": "sha512-USQVLSkDWE5nbcY760ExdKaJxCE65kcsG/8k5FDGZVVxpD1pA7hABYXYkCUvxUuYYh/+uQw0N/fvBzfT8o07KA==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { - "@socket.io/component-emitter": "~3.0.0", - "debug": "~4.3.1" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=10.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.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==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", + "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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/uglify-js": { - "version": "3.14.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", - "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", + "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-remap-async-to-generator": "^7.16.8" }, "engines": { - "node": ">=0.8.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", "dev": true, "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", + "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, "engines": { - "node": ">=10.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", + "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", + "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, "engines": { - "node": ">=0.4.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - } - }, - "dependencies": { - "@league-of-foundry-developers/foundry-vtt-types": { - "version": "9.238.1", - "resolved": "https://registry.npmjs.org/@league-of-foundry-developers/foundry-vtt-types/-/foundry-vtt-types-9.238.1.tgz", - "integrity": "sha512-ZnCay8eRsJTU7+y1x87BsGGEnVSSv2tW8+/8d0BHuULWOuu1HA3Tr1wIGUt++/bd6YKg0iR8jnGLtelXamj6+g==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", + "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", "dev": true, - "requires": { + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", + "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", + "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", + "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", + "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", + "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-simple-access": "^7.18.2", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz", + "integrity": "sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", + "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", + "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz", + "integrity": "sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", + "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", + "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", + "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", + "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", + "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", + "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.2.tgz", + "integrity": "sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-async-generator-functions": "^7.17.12", + "@babel/plugin-proposal-class-properties": "^7.17.12", + "@babel/plugin-proposal-class-static-block": "^7.18.0", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.17.12", + "@babel/plugin-proposal-json-strings": "^7.17.12", + "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.18.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-private-methods": "^7.17.12", + "@babel/plugin-proposal-private-property-in-object": "^7.17.12", + "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.17.12", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.17.12", + "@babel/plugin-transform-async-to-generator": "^7.17.12", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.17.12", + "@babel/plugin-transform-classes": "^7.17.12", + "@babel/plugin-transform-computed-properties": "^7.17.12", + "@babel/plugin-transform-destructuring": "^7.18.0", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.17.12", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.18.1", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.17.12", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.18.0", + "@babel/plugin-transform-modules-commonjs": "^7.18.2", + "@babel/plugin-transform-modules-systemjs": "^7.18.0", + "@babel/plugin-transform-modules-umd": "^7.18.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", + "@babel/plugin-transform-new-target": "^7.17.12", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.17.12", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.18.0", + "@babel/plugin-transform-reserved-words": "^7.17.12", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.17.12", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.18.2", + "@babel/plugin-transform-typeof-symbol": "^7.17.12", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.2", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "devOptional": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", + "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", + "devOptional": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "devOptional": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.3.tgz", + "integrity": "sha512-fvXP0+dcllGtRKAjA5n5tBr57xWQalKky09hSiXAZ9qqjHn0sDuQV2Jz0Y5zHRQ6iGrAjJZOf2+xQj3yuXfLwA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.0.tgz", + "integrity": "sha512-5D5ND/mZWcQoSfYnSPsXtuiFxhzmhxt6pcjrFLJyldj+p0ZN2vvRpYNX+lahFTtMhAYOa2WmkdGINr0yP0CvGA==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.0.tgz", + "integrity": "sha512-oO0cZt8do8FdVBX8INftvIA4lUrKUSCcWUf9IwH9IPWOgKT22oAZFXeHLoDK7nhB2SmkNycp5brxfNMRLIhd6Q==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.1.tgz", + "integrity": "sha512-AMZwWyHbbNLBsDADWmoXT9A5yl5dsGEBeJSJRUJt8Y9n8Ziu7Wstt4MC8jtPW7xjcLecyfJwtnUTNSmOzcnWeg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.0.tgz", + "integrity": "sha512-i4yps1mBp2ijrx7E96RXrQXQQHm6F4ym1TOD0D69/sjDjZvQ22tqiEvaNw7pFZTUO5b9vWRHzbHzP9+UKuw+bA==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.5.tgz", + "integrity": "sha512-Ek+UFI4UP2hB9u0N1cJd6KgSF1rL0J3PT4is0oSStuus8+WzbGGPyJNMOKQ0w/tyPjxiCnOI4RdSMZt3nks64g==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.0.tgz", + "integrity": "sha512-bX+nx5V8XTJEmGtpWTO6kywdS725t71YSLlxWt78XoHUbELWgoCXeOFymRJmL3SU1TLlKSIi7v52EWqe60vJTQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.0.tgz", + "integrity": "sha512-e/Q5HopQzmnQgqimG9v3w2IG4VRABsBq3itOcn4bnm+j4enTgQZ0nWsaH/m9GV2otWGQ0nwccYL5vmLKyvP1ww==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.0.tgz", + "integrity": "sha512-q8c4bs1GumAiRenmFjASBcWSLKrbzHzWl6C2HcaAxAXIiL2rUlUWbqQZUjwVG5tied0rld19j/Mm90K3qI26vw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.1.tgz", + "integrity": "sha512-G78CY/+GePc6dDCTUbwI6TTFQ5fs3N9POHhI6v0QzteGpf6ylARiJUNz9HrRKi4eVYBNXjae1W2766iUEFxHlw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.1.tgz", + "integrity": "sha512-f1G1WGDXEU/RN1TWAxBPQgQudtLnLQPyiWdtypkPC+mVYNKFKH/HYXSxH4MVNqwF8M0eDsoiU7HumJHCg/L/jg==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.1.tgz", + "integrity": "sha512-aG20vknL4/YjQF9BSV7ts4EWm/yrjagAN7OWBNmlbEOUiu0llj4OGrFoOKK3g2vey4/p2omKCoHrWtPxSwV3HA==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3", + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", + "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", + "dev": true, + "dependencies": { + "comment-parser": "1.3.0", + "esquery": "^1.4.0", + "jsdoc-type-pratt-parser": "~2.2.3" + }, + "engines": { + "node": "^12 || ^14 || ^16 || ^17" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.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": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "devOptional": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@league-of-foundry-developers/foundry-vtt-types": { + "version": "9.269.0", + "resolved": "https://registry.npmjs.org/@league-of-foundry-developers/foundry-vtt-types/-/foundry-vtt-types-9.269.0.tgz", + "integrity": "sha512-M/rz86decPLXet9e6+bi0dm8WSGrT/5MM1QXUMEC7Z8vfKB9Y5D61B1J5laaqb3DdjVDS1kZtQEW3/sPg3EALw==", + "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/@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.4.2", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-6.4.2.tgz", + "integrity": "sha512-qj+eviYmJqeGkMbIKSkp1FVMLglQPVyzzyo/2/0VYmSuY4m4WItC4w3wtyjDd4vBK9YxZIUBZz+LKJvKkRplLQ==", + "dev": true, + "peer": true + }, + "node_modules/@pixi/core": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-6.4.2.tgz", + "integrity": "sha512-W5RWg0537uz2ni0BW9pA0gRmYGBE628e5XR4iDXO5VLSIZmc4jcaBLsPC7o1amcg1xo5Ty44yMpVpodv+GGRCw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/offscreencanvas": "^2019.6.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/pixijs" + }, + "peerDependencies": { + "@pixi/constants": "6.4.2", + "@pixi/math": "6.4.2", + "@pixi/runner": "6.4.2", + "@pixi/settings": "6.4.2", + "@pixi/ticker": "6.4.2", + "@pixi/utils": "6.4.2" + } + }, + "node_modules/@pixi/display": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-6.4.2.tgz", + "integrity": "sha512-mE35oRa4Ex5NOVXsuk7JldmmjBfO0gtOO7FPU3VpheOB13HLoacJ4XAa1HfAGapFiFZe+K19gOXEiOj1RyJfGA==", + "dev": true, + "peer": true, + "peerDependencies": { + "@pixi/math": "6.4.2", + "@pixi/settings": "6.4.2", + "@pixi/utils": "6.4.2" + } + }, + "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.4.2", + "resolved": "https://registry.npmjs.org/@pixi/graphics/-/graphics-6.4.2.tgz", + "integrity": "sha512-bMIuOee3ONsibRzq9/YUOPfrJ9rD5UK4ifhHRcB5sXwyRXhVK2HNkT2H4+0JQ8o7TxqjJE8neb5en9hn3ZR3SQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "@pixi/constants": "6.4.2", + "@pixi/core": "6.4.2", + "@pixi/display": "6.4.2", + "@pixi/math": "6.4.2", + "@pixi/sprite": "6.4.2", + "@pixi/utils": "6.4.2" + } + }, + "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.4.2", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-6.4.2.tgz", + "integrity": "sha512-/byuwLhzln7Gahl3pT/Ckfwe4nvAQ3tAYu+38B+b18HkQWi3Ykci/QwVq/nICb5sa5tJzW3icno2qcv7zBd2xQ==", + "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.4.2", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-6.4.2.tgz", + "integrity": "sha512-mH1//C931Rd+RB/c66t8VMNmLUGBCnefRftgijV5mBFXNgyP8Dnbig1790Qw4IDKPgiiR1mRmGDGAJAr0Xa/3A==", + "dev": true, + "peer": true + }, + "node_modules/@pixi/settings": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-6.4.2.tgz", + "integrity": "sha512-wA2PEVoHYaRiQ0/zvq8nqJZkzDT3qLRl8S7yVfL1yhsbCsh6KI0hjCwqy8b8xCAVAMwkInzWx64lvQbfActnAg==", + "dev": true, + "peer": true, + "dependencies": { + "ismobilejs": "^1.1.0" + } + }, + "node_modules/@pixi/sprite": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-6.4.2.tgz", + "integrity": "sha512-UW3587gBSdY8iCh/t7+7j1CV9iouAQrLvRNw42gJm5iQm+GaLWpQEI3GSaQX9u47fi1C2nokeGa6uB2Hwz/48Q==", + "dev": true, + "peer": true, + "peerDependencies": { + "@pixi/constants": "6.4.2", + "@pixi/core": "6.4.2", + "@pixi/display": "6.4.2", + "@pixi/math": "6.4.2", + "@pixi/settings": "6.4.2", + "@pixi/utils": "6.4.2" + } + }, + "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.4.2", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-6.4.2.tgz", + "integrity": "sha512-OM2U0qLiU2Z+qami7DRNkBJnx20ElQO/5mJNsoHQRH6k/po0nXlux8jcCXhh5DE9lds4RdUFAwTL4RmLT1clDw==", + "dev": true, + "peer": true, + "peerDependencies": { + "@pixi/settings": "6.4.2" + } + }, + "node_modules/@pixi/utils": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-6.4.2.tgz", + "integrity": "sha512-FORUzSikNUNceS6sf2NlRcGukmJrnWCQToA6Nqk+tQ7Lvb42vDTVI66ya44O6HYM2J0nL684YeYesWbAZ+UeKg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/earcut": "^2.1.0", + "earcut": "^2.2.2", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + }, + "peerDependencies": { + "@pixi/constants": "6.4.2", + "@pixi/settings": "6.4.2" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz", + "integrity": "sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "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/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/earcut": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/earcut/-/earcut-2.1.1.tgz", + "integrity": "sha512-w8oigUCDjElRHRRrMvn/spybSMyX8MTkKA5Dv+tS1IE/TgmNZPqUYtvYBXGY8cieSE66gm+szeK+bnbxC2xHTQ==", + "dev": true, + "peer": true + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "node_modules/@types/jquery": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.14.tgz", + "integrity": "sha512-X1gtMRMbziVQkErhTQmSe2jFwwENA/Zr+PprCkF63vFq+Yt5PZ4AlKqgmeNlwgn7dhsXEK888eIW2520EpC+xg==", + "dev": true, + "dependencies": { + "@types/sizzle": "*" + } + }, + "node_modules/@types/node": { + "version": "17.0.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.8.tgz", + "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==" + }, + "node_modules/@types/offscreencanvas": { + "version": "2019.7.0", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz", + "integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==", + "dev": true, + "peer": true + }, + "node_modules/@types/pug": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", + "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==" + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/sass": { + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", + "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/simple-peer": { + "version": "9.11.4", + "resolved": "https://registry.npmjs.org/@types/simple-peer/-/simple-peer-9.11.4.tgz", + "integrity": "sha512-Elje14YvM47k+XEaoyRAeUSvZN7TOLWYL233QCckUaXjT4lRESHnYs0iOK2JoosO5DnCvWu/0Vpl9qnw4KCLWw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "node_modules/@typhonjs-config/eslint-config": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@typhonjs-config/eslint-config/-/eslint-config-0.3.4.tgz", + "integrity": "sha512-GGEjrOevGjBRZFM0b18AxtHbk2Ifuv3sx1AS8SLXKwWJo7zWRRfQiEInuIJ+O0g85Js4OP+magm/Lm4b5h6GSQ==", + "dev": true, + "dependencies": { + "eslint-plugin-jsdoc": "^37" + } + }, + "node_modules/@typhonjs-fvtt/eslint-config-foundry.js": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@typhonjs-fvtt/eslint-config-foundry.js/-/eslint-config-foundry.js-0.8.0.tgz", + "integrity": "sha512-Fu1XDS747exX5zVwty4VSwlOwkuzdnnN15C5w66uG4hOpJnPCZU/jcyEOCf9bazRPp06Smimn+mKd9OjrCvuuw==", + "dev": true + }, + "node_modules/@typhonjs-fvtt/runtime": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@typhonjs-fvtt/runtime/-/runtime-0.0.14.tgz", + "integrity": "sha512-6ojXZDDTZxEPuE1ehTr2Da3kuFOzudvVztg2BfT7L3uiaf2FFPGu23G0lUXYfTdsgw95DiwlBXrrIB3AJZ+ZCA==", + "dependencies": { + "@rollup/plugin-node-resolve": "^13", + "autoprefixer": "^10", + "cssnano": "^5", + "postcss": "^8", + "postcss-preset-env": "^7", + "rollup-plugin-postcss": "^4", + "rollup-plugin-sourcemaps": "^0.6", + "rollup-plugin-svelte": "^7", + "rollup-plugin-terser": "^7", + "sass": "^1" + }, + "peerDependencies": { + "rollup": "^2", + "svelte": "^3.48.0", + "svelte-preprocess": "^4.10.0" + } + }, + "node_modules/@typhonjs-fvtt/svelte-standard": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@typhonjs-fvtt/svelte-standard/-/svelte-standard-0.0.1.tgz", + "integrity": "sha512-9IHpIncCFbYWYgEfdpDLsiZx6BjCCTynUHLyvBgcJlFNGQ13NILbYNk0eWs+fNxQfE2Bcb/Ffn0KAMhHD7EtRQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "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": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", + "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.20.3", + "caniuse-lite": "^1.0.30001335", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "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==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.20.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", + "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001349", + "electron-to-chromium": "^1.4.147", + "escalade": "^3.1.1", + "node-releases": "^2.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "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/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001356", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001356.tgz", + "integrity": "sha512-/30854bktMLhxtjieIxsrJBfs2gTM1pel6MXKF3K+RdIVJZcsn2A2QdhsuR4/p9+R204fZw0zCBBhktX8xWuyQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "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" + }, + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colord": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/comment-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", + "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "devOptional": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/core-js-compat": { + "version": "3.23.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.1.tgz", + "integrity": "sha512-KeYrEc8t6FJsKYB2qnDwRHWaC0cJNaqlHfCpMe5q3j/W1nje3moib/txNklddLPCtGb+etcBIyJ8zuMa/LN5/A==", + "dev": true, + "dependencies": { + "browserslist": "^4.20.4", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "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/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz", + "integrity": "sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og==", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssdb": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-6.6.3.tgz", + "integrity": "sha512-7GDvDSmE+20+WcSMhP17Q1EVWUrLlbxxpMDqG731n8P99JhnQZHR9YvtjPvEHfjFUjvQJvdpKCjlKOX+xe4UVA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.12", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.12.tgz", + "integrity": "sha512-TgvArbEZu0lk/dvg2ja+B7kYoD7BBCmn3+k58xD0qjrGHsFzXY/wKTo9M5egcUCabPol05e/PVoIu79s2JN4WQ==", + "dependencies": { + "cssnano-preset-default": "^5.2.12", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.12", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", + "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "dependencies": { + "css-declaration-sorter": "^6.3.0", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.2", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.6", + "postcss-merge-rules": "^5.1.2", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.3", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "devOptional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "engines": { + "node": ">=0.10" + } + }, + "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/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/earcut": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.3.tgz", + "integrity": "sha512-iRDI1QeCQIhMCZk48DRDMVgQSSBDmbzzNhnxIo+pwx3swkfjMh6vh0nWLq1NdvGHLKH6wIrAM3vQWeTj6qeoug==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.161", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.161.tgz", + "integrity": "sha512-sTjBRhqh6wFodzZtc5Iu8/R95OkwaPNn7tj/TaDU5nu/5EFiQDtADGAXdR4tJcTEHlYfJpHqigzJqHvPgehP8A==" + }, + "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.4", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", + "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==" + }, + "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.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", + "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "37.9.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.7.tgz", + "integrity": "sha512-8alON8yYcStY94o0HycU2zkLKQdcS+qhhOUNQpfONHHwvI99afbmfpYuPqf6PbLz5pLZldG3Te5I0RbAiTN42g==", + "dev": true, + "dependencies": { + "@es-joy/jsdoccomment": "~0.20.1", + "comment-parser": "1.3.0", + "debug": "^4.3.3", + "escape-string-regexp": "^4.0.0", + "esquery": "^1.4.0", + "regextras": "^0.8.0", + "semver": "^7.3.5", + "spdx-expression-parse": "^3.0.1" + }, + "engines": { + "node": "^12 || ^14 || ^16 || ^17" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-jsdoc/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-plugin-jsdoc/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/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/eslint/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/eslint/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/eslint/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/eslint/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/node_modules/globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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/eslint/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/espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "dependencies": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "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/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "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-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/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/generic-names": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", + "dependencies": { + "loader-utils": "^3.2.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "devOptional": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "devOptional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "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": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "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/icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==" + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + }, + "node_modules/import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dependencies": { + "import-from": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-from/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "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/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-builtin-module": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", + "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", + "dependencies": { + "builtin-modules": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dependencies": { + "has": "^1.0.3" + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "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/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "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/jsdoc-type-pratt-parser": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz", + "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "devOptional": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "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/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "devOptional": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "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/lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/loader-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "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/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "engines": { + "node": ">=4" + } + }, + "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==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "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==", + "devOptional": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "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/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-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "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-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "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.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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.7", + "resolved": "https://registry.npmjs.org/parse-uri/-/parse-uri-1.0.7.tgz", + "integrity": "sha512-eWuZCMKNlVkXrEoANdXxbmqhu2SQO9jUMCSpdbJDObin0JxISn6e400EWsSRbr/czdKvWKkhZnMKEGUwf/Plmg==", + "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-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "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-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.1.tgz", + "integrity": "sha512-wrt2VndqSLJpyBRNz9OmJcgnhI9MaongeWgapdBuUMu2a/KNJ8SENesG4SdiTnQwGO9b1VKbTWYAfCPeokLqZQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.3.tgz", + "integrity": "sha512-5fbr6FzFzjwHXKsVnkmEYrJYG8VNNzvD1tAXaPPWR97S6rhKI5uh2yOfV5TAzhDkZoq4h+chxEplFDc8GeyFtw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.0.tgz", + "integrity": "sha512-1jtE5AKnZcKq4pjOrltFHcbEM2/IvtbD1OdhZ/wqds18//bh0UmQkffcCkzDJU+/vGodfIsVQeKn+45CJvX9Bw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", + "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "dependencies": { + "browserslist": "^4.20.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.8", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.8.tgz", + "integrity": "sha512-8rbj8kVu00RQh2fQF81oBqtduiANu4MIxhyf0HbbStgPtnFlWn0yiaYTpLHrPnJbffVY1s9apWsIoVZcc68FxA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", + "integrity": "sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz", + "integrity": "sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", + "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz", + "integrity": "sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz", + "integrity": "sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", + "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", + "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", + "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "dependencies": { + "browserslist": "^4.16.6", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", + "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", + "dependencies": { + "generic-names": "^4.0.0", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nesting": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.8.tgz", + "integrity": "sha512-txdb3/idHYsBbNDFo1PFY0ExCgH5nfWi8G5lO49e6iuU42TydbODTzJgF5UuL5bhgeSlnAtDgfFTDG0Cl1zaSQ==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", + "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "dependencies": { + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", + "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "engines": { + "node": "^12 || ^14 || >=16" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", + "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", + "integrity": "sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.7.1.tgz", + "integrity": "sha512-1sx6+Nl1wMVJzaYLVaz4OAR6JodIN/Z1upmVqLwSPCLT6XyxrEoePgNMHPH08kseLe3z06i9Vfkt/32BYEKDeA==", + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.0.2", + "@csstools/postcss-color-function": "^1.1.0", + "@csstools/postcss-font-format-keywords": "^1.0.0", + "@csstools/postcss-hwb-function": "^1.0.1", + "@csstools/postcss-ic-unit": "^1.0.0", + "@csstools/postcss-is-pseudo-class": "^2.0.4", + "@csstools/postcss-normalize-display-values": "^1.0.0", + "@csstools/postcss-oklab-function": "^1.1.0", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.1", + "@csstools/postcss-unset-value": "^1.0.1", + "autoprefixer": "^10.4.7", + "browserslist": "^4.20.3", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^6.6.3", + "postcss-attribute-case-insensitive": "^5.0.1", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.3", + "postcss-color-hex-alpha": "^8.0.3", + "postcss-color-rebeccapurple": "^7.0.2", + "postcss-custom-media": "^8.0.1", + "postcss-custom-properties": "^12.1.7", + "postcss-custom-selectors": "^6.0.2", + "postcss-dir-pseudo-class": "^6.0.4", + "postcss-double-position-gradients": "^3.1.1", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.3", + "postcss-image-set-function": "^4.0.6", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.0", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.1.7", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.3", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.4", + "postcss-pseudo-class-any-link": "^7.1.4", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.4.tgz", + "integrity": "sha512-JxRcLXm96u14N3RzFavPIE9cRPuOqLDuzKeBsqi4oRk4vt8n0A7I0plFs/VXTg7U2n7g/XkQi0OwqTO3VWBfEg==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", + "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.0.tgz", + "integrity": "sha512-i/HI/VNd3V9e1WOLCwJsf9nePBRXqcGtVibcJ9FsVo0agfDEfsLSlFt94aYjY35wUNcdG0KrvdyjEr7It50wLQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "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/promise.series": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", + "integrity": "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regextras": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", + "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", + "dev": true, + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-relative": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==" + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.75.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.6.tgz", + "integrity": "sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-postcss": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz", + "integrity": "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==", + "dependencies": { + "chalk": "^4.1.0", + "concat-with-sourcemaps": "^1.1.0", + "cssnano": "^5.0.1", + "import-cwd": "^3.0.0", + "p-queue": "^6.6.2", + "pify": "^5.0.0", + "postcss-load-config": "^3.0.0", + "postcss-modules": "^4.0.0", + "promise.series": "^0.2.0", + "resolve": "^1.19.0", + "rollup-pluginutils": "^2.8.2", + "safe-identifier": "^0.4.2", + "style-inject": "^0.3.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "8.x" + } + }, + "node_modules/rollup-plugin-postcss/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/rollup-plugin-postcss/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/rollup-plugin-postcss/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==" + }, + "node_modules/rollup-plugin-postcss/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-postcss/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-sourcemaps": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz", + "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==", + "dependencies": { + "@rollup/pluginutils": "^3.0.9", + "source-map-resolve": "^0.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "@types/node": ">=10.0.0", + "rollup": ">=0.31.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-svelte": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.0.tgz", + "integrity": "sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==", + "dependencies": { + "require-relative": "^0.8.7", + "rollup-pluginutils": "^2.8.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "rollup": ">=2.0.0", + "svelte": ">=3.5.0" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-identifier": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==" + }, + "node_modules/sander": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", + "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", + "dependencies": { + "es6-promise": "^3.1.2", + "graceful-fs": "^4.1.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2" + } + }, + "node_modules/sander/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/sass": { + "version": "1.52.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.52.3.tgz", + "integrity": "sha512-LNNPJ9lafx+j1ArtA7GyEJm9eawXN8KlA1+5dF6IZyoONg1Tyo/g+muOsENWJH/2Q1FHbbV4UwliU0cXMa/VIA==", + "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": ">=12.0.0" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "devOptional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "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/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/sorcery": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", + "integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==", + "dependencies": { + "buffer-crc32": "^0.2.5", + "minimist": "^1.2.0", + "sander": "^0.5.0", + "sourcemap-codec": "^1.3.0" + }, + "bin": { + "sorcery": "bin/index.js" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "node_modules/string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==" + }, + "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-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "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/style-inject": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", + "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==" + }, + "node_modules/stylehacks": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", + "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "dependencies": { + "browserslist": "^4.16.6", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svelte": { + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.48.0.tgz", + "integrity": "sha512-fN2YRm/bGumvjUpu6yI3BpvZnpIm9I6A7HR4oUNYd7ggYyIwSA/BX7DJ+UXXffLp6XNcUijyLvttbPVCYa/3xQ==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/svelte-preprocess": { + "version": "4.10.7", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz", + "integrity": "sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==", + "hasInstallScript": true, + "dependencies": { + "@types/pug": "^2.0.4", + "@types/sass": "^1.16.0", + "detect-indent": "^6.0.0", + "magic-string": "^0.25.7", + "sorcery": "^0.10.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">= 9.11.2" + }, + "peerDependencies": { + "@babel/core": "^7.10.2", + "coffeescript": "^2.5.1", + "less": "^3.11.3 || ^4.0.0", + "postcss": "^7 || ^8", + "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0", + "pug": "^3.0.0", + "sass": "^1.26.8", + "stylus": "^0.55.0", + "sugarss": "^2.0.0", + "svelte": "^3.23.0", + "typescript": "^3.9.5 || ^4.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "coffeescript": { + "optional": true + }, + "less": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "postcss": { + "optional": true + }, + "postcss-load-config": { + "optional": true + }, + "pug": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/terser": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz", + "integrity": "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "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-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "devOptional": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.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/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/uglify-js": { + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.1.tgz", + "integrity": "sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "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/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "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/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "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/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "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 + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "devOptional": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", + "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", + "devOptional": true + }, + "@babel/core": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", + "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", + "devOptional": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.2", + "@babel/parser": "^7.18.5", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.5", + "@babel/types": "^7.18.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "devOptional": true, + "requires": { + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "devOptional": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", + "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", + "devOptional": true, + "requires": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", + "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", + "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "devOptional": true + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "devOptional": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "devOptional": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "devOptional": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", + "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", + "devOptional": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helper-replace-supers": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", + "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-member-expression-to-functions": "^7.17.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" + } + }, + "@babel/helper-simple-access": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", + "devOptional": true, + "requires": { + "@babel/types": "^7.18.2" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "devOptional": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "devOptional": true + }, + "@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helpers": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", + "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", + "devOptional": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" + } + }, + "@babel/highlight": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", + "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", + "devOptional": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz", + "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", + "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.17.12" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", + "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", + "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", + "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", + "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", + "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", + "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", + "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", + "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.17.12" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", + "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", + "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", + "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", + "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz", + "integrity": "sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", + "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", + "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-remap-async-to-generator": "^7.16.8" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", + "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", + "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", + "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", + "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", + "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", + "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", + "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", + "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", + "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-simple-access": "^7.18.2", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz", + "integrity": "sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", + "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", + "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz", + "integrity": "sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", + "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", + "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "regenerator-transform": "^0.15.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", + "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", + "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", + "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", + "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/preset-env": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.2.tgz", + "integrity": "sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-async-generator-functions": "^7.17.12", + "@babel/plugin-proposal-class-properties": "^7.17.12", + "@babel/plugin-proposal-class-static-block": "^7.18.0", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.17.12", + "@babel/plugin-proposal-json-strings": "^7.17.12", + "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.18.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-private-methods": "^7.17.12", + "@babel/plugin-proposal-private-property-in-object": "^7.17.12", + "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.17.12", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.17.12", + "@babel/plugin-transform-async-to-generator": "^7.17.12", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.17.12", + "@babel/plugin-transform-classes": "^7.17.12", + "@babel/plugin-transform-computed-properties": "^7.17.12", + "@babel/plugin-transform-destructuring": "^7.18.0", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.17.12", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.18.1", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.17.12", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.18.0", + "@babel/plugin-transform-modules-commonjs": "^7.18.2", + "@babel/plugin-transform-modules-systemjs": "^7.18.0", + "@babel/plugin-transform-modules-umd": "^7.18.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", + "@babel/plugin-transform-new-target": "^7.17.12", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.17.12", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.18.0", + "@babel/plugin-transform-reserved-words": "^7.17.12", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.17.12", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.18.2", + "@babel/plugin-transform-typeof-symbol": "^7.17.12", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.2", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "devOptional": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", + "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", + "devOptional": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "devOptional": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@csstools/postcss-cascade-layers": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.3.tgz", + "integrity": "sha512-fvXP0+dcllGtRKAjA5n5tBr57xWQalKky09hSiXAZ9qqjHn0sDuQV2Jz0Y5zHRQ6iGrAjJZOf2+xQj3yuXfLwA==", + "requires": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + } + }, + "@csstools/postcss-color-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.0.tgz", + "integrity": "sha512-5D5ND/mZWcQoSfYnSPsXtuiFxhzmhxt6pcjrFLJyldj+p0ZN2vvRpYNX+lahFTtMhAYOa2WmkdGINr0yP0CvGA==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-font-format-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.0.tgz", + "integrity": "sha512-oO0cZt8do8FdVBX8INftvIA4lUrKUSCcWUf9IwH9IPWOgKT22oAZFXeHLoDK7nhB2SmkNycp5brxfNMRLIhd6Q==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-hwb-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.1.tgz", + "integrity": "sha512-AMZwWyHbbNLBsDADWmoXT9A5yl5dsGEBeJSJRUJt8Y9n8Ziu7Wstt4MC8jtPW7xjcLecyfJwtnUTNSmOzcnWeg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-ic-unit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.0.tgz", + "integrity": "sha512-i4yps1mBp2ijrx7E96RXrQXQQHm6F4ym1TOD0D69/sjDjZvQ22tqiEvaNw7pFZTUO5b9vWRHzbHzP9+UKuw+bA==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-is-pseudo-class": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.5.tgz", + "integrity": "sha512-Ek+UFI4UP2hB9u0N1cJd6KgSF1rL0J3PT4is0oSStuus8+WzbGGPyJNMOKQ0w/tyPjxiCnOI4RdSMZt3nks64g==", + "requires": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + } + }, + "@csstools/postcss-normalize-display-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.0.tgz", + "integrity": "sha512-bX+nx5V8XTJEmGtpWTO6kywdS725t71YSLlxWt78XoHUbELWgoCXeOFymRJmL3SU1TLlKSIi7v52EWqe60vJTQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-oklab-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.0.tgz", + "integrity": "sha512-e/Q5HopQzmnQgqimG9v3w2IG4VRABsBq3itOcn4bnm+j4enTgQZ0nWsaH/m9GV2otWGQ0nwccYL5vmLKyvP1ww==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-stepped-value-functions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.0.tgz", + "integrity": "sha512-q8c4bs1GumAiRenmFjASBcWSLKrbzHzWl6C2HcaAxAXIiL2rUlUWbqQZUjwVG5tied0rld19j/Mm90K3qI26vw==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-trigonometric-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.1.tgz", + "integrity": "sha512-G78CY/+GePc6dDCTUbwI6TTFQ5fs3N9POHhI6v0QzteGpf6ylARiJUNz9HrRKi4eVYBNXjae1W2766iUEFxHlw==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "@csstools/postcss-unset-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.1.tgz", + "integrity": "sha512-f1G1WGDXEU/RN1TWAxBPQgQudtLnLQPyiWdtypkPC+mVYNKFKH/HYXSxH4MVNqwF8M0eDsoiU7HumJHCg/L/jg==", + "requires": {} + }, + "@csstools/selector-specificity": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.1.tgz", + "integrity": "sha512-aG20vknL4/YjQF9BSV7ts4EWm/yrjagAN7OWBNmlbEOUiu0llj4OGrFoOKK3g2vey4/p2omKCoHrWtPxSwV3HA==", + "requires": {} + }, + "@es-joy/jsdoccomment": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", + "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", + "dev": true, + "requires": { + "comment-parser": "1.3.0", + "esquery": "^1.4.0", + "jsdoc-type-pratt-parser": "~2.2.3" + } + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.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" + }, + "dependencies": { + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "devOptional": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==" + }, + "@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@league-of-foundry-developers/foundry-vtt-types": { + "version": "9.269.0", + "resolved": "https://registry.npmjs.org/@league-of-foundry-developers/foundry-vtt-types/-/foundry-vtt-types-9.269.0.tgz", + "integrity": "sha512-M/rz86decPLXet9e6+bi0dm8WSGrT/5MM1QXUMEC7Z8vfKB9Y5D61B1J5laaqb3DdjVDS1kZtQEW3/sPg3EALw==", + "dev": true, + "requires": { + "@pixi/graphics-smooth": "0.0.22", "@types/jquery": "~3.5.9", "@types/simple-peer": "~9.11.1", "handlebars": "4.7.7", @@ -814,616 +9827,4535 @@ "tinymce": "5.10.1" } }, - "@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, + "@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, + "requires": { + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@pixi/core": "5.3.11", + "@pixi/display": "5.3.11" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@pixi/constants": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-6.4.2.tgz", + "integrity": "sha512-qj+eviYmJqeGkMbIKSkp1FVMLglQPVyzzyo/2/0VYmSuY4m4WItC4w3wtyjDd4vBK9YxZIUBZz+LKJvKkRplLQ==", + "dev": true, + "peer": true + }, + "@pixi/core": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@pixi/core/-/core-6.4.2.tgz", + "integrity": "sha512-W5RWg0537uz2ni0BW9pA0gRmYGBE628e5XR4iDXO5VLSIZmc4jcaBLsPC7o1amcg1xo5Ty44yMpVpodv+GGRCw==", + "dev": true, + "peer": true, + "requires": { + "@types/offscreencanvas": "^2019.6.4" + } + }, + "@pixi/display": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@pixi/display/-/display-6.4.2.tgz", + "integrity": "sha512-mE35oRa4Ex5NOVXsuk7JldmmjBfO0gtOO7FPU3VpheOB13HLoacJ4XAa1HfAGapFiFZe+K19gOXEiOj1RyJfGA==", + "dev": true, + "peer": true, + "requires": {} + }, + "@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, + "requires": { + "@pixi/core": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@pixi/core": "5.3.11" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@pixi/core": "5.3.11", + "@pixi/settings": "5.3.11" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@pixi/core": "5.3.11" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@pixi/core": "5.3.11", + "@pixi/math": "5.3.11" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@pixi/core": "5.3.11" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@pixi/core": "5.3.11" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@pixi/graphics": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@pixi/graphics/-/graphics-6.4.2.tgz", + "integrity": "sha512-bMIuOee3ONsibRzq9/YUOPfrJ9rD5UK4ifhHRcB5sXwyRXhVK2HNkT2H4+0JQ8o7TxqjJE8neb5en9hn3ZR3SQ==", + "dev": true, + "peer": true, + "requires": {} + }, + "@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, + "requires": {} + }, + "@pixi/interaction": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/interaction/-/interaction-5.3.11.tgz", + "integrity": "sha512-n2K99CYyBcrf8NPxpzmZ5IlJ9TEplsSZfJ/uzMNOEnTObKl4wAhxs51Nb58raH3Ouzwu14YHOpqYrBTEoT1yPA==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@pixi/core": "5.3.11", + "@pixi/utils": "5.3.11", + "resource-loader": "^3.0.1" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@pixi/math": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@pixi/math/-/math-6.4.2.tgz", + "integrity": "sha512-/byuwLhzln7Gahl3pT/Ckfwe4nvAQ3tAYu+38B+b18HkQWi3Ykci/QwVq/nICb5sa5tJzW3icno2qcv7zBd2xQ==", + "dev": true, + "peer": true + }, + "@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, + "requires": { + "@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" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@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" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@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" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@pixi/display": "5.3.11" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@pixi/display": "5.3.11", + "@pixi/math": "5.3.11" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@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" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "es6-promise-polyfill": "^1.2.0", + "object-assign": "^4.1.1" + } + }, + "@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, + "requires": { + "@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" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "@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, + "requires": { + "@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" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@pixi/runner": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-6.4.2.tgz", + "integrity": "sha512-mH1//C931Rd+RB/c66t8VMNmLUGBCnefRftgijV5mBFXNgyP8Dnbig1790Qw4IDKPgiiR1mRmGDGAJAr0Xa/3A==", + "dev": true, + "peer": true + }, + "@pixi/settings": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-6.4.2.tgz", + "integrity": "sha512-wA2PEVoHYaRiQ0/zvq8nqJZkzDT3qLRl8S7yVfL1yhsbCsh6KI0hjCwqy8b8xCAVAMwkInzWx64lvQbfActnAg==", + "dev": true, + "peer": true, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@pixi/sprite": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-6.4.2.tgz", + "integrity": "sha512-UW3587gBSdY8iCh/t7+7j1CV9iouAQrLvRNw42gJm5iQm+GaLWpQEI3GSaQX9u47fi1C2nokeGa6uB2Hwz/48Q==", + "dev": true, + "peer": true, + "requires": {} + }, + "@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, + "requires": { + "@pixi/core": "5.3.11", + "@pixi/sprite": "5.3.11", + "@pixi/ticker": "5.3.11" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@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" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@pixi/core": "5.3.11", + "@pixi/loaders": "5.3.11", + "@pixi/math": "5.3.11", + "@pixi/utils": "5.3.11" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@pixi/text": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/text/-/text-5.3.11.tgz", + "integrity": "sha512-PmWvJv0wiKyyz3fahnxM19+m8IbF2vpDKIImqb5472WyxRGzKyVBW90xrADf5202tdKMk4b8hqvpof2XULr5PA==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@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, + "requires": { + "@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" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } + } + }, + "@pixi/ticker": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-6.4.2.tgz", + "integrity": "sha512-OM2U0qLiU2Z+qami7DRNkBJnx20ElQO/5mJNsoHQRH6k/po0nXlux8jcCXhh5DE9lds4RdUFAwTL4RmLT1clDw==", + "dev": true, + "peer": true, + "requires": {} + }, + "@pixi/utils": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-6.4.2.tgz", + "integrity": "sha512-FORUzSikNUNceS6sf2NlRcGukmJrnWCQToA6Nqk+tQ7Lvb42vDTVI66ya44O6HYM2J0nL684YeYesWbAZ+UeKg==", + "dev": true, + "peer": true, + "requires": { + "@types/earcut": "^2.1.0", + "earcut": "^2.2.2", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + }, + "@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz", + "integrity": "sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==", + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@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 + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" + }, + "@types/earcut": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/earcut/-/earcut-2.1.1.tgz", + "integrity": "sha512-w8oigUCDjElRHRRrMvn/spybSMyX8MTkKA5Dv+tS1IE/TgmNZPqUYtvYBXGY8cieSE66gm+szeK+bnbxC2xHTQ==", + "dev": true, + "peer": true + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "@types/jquery": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.14.tgz", + "integrity": "sha512-X1gtMRMbziVQkErhTQmSe2jFwwENA/Zr+PprCkF63vFq+Yt5PZ4AlKqgmeNlwgn7dhsXEK888eIW2520EpC+xg==", + "dev": true, + "requires": { + "@types/sizzle": "*" + } + }, + "@types/node": { + "version": "17.0.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.8.tgz", + "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==" + }, + "@types/offscreencanvas": { + "version": "2019.7.0", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz", + "integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==", + "dev": true, + "peer": true + }, + "@types/pug": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", + "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==" + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "requires": { + "@types/node": "*" + } + }, + "@types/sass": { + "version": "1.43.1", + "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", + "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==", + "requires": { + "@types/node": "*" + } + }, + "@types/simple-peer": { + "version": "9.11.4", + "resolved": "https://registry.npmjs.org/@types/simple-peer/-/simple-peer-9.11.4.tgz", + "integrity": "sha512-Elje14YvM47k+XEaoyRAeUSvZN7TOLWYL233QCckUaXjT4lRESHnYs0iOK2JoosO5DnCvWu/0Vpl9qnw4KCLWw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true + }, + "@typhonjs-config/eslint-config": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@typhonjs-config/eslint-config/-/eslint-config-0.3.4.tgz", + "integrity": "sha512-GGEjrOevGjBRZFM0b18AxtHbk2Ifuv3sx1AS8SLXKwWJo7zWRRfQiEInuIJ+O0g85Js4OP+magm/Lm4b5h6GSQ==", + "dev": true, + "requires": { + "eslint-plugin-jsdoc": "^37" + } + }, + "@typhonjs-fvtt/eslint-config-foundry.js": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@typhonjs-fvtt/eslint-config-foundry.js/-/eslint-config-foundry.js-0.8.0.tgz", + "integrity": "sha512-Fu1XDS747exX5zVwty4VSwlOwkuzdnnN15C5w66uG4hOpJnPCZU/jcyEOCf9bazRPp06Smimn+mKd9OjrCvuuw==", + "dev": true + }, + "@typhonjs-fvtt/runtime": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@typhonjs-fvtt/runtime/-/runtime-0.0.14.tgz", + "integrity": "sha512-6ojXZDDTZxEPuE1ehTr2Da3kuFOzudvVztg2BfT7L3uiaf2FFPGu23G0lUXYfTdsgw95DiwlBXrrIB3AJZ+ZCA==", + "requires": { + "@rollup/plugin-node-resolve": "^13", + "autoprefixer": "^10", + "cssnano": "^5", + "postcss": "^8", + "postcss-preset-env": "^7", + "rollup-plugin-postcss": "^4", + "rollup-plugin-sourcemaps": "^0.6", + "rollup-plugin-svelte": "^7", + "rollup-plugin-terser": "^7", + "sass": "^1" + } + }, + "@typhonjs-fvtt/svelte-standard": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@typhonjs-fvtt/svelte-standard/-/svelte-standard-0.0.1.tgz", + "integrity": "sha512-9IHpIncCFbYWYgEfdpDLsiZx6BjCCTynUHLyvBgcJlFNGQ13NILbYNk0eWs+fNxQfE2Bcb/Ffn0KAMhHD7EtRQ==" + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" + }, + "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, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "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 + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "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 + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "autoprefixer": { + "version": "10.4.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", + "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", + "requires": { + "browserslist": "^4.20.3", + "caniuse-lite": "^1.0.30001335", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha512-zj6Z6M7Eq+PBZ7PQxl5NT665MvJdAkzp0f60nAJ+sLaSCBPMwVak5ZegFbgVCzFcCJTKFoMizvM5Ld7+JrRJHA==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.20.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", + "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", + "requires": { + "caniuse-lite": "^1.0.30001349", + "electron-to-chromium": "^1.4.147", + "escalade": "^3.1.1", + "node-releases": "^2.0.5", + "picocolors": "^1.0.0" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001356", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001356.tgz", + "integrity": "sha512-/30854bktMLhxtjieIxsrJBfs2gTM1pel6MXKF3K+RdIVJZcsn2A2QdhsuR4/p9+R204fZw0zCBBhktX8xWuyQ==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.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" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "colord": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "comment-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", + "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "requires": { + "source-map": "^0.6.1" + } + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "devOptional": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "core-js-compat": { + "version": "3.23.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.1.tgz", + "integrity": "sha512-KeYrEc8t6FJsKYB2qnDwRHWaC0cJNaqlHfCpMe5q3j/W1nje3moib/txNklddLPCtGb+etcBIyJ8zuMa/LN5/A==", + "dev": true, + "requires": { + "browserslist": "^4.20.4", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "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, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "css-declaration-sorter": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz", + "integrity": "sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og==", + "requires": {} + }, + "css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "requires": {} + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + }, + "cssdb": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-6.6.3.tgz", + "integrity": "sha512-7GDvDSmE+20+WcSMhP17Q1EVWUrLlbxxpMDqG731n8P99JhnQZHR9YvtjPvEHfjFUjvQJvdpKCjlKOX+xe4UVA==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "cssnano": { + "version": "5.1.12", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.12.tgz", + "integrity": "sha512-TgvArbEZu0lk/dvg2ja+B7kYoD7BBCmn3+k58xD0qjrGHsFzXY/wKTo9M5egcUCabPol05e/PVoIu79s2JN4WQ==", + "requires": { + "cssnano-preset-default": "^5.2.12", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.2.12", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", + "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "requires": { + "css-declaration-sorter": "^6.3.0", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.2", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.6", + "postcss-merge-rules": "^5.1.2", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.3", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "requires": {} + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "requires": { + "css-tree": "^1.1.2" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "devOptional": true, + "requires": { + "ms": "2.1.2" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" + }, + "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 + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==" + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "earcut": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.3.tgz", + "integrity": "sha512-iRDI1QeCQIhMCZk48DRDMVgQSSBDmbzzNhnxIo+pwx3swkfjMh6vh0nWLq1NdvGHLKH6wIrAM3vQWeTj6qeoug==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.161", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.161.tgz", + "integrity": "sha512-sTjBRhqh6wFodzZtc5Iu8/R95OkwaPNn7tj/TaDU5nu/5EFiQDtADGAXdR4tJcTEHlYfJpHqigzJqHvPgehP8A==" + }, + "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, + "requires": { + "@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" + } + }, + "engine.io-parser": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", + "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", + "dev": true + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==" + }, + "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 + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "eslint": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", + "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "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 + }, + "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 + }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-plugin-jsdoc": { + "version": "37.9.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.7.tgz", + "integrity": "sha512-8alON8yYcStY94o0HycU2zkLKQdcS+qhhOUNQpfONHHwvI99afbmfpYuPqf6PbLz5pLZldG3Te5I0RbAiTN42g==", + "dev": true, + "requires": { + "@es-joy/jsdoccomment": "~0.20.1", + "comment-parser": "1.3.0", + "debug": "^4.3.3", + "escape-string-regexp": "^4.0.0", + "esquery": "^1.4.0", + "regextras": "^0.8.0", + "semver": "^7.3.5", + "spdx-expression-parse": "^3.0.1" + }, + "dependencies": { + "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 + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "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, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "dev": true + }, + "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 + }, + "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 + }, + "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 + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "generic-names": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", + "requires": { + "loader-utils": "^3.2.0" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "devOptional": true + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "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, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "devOptional": true + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "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, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "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 + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "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 + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==" + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "requires": {} + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + }, + "import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "requires": { + "import-from": "^3.0.0" + } + }, + "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, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "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==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-builtin-module": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", + "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", + "requires": { + "builtin-modules": "^3.0.0" + } + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "ismobilejs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ismobilejs/-/ismobilejs-1.1.1.tgz", + "integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "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, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsdoc-type-pratt-parser": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz", + "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "devOptional": true + }, + "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 + }, + "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 + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "devOptional": true + }, + "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, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==" + }, + "loader-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "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 + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" + }, + "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 + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "devOptional": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "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-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "requires": { + "boolbase": "^1.0.0" + } + }, + "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 + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "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.3" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" + }, + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + } + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "requires": { - "@pixi/core": "5.3.11", - "@pixi/display": "5.3.11", - "@pixi/utils": "5.3.11" + "p-finally": "^1.0.0" } }, - "@pixi/app": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/@pixi/app/-/app-5.3.11.tgz", - "integrity": "sha512-ZWrOjGvVl+lK5OJQT3OqSnSRtU2XgQSe/ULg2uGsSWUqMkJews33JIGOjvk4tIsjm4ekSKiPZRMdYFHzPfgEJg==", + "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, "requires": { - "@pixi/core": "5.3.11", - "@pixi/display": "5.3.11" + "callsites": "^3.0.0" } }, - "@pixi/constants": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", - "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "parse-uri": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/parse-uri/-/parse-uri-1.0.7.tgz", + "integrity": "sha512-eWuZCMKNlVkXrEoANdXxbmqhu2SQO9jUMCSpdbJDObin0JxISn6e400EWsSRbr/czdKvWKkhZnMKEGUwf/Plmg==", "dev": true }, - "@pixi/core": { + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "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 + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" + }, + "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, + "requires": {} + }, + "pixi.js": { "version": "5.3.11", - "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.11.tgz", - "integrity": "sha512-U71OiC3rNt45/h8kaLGAQL4XsNh/ISoZtxVQNbtKTXlgjEAy1Q01Ht80yl0UJdiVxYQFlanCS/IG4++OkygioA==", + "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-5.3.11.tgz", + "integrity": "sha512-/9td6IHDQqG0Po5lyQ5aKDzrnEVD1SvGourI4Nqp0mvNI0Cbm74tMHLjk1V5foqGPAS9pochENr6Y3ft/2cDiQ==", "dev": true, "requires": { + "@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" + }, + "dependencies": { + "@pixi/constants": { + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.11.tgz", + "integrity": "sha512-KwutCRu8dRYn3956ygPJlvglHjJM99OS2Qhp4QYG8a4BsPcwfpInsHUtGHngtsTZbnx32pxCd3pg9nPiV8EuVA==", + "dev": true + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/math": "5.3.11", + "@pixi/settings": "5.3.11", + "@pixi/utils": "5.3.11" + } + }, + "@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, + "requires": { + "@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" + } + }, + "@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 + }, + "@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 + }, + "@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, + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@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, + "requires": { + "@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" + } + }, + "@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, + "requires": { + "@pixi/settings": "5.3.11" + } + }, + "@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, + "requires": { + "@pixi/constants": "5.3.11", + "@pixi/settings": "5.3.11", + "earcut": "^2.1.5", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + } + } } }, - "@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, + "postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", "requires": { - "@pixi/math": "5.3.11", - "@pixi/settings": "5.3.11", - "@pixi/utils": "5.3.11" + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" } }, - "@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, + "postcss-attribute-case-insensitive": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.1.tgz", + "integrity": "sha512-wrt2VndqSLJpyBRNz9OmJcgnhI9MaongeWgapdBuUMu2a/KNJ8SENesG4SdiTnQwGO9b1VKbTWYAfCPeokLqZQ==", "requires": { - "@pixi/core": "5.3.11", - "@pixi/math": "5.3.11", - "@pixi/utils": "5.3.11" + "postcss-selector-parser": "^6.0.10" } }, - "@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, + "postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "requires": { - "@pixi/core": "5.3.11" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" } }, - "@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, + "postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", "requires": { - "@pixi/core": "5.3.11", - "@pixi/settings": "5.3.11" + "postcss-value-parser": "^4.2.0" } }, - "@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, + "postcss-color-functional-notation": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.3.tgz", + "integrity": "sha512-5fbr6FzFzjwHXKsVnkmEYrJYG8VNNzvD1tAXaPPWR97S6rhKI5uh2yOfV5TAzhDkZoq4h+chxEplFDc8GeyFtw==", "requires": { - "@pixi/core": "5.3.11" + "postcss-value-parser": "^4.2.0" } }, - "@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, + "postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", "requires": { - "@pixi/core": "5.3.11", - "@pixi/math": "5.3.11" + "postcss-value-parser": "^4.2.0" } }, - "@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, + "postcss-color-rebeccapurple": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.0.tgz", + "integrity": "sha512-1jtE5AKnZcKq4pjOrltFHcbEM2/IvtbD1OdhZ/wqds18//bh0UmQkffcCkzDJU+/vGodfIsVQeKn+45CJvX9Bw==", "requires": { - "@pixi/core": "5.3.11" + "postcss-value-parser": "^4.2.0" } }, - "@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, + "postcss-colormin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", "requires": { - "@pixi/core": "5.3.11" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" } }, - "@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, + "postcss-convert-values": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", + "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", "requires": { - "@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" + "browserslist": "^4.20.3", + "postcss-value-parser": "^4.2.0" } }, - "@pixi/interaction": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/@pixi/interaction/-/interaction-5.3.11.tgz", - "integrity": "sha512-n2K99CYyBcrf8NPxpzmZ5IlJ9TEplsSZfJ/uzMNOEnTObKl4wAhxs51Nb58raH3Ouzwu14YHOpqYrBTEoT1yPA==", - "dev": true, + "postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", "requires": { - "@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" + "postcss-value-parser": "^4.2.0" } }, - "@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, + "postcss-custom-properties": { + "version": "12.1.8", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.8.tgz", + "integrity": "sha512-8rbj8kVu00RQh2fQF81oBqtduiANu4MIxhyf0HbbStgPtnFlWn0yiaYTpLHrPnJbffVY1s9apWsIoVZcc68FxA==", "requires": { - "@pixi/core": "5.3.11", - "@pixi/utils": "5.3.11", - "resource-loader": "^3.0.1" + "postcss-value-parser": "^4.2.0" } }, - "@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 + "postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "requires": { + "postcss-selector-parser": "^6.0.4" + } }, - "@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, + "postcss-dir-pseudo-class": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", + "integrity": "sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw==", "requires": { - "@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" + "postcss-selector-parser": "^6.0.9" } }, - "@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, + "postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "requires": {} + }, + "postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "requires": {} + }, + "postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "requires": {} + }, + "postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "requires": {} + }, + "postcss-double-position-gradients": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz", + "integrity": "sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ==", "requires": { - "@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" + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "requires": { + "postcss-selector-parser": "^6.0.9" + } + }, + "postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "requires": {} + }, + "postcss-gap-properties": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", + "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==", + "requires": {} + }, + "postcss-image-set-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz", + "integrity": "sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "requires": {} + }, + "postcss-lab-function": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz", + "integrity": "sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w==", + "requires": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "requires": {} + }, + "postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "requires": {} + }, + "postcss-merge-longhand": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", + "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.0" + } + }, + "postcss-merge-rules": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", + "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", + "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "requires": { + "browserslist": "^4.16.6", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" } }, - "@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, + "postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "requires": { - "@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" + "postcss-selector-parser": "^6.0.5" } }, - "@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, + "postcss-modules": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", + "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", "requires": { - "@pixi/display": "5.3.11" + "generic-names": "^4.0.0", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" } }, - "@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, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "requires": { - "@pixi/display": "5.3.11", - "@pixi/math": "5.3.11" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" } }, - "@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, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "requires": { - "@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" + "postcss-selector-parser": "^6.0.4" } }, - "@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, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "requires": { - "es6-promise-polyfill": "^1.2.0", - "object-assign": "^4.1.1" + "icss-utils": "^5.0.0" } }, - "@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, + "postcss-nesting": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.8.tgz", + "integrity": "sha512-txdb3/idHYsBbNDFo1PFY0ExCgH5nfWi8G5lO49e6iuU42TydbODTzJgF5UuL5bhgeSlnAtDgfFTDG0Cl1zaSQ==", "requires": { - "@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" + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" } }, - "@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 + "postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "requires": {} }, - "@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, + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "requires": { - "ismobilejs": "^1.1.0" + "postcss-value-parser": "^4.2.0" } }, - "@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, + "postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "requires": { - "@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" + "postcss-value-parser": "^4.2.0" } }, - "@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, + "postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", "requires": { - "@pixi/core": "5.3.11", - "@pixi/sprite": "5.3.11", - "@pixi/ticker": "5.3.11" + "postcss-value-parser": "^4.2.0" } }, - "@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, + "postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "requires": { - "@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" + "postcss-value-parser": "^4.2.0" } }, - "@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, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", "requires": { - "@pixi/core": "5.3.11", - "@pixi/loaders": "5.3.11", - "@pixi/math": "5.3.11", - "@pixi/utils": "5.3.11" + "postcss-value-parser": "^4.2.0" } }, - "@pixi/text": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/@pixi/text/-/text-5.3.11.tgz", - "integrity": "sha512-PmWvJv0wiKyyz3fahnxM19+m8IbF2vpDKIImqb5472WyxRGzKyVBW90xrADf5202tdKMk4b8hqvpof2XULr5PA==", - "dev": true, + "postcss-normalize-unicode": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", + "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", "requires": { - "@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" + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" } }, - "@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, + "postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "requires": { - "@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" + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" } }, - "@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, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", "requires": { - "@pixi/settings": "5.3.11" + "postcss-value-parser": "^4.2.0" } }, - "@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, + "postcss-opacity-percentage": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", + "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==" + }, + "postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "requires": { - "@pixi/constants": "5.3.11", - "@pixi/settings": "5.3.11", - "earcut": "^2.1.5", - "eventemitter3": "^3.1.0", - "url": "^0.11.0" + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" } }, - "@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 + "postcss-overflow-shorthand": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", + "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==", + "requires": {} }, - "@types/jquery": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", - "integrity": "sha512-ZxJrup8nz/ZxcU0vantG+TPdboMhB24jad2uSap50zE7Q9rUeYlCF25kFMSmHR33qoeOgqcdHEp3roaookC0Sg==", - "dev": true, + "postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "requires": {} + }, + "postcss-place": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", + "integrity": "sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg==", "requires": { - "@types/sizzle": "*" + "postcss-value-parser": "^4.2.0" } }, - "@types/node": { - "version": "17.0.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.8.tgz", - "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==", - "dev": true + "postcss-preset-env": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.7.1.tgz", + "integrity": "sha512-1sx6+Nl1wMVJzaYLVaz4OAR6JodIN/Z1upmVqLwSPCLT6XyxrEoePgNMHPH08kseLe3z06i9Vfkt/32BYEKDeA==", + "requires": { + "@csstools/postcss-cascade-layers": "^1.0.2", + "@csstools/postcss-color-function": "^1.1.0", + "@csstools/postcss-font-format-keywords": "^1.0.0", + "@csstools/postcss-hwb-function": "^1.0.1", + "@csstools/postcss-ic-unit": "^1.0.0", + "@csstools/postcss-is-pseudo-class": "^2.0.4", + "@csstools/postcss-normalize-display-values": "^1.0.0", + "@csstools/postcss-oklab-function": "^1.1.0", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.1", + "@csstools/postcss-unset-value": "^1.0.1", + "autoprefixer": "^10.4.7", + "browserslist": "^4.20.3", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^6.6.3", + "postcss-attribute-case-insensitive": "^5.0.1", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.3", + "postcss-color-hex-alpha": "^8.0.3", + "postcss-color-rebeccapurple": "^7.0.2", + "postcss-custom-media": "^8.0.1", + "postcss-custom-properties": "^12.1.7", + "postcss-custom-selectors": "^6.0.2", + "postcss-dir-pseudo-class": "^6.0.4", + "postcss-double-position-gradients": "^3.1.1", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.3", + "postcss-image-set-function": "^4.0.6", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.0", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.1.7", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.3", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.4", + "postcss-pseudo-class-any-link": "^7.1.4", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.0", + "postcss-value-parser": "^4.2.0" + } }, - "@types/simple-peer": { - "version": "9.11.4", - "resolved": "https://registry.npmjs.org/@types/simple-peer/-/simple-peer-9.11.4.tgz", - "integrity": "sha512-Elje14YvM47k+XEaoyRAeUSvZN7TOLWYL233QCckUaXjT4lRESHnYs0iOK2JoosO5DnCvWu/0Vpl9qnw4KCLWw==", - "dev": true, + "postcss-pseudo-class-any-link": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.4.tgz", + "integrity": "sha512-JxRcLXm96u14N3RzFavPIE9cRPuOqLDuzKeBsqi4oRk4vt8n0A7I0plFs/VXTg7U2n7g/XkQi0OwqTO3VWBfEg==", "requires": { - "@types/node": "*" + "postcss-selector-parser": "^6.0.10" } }, - "@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true + "postcss-reduce-initial": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", + "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + } }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true + "postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } }, - "base64-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", - "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", - "dev": true + "postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "requires": {} }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, + "postcss-selector-not": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.0.tgz", + "integrity": "sha512-i/HI/VNd3V9e1WOLCwJsf9nePBRXqcGtVibcJ9FsVo0agfDEfsLSlFt94aYjY35wUNcdG0KrvdyjEr7It50wLQ==", "requires": { - "ms": "2.1.2" + "postcss-selector-parser": "^6.0.10" } }, - "earcut": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.3.tgz", - "integrity": "sha512-iRDI1QeCQIhMCZk48DRDMVgQSSBDmbzzNhnxIo+pwx3swkfjMh6vh0nWLq1NdvGHLKH6wIrAM3vQWeTj6qeoug==", - "dev": true + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } }, - "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, + "postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "requires": { - "@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" + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" } }, - "engine.io-parser": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.2.tgz", - "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==", - "dev": true, + "postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "requires": { - "base64-arraybuffer": "~1.0.1" + "postcss-selector-parser": "^6.0.5" } }, - "es6-promise-polyfill": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es6-promise-polyfill/-/es6-promise-polyfill-1.2.0.tgz", - "integrity": "sha1-84kl8jyz4+jObNqP93T867sJDN4=", - "dev": true + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "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 }, - "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, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } + "promise.series": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", + "integrity": "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==" }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", "dev": true }, - "ismobilejs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ismobilejs/-/ismobilejs-1.1.1.tgz", - "integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==", + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", "dev": true }, - "mini-signals": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mini-signals/-/mini-signals-1.2.0.tgz", - "integrity": "sha1-RbCAE8X65RokqhqTXNMXye1yHXQ=", + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, - "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 + "regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "parse-uri": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/parse-uri/-/parse-uri-1.0.3.tgz", - "integrity": "sha512-upMnGxNcm+45So85HoguwZTVZI9u11i36DdxJfGF2HYWS2eh3TIx7+/tTi7qrEq15qzGkVhsKjesau+kCk48pA==", - "dev": true + "regexpu-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "regextras": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", + "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", "dev": true }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", "dev": true }, - "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, - "requires": {} - }, - "pixi.js": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-5.3.11.tgz", - "integrity": "sha512-/9td6IHDQqG0Po5lyQ5aKDzrnEVD1SvGourI4Nqp0mvNI0Cbm74tMHLjk1V5foqGPAS9pochENr6Y3ft/2cDiQ==", + "regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "dev": true, "requires": { - "@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" + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } } }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true + "require-relative": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==" }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "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 }, "resource-loader": { @@ -1436,6 +14368,202 @@ "parse-uri": "^1.0.0" } }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.75.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.6.tgz", + "integrity": "sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA==", + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-postcss": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz", + "integrity": "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==", + "requires": { + "chalk": "^4.1.0", + "concat-with-sourcemaps": "^1.1.0", + "cssnano": "^5.0.1", + "import-cwd": "^3.0.0", + "p-queue": "^6.6.2", + "pify": "^5.0.0", + "postcss-load-config": "^3.0.0", + "postcss-modules": "^4.0.0", + "promise.series": "^0.2.0", + "resolve": "^1.19.0", + "rollup-pluginutils": "^2.8.2", + "safe-identifier": "^0.4.2", + "style-inject": "^0.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "rollup-plugin-sourcemaps": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz", + "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==", + "requires": { + "@rollup/pluginutils": "^3.0.9", + "source-map-resolve": "^0.6.0" + } + }, + "rollup-plugin-svelte": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.0.tgz", + "integrity": "sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==", + "requires": { + "require-relative": "^0.8.7", + "rollup-pluginutils": "^2.8.2" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-identifier": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==" + }, + "sander": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", + "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", + "requires": { + "es6-promise": "^3.1.2", + "graceful-fs": "^4.1.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "sass": { + "version": "1.52.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.52.3.tgz", + "integrity": "sha512-LNNPJ9lafx+j1ArtA7GyEJm9eawXN8KlA1+5dF6IZyoONg1Tyo/g+muOsENWJH/2Q1FHbbV4UwliU0cXMa/VIA==", + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "devOptional": true + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "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, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "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 + }, "socket.io-client": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.3.2.tgz", @@ -1451,19 +14579,195 @@ } }, "socket.io-parser": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.1.tgz", - "integrity": "sha512-USQVLSkDWE5nbcY760ExdKaJxCE65kcsG/8k5FDGZVVxpD1pA7hABYXYkCUvxUuYYh/+uQw0N/fvBzfT8o07KA==", + "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, "requires": { "@socket.io/component-emitter": "~3.0.0", "debug": "~4.3.1" } }, + "sorcery": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", + "integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==", + "requires": { + "buffer-crc32": "^0.2.5", + "minimist": "^1.2.0", + "sander": "^0.5.0", + "sourcemap-codec": "^1.3.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==" + }, + "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, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "requires": { + "min-indent": "^1.0.0" + } + }, + "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 + }, + "style-inject": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", + "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==" + }, + "stylehacks": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", + "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "requires": { + "browserslist": "^4.16.6", + "postcss-selector-parser": "^6.0.4" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "svelte": { + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.48.0.tgz", + "integrity": "sha512-fN2YRm/bGumvjUpu6yI3BpvZnpIm9I6A7HR4oUNYd7ggYyIwSA/BX7DJ+UXXffLp6XNcUijyLvttbPVCYa/3xQ==" + }, + "svelte-preprocess": { + "version": "4.10.7", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz", + "integrity": "sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==", + "requires": { + "@types/pug": "^2.0.4", + "@types/sass": "^1.16.0", + "detect-indent": "^6.0.0", + "magic-string": "^0.25.7", + "sorcery": "^0.10.0", + "strip-indent": "^3.0.0" + } + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + }, + "terser": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz", + "integrity": "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==", + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } + } + }, + "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 }, "tinymce": { @@ -1472,29 +14776,134 @@ "integrity": "sha512-aIsFTYiuESpoYkCgkoojpVtPwrSvYBxp4mMEGsj20CnUruLCWosywkbYHDII+j7KlQZZn3p+xK89f5gT3QyuGw==", "dev": true }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "devOptional": true + }, + "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==", + "requires": { + "is-number": "^7.0.0" + } + }, + "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, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, "uglify-js": { - "version": "3.14.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", - "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", + "version": "3.16.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.1.tgz", + "integrity": "sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ==", "dev": true, "optional": true }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", "dev": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" } }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, "ws": { "version": "8.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", @@ -1508,10 +14917,21 @@ "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", "dev": true }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, "yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==", "dev": true } } diff --git a/package.json b/package.json index e39e662b..05e99fd5 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,34 @@ { + "name": "essential-svelte-esm", + "version": "0.0.5", + "description": "Provides essential TRL demos for reactivity and beyond.", + "license": "MIT", + "private": true, + "type": "module", + "author": "Michael Leahy (https://github.com/typhonrt)", + "contributors": [ + "Michael Leahy (https://github.com/typhonrt)" + ], + "dependencies": { + "@typhonjs-fvtt/runtime": "^0.0.14", + "@typhonjs-fvtt/svelte-standard": "^0.0.1", + "svelte": "^3.48.0" + }, "devDependencies": { + "@babel/core": "^7", + "@babel/preset-env": "^7", + "@rollup/plugin-babel": "^5", + "@typhonjs-config/eslint-config": "^0.3.0", + "@typhonjs-fvtt/eslint-config-foundry.js": "^0.8.0", + "eslint": "^8", + "rollup": "^2", + "svelte-preprocess": "^4.10.0", "@league-of-foundry-developers/foundry-vtt-types": "^9.238.1" + }, + "browserslist": [">5%", "not IE 11"], + "scripts": { + "build": "rollup --config", + "build-watch": "rollup --watch --config", + "eslint": "eslint ." } } diff --git a/rollup.config.mjs b/rollup.config.mjs new file mode 100644 index 00000000..0bb56608 --- /dev/null +++ b/rollup.config.mjs @@ -0,0 +1,80 @@ +import { babel } from '@rollup/plugin-babel'; +import postcss from 'rollup-plugin-postcss'; // Process Sass / CSS w/ PostCSS +import resolve from '@rollup/plugin-node-resolve'; // This resolves NPM modules from node_modules. +import svelte from 'rollup-plugin-svelte'; +import preprocess from 'svelte-preprocess'; +import { terser } from 'rollup-plugin-terser'; // Terser is used for minification / mangling +import { + postcssConfig, + terserConfig, + typhonjsRuntime } from '@typhonjs-fvtt/runtime/rollup'; + +const s_COMPRESS = false; // Set to true to compress the module bundle. +const s_SOURCEMAPS = true; // Generate sourcemaps for the bundle (recommended). + +// Set to true to enable linking against the TyphonJS Runtime Library module. +// You must add a Foundry module dependency on the `typhonjs` Foundry package or manually install it in Foundry from: +// https://github.com/typhonjs-fvtt-lib/typhonjs/releases/latest/download/module.json +const s_TYPHONJS_MODULE_LIB = false; + +// Creates a standard configuration for PostCSS with autoprefixer & postcss-preset-env. +const postcssMain = postcssConfig({ + extract: 'module.css', + compress: s_COMPRESS, + sourceMap: s_SOURCEMAPS +}); + +const s_RESOLVE_CONFIG = { + browser: true, + dedupe: ['svelte'] +} + +export default () => +{ + // Defines potential output plugins to use conditionally if the .env file indicates the bundles should be + // minified / mangled. + const outputPlugins = s_COMPRESS ? [terser(terserConfig())] : []; + + // Defines whether source maps are generated / loaded. + const sourcemap = s_SOURCEMAPS; + + return [ + { // The main module bundle + input: `src/module.js`, + output: { + file: `dist/module.js`, + format: 'es', + plugins: outputPlugins, + sourcemap + }, + plugins: [ + svelte({ + preprocess: preprocess(), + onwarn: (warning, handler) => + { + // Suppress `a11y-missing-attribute` for missing href in links. + // Foundry doesn't follow accessibility rules. + if (warning.message.includes(` element should have an href attribute`)) { return; } + + // Let Rollup handle all other warnings normally. + handler(warning); + }, + }), + + postcss(postcssMain), + + resolve(s_RESOLVE_CONFIG), + + // When s_TYPHONJS_MODULE_LIB is true transpile against the Foundry module version of TRL. + s_TYPHONJS_MODULE_LIB && typhonjsRuntime(), + + babel({ + babelHelpers: 'bundled', + presets: [ + ['@babel/preset-env', { bugfixes: true, shippedProposals: true, targets: { esmodules: true } }] + ] + }) + ] + } + ]; +}; diff --git a/scripts/api.js b/scripts/api.js deleted file mode 100644 index 92dd6e65..00000000 --- a/scripts/api.js +++ /dev/null @@ -1,2450 +0,0 @@ -import * as lib from "./lib/lib.js"; -import CONSTANTS from "./constants.js"; -import { itemPileSocket, SOCKET_HANDLERS } from "./socket.js"; -import { ItemPileInventory } from "./formapplications/item-pile-inventory.js"; -import DropItemDialog from "./formapplications/drop-item-dialog.js"; -import HOOKS from "./hooks.js"; -import { hotkeyState } from "./hotkeys.js"; - -const preloadedFiles = new Set(); - -const API = { - - /** - * The actor class type used for the original item pile actor in this system - * - * @returns {String} - */ - get ACTOR_CLASS_TYPE() { - return game.settings.get(CONSTANTS.MODULE_NAME, "actorClassType"); - }, - - /** - * The currencies used in this system - * - * @returns {Array<{name: String, currency: String, img: String}>} - */ - get CURRENCIES() { - return game.settings.get(CONSTANTS.MODULE_NAME, "currencies"); - }, - - /** - * The attribute used to track the quantity of items in this system - * - * @returns {String} - */ - get ITEM_QUANTITY_ATTRIBUTE() { - return game.settings.get(CONSTANTS.MODULE_NAME, "itemQuantityAttribute"); - }, - - /** - * The filters for item types eligible for interaction within this system - * - * @returns {Array<{name: String, filters: String}>} - */ - get ITEM_FILTERS() { - return lib.cleanItemFilters(game.settings.get(CONSTANTS.MODULE_NAME, "itemFilters")); - }, - - /** - * The attributes for detecting item similarities - * - * @returns {Array} - */ - get ITEM_SIMILARITIES() { - return game.settings.get(CONSTANTS.MODULE_NAME, "itemSimilarities"); - }, - - /** - * Sets the actor class type used for the original item pile actor in this system - * - * @param {String} inClassType - * @returns {Promise} - */ - async setActorClassType(inClassType) { - if (typeof inClassType !== "string") { - throw lib.custom_error("setActorTypeClass | inClassType must be of type string"); - } - await game.settings.set(CONSTANTS.MODULE_NAME, "preconfiguredSystem", true); - return game.settings.set(CONSTANTS.MODULE_NAME, "actorClassType", inClassType); - }, - - /** - * Sets the currencies used in this system - * - * @param {Array<{name: String, currency: String, img: String}>} inCurrencies - * @returns {Promise} - */ - async setCurrencies(inCurrencies) { - if (!Array.isArray(inCurrencies)) { - throw lib.custom_error("setCurrencies | inCurrencies must be of type array"); - } - inCurrencies.forEach(currency => { - if (typeof currency !== "object") { - throw lib.custom_error("setCurrencies | each entry in the inCurrencies array must be of type object"); - } - if (typeof currency.name !== "string") { - throw lib.custom_error("setCurrencies | currency.name must be of type string"); - } - if (typeof currency.currency !== "string") { - throw lib.custom_error("setCurrencies | currency.path must be of type string"); - } - if (currency.img && typeof currency.img !== "string") { - throw lib.custom_error("setCurrencies | currency.img must be of type string"); - } - }) - await game.settings.set(CONSTANTS.MODULE_NAME, "preconfiguredSystem", true); - return game.settings.set(CONSTANTS.MODULE_NAME, "currencies", inCurrencies); - }, - - /** - * Sets the inAttribute used to track the quantity of items in this system - * - * @param {String} inAttribute - * @returns {Promise} - */ - async setItemQuantityAttribute(inAttribute) { - if (typeof inAttribute !== "string") { - throw lib.custom_error("setItemQuantityAttribute | inAttribute must be of type string"); - } - await game.settings.set(CONSTANTS.MODULE_NAME, "preconfiguredSystem", true); - return game.settings.set(CONSTANTS.MODULE_NAME, "itemQuantityAttribute", inAttribute); - }, - - /** - * Sets the items filters for interaction within this system - * - * @param {Array<{path: String, filters: String}>} inFilters - * @returns {Promise} - */ - async setItemFilters(inFilters) { - if (!Array.isArray(inFilters)) { - throw lib.custom_error("setItemFilters | inFilters must be of type array"); - } - inFilters.forEach(filter => { - if (typeof filter?.path !== "string") { - throw lib.custom_error("setItemFilters | each entry in inFilters must have a \"path\" property with a value that is of type string"); - } - if (typeof filter?.filters !== "string") { - throw lib.custom_error("setItemFilters | each entry in inFilters must have a \"filters\" property with a value that is of type string"); - } - }); - await game.settings.set(CONSTANTS.MODULE_NAME, "preconfiguredSystem", true); - return game.settings.set(CONSTANTS.MODULE_NAME, "itemFilters", inFilters); - }, - - /** - * Sets the attributes for detecting item similarities - * - * @param {Array} inPaths - * @returns {Promise} - */ - async setItemSimilarities(inPaths) { - if (!Array.isArray(inPaths)) { - throw lib.custom_error("setItemSimilarities | inPaths must be of type array"); - } - inPaths.forEach(path => { - if (typeof path !== "string") { - throw lib.custom_error("setItemSimilarities | each entry in inPaths must be of type string"); - } - }); - await game.settings.set(CONSTANTS.MODULE_NAME, "preconfiguredSystem", true); - return game.settings.set(CONSTANTS.MODULE_NAME, "itemSimilarities", inPaths); - }, - - /** - * Creates the default item pile token at a location. - * - * @param {Object} position The position to create the item pile at - * @param {String/Boolean} [sceneId=false] Which scene to create the item pile on - * @param {Array/Boolean} [items=false] Any items to create on the item pile - * @param {String/Boolean} [pileActorName=false] Whether to use an existing item pile actor as the basis of this new token - * - * @returns {Promise} - */ - async createItemPile(position, { sceneId = game.user.viewedScene, items = false, pileActorName = false } = {}) { - - const hookResult = Hooks.call(HOOKS.PILE.PRE_CREATE, position, items, pileActorName); - if (hookResult === false) return; - - if (pileActorName) { - const pileActor = game.actors.getName(pileActorName); - if (!pileActor) { - throw lib.custom_error(`There is no actor of the name "${pileActorName}"`, true); - } else if (!lib.isValidItemPile(pileActor)) { - throw lib.custom_error(`The actor of name "${pileActorName}" is not a valid item pile actor.`, true); - } - } - - if (items) { - items = items.map(item => { - return item instanceof Item - ? item.toObject() - : item; - }) - } - - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.CREATE_PILE, sceneId, position, { pileActorName, items }); - }, - - /** - * Turns tokens and its actors into item piles - * - * @param {Token/TokenDocument/Array} targets The targets to be turned into item piles - * @param {Object} pileSettings Overriding settings to be put on the item piles' settings - * @param {Object} tokenSettings Overriding settings that will update the tokens' settings - * - * @return {Promise} The uuids of the targets after they were turned into item piles - */ - async turnTokensIntoItemPiles(targets, { pileSettings = {}, tokenSettings = {} } = {}) { - - const hookResult = Hooks.call(HOOKS.PILE.PRE_TURN_INTO, targets, pileSettings, tokenSettings); - if (hookResult === false) return; - - if (!Array.isArray(targets)) targets = [targets]; - - const targetUuids = targets.map(target => { - if (!(target instanceof Token || target instanceof TokenDocument)) { - throw lib.custom_error(`turnTokensIntoItemPiles | Target must be of type Token or TokenDocument`, true) - } - const targetUuid = lib.getUuid(target); - if (!targetUuid) throw lib.custom_error(`turnTokensIntoItemPiles | Could not determine the UUID, please provide a valid target`, true) - return targetUuid; - }) - - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.TURN_INTO_PILE, targetUuids, pileSettings, tokenSettings); - }, - - /** - * @private - */ - async _turnTokensIntoItemPiles(targetUuids, pileSettings = {}, tokenSettings = {}) { - - const tokenUpdateGroups = {}; - const actorUpdateGroups = {}; - const defaults = foundry.utils.duplicate(CONSTANTS.PILE_DEFAULTS); - - for (const targetUuid of targetUuids) { - - let target = await fromUuid(targetUuid); - - const existingPileSettings = foundry.utils.mergeObject(defaults, lib.getItemPileData(target)); - pileSettings = foundry.utils.mergeObject(existingPileSettings, pileSettings); - pileSettings.enabled = true; - - const targetItems = lib.getActorItems(target, pileSettings.overrideItemFilters); - const targetCurrencies = lib.getActorCurrencies(target, pileSettings.overrideCurrencies); - - const data = { data: pileSettings, items: targetItems, currencies: targetCurrencies }; - - tokenSettings = foundry.utils.mergeObject(tokenSettings, { - "img": lib.getItemPileTokenImage(target, data), - "scale": lib.getItemPileTokenScale(target, data), - "name": lib.getItemPileName(target, data) - }); - - const sceneId = targetUuid.split('.')[1]; - const tokenId = targetUuid.split('.')[3]; - - if (!tokenUpdateGroups[sceneId]) { - tokenUpdateGroups[sceneId] = [] - } - - tokenUpdateGroups[sceneId].push({ - "_id": tokenId, - ...tokenSettings, - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileSettings, - [`actorData.flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileSettings - }); - - if (target.isLinked) { - if (actorUpdateGroups[target.actor.id]) continue; - actorUpdateGroups[target.actor.id] = { - "_id": target.actor.id, - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileSettings - } - } - } - - await Actor.updateDocuments(Object.values(actorUpdateGroups)); - - for (const [sceneId, updateData] of Object.entries(tokenUpdateGroups)) { - const scene = game.scenes.get(sceneId); - await scene.updateEmbeddedDocuments("Token", updateData); - } - - setTimeout(API.rerenderTokenHud, 100); - - await itemPileSocket.executeForEveryone(SOCKET_HANDLERS.CALL_HOOK, HOOKS.PILE.TURN_INTO, targetUuids); - - return targetUuids; - - }, - - /** - * Reverts tokens from an item pile into a normal token and actor - * - * @param {Token/TokenDocument/Array} targets The targets to be reverted from item piles - * @param {Object} tokenSettings Overriding settings that will update the tokens - * - * @return {Promise} The uuids of the targets after they were reverted from being item piles - */ - async revertTokensFromItemPiles(targets, { tokenSettings = {} } = {}) { - const hookResult = Hooks.call(HOOKS.PILE.PRE_REVERT_FROM, targets, tokenSettings); - if (hookResult === false) return; - - if (!Array.isArray(targets)) targets = [targets]; - - const targetUuids = targets.map(target => { - if (!(target instanceof Token || target instanceof TokenDocument)) { - throw lib.custom_error(`revertTokensFromItemPiles | Target must be of type Token or TokenDocument`, true) - } - const targetUuid = lib.getUuid(target); - if (!targetUuid) throw lib.custom_error(`revertTokensFromItemPiles | Could not determine the UUID, please provide a valid target`, true) - return targetUuid; - }) - - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.REVERT_FROM_PILE, targetUuids, tokenSettings); - }, - - /** - * @private - */ - async _revertTokensFromItemPiles(targetUuids, tokenSettings) { - - const actorUpdateGroups = {}; - const tokenUpdateGroups = {}; - const defaults = foundry.utils.duplicate(CONSTANTS.PILE_DEFAULTS); - - for (const targetUuid of targetUuids) { - - let target = await fromUuid(targetUuid); - - const pileSettings = foundry.utils.mergeObject(defaults, lib.getItemPileData(target)); - pileSettings.enabled = false; - - const sceneId = targetUuid.split('.')[1]; - const tokenId = targetUuid.split('.')[3]; - - if (!tokenUpdateGroups[sceneId]) { - tokenUpdateGroups[sceneId] = []; - } - - tokenUpdateGroups[sceneId].push({ - "_id": tokenId, - ...tokenSettings, - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileSettings, - [`actorData.flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileSettings - }); - - if (target.isLinked) { - if (actorUpdateGroups[target.actor.id]) continue; - actorUpdateGroups[target.actor.id] = { - "_id": target.actor.id, - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileSettings - } - } - - } - - await Actor.updateDocuments(Object.values(actorUpdateGroups)); - - for (const [sceneId, updateData] of Object.entries(tokenUpdateGroups)) { - const scene = game.scenes.get(sceneId); - await scene.updateEmbeddedDocuments("Token", updateData); - } - - setTimeout(API.rerenderTokenHud, 100); - - await itemPileSocket.executeForEveryone(SOCKET_HANDLERS.CALL_HOOK, HOOKS.PILE.REVERT_FROM, targetUuids); - - return targetUuids; - - }, - - /** - * Opens a pile if it is enabled and a container - * - * @param {Token/TokenDocument} target - * @param {Token/TokenDocument/Boolean} [interactingToken=false] - * - * @return {Promise} - */ - async openItemPile(target, interactingToken = false) { - const targetDocument = lib.getDocument(target); - const interactingTokenDocument = interactingToken ? lib.getDocument(interactingToken) : false; - - const data = lib.getItemPileData(targetDocument); - if (!data?.enabled || !data?.isContainer) return false; - const wasLocked = data.locked; - const wasClosed = data.closed; - data.closed = false; - data.locked = false; - if (wasLocked) { - const hookResult = Hooks.call(HOOKS.PILE.PRE_UNLOCK, targetDocument, data, interactingTokenDocument); - if (hookResult === false) return; - } - const hookResult = Hooks.call(HOOKS.PILE.PRE_OPEN, targetDocument, data, interactingTokenDocument); - if (hookResult === false) return; - if (wasClosed && data.openSound) { - AudioHelper.play({ src: data.openSound }) - } - return API.updateItemPile(targetDocument, data, { interactingToken: interactingTokenDocument }); - }, - - /** - * Closes a pile if it is enabled and a container - * - * @param {Token/TokenDocument} target Target pile to close - * @param {Token/TokenDocument/Boolean} [interactingToken=false] - * - * @return {Promise} - */ - async closeItemPile(target, interactingToken = false) { - const targetDocument = lib.getDocument(target); - const interactingTokenDocument = interactingToken ? lib.getDocument(interactingToken) : false; - - const data = lib.getItemPileData(targetDocument); - if (!data?.enabled || !data?.isContainer) return false; - const wasClosed = data.closed; - data.closed = true; - const hookResult = Hooks.call(HOOKS.PILE.PRE_CLOSE, targetDocument, data, interactingTokenDocument); - if (hookResult === false) return; - if (!wasClosed && data.closeSound) { - AudioHelper.play({ src: data.closeSound }) - } - return API.updateItemPile(targetDocument, data, { interactingToken: interactingTokenDocument }); - }, - - /** - * Toggles a pile's closed state if it is enabled and a container - * - * @param {Token/TokenDocument} target Target pile to open or close - * @param {Token/TokenDocument/Boolean} [interactingToken=false] - * - * @return {Promise} - */ - async toggleItemPileClosed(target, interactingToken = false) { - const targetDocument = lib.getDocument(target); - const interactingTokenDocument = interactingToken ? lib.getDocument(interactingToken) : false; - - const data = lib.getItemPileData(targetDocument); - if (!data?.enabled || !data?.isContainer) return false; - if (data.closed) { - await API.openItemPile(targetDocument, interactingTokenDocument); - } else { - await API.closeItemPile(targetDocument, interactingTokenDocument); - } - return !data.closed; - }, - - /** - * Locks a pile if it is enabled and a container - * - * @param {Token/TokenDocument} target Target pile to lock - * @param {Token/TokenDocument/Boolean} [interactingToken=false] - * - * @return {Promise} - */ - async lockItemPile(target, interactingToken = false) { - const targetDocument = lib.getDocument(target); - const interactingTokenDocument = interactingToken ? lib.getDocument(interactingToken) : false; - - const data = lib.getItemPileData(targetDocument); - if (!data?.enabled || !data?.isContainer) return false; - const wasClosed = data.closed; - data.closed = true; - data.locked = true; - if (!wasClosed) { - const hookResult = Hooks.call(HOOKS.PILE.PRE_CLOSE, targetDocument, data, interactingTokenDocument); - if (hookResult === false) return; - } - const hookResult = Hooks.call(HOOKS.PILE.PRE_LOCK, targetDocument, data, interactingTokenDocument); - if (hookResult === false) return; - if (!wasClosed && data.closeSound) { - AudioHelper.play({ src: data.closeSound }) - } - return API.updateItemPile(targetDocument, data, { interactingToken: interactingTokenDocument }); - }, - - /** - * Unlocks a pile if it is enabled and a container - * - * @param {Token/TokenDocument} target Target pile to unlock - * @param {Token/TokenDocument/Boolean} [interactingToken=false] - * - * @return {Promise} - */ - async unlockItemPile(target, interactingToken = false) { - const targetDocument = lib.getDocument(target); - const interactingTokenDocument = interactingToken ? lib.getDocument(interactingToken) : false; - - const data = lib.getItemPileData(targetDocument); - if (!data?.enabled || !data?.isContainer) return false; - data.locked = false; - Hooks.call(HOOKS.PILE.PRE_UNLOCK, targetDocument, data, interactingTokenDocument); - return API.updateItemPile(targetDocument, data, { interactingToken: interactingTokenDocument }); - }, - - /** - * Toggles a pile's locked state if it is enabled and a container - * - * @param {Token/TokenDocument} target Target pile to lock or unlock - * @param {Token/TokenDocument/Boolean} [interactingToken=false] - * - * @return {Promise} - */ - async toggleItemPileLocked(target, interactingToken = false) { - const targetDocument = lib.getDocument(target); - const interactingTokenDocument = interactingToken ? lib.getDocument(interactingToken) : false; - - const data = lib.getItemPileData(targetDocument); - if (!data?.enabled || !data?.isContainer) return false; - if (data.locked) { - return API.unlockItemPile(targetDocument, interactingTokenDocument); - } - return API.lockItemPile(targetDocument, interactingTokenDocument); - }, - - /** - * Causes the item pile to play a sound as it was attempted to be opened, but was locked - * - * @param {Token/TokenDocument} target - * @param {Token/TokenDocument/Boolean} [interactingToken=false] - * - * @return {Promise} - */ - async rattleItemPile(target, interactingToken = false) { - const targetDocument = lib.getDocument(target); - const interactingTokenDocument = interactingToken ? lib.getDocument(interactingToken) : false; - - const data = lib.getItemPileData(targetDocument); - if (!data?.enabled || !data?.isContainer || !data?.locked) return false; - Hooks.call(HOOKS.PILE.PRE_RATTLE, targetDocument, data, interactingTokenDocument); - if (data.lockedSound) { - AudioHelper.play({ src: data.lockedSound }) - } - await itemPileSocket.executeForEveryone(SOCKET_HANDLERS.CALL_HOOK, HOOKS.PILE.RATTLE, lib.getUuid(targetDocument), data, lib.getUuid(interactingTokenDocument)); - return true; - }, - - /** - * Whether an item pile is locked. If it is not enabled or not a container, it is always false. - * - * @param {Token/TokenDocument} target - * - * @return {Boolean} - */ - isItemPileLocked(target) { - const targetDocument = lib.getDocument(target); - const data = lib.getItemPileData(targetDocument); - if (!data?.enabled || !data?.isContainer) return false; - return data.locked; - }, - - /** - * Whether an item pile is closed. If it is not enabled or not a container, it is always false. - * - * @param {Token/TokenDocument} target - * - * @return {Boolean} - */ - isItemPileClosed(target) { - const targetDocument = lib.getDocument(target); - const data = lib.getItemPileData(targetDocument); - if (!data?.enabled || !data?.isContainer) return false; - return data.closed; - }, - - /** - * Whether an item pile is a container. If it is not enabled, it is always false. - * - * @param {Token/TokenDocument} target - * - * @return {Boolean} - */ - isItemPileContainer(target) { - const targetDocument = lib.getDocument(target); - const data = lib.getItemPileData(targetDocument); - return data?.enabled && data?.isContainer; - }, - - /** - * Updates a pile with new data. - * - * @param {Token/TokenDocument} target - * @param {Object} newData - * @param {Token/TokenDocument/Boolean} [interactingToken=false] - * @param {Object/Boolean} [tokenSettings=false] - * - * @return {Promise} - */ - async updateItemPile(target, newData, { interactingToken = false, tokenSettings = false } = {}) { - - const targetUuid = lib.getUuid(target); - if (!targetUuid) throw lib.custom_error(`updateItemPile | Could not determine the UUID, please provide a valid target`, true); - - const interactingTokenUuid = interactingToken ? lib.getUuid(interactingToken) : false; - if (interactingToken && !interactingTokenUuid) throw lib.custom_error(`updateItemPile | Could not determine the UUID, please provide a valid target`, true); - - const hookResult = Hooks.call(HOOKS.PILE.PRE_UPDATE, target, newData, interactingToken, tokenSettings); - if (hookResult === false) return; - - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.UPDATE_PILE, targetUuid, newData, { - interactingTokenUuid, - tokenSettings - }) - }, - - /** - * @private - */ - async _updateItemPile(targetUuid, newData, { interactingTokenUuid = false, tokenSettings = false } = {}) { - - const target = await fromUuid(targetUuid); - - const oldData = lib.getItemPileData(target); - - const data = foundry.utils.mergeObject( - foundry.utils.duplicate(oldData), - foundry.utils.duplicate(newData) - ); - - const diff = foundry.utils.diffObject(oldData, data); - - await lib.wait(15); - - await lib.updateItemPileData(target, data, tokenSettings); - - if (data.enabled && data.isContainer) { - if (diff?.closed === true) { - API._executeItemPileMacro(targetUuid, { - action: "closeItemPile", - source: interactingTokenUuid, - target: targetUuid - }); - } - if (diff?.locked === true) { - API._executeItemPileMacro(targetUuid, { - action: "lockItemPile", - source: interactingTokenUuid, - target: targetUuid - }); - } - if (diff?.locked === false) { - API._executeItemPileMacro(targetUuid, { - action: "unlockItemPile", - source: interactingTokenUuid, - target: targetUuid - }); - } - if (diff?.closed === false) { - API._executeItemPileMacro(targetUuid, { - action: "openItemPile", - source: interactingTokenUuid, - target: targetUuid - }); - } - } - - return itemPileSocket.executeForEveryone(SOCKET_HANDLERS.UPDATED_PILE, targetUuid, diff, interactingTokenUuid); - }, - - /** - * @private - */ - async _updatedItemPile(targetUuid, diffData, interactingTokenUuid) { - - const target = await lib.getToken(targetUuid); - - const interactingToken = interactingTokenUuid ? await fromUuid(interactingTokenUuid) : false; - - if (foundry.utils.isObjectEmpty(diffData)) return; - - const data = lib.getItemPileData(target); - - Hooks.callAll(HOOKS.PILE.UPDATE, target, diffData, interactingToken) - - if (data.enabled && data.isContainer) { - if (diffData?.closed === true) { - Hooks.callAll(HOOKS.PILE.CLOSE, target, interactingToken) - } - if (diffData?.locked === true) { - Hooks.callAll(HOOKS.PILE.LOCK, target, interactingToken) - } - if (diffData?.locked === false) { - Hooks.callAll(HOOKS.PILE.UNLOCK, target, interactingToken) - } - if (diffData?.closed === false) { - Hooks.callAll(HOOKS.PILE.OPEN, target, interactingToken) - } - } - }, - - /** - * Deletes a pile, calling the relevant hooks. - * - * @param {Token/TokenDocument} target - * - * @return {Promise} - */ - async deleteItemPile(target) { - if (!lib.isValidItemPile(target)) { - if (!targetUuid) throw lib.custom_error(`deleteItemPile | This is not an item pile, please provide a valid target`, true); - } - const targetUuid = lib.getUuid(target); - if (!targetUuid) throw lib.custom_error(`deleteItemPile | Could not determine the UUID, please provide a valid target`, true); - if (!targetUuid.includes("Token")) { - throw lib.custom_error(`deleteItemPile | Please provide a Token or TokenDocument`, true); - } - const hookResult = Hooks.call(HOOKS.PILE.PRE_DELETE, target); - if (hookResult === false) return; - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.DELETE_PILE, targetUuid); - }, - - async _deleteItemPile(targetUuid) { - const target = await lib.getToken(targetUuid); - return target.delete(); - }, - - /** - * @deprecated - */ - async openItemPileInventory(...args) { - lib.custom_warning("deprecation warning - openItemPileInventory has been renamed to renderItemPileInventory") - return this.renderItemPileInterface(...args); - }, - - /** - * Remotely opens an item pile's inventory, if you have permission to edit the item pile. Passing a user ID, or a list of user IDs, will cause those users to open the item pile. - * - * @param {Token/TokenDocument/Actor} target The item pile actor or token whose inventory to open - * @param {Array} userIds The IDs of the users that should open this item pile inventory - * @param {boolean/Token/TokenDocument/Actor} [inspectingTarget=false] This will force the users to inspect this item pile as a specific character - * @param {Boolean} [useDefaultCharacter=true] Causes the users to inspect the item pile inventory as their default character - * @returns {Promise} - */ - async renderItemPileInterface(target, userIds = [game.user.id], { - inspectingTarget = false, - useDefaultCharacter = true - } = {}) { - - const targetDocument = lib.getDocument(target); - const targetUuid = lib.getUuid(targetDocument); - if (!targetUuid) throw lib.custom_error(`renderItemPileInterface | Could not determine the UUID, please provide a valid target item pile`); - - if (!lib.isValidItemPile(targetDocument)) { - throw lib.custom_error("renderItemPileInterface | This target is not a valid item pile") - } - - if (inspectingTarget && useDefaultCharacter) { - throw lib.custom_error("renderItemPileInterface | You cannot force users to use both their default character and a specific character to inspect the pile") - } - - if (!Array.isArray(userIds)) userIds = [userIds]; - - if (!game.user.isGM) { - if (userIds.length > 1 || !userIds.includes(game.user.id)) { - throw lib.custom_error(`renderItemPileInterface | You are not a GM, so you cannot force others to render an item pile's interface`); - } - userIds = [game.user.id]; - } - - for (const userId of userIds) { - const user = game.users.get(userId); - if (!user) throw lib.custom_error(`renderItemPileInterface | No user with ID "${userId}" exists`); - if (useDefaultCharacter) { - if (!user.character) { - lib.custom_warning(`renderItemPileInterface | User with id "${userId}" has no default character`, true); - return; - } - } - } - - const inspectingTargetUuid = inspectingTarget ? lib.getUuid(inspectingTarget) : false; - if (inspectingTarget && !inspectingTargetUuid) throw lib.custom_error(`renderItemPileInterface | Could not determine the UUID, please provide a valid inspecting target`); - - return itemPileSocket.executeForUsers(SOCKET_HANDLERS.RENDER_INTERFACE, userIds, targetUuid, inspectingTargetUuid, useDefaultCharacter) - }, - - async _renderItemPileInterface(targetUuid, inspectingTargetUuid, useDefaultCharacter) { - const target = await fromUuid(targetUuid); - - let inspectingTarget; - if (useDefaultCharacter && !game.user.isGM) { - inspectingTarget = game.user.character; - } else { - inspectingTarget = inspectingTargetUuid ? (await fromUuid(inspectingTargetUuid)) : false; - } - - return ItemPileInventory.show(target, inspectingTarget, { remote: true }); - }, - - /** - * Whether a given document is a valid pile or not - * - * @param {Token/TokenDocument/Actor} document - * @return {Boolean} - */ - isValidItemPile(document) { - return lib.isValidItemPile(document); - }, - - /** - * Whether the item pile is empty - * - * @param {Token/TokenDocument/Actor} target - * @returns {Boolean} - */ - isItemPileEmpty(target) { - return lib.isItemPileEmpty(target); - }, - - /** - * Returns the items this item pile can transfer - * - * @param {Token/TokenDocument/Actor} target - * @param {Array/Boolean} [itemFilters=false] Array of item types disallowed - will default to pile settings or module settings if none provided - * @returns {Array} - */ - getItemPileItems(target, itemFilters = false) { - return lib.getActorItems(target, itemFilters); - }, - - /** - * Returns the currencies this item pile can transfer - * - * @param {Token/TokenDocument/Actor} target - * @returns {Array} - */ - getItemPileCurrencies(target) { - return lib.getActorCurrencies(target); - }, - - /** - * Refreshes the target image of an item pile, ensuring it remains in sync - * - * @param {Token/TokenDocument/Actor} target - * @return {Promise} - */ - async refreshItemPile(target) { - if (!lib.isValidItemPile(target)) return; - const targetUuid = lib.getUuid(target); - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.REFRESH_PILE, targetUuid) - }, - - /** - * @private - */ - async _refreshItemPile(targetUuid) { - const targetDocument = await fromUuid(targetUuid); - - if (!lib.isValidItemPile(targetDocument)) return; - - let targets = [targetDocument] - if (targetDocument instanceof Actor) { - targets = Array.from(canvas.tokens.getDocuments()).filter(token => token.actor === targetDocument); - } - - return Promise.allSettled(targets.map(_target => { - return new Promise(async (resolve) => { - const uuid = lib.getUuid(_target); - const shouldBeDeleted = await API._checkItemPileShouldBeDeleted(uuid); - if (!shouldBeDeleted) { - await _target.update({ - "img": lib.getItemPileTokenImage(targetDocument), - "scale": lib.getItemPileTokenScale(targetDocument), - "name": lib.getItemPileName(targetDocument) - }) - } - resolve(); - }) - })); - }, - - /** - * Causes all connected users to re-render a specific pile's inventory UI - * - * @param {String} inPileUuid The uuid of the pile to be re-rendered - * @param {Boolean} [deleted=false] Whether the pile was deleted as a part of this re-render - * @return {Promise} - */ - async rerenderItemPileInventoryApplication(inPileUuid, deleted = false) { - return itemPileSocket.executeForEveryone(SOCKET_HANDLERS.RERENDER_PILE_INVENTORY, inPileUuid, deleted); - }, - - /** - * @private - */ - async _rerenderItemPileInventoryApplication(inPileUuid, deleted = false) { - return ItemPileInventory.rerenderActiveApp(inPileUuid, deleted); - }, - - /** - * Splits an item pile's content between all players (or a specified set of target actors). - * - * @param itemPile {Token/TokenDocument/Actor} The item pile to split - * @param targets {boolean/TokenDocument/Actor/Array} [targets=false] The targets to receive the split contents - * @param instigator {boolean/TokenDocument/Actor} [instigator=false] Whether this was triggered by a specific actor - * @returns {Promise} - */ - async splitItemPileContents(itemPile, { targets = false, instigator = false } = {}) { - - if (!lib.isValidItemPile(itemPile)) return false; - - const itemPileUuid = lib.getUuid(itemPile); - if (!itemPileUuid) throw lib.custom_error(`SplitItemPileContents | Could not determine the UUID, please provide a valid item pile`, true) - - const itemPileActor = itemPile?.actor ?? itemPile; - - if (targets) { - if (!Array.isArray(targets)) { - targets = [targets] - } - targets.forEach(actor => { - if (!(actor instanceof TokenDocument || actor instanceof Actor)) { - throw lib.custom_error("SplitItemPileContents | Each of the entries in targets must be of type TokenDocument or Actor") - } - }) - targets = targets.map(target => target?.character ?? target?.actor ?? target); - } - - if (instigator && !(instigator instanceof TokenDocument || instigator instanceof Actor)) { - throw lib.custom_error("SplitItemPileContents | splitter must be of type TokenDocument or Actor") - } - - const actorUuids = (targets || lib.getPlayersForItemPile(itemPileActor).map(u => u.character)).map(actor => lib.getUuid(actor)); - - const hookResult = Hooks.call(HOOKS.PILE.PRE_SPLIT_INVENTORY, itemPile, targets, game.user.id, instigator); - if (hookResult === false) return; - - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.SPLIT_PILE, itemPileUuid, actorUuids, game.user.id, instigator); - - }, - - /** - * @private - */ - async _splitItemPileContents(itemPileUuid, actorUuids, userId, instigator) { - - const itemPile = await fromUuid(itemPileUuid); - - const itemPileActor = itemPile?.actor ?? itemPile; - - const actors = await Promise.all(actorUuids.map((uuid) => fromUuid(uuid))); - - const itemsToRemove = {}; - const currenciesToRemove = {} - - const transferData = { - items: {}, - currencies: {}, - num_players: actors.length - } - - for(const actor of actors){ - - const itemsToTransfer = lib.getItemPileItemsForActor(itemPileActor, actor, true).filter(item => item.toShare).map(item => { - itemsToRemove[item.id] = (itemsToRemove[item.id] ?? 0) + item.shareLeft; - transferData.items[item.id] = { - id: item.id, - name: item.name, - img: item.img, - quantity: (transferData.items[item.id]?.quantity ?? 0) + (item.shareLeft + item.previouslyTaken) - } - return { _id: item.id, quantity: item.shareLeft }; - }).filter(item => item.quantity); - - const currenciesToTransfer = Object.fromEntries(lib.getItemPileCurrenciesForActor(itemPileActor, actor, true).filter(item => item.toShare).map(currency => { - currenciesToRemove[currency.path] = (currenciesToRemove[currency.path] ?? 0) + currency.shareLeft; - transferData.currencies[currency.path] = { - path: currency.path, - name: currency.name, - img: currency.img, - quantity: (transferData.currencies[currency.path]?.quantity ?? 0) + (currency.shareLeft + currency.previouslyTaken), - index: currency.index - } - return [currency.path, currency.shareLeft] - }).filter(currency => currency[1])); - - await API._addItems(actor.uuid, itemsToTransfer, userId, { runHooks: false }); - await API._addAttributes(actor.uuid, currenciesToTransfer, userId, { runHooks: false }); - - } - - transferData.items = Object.values(transferData.items).map(item => { - item.quantity = item.quantity / actors.length; - return item; - }); - - transferData.currencies = Object.values(transferData.currencies).map(currency => { - currency.quantity = currency.quantity / actors.length; - return currency; - }); - - await lib.clearItemPileSharingData(itemPileActor); - - await API._removeItems(itemPileUuid, Object.entries(itemsToRemove).map(entry => ({ _id: entry[0], quantity: entry[1] })), userId, { runHooks: false }); - await API._removeAttributes(itemPileUuid, currenciesToRemove, userId, { runHooks: false }); - - await itemPileSocket.executeForEveryone( - SOCKET_HANDLERS.CALL_HOOK, - HOOKS.PILE.SPLIT_INVENTORY, - itemPileUuid, - transferData, - userId, - instigator - ); - - const macroData = { - action: "splitInventory", - source: itemPileUuid, - target: actorUuids, - transfers: transferData, - userId: userId, - instigator: instigator - }; - - await API._executeItemPileMacro(itemPileUuid, macroData); - - const shouldBeDeleted = await API._checkItemPileShouldBeDeleted(itemPileUuid); - await API.rerenderItemPileInventoryApplication(itemPileUuid, shouldBeDeleted); - - if (shouldBeDeleted) { - await API._deleteItemPile(itemPileUuid); - } - - return transferData; - - }, - - /* --- ITEM AND ATTRIBUTE METHODS --- */ - - /** - * Adds item to an actor, increasing item quantities if matches were found - * - * @param {Actor/TokenDocument/Token} target The target to add an item to - * @param {Array} items An array of objects, with the key "item" being an item object or an Item class (the foundry class), with an optional key of "quantity" being the amount of the item to add - * @param {Boolean} [mergeSimilarItems=true] Whether to merge similar items based on their name and type - * @param {String/Boolean} [interactionId=false] The interaction ID of this action - * - * @returns {Promise} An array of objects, each containing the item that was added or updated, and the quantity that was added - */ - async addItems(target, items, { mergeSimilarItems = true, interactionId = false } = {}) { - - const hookResult = Hooks.call(HOOKS.ITEM.PRE_ADD, target, items, interactionId); - if (hookResult === false) return; - - const targetUuid = lib.getUuid(target); - if (!targetUuid) throw lib.custom_error(`AddItems | Could not determine the UUID, please provide a valid target`, true) - - const itemsToAdd = [] - items.forEach(itemData => { - - let item = itemData; - if (itemData instanceof Item) { - item = itemData.toObject(); - } else if (itemData.item instanceof Item) { - item = itemData.item.toObject(); - } else if (itemData.item) { - item = itemData.item; - } - - if (itemData?.quantity !== undefined) { - setProperty(item, API.ITEM_QUANTITY_ATTRIBUTE, itemData?.quantity) - } - - const existingItems = mergeSimilarItems ? lib.findSimilarItem(itemsToAdd, item) : false; - if (existingItems) { - setProperty(existingItems, API.ITEM_QUANTITY_ATTRIBUTE, lib.getItemQuantity(existingItems) + lib.getItemQuantity(item)) - } else { - itemsToAdd.push(item); - } - - }); - - if (interactionId) { - if (typeof interactionId !== "string") throw lib.custom_error(`AddItems | interactionId must be of type string`); - } - - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.ADD_ITEMS, targetUuid, itemsToAdd, game.user.id, { interactionId }); - }, - - /** - * @private - */ - async _addItems(targetUuid, items, userId, { runHooks = true, interactionId = false } = {}) { - - const target = await fromUuid(targetUuid); - const targetActor = target instanceof TokenDocument - ? target.actor - : target; - - const targetActorItems = Array.from(targetActor.items); - - const itemsAdded = []; - const itemsToCreate = []; - const itemsToUpdate = []; - for (const itemData of items) { - - let item = itemData?.item ?? itemData; - delete item._id; - - const foundItem = lib.findSimilarItem(targetActorItems, item); - - const incomingQuantity = Number(itemData?.quantity ?? lib.getItemQuantity(itemData)); - - if (foundItem) { - item = foundItem.toObject(); - const currentQuantity = lib.getItemQuantity(item); - const newQuantity = currentQuantity + incomingQuantity; - itemsToUpdate.push({ - "_id": item._id, - [API.ITEM_QUANTITY_ATTRIBUTE]: newQuantity - }); - - setProperty(item, API.ITEM_QUANTITY_ATTRIBUTE, newQuantity) - itemsAdded.push({ - item: item, - quantity: incomingQuantity - }); - } else { - setProperty(item, API.ITEM_QUANTITY_ATTRIBUTE, incomingQuantity) - itemsToCreate.push(item); - } - - } - - const itemsCreated = await targetActor.createEmbeddedDocuments("Item", itemsToCreate); - await targetActor.updateEmbeddedDocuments("Item", itemsToUpdate); - - itemsCreated.forEach(item => { - const itemObject = item.toObject() - itemsAdded.push({ - item: itemObject, - quantity: lib.getItemQuantity(itemObject) - }) - }); - - if (runHooks) { - - await itemPileSocket.executeForEveryone(SOCKET_HANDLERS.CALL_HOOK, HOOKS.ITEM.ADD, targetUuid, itemsAdded, userId, interactionId); - - const macroData = { - action: "addItems", - target: targetUuid, - items: itemsAdded, - userId: userId, - interactionId: interactionId - }; - - await API._executeItemPileMacro(targetUuid, macroData); - - await API.rerenderItemPileInventoryApplication(targetUuid); - - } - - return itemsAdded; - - }, - - /** - * Subtracts the quantity of items on an actor. If the quantity of an item reaches 0, the item is removed from the actor. - * - * @param {Actor/Token/TokenDocument} target The target to remove a items from - * @param {Array} items An array of objects each containing the item id (key "_id") and the quantity to remove (key "quantity"), or Items (the foundry class) or strings of IDs to remove all quantities of - * @param {String/Boolean} [interactionId=false] The interaction ID of this action - * - * @returns {Promise} An array of objects, each containing the item that was removed or updated, the quantity that was removed, and whether the item was deleted - */ - async removeItems(target, items, { interactionId = false } = {}) { - - const hookResult = Hooks.call(HOOKS.ITEM.PRE_REMOVE, target, items, interactionId); - if (hookResult === false) return; - - const targetUuid = lib.getUuid(target); - if (!targetUuid) throw lib.custom_error(`RemoveItems | Could not determine the UUID, please provide a valid target`, true); - - const targetActorItems = API.getItemPileItems(target); - - items = items.map(itemData => { - - let item; - if (typeof itemData === "string" || itemData._id) { - const itemId = typeof itemData === "string" ? itemData : itemData._id; - item = targetActorItems.find(actorItem => actorItem.id === itemId); - if (!item) { - throw lib.custom_error(`RemoveItems | Could not find item with id "${itemId}" on target "${targetUuid}"`, true) - } - item = item.toObject(); - } else { - if (itemData.item instanceof Item) { - item = itemData.item.toObject(); - } else { - item = itemData.item; - } - let foundActorItem = targetActorItems.find(actorItem => actorItem.id === item._id); - if (!foundActorItem) { - throw lib.custom_error(`RemoveItems | Could not find item with id "${item._id}" on target "${targetUuid}"`, true) - } - } - - return { - _id: item._id, - quantity: itemData?.quantity ?? lib.getItemQuantity(item) - } - }); - - if (interactionId) { - if (typeof interactionId !== "string") throw lib.custom_error(`RemoveItems | interactionId must be of type string`); - } - - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.REMOVE_ITEMS, targetUuid, items, game.user.id, { interactionId }); - }, - - /** - * @private - */ - async _removeItems(targetUuid, items, userId, { runHooks = true, interactionId = false } = {}) { - - const target = await fromUuid(targetUuid); - const targetActor = target instanceof TokenDocument - ? target.actor - : target; - - const itemsRemoved = []; - const itemsToUpdate = []; - const itemsToDelete = []; - for (const itemData of items) { - - let item = targetActor.items.get(itemData._id); - - if (!item) continue; - - item = item.toObject(); - - const currentQuantity = lib.getItemQuantity(item); - - const quantityToRemove = itemData.quantity; - - const newQuantity = Math.max(0, currentQuantity - quantityToRemove); - - if (newQuantity >= 1) { - itemsToUpdate.push({ _id: item._id, [API.ITEM_QUANTITY_ATTRIBUTE]: newQuantity }); - setProperty(item, API.ITEM_QUANTITY_ATTRIBUTE, quantityToRemove); - itemsRemoved.push({ - item: item, - quantity: quantityToRemove, - deleted: false - }); - } else { - itemsToDelete.push(item._id); - setProperty(item, API.ITEM_QUANTITY_ATTRIBUTE, currentQuantity); - itemsRemoved.push({ - item: item, - quantity: currentQuantity, - deleted: true - }); - } - - } - - await targetActor.updateEmbeddedDocuments("Item", itemsToUpdate); - await targetActor.deleteEmbeddedDocuments("Item", itemsToDelete); - - if (runHooks) { - - await itemPileSocket.executeForEveryone(SOCKET_HANDLERS.CALL_HOOK, HOOKS.ITEM.REMOVE, targetUuid, itemsRemoved, userId, interactionId); - - const macroData = { - action: "removeItems", - target: targetUuid, - items: itemsRemoved, - userId: userId, - interactionId: interactionId - }; - - await API._executeItemPileMacro(targetUuid, macroData); - - const shouldBeDeleted = await API._checkItemPileShouldBeDeleted(targetUuid); - - await API.rerenderItemPileInventoryApplication(targetUuid, shouldBeDeleted); - - if (shouldBeDeleted) { - await API._deleteItemPile(targetUuid); - } - - } - - return itemsRemoved; - - }, - - /** - * Transfers items from the source to the target, subtracting a number of quantity from the source's item and adding it to the target's item, deleting items from the source if their quantity reaches 0 - * - * @param {Actor/Token/TokenDocument} source The source to transfer the items from - * @param {Actor/Token/TokenDocument} target The target to transfer the items to - * @param {Array} items An array of objects each containing the item id (key "_id") and the quantity to transfer (key "quantity"), or Items (the foundry class) or strings of IDs to transfer all quantities of - * @param {String/Boolean} [interactionId=false] The interaction ID of this action - * - * @returns {Promise} An array of objects, each containing the item that was added or updated, and the quantity that was transferred - */ - async transferItems(source, target, items, { interactionId = false } = {}) { - - const hookResult = Hooks.call(HOOKS.ITEM.PRE_TRANSFER, source, target, items, interactionId); - if (hookResult === false) return; - - const sourceUuid = lib.getUuid(source); - if (!sourceUuid) throw lib.custom_error(`TransferItems | Could not determine the UUID, please provide a valid source`, true) - - const sourceActorItems = API.getItemPileItems(source); - - items = items.map(itemData => { - - let item; - if (typeof itemData === "string" || itemData._id) { - const itemId = typeof itemData === "string" ? itemData : itemData._id; - item = sourceActorItems.find(actorItem => actorItem.id === itemId); - if (!item) { - throw lib.custom_error(`TransferItems | Could not find item with id "${itemId}" on target "${sourceUuid}"`, true) - } - item = item.toObject(); - } else if (itemData.item instanceof Item) { - item = itemData.item.toObject(); - } else { - item = itemData.item; - } - - let foundActorItem = sourceActorItems.find(actorItem => actorItem.id === item._id); - if (!foundActorItem) { - throw lib.custom_error(`TransferItems | Could not find item with id "${item._id}" on target "${sourceUuid}"`, true) - } - - return { - _id: item._id, - quantity: Math.max((itemData?.quantity ?? 0) ?? lib.getItemQuantity(itemData)) - } - }); - - const targetUuid = lib.getUuid(target); - if (!targetUuid) throw lib.custom_error(`TransferItems | Could not determine the UUID, please provide a valid target`, true) - - if (interactionId) { - if (typeof interactionId !== "string") throw lib.custom_error(`TransferItems | interactionId must be of type string`); - } - - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.TRANSFER_ITEMS, sourceUuid, targetUuid, items, game.user.id, { interactionId }); - - }, - - /** - * @private - */ - async _transferItems(sourceUuid, targetUuid, items, userId, { runHooks = true, interactionId = false } = {}) { - - const itemsRemoved = await API._removeItems(sourceUuid, items, userId, { runHooks: false }); - - const itemsAdded = await API._addItems(targetUuid, itemsRemoved, userId, { runHooks: false }); - - if (runHooks) { - - await itemPileSocket.executeForEveryone(SOCKET_HANDLERS.CALL_HOOK, HOOKS.ITEM.TRANSFER, sourceUuid, targetUuid, itemsAdded, userId, interactionId); - - const macroData = { - action: "transferItems", - source: sourceUuid, - target: targetUuid, - itemsAdded: itemsAdded, - userId: userId, - interactionId: interactionId - }; - await API._executeItemPileMacro(sourceUuid, macroData); - await API._executeItemPileMacro(targetUuid, macroData); - - const shouldBeDeleted = await API._checkItemPileShouldBeDeleted(sourceUuid); - await API.rerenderItemPileInventoryApplication(sourceUuid, shouldBeDeleted); - await API.rerenderItemPileInventoryApplication(targetUuid); - - const itemPile = await fromUuid(sourceUuid); - - if (shouldBeDeleted) { - await API._deleteItemPile(sourceUuid); - } else if (lib.isItemPileEmpty(itemPile)) { - await lib.clearItemPileSharingData(itemPile); - } else { - await lib.setItemPileSharingData(sourceUuid, targetUuid, { items: itemsAdded }); - } - - } - - return itemsAdded; - - }, - - /** - * Transfers all items between the source and the target. - * - * @param {Actor/Token/TokenDocument} source The actor to transfer all items from - * @param {Actor/Token/TokenDocument} target The actor to receive all the items - * @param {Array/Boolean} [itemFilters=false] Array of item types disallowed - will default to module settings if none provided - * @param {String/Boolean} [interactionId=false] The interaction ID of this action - * - * @returns {Promise} An array containing all of the items that were transferred to the target - */ - async transferAllItems(source, target, { itemFilters = false, interactionId = false } = {}) { - - const hookResult = Hooks.call(HOOKS.ITEM.PRE_TRANSFER_ALL, source, target, itemFilters, interactionId); - if (hookResult === false) return; - - const sourceUuid = lib.getUuid(source); - if (!sourceUuid) throw lib.custom_error(`TransferAllItems | Could not determine the UUID, please provide a valid source`, true) - - const targetUuid = lib.getUuid(target); - if (!targetUuid) throw lib.custom_error(`TransferAllItems | Could not determine the UUID, please provide a valid target`, true) - - if (itemFilters) { - if (!Array.isArray(itemFilters)) throw lib.custom_error(`TransferAllItems | itemFilters must be of type array`); - itemFilters.forEach(entry => { - if (typeof entry?.path !== "string") throw lib.custom_error(`TransferAllItems | each entry in the itemFilters must have a "path" property that is of type string`); - if (typeof entry?.filter !== "string") throw lib.custom_error(`TransferAllItems | each entry in the itemFilters must have a "filter" property that is of type string`); - }) - } - - if (interactionId) { - if (typeof interactionId !== "string") throw lib.custom_error(`TransferAllItems | interactionId must be of type string`); - } - - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.TRANSFER_ALL_ITEMS, sourceUuid, targetUuid, game.user.id, { - itemFilters, - interactionId - }); - }, - - /** - * @private - */ - async _transferAllItems(sourceUuid, targetUuid, userId, { - itemFilters = false, - runHooks = false, - interactionId = false - } = {}) { - - const source = await fromUuid(sourceUuid); - - const itemsToRemove = API.getItemPileItems(source, itemFilters).map(item => item.toObject()); - - const itemsRemoved = await API._removeItems(sourceUuid, itemsToRemove, userId, { - runHooks: false, - interactionId - }); - const itemAdded = await API._addItems(targetUuid, itemsRemoved, userId, { runHooks: false, interactionId }); - - if (runHooks) { - - await itemPileSocket.executeForEveryone(SOCKET_HANDLERS.TRANSFER_ALL_ITEMS, HOOKS.ITEM.TRANSFER_ALL, sourceUuid, targetUuid, itemAdded, userId, interactionId); - - const macroData = { - action: "transferAllItems", - source: sourceUuid, - target: targetUuid, - items: itemAdded, - userId: userId, - interactionId: interactionId - }; - await API._executeItemPileMacro(sourceUuid, macroData); - await API._executeItemPileMacro(targetUuid, macroData); - - const shouldBeDeleted = await API._checkItemPileShouldBeDeleted(sourceUuid); - await API.rerenderItemPileInventoryApplication(sourceUuid, shouldBeDeleted); - await API.rerenderItemPileInventoryApplication(targetUuid); - - if (shouldBeDeleted) { - await API._deleteItemPile(sourceUuid); - } - - } - - return itemAdded; - }, - - /** - * Adds to attributes on an actor - * - * @param {Actor/Token/TokenDocument} target The target whose attribute will have a set quantity added to it - * @param {Object} attributes An object with each key being an attribute path, and its value being the quantity to add - * @param {String/Boolean} [interactionId=false] The interaction ID of this action - * - * @returns {Promise} An array containing a key value pair of the attribute path and the quantity of that attribute that was removed - * - */ - async addAttributes(target, attributes, { interactionId = false } = {}) { - - const hookResult = Hooks.call(HOOKS.ATTRIBUTE.PRE_ADD, target, attributes, interactionId); - if (hookResult === false) return; - - const targetUuid = lib.getUuid(target); - if (!targetUuid) throw lib.custom_error(`AddAttributes | Could not determine the UUID, please provide a valid target`, true) - - const targetActor = target instanceof TokenDocument - ? target.actor - : target; - - Object.entries(attributes).forEach(entry => { - const [attribute, quantity] = entry; - if (!hasProperty(targetActor.data, attribute)) { - throw lib.custom_error(`AddAttributes | Could not find attribute ${attribute} on target's actor with UUID "${targetUuid}"`, true) - } - if (!lib.is_real_number(quantity) && quantity > 0) { - throw lib.custom_error(`AddAttributes | Attribute "${attribute}" must be of type number and greater than 0`, true) - } - }); - - if (interactionId) { - if (typeof interactionId !== "string") throw lib.custom_error(`AddAttributes | interactionId must be of type string`); - } - - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.ADD_ATTRIBUTE, targetUuid, attributes, game.user.id, { interactionId }); - - }, - - /** - * @private - */ - async _addAttributes(targetUuid, attributes, userId, { runHooks = true, interactionId = false } = {}) { - - const target = await fromUuid(targetUuid); - const targetActor = target instanceof TokenDocument - ? target.actor - : target; - - const updates = {}; - const attributesAdded = {}; - - for (const [attribute, quantityToAdd] of Object.entries(attributes)) { - - const currentQuantity = Number(getProperty(targetActor.data, attribute)); - - updates[attribute] = currentQuantity + quantityToAdd; - attributesAdded[attribute] = currentQuantity + quantityToAdd; - - } - - await targetActor.update(updates); - - if (runHooks) { - - await itemPileSocket.executeForEveryone(SOCKET_HANDLERS.CALL_HOOK, HOOKS.ATTRIBUTE.ADD, targetUuid, attributesAdded, userId, interactionId); - - const macroData = { - action: "addAttributes", - target: targetUuid, - attributes: attributesAdded, - userId: userId, - interactionId: interactionId - }; - await API._executeItemPileMacro(targetUuid, macroData); - - await API.rerenderItemPileInventoryApplication(targetUuid); - } - - return attributesAdded; - - }, - - /** - * Subtracts attributes on the target - * - * @param {Token/TokenDocument} target The target whose attributes will be subtracted from - * @param {Array/object} attributes This can be either an array of attributes to subtract (to zero out a given attribute), or an object with each key being an attribute path, and its value being the quantity to subtract - * @param {String/Boolean} [interactionId=false] The interaction ID of this action - * - * @returns {Promise} An array containing a key value pair of the attribute path and the quantity of that attribute that was removed - */ - async removeAttributes(target, attributes, { interactionId = false } = {}) { - - const hookResult = Hooks.call(HOOKS.ATTRIBUTE.PRE_REMOVE, target, attributes, interactionId); - if (hookResult === false) return; - - const targetUuid = lib.getUuid(target); - if (!targetUuid) throw lib.custom_error(`RemoveAttributes | Could not determine the UUID, please provide a valid target`, true) - - const targetActor = target instanceof TokenDocument - ? target.actor - : target; - - if (Array.isArray(attributes)) { - attributes.forEach(attribute => { - if (typeof attribute !== "string") { - throw lib.custom_error(`RemoveAttributes | Each attribute in the array must be of type string`, true) - } - if (!hasProperty(targetActor.data, attribute)) { - throw lib.custom_error(`RemoveAttributes | Could not find attribute ${attribute} on target's actor with UUID "${targetUuid}"`, true) - } - }); - } else { - Object.entries(attributes).forEach(entry => { - const [attribute, quantity] = entry; - if (!hasProperty(targetActor.data, attribute)) { - throw lib.custom_error(`RemoveAttributes | Could not find attribute ${attribute} on target's actor with UUID "${targetUuid}"`, true) - } - if (!lib.is_real_number(quantity) && quantity > 0) { - throw lib.custom_error(`RemoveAttributes | Attribute "${attribute}" must be of type number and greater than 0`, true) - } - }); - } - - if (interactionId) { - if (typeof interactionId !== "string") throw lib.custom_error(`RemoveAttributes | interactionId must be of type string`); - } - - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.REMOVE_ATTRIBUTES, targetUuid, attributes, game.user.id, { interactionId }); - - }, - - /** - * @private - */ - async _removeAttributes(targetUuid, attributes, userId, { runHooks = true, interactionId = false } = {}) { - - const target = await fromUuid(targetUuid); - const targetActor = target instanceof TokenDocument - ? target.actor - : target; - - const updates = {}; - const attributesRemoved = {}; - - if (Array.isArray(attributes)) { - attributes = Object.fromEntries(attributes.map(attribute => { - return [attribute, Number(getProperty(targetActor.data, attribute))]; - })) - } - - for (const [attribute, quantityToRemove] of Object.entries(attributes)) { - - const currentQuantity = Number(getProperty(targetActor.data, attribute)); - const newQuantity = Math.max(0, currentQuantity - quantityToRemove); - - updates[attribute] = newQuantity; - - // if the target's quantity is above 1, we've removed the amount we expected, otherwise however many were left - attributesRemoved[attribute] = newQuantity ? quantityToRemove : currentQuantity; - } - - await targetActor.update(updates); - - if (runHooks) { - - await itemPileSocket.executeForEveryone(SOCKET_HANDLERS.CALL_HOOK, HOOKS.ATTRIBUTE.REMOVE, targetUuid, attributesRemoved, userId, interactionId); - - const macroData = { - action: "removeAttributes", - target: targetUuid, - attributes: attributesRemoved, - userId: userId, - interactionId: interactionId - }; - await API._executeItemPileMacro(targetUuid, macroData); - - const shouldBeDeleted = await API._checkItemPileShouldBeDeleted(targetUuid); - await API.rerenderItemPileInventoryApplication(targetUuid, shouldBeDeleted); - - if (shouldBeDeleted) { - await API._deleteItemPile(targetUuid); - } - } - - return attributesRemoved; - - }, - - /** - * Transfers a set quantity of an attribute from a source to a target, removing it or subtracting from the source and adds it the target - * - * @param {Actor/Token/TokenDocument} source The source to transfer the attribute from - * @param {Actor/Token/TokenDocument} target The target to transfer the attribute to - * @param {Array/object} attributes This can be either an array of attributes to transfer (to transfer all of a given attribute), or an object with each key being an attribute path, and its value being the quantity to transfer - * @param {String/Boolean} [interactionId=false] The interaction ID of this action - * - * @returns {Promise} An object containing a key value pair of each attribute transferred, the key being the attribute path and its value being the quantity that was transferred - */ - async transferAttributes(source, target, attributes, { interactionId = false } = {}) { - - const hookResult = Hooks.call(HOOKS.ATTRIBUTE.PRE_TRANSFER, source, target, attributes, interactionId); - if (hookResult === false) return; - - const sourceUuid = lib.getUuid(source); - if (!sourceUuid) throw lib.custom_error(`TransferAttributes | Could not determine the UUID, please provide a valid source`, true) - - const targetUuid = lib.getUuid(target); - if (!targetUuid) throw lib.custom_error(`TransferAttributes | Could not determine the UUID, please provide a valid target`, true) - - const sourceActor = source instanceof TokenDocument - ? source.actor - : source; - - const targetActor = target instanceof TokenDocument - ? target.actor - : target; - - if (Array.isArray(attributes)) { - attributes.forEach(attribute => { - if (typeof attribute !== "string") { - throw lib.custom_error(`TransferAttributes | Each attribute in the array must be of type string`, true) - } - if (!hasProperty(sourceActor.data, attribute)) { - throw lib.custom_error(`TransferAttributes | Could not find attribute ${attribute} on source's actor with UUID "${targetUuid}"`, true) - } - if (!hasProperty(targetActor.data, attribute)) { - throw lib.custom_error(`TransferAttributes | Could not find attribute ${attribute} on target's actor with UUID "${targetUuid}"`, true) - } - }); - } else { - Object.entries(attributes).forEach(entry => { - const [attribute, quantity] = entry; - if (!hasProperty(sourceActor.data, attribute)) { - throw lib.custom_error(`TransferAttributes | Could not find attribute ${attribute} on source's actor with UUID "${targetUuid}"`, true) - } - if (!hasProperty(targetActor.data, attribute)) { - throw lib.custom_error(`TransferAttributes | Could not find attribute ${attribute} on target's actor with UUID "${targetUuid}"`, true) - } - if (!lib.is_real_number(quantity) && quantity > 0) { - throw lib.custom_error(`TransferAttributes | Attribute "${attribute}" must be of type number and greater than 0`, true) - } - }); - } - - if (interactionId) { - if (typeof interactionId !== "string") throw lib.custom_error(`TransferAttributes | interactionId must be of type string`); - } - - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.TRANSFER_ATTRIBUTES, sourceUuid, targetUuid, attributes, game.user.id, { interactionId }); - - }, - - /** - * @private - */ - async _transferAttributes(sourceUuid, targetUuid, attributes, userId, { - runHooks = true, - interactionId = false - } = {}) { - - const attributesRemoved = await API._removeAttributes(sourceUuid, attributes, userId, { runHooks: false }); - - await API._addAttributes(targetUuid, attributesRemoved, userId, { runHooks: false }); - - if (runHooks) { - - await itemPileSocket.executeForEveryone(SOCKET_HANDLERS.CALL_HOOK, HOOKS.ATTRIBUTE.TRANSFER, sourceUuid, targetUuid, attributesRemoved, userId, interactionId); - - const macroData = { - action: "transferAttributes", - source: sourceUuid, - target: targetUuid, - attributes: attributesRemoved, - userId: userId, - interactionId: interactionId - }; - await API._executeItemPileMacro(sourceUuid, macroData); - await API._executeItemPileMacro(targetUuid, macroData); - - const shouldBeDeleted = await API._checkItemPileShouldBeDeleted(sourceUuid); - await API.rerenderItemPileInventoryApplication(sourceUuid, shouldBeDeleted); - await API.rerenderItemPileInventoryApplication(targetUuid); - - const itemPile = await fromUuid(sourceUuid) - - if (shouldBeDeleted) { - await API._deleteItemPile(sourceUuid); - } else if (lib.isItemPileEmpty(itemPile)) { - await lib.clearItemPileSharingData(itemPile); - } else { - await lib.setItemPileSharingData(sourceUuid, targetUuid, { currencies: attributesRemoved }); - } - - } - - return attributesRemoved; - - }, - - /** - * Transfers all dynamic attributes from a source to a target, removing it or subtracting from the source and adding them to the target - * - * @param {Actor/Token/TokenDocument} source The source to transfer the attributes from - * @param {Actor/Token/TokenDocument} target The target to transfer the attributes to - * @param {String/Boolean} [interactionId=false] The interaction ID of this action - * - * @returns {Promise} An object containing a key value pair of each attribute transferred, the key being the attribute path and its value being the quantity that was transferred - */ - async transferAllAttributes(source, target, { interactionId = false } = {}) { - - const hookResult = Hooks.call(HOOKS.ATTRIBUTE.PRE_TRANSFER_ALL, source, target, interactionId); - if (hookResult === false) return; - - const sourceUuid = lib.getUuid(source); - if (!sourceUuid) throw lib.custom_error(`TransferAllAttributes | Could not determine the UUID, please provide a valid source`, true); - - const targetUuid = lib.getUuid(target); - if (!targetUuid) throw lib.custom_error(`TransferAllAttributes | Could not determine the UUID, please provide a valid target`, true); - - if (interactionId) { - if (typeof interactionId !== "string") throw lib.custom_error(`TransferAllAttributes | interactionId must be of type string`); - } - - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.TRANSFER_ALL_ATTRIBUTES, sourceUuid, targetUuid, game.user.id, { interactionId }); - - }, - - /** - * @private - */ - async _transferAllAttributes(sourceUuid, targetUuid, userId, { runHooks = true, interactionId = false } = {}) { - - const source = await fromUuid(sourceUuid); - - const sourceActor = source instanceof TokenDocument - ? source.actor - : source; - - const target = await fromUuid(targetUuid); - - const targetActor = target instanceof TokenDocument - ? target.actor - : target; - - const sourceAttributes = API.getItemPileCurrencies(sourceActor); - - const attributesToTransfer = sourceAttributes.filter(attribute => { - return hasProperty(targetActor.data, attribute.path); - }).map(attribute => attribute.path); - - const attributesRemoved = await API._removeAttributes(sourceUuid, attributesToTransfer, userId, { runHooks: false }); - const attributesAdded = await API._addAttributes(targetUuid, attributesRemoved, userId, { runHooks: false }); - - if (runHooks) { - - await itemPileSocket.executeForEveryone(SOCKET_HANDLERS.CALL_HOOK, HOOKS.ATTRIBUTE.TRANSFER_ALL, sourceUuid, targetUuid, attributesAdded, userId, interactionId); - - const macroData = { - action: "transferAllAttributes", - source: sourceUuid, - target: targetUuid, - attributes: attributesAdded, - userId: userId, - interactionId: interactionId - }; - await API._executeItemPileMacro(sourceUuid, macroData); - await API._executeItemPileMacro(targetUuid, macroData); - - const shouldBeDeleted = await API._checkItemPileShouldBeDeleted(sourceUuid); - await API.rerenderItemPileInventoryApplication(sourceUuid, shouldBeDeleted); - - if (shouldBeDeleted) { - await API._deleteItemPile(sourceUuid); - } - - } - - return attributesAdded; - - }, - - /** - * Transfers all items and attributes between the source and the target. - * - * @param {Actor/Token/TokenDocument} source The actor to transfer all items and attributes from - * @param {Actor/Token/TokenDocument} target The actor to receive all the items and attributes - * @param {Array/Boolean} [itemFilters=false] Array of item types disallowed - will default to module settings if none provided - * @param {String/Boolean} [interactionId=false] The ID of this interaction - * - * @returns {Promise} An object containing all items and attributes transferred to the target - */ - async transferEverything(source, target, { itemFilters = false, interactionId = false } = {}) { - - const hookResult = Hooks.call(HOOKS.PRE_TRANSFER_EVERYTHING, source, target, itemFilters, interactionId); - if (hookResult === false) return; - - const sourceUuid = lib.getUuid(source); - if (!sourceUuid) throw lib.custom_error(`TransferEverything | Could not determine the UUID, please provide a valid source`, true) - - const targetUuid = lib.getUuid(target); - if (!targetUuid) throw lib.custom_error(`TransferEverything | Could not determine the UUID, please provide a valid target`, true) - - if (itemFilters) { - if (!Array.isArray(itemFilters)) throw lib.custom_error(`TransferEverything | itemFilters must be of type array`); - itemFilters.forEach(entry => { - if (typeof entry?.path !== "string") throw lib.custom_error(`TransferEverything | each entry in the itemFilters must have a "path" property that is of type string`); - if (typeof entry?.filter !== "string") throw lib.custom_error(`TransferEverything | each entry in the itemFilters must have a "filter" property that is of type string`); - }) - } - - if (interactionId) { - if (typeof interactionId !== "string") throw lib.custom_error(`TransferEverything | interactionId must be of type string`); - } - - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.TRANSFER_EVERYTHING, sourceUuid, targetUuid, game.user.id, { - itemFilters, - interactionId - }) - - }, - - /** - * @private - */ - async _transferEverything(sourceUuid, targetUuid, userId, { itemFilters = false, interactionId } = {}) { - - const itemsTransferred = await API._transferAllItems(sourceUuid, targetUuid, userId, { - itemFilters, - isEverything: true, - interactionId - }); - const currenciesTransferred = await API._transferAllAttributes(sourceUuid, targetUuid, userId, { - isEverything: true, - interactionId - }); - - await itemPileSocket.executeForEveryone(SOCKET_HANDLERS.CALL_HOOK, HOOKS.TRANSFER_EVERYTHING, sourceUuid, targetUuid, itemsTransferred, currenciesTransferred, userId, interactionId); - - const macroData = { - action: "transferEverything", - source: sourceUuid, - target: targetUuid, - items: itemsTransferred, - attributes: currenciesTransferred, - userId: userId, - interactionId: interactionId - }; - await API._executeItemPileMacro(sourceUuid, macroData); - await API._executeItemPileMacro(targetUuid, macroData); - - const shouldBeDeleted = await API._checkItemPileShouldBeDeleted(sourceUuid); - await API.rerenderItemPileInventoryApplication(sourceUuid, shouldBeDeleted); - await API.rerenderItemPileInventoryApplication(targetUuid); - - if (shouldBeDeleted) { - await API._deleteItemPile(sourceUuid); - } - - return { - itemsTransferred, - currenciesTransferred - }; - - }, - - /* -------- UTILITY METHODS -------- */ - - /** - * Causes every user's token HUD to rerender - * - * @return {Promise} - */ - async rerenderTokenHud() { - return itemPileSocket.executeForEveryone(SOCKET_HANDLERS.RERENDER_TOKEN_HUD); - }, - - /** - * @private - */ - async _rerenderTokenHud() { - if (!canvas.tokens.hud.rendered) return; - await canvas.tokens.hud.render(true) - return true; - }, - - /* -------- PRIVATE ITEM PILE METHODS -------- */ - - /** - * Initializes a pile on the client-side. - * - * @param {TokenDocument} tokenDocument - * @return {Promise} - * @private - */ - async _initializeItemPile(tokenDocument) { - - if (!lib.isValidItemPile(tokenDocument)) return false; - - const pileData = lib.getItemPileData(tokenDocument); - - if (game.settings.get(CONSTANTS.MODULE_NAME, "preloadFiles")) { - await Promise.allSettled(Object.entries(pileData).map(entry => { - return new Promise(async (resolve) => { - const [key, value] = entry; - if (preloadedFiles.has(value) || !value) { - return resolve(); - } - if (key.toLowerCase().includes("image")) { - preloadedFiles.add(value); - lib.debug(`Preloaded image: ${value}`); - await loadTexture(value); - } else if (key.toLowerCase().includes("sound")) { - preloadedFiles.add(value); - lib.debug(`Preloaded sound: ${value}`); - await AudioHelper.preloadSound(value); - } - return resolve(); - }); - })); - } - - lib.debug(`Initialized item pile with uuid ${tokenDocument.uuid}`); - - return true; - }, - - /** - * This executes any macro that is configured on the item pile, providing the macro with extra data relating to the - * action that prompted the execution (if the advanced-macros module is installed) - * - * @param {String} targetUuid - * @param {Object} macroData - * @return {Promise} - * @private - */ - async _executeItemPileMacro(targetUuid, macroData) { - - const target = await fromUuid(targetUuid); - - if (!lib.isValidItemPile(target)) return; - - const pileData = lib.getItemPileData(target); - - if (!pileData.macro) return; - - const macro = game.macros.getName(pileData.macro); - - if (!macro) { - throw lib.custom_error(`Could not find macro with name "${pileData.macro}" on target with UUID ${target.uuid}`); - } - - // Reformat macro data to contain useful information - if (macroData.source) { - macroData.source = await fromUuid(macroData.source); - } - - if (macroData.target) { - macroData.target = await fromUuid(macroData.target); - } - - const targetActor = macroData.target instanceof TokenDocument - ? macroData.target.actor - : macroData.target; - - if (macroData.item) { - macroData.items = macroData.items.map(item => targetActor.items.get(item._id)); - } - - return macro.execute([macroData]); - - }, - - /** - * This handles any dropped data onto the canvas or a set item pile - * - * @param {canvas} canvas - * @param {Object} data - * @param {Actor/Token/TokenDocument/Boolean}[target=false] - * @return {Promise} - * @private - */ - async _dropData(canvas, data, { target = false } = {}) { - - if (data.type !== "Item") return; - - let item = await Item.implementation.fromDropData(data) - let itemData = item.toObject(); - - if (!itemData) { - console.error(data); - throw lib.custom_error("Something went wrong when dropping this item!") - } - - const dropData = { - source: false, - target: target, - itemData: { - item: itemData, - quantity: 1 - }, - position: false - } - - if (data.tokenId) { - dropData.source = canvas.tokens.get(data.tokenId).actor; - } else if (data.actorId) { - dropData.source = game.actors.get(data.actorId); - } - - if (!dropData.source && !game.user.isGM) { - return lib.custom_warning(game.i18n.localize("ITEM-PILES.Errors.NoSourceDrop"), true) - } - - const pre_drop_determined_hook = Hooks.call(HOOKS.ITEM.PRE_DROP_DETERMINED, dropData.source, dropData.target, dropData.position, dropData.itemData); - if (pre_drop_determined_hook === false) return; - - let action; - let droppableDocuments = []; - let x; - let y; - - if (dropData.target) { - - droppableDocuments.push(dropData.target); - - } else { - - const position = canvas.grid.getTopLeft(data.x, data.y); - x = position[0]; - y = position[1]; - - droppableDocuments = lib.getTokensAtLocation({ x, y }) - .map(token => token.document) - .filter(token => lib.isValidItemPile(token)); - - } - - if (droppableDocuments.length && game.modules.get("midi-qol")?.active && game.settings.get('midi-qol', "DragDropTarget")) { - lib.custom_warning("You have Drag & Drop Targetting enabled in MidiQOL, which disables drag & drop items") - return; - } - - if (droppableDocuments.length > 0 && !game.user.isGM) { - - if (!(droppableDocuments[0] instanceof Actor && dropData.source instanceof Actor)) { - - const sourceToken = canvas.tokens.placeables.find(token => token.actor === dropData.source); - - if (sourceToken) { - - const targetToken = droppableDocuments[0]; - - const distance = Math.floor(lib.distance_between_rect(sourceToken, targetToken.object) / canvas.grid.size) + 1 - - const pileData = lib.getItemPileData(targetToken); - - const maxDistance = pileData.distance ? pileData.distance : Infinity; - - if (distance > maxDistance) { - lib.custom_warning(game.i18n.localize("ITEM-PILES.Errors.PileTooFar"), true); - return; - } - } - } - - droppableDocuments = droppableDocuments.filter(token => !API.isItemPileLocked(token)); - - if (!droppableDocuments.length) { - lib.custom_warning(game.i18n.localize("ITEM-PILES.Errors.PileLocked"), true); - return; - } - } - - const disallowedType = lib.isItemInvalid(droppableDocuments?.[0], item); - if (disallowedType) { - if (!game.user.isGM) { - return lib.custom_warning(game.i18n.format("ITEM-PILES.Errors.DisallowedItemDrop", { type: disallowedType }), true) - } - if (!hotkeyState.shiftDown) { - const force = await Dialog.confirm({ - title: game.i18n.localize("ITEM-PILES.Dialogs.DropTypeWarning.Title"), - content: `

${game.i18n.format("ITEM-PILES.Dialogs.DropTypeWarning.Content", { type: disallowedType })}

`, - defaultYes: false - }); - if (!force) { - return; - } - } - } - - if (hotkeyState.altDown) { - - if (droppableDocuments.length) { - action = "addToPile"; - } - - setProperty(dropData.itemData.item, API.ITEM_QUANTITY_ATTRIBUTE, 1); - dropData.itemData.quantity = 1; - - } else { - - const result = await DropItemDialog.query(item, droppableDocuments[0]); - - if (!result) return; - action = result.action; - setProperty(dropData.itemData.item, API.ITEM_QUANTITY_ATTRIBUTE, Number(result.quantity)) - dropData.itemData.quantity = Number(result.quantity); - - } - - if (action === "addToPile") { - dropData.target = droppableDocuments[0]; - } else { - dropData.position = { x, y }; - } - - const hookResult = Hooks.call(HOOKS.ITEM.PRE_DROP, dropData.source, dropData.target, dropData.position, dropData.itemData); - if (hookResult === false) return; - - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.DROP_ITEMS, { - userId: game.user.id, - sceneId: canvas.scene.id, - sourceUuid: lib.getUuid(dropData.source), - targetUuid: lib.getUuid(dropData.target), - position: dropData.position, - itemData: dropData.itemData - }); - - }, - - /** - * If not given an actor, this method creates an item pile at a location, then adds an item to it. - * - * If a target was provided, it will just add the item to that target actor. - * - * If an actor was provided, it will transfer the item from the actor to the target actor. - * - * @param {String} userId - * @param {String} sceneId - * @param {String/Boolean} [sourceUuid=false] - * @param {String/Boolean} [targetUuid=false] - * @param {Object/Boolean} [position=false] - * @param {Object} [itemData=false] - * - * @returns {Promise<{sourceUuid: string/boolean, targetUuid: string/boolean, position: object/boolean, itemsDropped: array }>} - * @private - */ - async _dropItems({ - userId, - sceneId, - sourceUuid = false, - targetUuid = false, - itemData = false, - position = false - } = {}) { - - let itemsDropped; - - // If there's a source of the item (it wasn't dropped from the item bar) - if (sourceUuid) { - - const itemsToTransfer = [{ _id: itemData.item._id, quantity: itemData.quantity }]; - - // If there's a target token, add the item to it, otherwise create a new pile at the drop location - if (targetUuid) { - itemsDropped = await API._transferItems(sourceUuid, targetUuid, itemsToTransfer, userId); - } else { - itemsDropped = await API._removeItems(sourceUuid, itemsToTransfer, userId); - targetUuid = await API._createItemPile(sceneId, position, { items: itemsDropped }); - } - - // If there's no source (it was dropped from the item bar) - } else { - - // If there's a target token, add the item to it, otherwise create a new pile at the drop location - if (targetUuid) { - itemsDropped = await API._addItems(targetUuid, [itemData], userId); - } else { - targetUuid = await API._createItemPile(sceneId, position, { items: [itemData] }); - } - - } - - await itemPileSocket.executeForEveryone(SOCKET_HANDLERS.CALL_HOOK, HOOKS.ITEM.DROP, sourceUuid, targetUuid, itemsDropped, position); - - return { sourceUuid, targetUuid, position, itemsDropped }; - - }, - - /** - * @param {String} sceneId - * @param {Object} position - * @param {String/Boolean} [pileActorName=false] - * @param {Array/Boolean} [items=false] - * @returns {Promise} - * @private - */ - async _createItemPile(sceneId, position, { pileActorName = false, items = false } = {}) { - - let pileActor; - - if (!pileActorName) { - - pileActor = game.settings.get(CONSTANTS.MODULE_NAME, "defaultItemPileActorID") ? game.actors.get(game.settings.get(CONSTANTS.MODULE_NAME, "defaultItemPileActorID")) : false; - - if (!pileActor) { - - lib.custom_notify("A Default Item Pile has been added to your Actors list. You can configure the default look and behavior on it, or duplicate it to create different styles.") - - const pileDataDefaults = foundry.utils.duplicate(CONSTANTS.PILE_DEFAULTS); - - pileDataDefaults.enabled = true; - pileDataDefaults.deleteWhenEmpty = true; - pileDataDefaults.displayOne = true; - pileDataDefaults.showItemName = true; - pileDataDefaults.overrideSingleItemScale = true; - pileDataDefaults.singleItemScale = 0.75; - - pileActor = await Actor.create({ - name: "Default Item Pile", - type: game.settings.get(CONSTANTS.MODULE_NAME, "actorClassType"), - img: "icons/svg/item-bag.svg", - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileDataDefaults - }); - - await pileActor.update({ - "token": { - name: "Item Pile", - actorLink: false, - bar1: { attribute: "" }, - vision: false, - displayName: 50, - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileDataDefaults - } - }) - - await game.settings.set(CONSTANTS.MODULE_NAME, "defaultItemPileActorID", pileActor.id); - - } - - } else { - - pileActor = game.actors.getName(pileActorName); - - } - - let overrideData = { ...position }; - - const pileData = lib.getItemPileData(pileActor); - - if (!pileActor.data.token.actorLink) { - - items = items ? items.map(itemData => itemData.item ?? itemData) : []; - - overrideData['actorData'] = { - items: items - } - - const data = { data: pileData, items: items }; - - overrideData = foundry.utils.mergeObject(overrideData, { - "img": lib.getItemPileTokenImage(pileActor, data), - "scale": lib.getItemPileTokenScale(pileActor, data), - "name": lib.getItemPileName(pileActor, data), - }); - - } - - const tokenData = await pileActor.getTokenData(overrideData); - - const scene = game.scenes.get(sceneId); - - const [tokenDocument] = await scene.createEmbeddedDocuments("Token", [tokenData]); - - return lib.getUuid(tokenDocument); - - }, - - /** - * @private - */ - async _itemPileClicked(pileDocument) { - - if (!lib.isValidItemPile(pileDocument)) return; - - const pileToken = pileDocument.object; - - if (!lib.isGMConnected()) { - lib.custom_warning(`Item Piles requires a GM to be connected for players to be able to loot item piles.`, true) - return; - } - - lib.debug(`Clicked: ${pileDocument.uuid}`); - - const data = lib.getItemPileData(pileDocument); - - const maxDistance = data.distance ? data.distance : Infinity; - - let validTokens = []; - - if (canvas.tokens.controlled.length > 0) { - validTokens = [...canvas.tokens.controlled]; - validTokens = validTokens.filter(token => token.document !== pileDocument); - } - - if (!validTokens.length && !game.user.isGM) { - validTokens.push(...canvas.tokens.placeables); - if (_token) { - validTokens.unshift(_token); - } - } - - validTokens = validTokens.filter(token => token.owner && token.document !== pileDocument).filter(token => { - return lib.tokens_close_enough(pileToken, token, maxDistance) || game.user.isGM; - }); - - if (!validTokens.length && !game.user.isGM && maxDistance !== Infinity) { - lib.custom_warning(game.i18n.localize("ITEM-PILES.Errors.PileTooFar"), true); - return; - } - - let interactingActor; - if (validTokens.length) { - if (validTokens.includes(_token)) { - interactingActor = _token.actor; - } else { - validTokens.sort((potentialTargetA, potentialTargetB) => { - return lib.grids_between_tokens(pileToken, potentialTargetA) - lib.grids_between_tokens(pileToken, potentialTargetB); - }) - interactingActor = validTokens[0].actor; - } - } else if (game.user.character && !game.user.isGM) { - interactingActor = game.user.character; - } - - if (data.isContainer && interactingActor) { - - if (data.locked && !game.user.isGM) { - lib.debug(`Attempted to locked item pile with UUID ${pileDocument.uuid}`); - return API.rattleItemPile(pileDocument, interactingActor); - } - - if (data.closed) { - lib.debug(`Opened item pile with UUID ${pileDocument.uuid}`); - await API.openItemPile(pileDocument, interactingActor); - } - - } - - return ItemPileInventory.show(pileDocument, interactingActor); - - }, - - /** - * @private - */ - async _checkItemPileShouldBeDeleted(targetUuid) { - - const target = await fromUuid(targetUuid); - - if (!(target instanceof TokenDocument)) return false; - - const pileData = lib.getItemPileData(target); - - const shouldDelete = { - "default": game.settings.get(CONSTANTS.MODULE_NAME, "deleteEmptyPiles"), - "true": true, - "false": false - }[pileData?.deleteWhenEmpty ?? "default"] - - return pileData?.enabled && shouldDelete && lib.isItemPileEmpty(target); - - } - -}; - -export default API; diff --git a/scripts/chathandler.js b/scripts/chathandler.js deleted file mode 100644 index f522c4da..00000000 --- a/scripts/chathandler.js +++ /dev/null @@ -1,405 +0,0 @@ -import API from "./api.js"; -import CONSTANTS from "./constants.js"; -import * as lib from "./lib/lib.js"; -import { itemPileSocket, SOCKET_HANDLERS } from "./socket.js"; -import { TradeAPI } from "./trade-api.js"; -import HOOKS from "./hooks.js"; - -const chatHandler = { - - init() { - - Hooks.on("preCreateChatMessage", chatHandler._preCreateChatMessage.bind(chatHandler)); - Hooks.on("renderChatMessage", chatHandler._renderChatMessage.bind(chatHandler)); - Hooks.on(HOOKS.ITEM.TRANSFER, chatHandler._outputTransferItem.bind(chatHandler)); - Hooks.on(HOOKS.ATTRIBUTE.TRANSFER, chatHandler._outputTransferCurrency.bind(chatHandler)); - Hooks.on(HOOKS.TRANSFER_EVERYTHING, chatHandler._outputTransferEverything.bind(chatHandler)); - Hooks.on(HOOKS.PILE.SPLIT_INVENTORY, chatHandler._outputSplitItemPileInventory.bind(chatHandler)); - Hooks.on(HOOKS.TRADE.STARTED, chatHandler._outputTradeStarted.bind(chatHandler)); - Hooks.on(HOOKS.TRADE.COMPLETE, chatHandler._outputTradeComplete.bind(chatHandler)); - - $(document).on("click", ".item-piles-chat-card .item-piles-collapsible", async function () { - if ($(this).attr("open")) return; - await lib.wait(25); - $(this).parent()[0].scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' }); - }); - - }, - - _preCreateChatMessage(chatMessage) { - if (!game.settings.get(CONSTANTS.MODULE_NAME, "enableTrading")) return; - - const content = chatMessage.data.content.toLowerCase(); - - if (!(content.startsWith("!itempiles") || content.startsWith("!ip"))) return; - - const args = content.split(" ").slice(1); - - if (args[0] === "trade") { - setTimeout(() => { - TradeAPI.requestTrade(); - }); - } - - return false; - - }, - - _renderChatMessage(app, html) { - html.find(".item-piles-specate-trade").click(function () { - TradeAPI.spectateTrade($(this).data()); - }); - }, - - - _disableTradingButton(publicTradeId) { - const message = Array.from(game.messages).find(message => { - return message.getFlag(CONSTANTS.MODULE_NAME, "publicTradeId") === publicTradeId; - }); - if (!message) return; - const html = $(message.data.content); - html.find(".item-piles-specate-trade") - .prop('disabled', true) - .text(game.i18n.localize("ITEM-PILES.Chat.SpectateDisabled")); - return message.update({ - content: html.prop("outerHTML") - }) - }, - - /** - * Outputs to chat based on transferring an item from or to an item pile - * - * @param source - * @param target - * @param items - * @param userId - * @param interactionId - * @returns {Promise} - * @private - */ - async _outputTransferItem(source, target, items, userId, interactionId) { - if (!API.isValidItemPile(source)) return; - if (!interactionId || game.user.id !== userId || game.settings.get(CONSTANTS.MODULE_NAME, "outputToChat") === "off") return; - const itemData = await this._formatItemData(items); - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.PICKUP_CHAT_MESSAGE, source.uuid, target.uuid, itemData, [], userId, interactionId); - }, - - /** - * Outputs to chat based on transferring a currency from or to an item pile - * - * @param source - * @param target - * @param currencies - * @param userId - * @param interactionId - * @returns {Promise} - * @private - */ - _outputTransferCurrency(source, target, currencies, userId, interactionId) { - if (!API.isValidItemPile(source)) return; - if (!interactionId || game.user.id !== userId || game.settings.get(CONSTANTS.MODULE_NAME, "outputToChat") === "off") return; - const currencyData = this._formatCurrencyData(source, currencies); - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.PICKUP_CHAT_MESSAGE, source.uuid, target.uuid, [], currencyData, userId, interactionId); - }, - - /** - * Outputs to chat based on transferring everything from or to an item pile - * - * @param source - * @param target - * @param items - * @param currencies - * @param userId - * @param interactionId - * @returns {Promise} - * @private - */ - async _outputTransferEverything(source, target, items, currencies, userId, interactionId) { - if (!API.isValidItemPile(source)) return; - if (!interactionId || game.user.id !== userId || game.settings.get(CONSTANTS.MODULE_NAME, "outputToChat") === "off") return; - const itemData = await this._formatItemData(items); - const currencyData = this._formatCurrencyData(source, currencies); - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.PICKUP_CHAT_MESSAGE, source.uuid, target.uuid, itemData, currencyData, userId, interactionId); - }, - - _outputSplitItemPileInventory(source, transferData, userId) { - if (!API.isValidItemPile(source)) return; - if (game.user.id !== userId || game.settings.get(CONSTANTS.MODULE_NAME, "outputToChat") === "off") return; - return itemPileSocket.executeAsGM(SOCKET_HANDLERS.SPLIT_CHAT_MESSAGE, source.uuid, transferData, userId); - }, - - async _outputTradeStarted(party_1, party_2, publicTradeId, isPrivate) { - if (party_1.user !== game.user.id || game.settings.get(CONSTANTS.MODULE_NAME, "outputToChat") === "off" || isPrivate) return; - return this._outputTradeStartedToChat(party_1, party_2, publicTradeId); - }, - - async _outputTradeComplete(party_1, party_2, publicTradeId, isPrivate) { - if (game.settings.get(CONSTANTS.MODULE_NAME, "outputToChat") === "off") return; - return this._outputTradeCompleteToChat(party_1, party_2, publicTradeId, isPrivate); - }, - - /** - * Formats item data to a chat friendly structure - * - * @param items - * @returns {Array} - * @private - */ - async _formatItemData(items) { - const formattedItems = []; - for(const itemData of items){ - const tempItem = await Item.implementation.create(itemData.item, { temporary: true }); - formattedItems.push({ - name: tempItem.name, - img: itemData.item.img ?? "", - quantity: itemData.quantity - }); - } - return formattedItems; - }, - - /** - * Formats currency data to a chat friendly structure - * - * @param itemPile - * @param currencies - * @returns {Array} - * @private - */ - _formatCurrencyData(itemPile, currencies) { - const currencyList = lib.getActorCurrencyList(itemPile); - return Object.entries(currencies).map(entry => { - const currency = currencyList.find(currency => currency.path === entry[0]); - return { - name: currency.name, - img: currency.img ?? "", - quantity: entry[1], - index: currencyList.indexOf(currency) - } - }); - }, - - /** - * Outputs the transferred data in chat - * - * @param sourceUuid - * @param targetUuid - * @param items - * @param currencies - * @param userId - * @param interactionId - * @returns {Promise} - * @private - */ - async _outputPickupToChat(sourceUuid, targetUuid, items, currencies, userId, interactionId) { - - const source = await fromUuid(sourceUuid); - const target = await fromUuid(targetUuid); - - const sourceActor = source?.actor ?? source; - const targetActor = target?.actor ?? target; - - const now = (+new Date()); - - // Get all messages younger than 3 hours, and grab the last 10, then reverse them (latest to oldest) - const messages = Array.from(game.messages).filter(message => (now - message.data.timestamp) <= (1000 * 60 * 60 * 3)).slice(-10); - messages.reverse() - - for (let [index, message] of messages.entries()) { - const flags = message.getFlag(CONSTANTS.MODULE_NAME, CONSTANTS.PILE_DATA); - if (flags && flags.source === sourceUuid && flags.target === targetUuid && (flags.interactionId === interactionId || index === 0)) { - return this._updateExistingPickupMessage(message, sourceActor, targetActor, items, currencies, interactionId) - } - } - - const chatCardHtml = await renderTemplate(CONSTANTS.PATH + "templates/loot-chat-message.html", { - message: game.i18n.format("ITEM-PILES.Chat.Pickup", { name: targetActor.name }), - itemPile: sourceActor, - actor: targetActor, - items: items, - currencies: currencies - }); - - return this._createNewChatMessage(userId, { - user: game.user.id, - type: CONST.CHAT_MESSAGE_TYPES.OTHER, - content: chatCardHtml, - flavor: "Item Piles", - speaker: ChatMessage.getSpeaker({ alias: game.user.name }), - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: { - source: sourceUuid, - target: targetUuid, - items: items, - currencies: currencies, - interactionId: interactionId - } - }) - - }, - - _matchEntries(existingEntries, incomingEntries) { - - const combinedEntries = existingEntries.map(existingEntry => { - const foundEntry = incomingEntries.find(item => item.name === existingEntry.name && existingEntry.img === item.img); - if (foundEntry) { - existingEntry.quantity += foundEntry.quantity; - incomingEntries.splice(incomingEntries.indexOf(foundEntry), 1) - } - return existingEntry; - }); - - incomingEntries.forEach(item => combinedEntries.push(item)); - - return combinedEntries; - - }, - - async _updateExistingPickupMessage(message, sourceActor, targetActor, items, currencies, interactionId) { - - const flags = message.getFlag(CONSTANTS.MODULE_NAME, CONSTANTS.PILE_DATA); - - const newItems = this._matchEntries(flags.items, items); - const newCurrencies = this._matchEntries(flags.currencies, currencies); - - newCurrencies.sort((a, b) => { - return a.index - b.index; - }) - - const chatCardHtml = await renderTemplate(CONSTANTS.PATH + "templates/loot-chat-message.html", { - message: game.i18n.format("ITEM-PILES.Chat.Pickup", { name: targetActor.name }), - itemPile: sourceActor, - actor: targetActor, - items: newItems, - currencies: newCurrencies - }); - - return message.update({ - content: chatCardHtml, - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}.interactionId`]: interactionId, - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}.items`]: newItems, - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}.currencies`]: newCurrencies, - }); - - }, - - async _outputSplitToChat(sourceUuid, transferData, userId) { - - const source = await fromUuid(sourceUuid); - - const sourceActor = source?.actor ?? source; - - const chatCardHtml = await renderTemplate(CONSTANTS.PATH + "templates/loot-chat-message.html", { - message: game.i18n.format("ITEM-PILES.Chat.Split", { num_players: transferData.num_players }), - itemPile: sourceActor, - items: transferData.items, - currencies: transferData.currencies - }); - - return this._createNewChatMessage(userId, { - user: game.user.id, - type: CONST.CHAT_MESSAGE_TYPES.OTHER, - content: chatCardHtml, - flavor: "Item Piles", - speaker: ChatMessage.getSpeaker({ alias: game.user.name }) - }); - - }, - - async _outputTradeStartedToChat(party_1, party_2, publicTradeId) { - - let party_1_actor = await fromUuid(party_1.actor); - party_1_actor = party_1_actor?.actor ?? party_1_actor; - - let party_2_actor = await fromUuid(party_2.actor); - party_2_actor = party_2_actor?.actor ?? party_2_actor; - - const chatCardHtml = await renderTemplate(CONSTANTS.PATH + "templates/trade-started-chat-message.html", { - party_1_actor, - party_2_actor, - publicTradeId, - userId: game.user.id - }); - - return this._createNewChatMessage(game.user.id, { - user: game.user.id, - type: CONST.CHAT_MESSAGE_TYPES.OTHER, - content: chatCardHtml, - flavor: "Item Piles", - speaker: ChatMessage.getSpeaker({ alias: game.user.name }), - [`flags.${CONSTANTS.MODULE_NAME}`]: { - publicTradeId, - tradeUsers: [party_1.user, party_2.user] - } - }); - }, - - async _outputTradeCompleteToChat(party_1, party_2, publicTradeId, isPrivate) { - - if (party_1.user !== game.user.id) return; - - let party_1_actor = await fromUuid(party_1.actor); - party_1_actor = party_1_actor?.actor ?? party_1_actor; - const party_1_data = { - actor: party_1_actor, - items: party_2.items, - currencies: party_2.currencies - } - party_1_data.got_nothing = !party_1_data.items.length && !party_1_data.currencies.length; - - let party_2_actor = await fromUuid(party_2.actor); - party_2_actor = party_2_actor?.actor ?? party_2_actor; - const party_2_data = { - actor: party_2_actor, - items: party_1.items, - currencies: party_1.currencies - } - party_2_data.got_nothing = !party_2_data.items.length && !party_2_data.currencies.length; - - if (party_1.got_nothing && party_2.got_nothing) return; - - const enableCollapse = (party_1_data.items.length + party_1_data.currencies.length + party_2_data.items.length + party_2_data.currencies.length) > 6; - - const chatCardHtml = await renderTemplate(CONSTANTS.PATH + "templates/trade-complete-chat-message.html", { - party_1: party_1_data, - party_2: party_2_data, - publicTradeId, - isPrivate, - enableCollapse - }); - - return this._createNewChatMessage(game.user.id, { - user: game.user.id, - type: isPrivate ? CONST.CHAT_MESSAGE_TYPES.WHISPER : CONST.CHAT_MESSAGE_TYPES.OTHER, - content: chatCardHtml, - flavor: "Item Piles" + (isPrivate ? ": " + game.i18n.localize("ITEM-PILES.Chat.PrivateTrade") : ""), - speaker: ChatMessage.getSpeaker({ alias: game.user.name }), - whisper: isPrivate ? [party_2.user] : [] - }); - - }, - - _createNewChatMessage(userId, chatData) { - - if (!chatData.whisper) { - - const mode = game.settings.get(CONSTANTS.MODULE_NAME, "outputToChat"); - - if (mode > 1) { - chatData.whisper = Array.from(game.users) - .filter(user => user.isGM) - .map(user => user.id); - if (mode === 2) { - chatData.whisper.push(userId); - } - chatData.type = CONST.CHAT_MESSAGE_TYPES.WHISPER; - } - - } - - return ChatMessage.create(chatData); - - } - -} - -export default chatHandler; \ No newline at end of file diff --git a/scripts/constants.js b/scripts/constants.js deleted file mode 100644 index b7a68170..00000000 --- a/scripts/constants.js +++ /dev/null @@ -1,47 +0,0 @@ -const CONSTANTS = { - MODULE_NAME: "item-piles", - PILE_DATA: "data", - SHARING_DATA: "sharing", - PILE_DEFAULTS: { - // Core settings - enabled: false, - distance: 1, - macro: "", - deleteWhenEmpty: "default", - canInspectItems: true, - - // Overrides - overrideItemFilters: false, - overrideCurrencies: false, - - // Token settings - displayOne: false, - showItemName: false, - overrideSingleItemScale: false, - singleItemScale: 1.0, - - // Container settings - isContainer: false, - closed: false, - locked: false, - closedImage: "", - emptyImage: "", - openedImage: "", - lockedImage: "", - closeSound: "", - openSound: "", - lockedSound: "", - unlockedSound: "", - - // Sharing settings - shareItemsEnabled: false, - shareCurrenciesEnabled: true, - takeAllEnabled: false, - splitAllEnabled: true, - activePlayers: false - } -} - -CONSTANTS.PATH = `modules/${CONSTANTS.MODULE_NAME}/`; - -export default CONSTANTS; \ No newline at end of file diff --git a/scripts/flagManager.js b/scripts/flagManager.js deleted file mode 100644 index 2d19b91d..00000000 --- a/scripts/flagManager.js +++ /dev/null @@ -1,128 +0,0 @@ -import * as lib from "./lib/lib.js"; -import CONSTANTS from "./constants.js"; - -const flagManager = { - - _latestFlagVersion: false, - updateStack: new Map(), - localStack: new Map(), - - get latestFlagVersion() { - if (!this._latestFlagVersion) { - const versions = Object.keys(this.migrations); - versions.sort((a, b) => { - return isNewerVersion(a, b) ? -1 : 1; - }) - this._latestFlagVersion = versions[0]; - } - return this._latestFlagVersion; - }, - - async migrateDocuments() { - - if (!lib.isResponsibleGM()) return; - - const currentVersion = game.settings.get(CONSTANTS.MODULE_NAME, "migrationVersion"); - - if (this.latestFlagVersion === currentVersion) return; - - const scenes = Array.from(game.scenes); - - for (const scene of scenes) { - - const tokens = Array.from(scene.tokens) - - const updates = tokens.map(token => { - - let pileData = token.getFlag(CONSTANTS.MODULE_NAME, CONSTANTS.PILE_DATA); - - if (!pileData) return false; - - const pileVersion = pileData?.flagVersion || "1.0.0"; - if (pileVersion === this.latestFlagVersion) return false; - - for (let [version, migration] of Object.entries(this.migrations)) { - if (!isNewerVersion(version, pileVersion)) continue; - pileData = migration(token, pileData); - - lib.debug(`Migration token with UUID "${token.uuid}" to version ${version}`); - } - - pileData.flagVersion = this.latestFlagVersion; - - return { - "_id": token.id, - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileData, - [`actorData.flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileData - }; - - }).filter(Boolean); - - await scene.updateEmbeddedDocuments("Token", updates); - - } - - await game.actors.updateAll((actor) => { - - let pileData = actor.getFlag(CONSTANTS.MODULE_NAME, CONSTANTS.PILE_DATA); - - const pileVersion = pileData?.flagVersion || "1.0.0"; - - for (let [version, migration] of Object.entries(this.migrations)) { - if (!isNewerVersion(version, pileVersion)) continue; - pileData = migration(actor, pileData); - - lib.debug(`Migration actor with UUID "${actor.uuid}" to version ${version}`); - } - - pileData.flagVersion = this.latestFlagVersion; - - return { - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileData, - [`token.flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: pileData - }; - - }, (actor) => { - let pileData = actor.getFlag(CONSTANTS.MODULE_NAME, CONSTANTS.PILE_DATA); - if (!pileData) return false; - const pileVersion = pileData?.flagVersion || "1.0.0"; - return pileVersion !== this.latestFlagVersion; - }); - - await game.settings.set(CONSTANTS.MODULE_NAME, "migrationVersion", this.latestFlagVersion); - - - }, - - migrations: { - - "1.2.6": (inDocument, pileData) => { - pileData.overrideItemFilters = pileData?.itemTypeFilters?.length - ? [{ path: "type", filters: pileData.itemTypeFilters }] - : false; - delete pileData.itemTypeFilters; - - return foundry.utils.duplicate(pileData); - }, - - "1.3.0": (inDocument, pileData) => { - - const newPileData = foundry.utils.duplicate(CONSTANTS.PILE_DEFAULTS); - - for (const key of Object.keys(newPileData)) { - newPileData[key] = pileData[key] ?? newPileData[key]; - } - - newPileData.overrideCurrencies = pileData?.overrideDynamicAttributes?.length - ? [{ path: "type", filters: pileData.overrideDynamicAttributes }] - : false; - - return foundry.utils.duplicate(newPileData); - - }, - }, - -} - - -export default flagManager; \ No newline at end of file diff --git a/scripts/formapplications/drop-currency-dialog.js b/scripts/formapplications/drop-currency-dialog.js deleted file mode 100644 index a0f23636..00000000 --- a/scripts/formapplications/drop-currency-dialog.js +++ /dev/null @@ -1,118 +0,0 @@ -import CONSTANTS from "../constants.js"; -import * as lib from "../lib/lib.js"; - -export default class DropCurrencyDialog extends FormApplication { - - constructor(resolve, { - title, - content, - button, - target, - source, - existingCurrencies = false, - includeAllCurrencies = false - } = {}) { - super(); - - this._title = title ?? game.i18n.localize("ITEM-PILES.DropCurrencies.Title"); - this._content = content ?? game.i18n.localize("ITEM-PILES.DropCurrencies.Player"); - this._button = button ?? game.i18n.localize("ITEM-PILES.DropCurrencies.AddToPile") - - this.resolve = resolve; - this.target = target; - this.source = source; - this.existingCurrencies = existingCurrencies; - this.includeAllCurrencies = includeAllCurrencies; - } - - /** @inheritdoc */ - static get defaultOptions() { - return foundry.utils.mergeObject(super.defaultOptions, { - classes: ["dialog"], - template: `${CONSTANTS.PATH}templates/drop-currency-dialog.html`, - width: 430, - height: "auto" - }); - } - - get title() { - return this._title; - } - - /** - * @param parameters - * @returns {Promise} - */ - static query(parameters) { - return new Promise(resolve => { - new DropCurrencyDialog(resolve, parameters).render(true); - }); - } - - async getData(options) { - const data = super.getData(options); - - data.source = this.source; - data.target = this.target; - - let currencyList = { currencyList: lib.getActorCurrencyList(this.target), getAll: this.includeAllCurrencies }; - - data.currencies = lib.getActorCurrencies(this.source, currencyList); - - if (!this.includeAllCurrencies) { - data.currencies = data.currencies.filter(currency => currency.quantity) - } - - data.currencies.map(currency => { - currency.currentQuantity = 0; - if (this.existingCurrencies) { - const existingCurrency = this.existingCurrencies.find(existingCurrency => existingCurrency.path === currency.path); - if (existingCurrency) { - currency.currentQuantity = existingCurrency.quantity; - } - } - return currency; - }) - - data.includeAllCurrencies = this.includeAllCurrencies; - data.content = this._content; - data.button = this._button; - - return data; - } - - /* -------------------------------------------- */ - - activateListeners(html) { - super.activateListeners(html); - - html.find('.item-piles-slider-group').each(function () { - - const slider = $(this).find(".item-piles-range-slider") - const input = $(this).find(".item-piles-range-input") - slider.on("input", function () { - input.val($(this).val()); - }) - input.keyup(function () { - slider.val($(this).val()); - }); - - }) - } - - async _updateObject(event, formData) { - - if (event.submitter.value === "cancel") { - return this.resolve(false); - } - - return this.resolve(formData); - - } - - async close(options) { - super.close(options); - this.resolve(false); - } - -} \ No newline at end of file diff --git a/scripts/formapplications/drop-item-dialog.js b/scripts/formapplications/drop-item-dialog.js deleted file mode 100644 index dc793894..00000000 --- a/scripts/formapplications/drop-item-dialog.js +++ /dev/null @@ -1,75 +0,0 @@ -import CONSTANTS from "../constants.js"; -import * as lib from "../lib/lib.js"; - -export default class DropItemDialog extends FormApplication { - - constructor(resolve, droppedItem, itemPile) { - super(); - this.resolve = resolve; - this.droppedItem = droppedItem; - this.itemPile = itemPile; - } - - /** @inheritdoc */ - static get defaultOptions() { - return foundry.utils.mergeObject(super.defaultOptions, { - title: game.i18n.localize("ITEM-PILES.DropItem.Title"), - classes: ["dialog"], - template: `${CONSTANTS.PATH}templates/drop-item-dialog.html`, - width: 430, - height: "auto" - }); - } - - static query(droppedItem, itemPile) { - - return new Promise(resolve => { - new DropItemDialog(resolve, droppedItem, itemPile).render(true); - }); - - } - - async getData(options) { - const data = super.getData(options); - - data.itemPile = this.itemPile; - data.itemPileAtLocation = !!this.itemPile; - data.droppedItem = this.droppedItem; - data.itemQuantity = lib.getItemQuantity(this.droppedItem); - data.itemQuantityMoreThanOne = data.itemQuantity > 1; - - return data; - } - - /* -------------------------------------------- */ - - activateListeners(html) { - super.activateListeners(html); - const slider = html.find(".rangeSlider"); - const input = html.find(".rangeValue") - slider.on("input", function () { - input.val($(this).val()); - }) - input.keyup(function () { - slider.val($(this).val()); - }) - } - - async _updateObject(event, formData) { - - if (event.submitter.value === "cancel") { - return this.resolve(false); - } - - formData.action = event.submitter.value; - - return this.resolve(formData); - - } - - async close(options) { - await super.close(options); - this.resolve(false); - } - -} \ No newline at end of file diff --git a/scripts/formapplications/item-pile-config.js b/scripts/formapplications/item-pile-config.js deleted file mode 100644 index 0ccfec7c..00000000 --- a/scripts/formapplications/item-pile-config.js +++ /dev/null @@ -1,254 +0,0 @@ -import CONSTANTS from "../constants.js"; -import API from "../api.js"; -import * as lib from "../lib/lib.js"; -import { ItemPileCurrenciesEditor } from "./item-pile-currencies-editor.js"; -import { ItemPileFiltersEditor } from "./item-pile-filters-editor.js"; - -export class ItemPileConfig extends FormApplication { - - constructor(actor) { - super(); - this.document = actor?.token ?? actor; - this.pileData = foundry.utils.mergeObject(CONSTANTS.PILE_DEFAULTS, lib.getItemPileData(this.document)); - this.currenciesEditor = false; - this.itemFiltersEditor = false; - } - - /** @inheritdoc */ - static get defaultOptions() { - return foundry.utils.mergeObject(super.defaultOptions, { - classes: ["sheet", "item-piles-config"], - template: `${CONSTANTS.PATH}templates/item-pile-config.html`, - width: 430, - resizable: true, - tabs: [{ navSelector: ".tabs", contentSelector: ".tab-body", initial: "mainsettings" }] - }); - } - - get title() { - return `${game.i18n.localize("ITEM-PILES.Defaults.Title")}: ${this.document.data.name}` - } - - static show(actor) { - const document = actor?.token ?? actor; - for (let app of Object.values(ui.windows)) { - if (app instanceof this && app.document === document) { - return app.render(false, { focus: true }); - } - } - return new ItemPileConfig(actor).render(true); - } - - /* -------------------------------------------- */ - - async getData(options) { - let data = super.getData(options); - data.flagData = foundry.utils.mergeObject(foundry.utils.duplicate(data), foundry.utils.duplicate(this.pileData)); - return data; - } - - activateListeners(html) { - super.activateListeners(html); - const self = this; - const enabledCheckbox = html.find('input[name="enabled"]'); - const scaleCheckbox = html.find('input[name="overrideSingleItemScale"]'); - const displayOneCheckbox = html.find('input[name="displayOne"]'); - const containerCheckbox = html.find('input[name="isContainer"]'); - const overrideItemFiltersEnabledCheckbox = html.find('.item-piles-config-override-item-filters-checkbox'); - const overrideCurrenciesEnabledCheckbox = html.find('.item-piles-config-override-currencies-checkbox'); - const shareItemsEnabledCheckbox = html.find('input[name="shareItemsEnabled"]'); - const shareAttributesEnabledCheckbox = html.find('input[name="shareCurrenciesEnabled"]'); - - const slider = html.find(".item-piles-scaleRange"); - const input = html.find(".item-piles-scaleInput"); - - enabledCheckbox.change(async function () { - let isEnabled = $(this).is(":checked"); - const existingData = lib.getItemPileData(self.document); - if (isEnabled && !existingData?.enabled) { - const isLinked = self.document instanceof Actor - ? self.document.data.token.actorLink - : self.document.isLinked; - if (isLinked) { - const doContinue = await Dialog.confirm({ - title: game.i18n.localize("ITEM-PILES.Dialogs.LinkedActorWarning.Title"), - content: lib.dialogLayout({ message: game.i18n.localize("ITEM-PILES.Dialogs.LinkedActorWarning.Content") }), - defaultYes: false - }); - if (!doContinue) { - $(this).prop("checked", false); - } - } - } - }) - - scaleCheckbox.change(function () { - let isDisabled = !$(this).is(":checked") || !displayOneCheckbox.is(":checked"); - slider.prop('disabled', isDisabled); - input.prop('disabled', isDisabled); - slider.parent().toggleClass("item-piles-disabled", isDisabled); - }).change(); - - displayOneCheckbox.change(function () { - let isEnabled = $(this).is(":checked"); - let isScale = scaleCheckbox.is(":checked"); - let isContainer = containerCheckbox.is(":checked"); - - slider.prop('disabled', !isEnabled || !isScale); - input.prop('disabled', !isEnabled || !isScale); - slider.parent().toggleClass("item-piles-disabled", !isEnabled || !isScale); - - scaleCheckbox.prop('disabled', !isEnabled); - scaleCheckbox.parent().toggleClass("item-piles-disabled", !isEnabled); - - html.find('input[name="showItemName"]').prop('disabled', !isEnabled); - html.find('input[name="showItemName"]').parent().toggleClass("item-piles-disabled", !isEnabled); - - html.find(".display-one-warning").css("display", isEnabled && isContainer ? "block" : "none"); - self.setPosition(); - }).change(); - - containerCheckbox.change(function () { - let isEnabled = $(this).is(":checked"); - let isDisplayOne = displayOneCheckbox.is(":checked"); - html.find(".display-one-warning").css("display", isEnabled && isDisplayOne ? "block" : "none"); - }).change(); - - overrideCurrenciesEnabledCheckbox.change(function () { - let isChecked = $(this).is(":checked"); - if (isChecked) { - self.pileData.overrideCurrencies = game.settings.get(CONSTANTS.MODULE_NAME, "currencies"); - } - html.find(".item-piles-config-configure-override-currencies").prop('disabled', !isChecked); - }) - - html.find(".item-piles-config-configure-override-currencies").click(function () { - self.showCurrenciesEditor(); - }) - - overrideItemFiltersEnabledCheckbox.change(function () { - let isChecked = $(this).is(":checked"); - if (isChecked) { - self.pileData.overrideItemFilters = game.settings.get(CONSTANTS.MODULE_NAME, "itemFilters"); - } - html.find(".item-piles-config-configure-override-item-filters").prop('disabled', !isChecked); - }) - - html.find(".item-piles-config-configure-override-item-filters").click(function () { - self.showItemFiltersEditor(); - }) - - slider.on("input", function () { - input.val($(this).val()); - }) - input.change(function () { - slider.slider('value', $(this).val()); - }) - - const takeAllButtonCheckbox = html.find('input[name="takeAllEnabled"]'); - - shareItemsEnabledCheckbox.change(function () { - const isDisabled = shareItemsEnabledCheckbox.is(":checked") || shareAttributesEnabledCheckbox.is(":checked"); - takeAllButtonCheckbox.prop("disabled", isDisabled).parent().toggleClass("item-piles-disabled", isDisabled); - if (isDisabled && takeAllButtonCheckbox.is(':checked')) { - takeAllButtonCheckbox.prop('checked', false) - } - }); - - shareAttributesEnabledCheckbox.change(function () { - const isDisabled = shareItemsEnabledCheckbox.is(":checked") || shareAttributesEnabledCheckbox.is(":checked"); - takeAllButtonCheckbox.prop("disabled", isDisabled).parent().toggleClass("item-piles-disabled", isDisabled); - if (isDisabled && takeAllButtonCheckbox.is(':checked')) { - takeAllButtonCheckbox.prop('checked', false) - } - }).change(); - - html.find(".item-piles-config-reset-sharing-data").click(function () { - self.resetSharingData(); - }) - } - - async showCurrenciesEditor() { - if (this.currenciesEditor) { - return this.currenciesEditor.render(false, { focus: true }); - } - const [promise, UI] = ItemPileCurrenciesEditor.showForPile(this.pileData.overrideCurrencies); - this.currenciesEditor = UI; - promise.then(newSettings => { - this.currenciesEditor = false; - if (newSettings) { - this.pileData.overrideCurrencies = newSettings; - } - }); - } - - async showItemFiltersEditor() { - if (this.itemFiltersEditor) { - return this.itemFiltersEditor.render(false, { focus: true }); - } - const [promise, UI] = ItemPileFiltersEditor.showForPile(this.pileData.overrideItemFilters); - this.itemFiltersEditor = UI; - promise.then(newSettings => { - this.itemFiltersEditor = false; - if (newSettings) { - this.pileData.overrideItemFilters = newSettings; - } - }); - } - - async resetSharingData() { - return new Dialog({ - title: game.i18n.localize("ITEM-PILES.Dialogs.ResetSharingData.Title"), - content: lib.dialogLayout({ message: game.i18n.localize("ITEM-PILES.Dialogs.ResetSharingData.Content") }), - buttons: { - confirm: { - icon: '', - label: game.i18n.localize("ITEM-PILES.Dialogs.ResetSharingData.Confirm"), - callback: () => { - lib.clearItemPileSharingData(this.document); - } - }, - cancel: { - icon: '', - label: game.i18n.localize("No") - } - }, - default: "cancel" - }).render(true); - } - - async _updateObject(event, formData) { - - let defaults = foundry.utils.duplicate(CONSTANTS.PILE_DEFAULTS); - - const data = foundry.utils.mergeObject(defaults, formData); - - const overrideCurrenciesChecked = this.element.find('.item-piles-config-override-currencies-checkbox').is(":checked"); - data.overrideCurrencies = overrideCurrenciesChecked ? this.pileData.overrideCurrencies : false; - - const overrideItemFiltersChecked = this.element.find('.item-piles-config-override-item-filters-checkbox').is(":checked"); - data.overrideItemFilters = overrideItemFiltersChecked ? this.pileData.overrideItemFilters : false; - - data.deleteWhenEmpty = { - "default": "default", - "true": true, - "false": false - }[data.deleteWhenEmpty]; - - API.updateItemPile(this.document, data).then(() => { - API.rerenderItemPileInventoryApplication(this.document.uuid); - }); - - } - - async close(...args) { - super.close(...args); - if (this.currenciesEditor) { - this.currenciesEditor.close(); - } - if (this.itemFiltersEditor) { - this.itemFiltersEditor.close(); - } - } - -} \ No newline at end of file diff --git a/scripts/formapplications/item-pile-currencies-editor.js b/scripts/formapplications/item-pile-currencies-editor.js deleted file mode 100644 index 4871b114..00000000 --- a/scripts/formapplications/item-pile-currencies-editor.js +++ /dev/null @@ -1,97 +0,0 @@ -import CONSTANTS from "../constants.js"; - -export class ItemPileCurrenciesEditor extends FormApplication { - - constructor(pileCurrencies = false, resolve = false) { - super(); - this.resolve = resolve; - this.currencies = pileCurrencies || game.settings.get(CONSTANTS.MODULE_NAME, "currencies"); - } - - /** @inheritdoc */ - static get defaultOptions() { - return foundry.utils.mergeObject(super.defaultOptions, { - title: game.i18n.localize("ITEM-PILES.CurrenciesEditor.Title"), - classes: ["sheet", "item-pile-currencies-editor"], - template: `${CONSTANTS.PATH}templates/currencies-editor.html`, - width: 630, - height: "auto", - resizable: false - }); - } - - static showForPile(pileCurrencies) { - let resolve; - const promise = new Promise(_resolve => { - resolve = _resolve; - }); - return [promise, new ItemPileCurrenciesEditor(foundry.utils.duplicate(pileCurrencies), resolve).render(true)] - } - - async getData(options) { - const data = super.getData(options); - data.currencies = this.currencies; - return data; - } - - /* -------------------------------------------- */ - - activateListeners(html) { - super.activateListeners(html); - const self = this; - html.find('.item-piles-currency-remove').click(function () { - const index = Number($(this).closest('.item-piles-currency-row').attr("data-currency-index")); - self.currencies.splice(index, 1); - $(this).closest('.item-piles-currency-row').remove(); - self.rerender(); - }); - html.find('.item-piles-add-new-currency').click(function () { - self.currencies.push({ - name: "", - path: "", - img: "" - }) - self.rerender(); - }); - } - - rerender() { - const self = this; - this.element.find('.item-piles-currency-row').each(function (index) { - if (index === 0) return; - self.currencies[index - 1] = { - name: $(this).find('.item-piles-currency-name-input').val(), - path: $(this).find('.item-piles-currency-path-input').val(), - img: $(this).find('.item-piles-currency-img-input').val() - } - }); - return this.render(true); - } - - async _updateObject(event, formData) { - - if (event.submitter.value === "cancel") { - return this.resolve ? this.resolve() : false; - } - - const newSettings = []; - for (let [path, value] of Object.entries(formData)) { - setProperty(newSettings, path, value) - } - - if (!this.resolve) { - game.settings.set(CONSTANTS.MODULE_NAME, "currencies", newSettings); - } else { - this.resolve(newSettings); - } - - } - - async close(...args) { - if (this.resolve) { - this.resolve() - } - return super.close(...args) - } - -} \ No newline at end of file diff --git a/scripts/formapplications/item-pile-filters-editor.js b/scripts/formapplications/item-pile-filters-editor.js deleted file mode 100644 index 31bb5504..00000000 --- a/scripts/formapplications/item-pile-filters-editor.js +++ /dev/null @@ -1,91 +0,0 @@ -import CONSTANTS from "../constants.js"; - -export class ItemPileFiltersEditor extends FormApplication { - - constructor(pileFilters = false, resolve = false) { - super(); - this.resolve = resolve; - this.filters = pileFilters || game.settings.get(CONSTANTS.MODULE_NAME, "itemFilters"); - } - - /** @inheritdoc */ - static get defaultOptions() { - return foundry.utils.mergeObject(super.defaultOptions, { - title: game.i18n.localize("ITEM-PILES.FilterEditor.Title"), - classes: ["sheet", "item-pile-filters-editor"], - template: `${CONSTANTS.PATH}templates/filter-editor.html`, - width: 630, - height: "auto", - resizable: false - }); - } - - static showForPile(pileFilters) { - let resolve; - const promise = new Promise(_resolve => { - resolve = _resolve; - }); - return [promise, new ItemPileFiltersEditor(foundry.utils.duplicate(pileFilters), resolve).render(true)] - } - - async getData(options) { - const data = super.getData(options); - data.filters = this.filters; - return data; - } - - /* -------------------------------------------- */ - - activateListeners(html) { - super.activateListeners(html); - const self = this; - html.find('.item-pile-filters-remove').click(function () { - const index = Number($(this).closest('.item-pile-filters-row').attr("data-filter-index")); - self.filters.splice(index, 1); - $(this).closest('.item-pile-filters-row').remove(); - self.rerender(); - }); - html.find('button[name="newFilter"]').click(function () { - self.filters.push({ - path: "", - filters: "" - }) - self.render(true); - }); - } - - rerender() { - const self = this; - this.element.find('.item-pile-filters-row').each(function (index) { - if (index === 0) return; - self.filters[index - 1] = { - path: $(this).find('.item-pile-filters-path-input').val(), - filters: $(this).find('.item-pile-filters-input').val() - } - }); - return this.render(true); - } - - async _updateObject(event, formData) { - - const newSettings = []; - for (let [path, value] of Object.entries(formData)) { - setProperty(newSettings, path, value) - } - - if (!this.resolve) { - game.settings.set(CONSTANTS.MODULE_NAME, "itemFilters", newSettings); - } else { - this.resolve(newSettings); - } - - } - - async close(...args) { - if (this.resolve) { - this.resolve() - } - return super.close(...args) - } - -} \ No newline at end of file diff --git a/scripts/formapplications/item-pile-inventory.js b/scripts/formapplications/item-pile-inventory.js deleted file mode 100644 index fb8c9848..00000000 --- a/scripts/formapplications/item-pile-inventory.js +++ /dev/null @@ -1,625 +0,0 @@ -import CONSTANTS from "../constants.js"; -import API from "../api.js"; -import * as lib from "../lib/lib.js"; -import { isPileInventoryOpenForOthers } from "../socket.js"; -import HOOKS from "../hooks.js"; -import { ItemPileConfig } from "./item-pile-config.js"; -import DropCurrencyDialog from "./drop-currency-dialog.js"; - -export class ItemPileInventory extends FormApplication { - - /** - * - * @param pile - * @param recipient - * @param overrides - */ - constructor(pile, recipient, overrides = {}) { - super(); - this.pile = pile; - this.recipient = recipient; - this.items = []; - this.currencies = []; - this.deleted = false; - this.overrides = overrides; - this.pileData = lib.getItemPileData(this.pile); - this.interactionId = randomID(); - Hooks.callAll(HOOKS.PILE.OPEN_INVENTORY, this, pile, recipient, overrides); - } - - /** @inheritdoc */ - static get defaultOptions() { - return foundry.utils.mergeObject(super.defaultOptions, { - closeOnSubmit: false, - classes: ["sheet"], - template: `${CONSTANTS.PATH}templates/item-pile-inventory.html`, - width: 550, - height: "auto", - dragDrop: [{ dragSelector: null, dropSelector: ".item-piles-item-drop-container" }], - }); - } - - get title() { - return this.pile.name; - } - - /** - * - * @param inPileUuid - * @param recipientUuid - * @returns {Array[]|boolean} - */ - static getActiveAppFromPile(inPileUuid, recipientUuid = false) { - - const openApps = Object.values(ui.windows).filter(app => { - return app instanceof this - && (app?.pile?.uuid === inPileUuid || app?.pile?.actor?.uuid === inPileUuid) - && (!recipientUuid || (app?.recipient?.uuid === recipientUuid || app?.recipient?.actor?.uuid === recipientUuid)) - }) - - if (openApps.length) { - return openApps; - } - - return false; - } - - static async rerenderActiveApp(inPileUuid, deleted = false) { - const openApps = ItemPileInventory.getActiveAppFromPile(inPileUuid); - if (!openApps) return false; - for (const app of openApps) { - app.saveItems(); - app.saveCurrencies(); - app.deleted = app.deleted || deleted; - app.render(true); - } - return true; - } - - static async show(pile, recipient, overrides = {}) { - const pileUuid = await lib.getUuid(pile); - const recipientUuid = recipient ? await lib.getUuid(recipient) : false; - - let app = ItemPileInventory.getActiveAppFromPile(pileUuid, recipientUuid); - if (app) { - [app] = app; - app.pileData = lib.getItemPileData(app.pile); - return app.render(true, { focus: true }); - } - - const result = Hooks.call(HOOKS.PILE.PRE_OPEN_INVENTORY, pile, recipient, overrides); - if (result === false) return; - - return new ItemPileInventory(pile, recipient, overrides).render(true); - } - - async render(...args) { - this.pileActor = this.pile?.actor ?? this.pile; - this.recipientActor = this.recipient?.actor ?? this.recipient; - this.editQuantities = !this.recipient && this.pile.isOwner && game.user.isGM; - this.playerActors = game.actors.filter(actor => actor.isOwner && actor !== this.pileActor && actor.data.token.actorLink); - super.render(...args); - } - - /* -------------------------------------------- */ - - /** @override */ - _getHeaderButtons() { - let buttons = super._getHeaderButtons(); - const canConfigure = game.user.isGM; - if (canConfigure) { - buttons = [ - { - label: "ITEM-PILES.Inspect.OpenSheet", - class: "item-piles-open-actor-sheet", - icon: "fas fa-user", - onclick: () => { - this.pileActor.sheet.render(true, { focus: true }); - } - }, - { - label: "ITEM-PILES.HUD.Configure", - class: "item-piles-configure-pile", - icon: "fas fa-box-open", - onclick: () => { - ItemPileConfig.show(this.pileActor); - } - }, - ].concat(buttons); - } - return buttons - } - - saveItems() { - - // Get all of the items on the actor right now - const newItems = this.getPileItemData(); - - // If there are none, stop displaying them in the UI - if (!newItems.length) { - this.items = []; - return; - } - - // Otherwise, loop through the old items - for (let oldItem of this.items) { - - // If we find an item that was previously listed - const foundItem = lib.findSimilarItem(newItems, oldItem); - - // We update the previously listed attribute to reflect this - oldItem.quantity = foundItem ? foundItem.quantity : 0; - oldItem.shareLeft = foundItem ? foundItem.shareLeft : 0; - oldItem.currentQuantity = foundItem ? Math.min(oldItem.currentQuantity, foundItem.shareLeft) : 0; - - // We then remove it from the incoming list, as we already have it - if (foundItem) { - newItems.splice(newItems.indexOf(foundItem), 1) - } - - } - - // Add the new items to the list - this.items = this.items.concat(newItems); - - } - - getPileItemData() { - return lib.getItemPileItemsForActor(this.pile, this.recipientActor); - } - - saveCurrencies() { - - // Get all of the currencies on the actor right now - const newCurrencies = this.getPileCurrenciesData(); - - // If there are none, stop displaying them in the UI - if (!newCurrencies.length) { - this.currencies = []; - return; - } - - // Otherwise, loop through the old currencies - for (let oldCurrency of this.currencies) { - - // If we find an currency that was previously listed - const foundCurrency = newCurrencies.find(newCurrency => newCurrency.path === oldCurrency.path); - - // We update the previously listed currency to reflect this - oldCurrency.quantity = foundCurrency ? foundCurrency.quantity : 0; - oldCurrency.shareLeft = foundCurrency ? foundCurrency.shareLeft : 0; - oldCurrency.currentQuantity = foundCurrency ? Math.min(oldCurrency.currentQuantity, foundCurrency.shareLeft) : 0; - - if (foundCurrency) { - // We then remove it from the incoming list, as we already have it - newCurrencies.splice(newCurrencies.indexOf(foundCurrency), 1) - } - - } - - // Add the new currencies to the list - this.currencies = this.currencies.concat(newCurrencies); - - } - - getPileCurrenciesData() { - return lib.getItemPileCurrenciesForActor(this.pile, this.recipientActor); - } - - _onDrop(event) { - - super._onDrop(event); - - let data; - try { - data = JSON.parse(event.dataTransfer.getData('text/plain')); - } catch (err) { - return false; - } - - return API._dropData(canvas, data, { target: this.pile }); - - } - - getData(options) { - const data = super.getData(options); - - data.isDeleted = this.deleted; - - data.name = !data.isDeleted ? this.pile.name : "Nonexistent pile"; - - if (this.deleted) { - return data; - } - - data.systemHasCurrencies = !!API.CURRENCIES.length; - - data.playerActors = this.playerActors; - data.moreThanOneInspectableActors = data.playerActors.length > 1; - - data.overrides = this.overrides; - data.editQuantities = this.editQuantities; - data.hasRecipient = !!this.recipientActor; - data.recipient = this.recipientActor; - data.isContainer = false; - - const pileData = lib.getItemPileData(this.pile); - - data.items = this.items.length ? this.items : this.getPileItemData(); - this.items = data.items; - - data.currencies = this.currencies.length ? this.currencies : this.getPileCurrenciesData(); - this.currencies = data.currencies; - - data.isContainer = pileData.isContainer; - data.hasItems = data.items.length > 0; - data.hasCurrencies = data?.currencies?.length; - data.canInspectItems = pileData.canInspectItems || game.user.isGM; - - data.isEmpty = !data?.hasItems && !data?.hasCurrencies; - - data.shareItemsEnabled = pileData.shareItemsEnabled; - data.shareCurrenciesEnabled = pileData.shareCurrenciesEnabled; - - const sharingData = lib.getItemPileSharingData(this.pile); - const num_players = lib.getPlayersForItemPile(this.pile).length; - - const hasSplittableItems = pileData.shareItemsEnabled && data.items && !!data.items?.find(item => { - let quantity = item.quantity; - if(sharingData.currencies){ - const itemSharingData = sharingData.currencies.find(sharingCurrency => sharingCurrency.path === item.path); - if(itemSharingData){ - quantity += itemSharingData.actors.reduce((acc, data) => acc + data.quantity, 0); - } - } - return (quantity / num_players) >= 1; - }); - - const hasSplittableCurrencies = pileData.shareCurrenciesEnabled && data.currencies && !!data.currencies?.find(currency => { - let quantity = currency.quantity; - if(sharingData.currencies) { - const currencySharingData = sharingData.currencies.find(sharingCurrency => sharingCurrency.path === currency.path); - if (currencySharingData) { - quantity += currencySharingData.actors.reduce((acc, data) => acc + data.quantity, 0); - } - } - return (quantity / num_players) >= 1; - }); - - data.buttons = []; - - if (!data.hasRecipient && data.editQuantities) { - data.buttons.push({ - value: "update", - icon: "fas fa-save", - text: game.i18n.localize("ITEM-PILES.Defaults.Update") - }); - } - - if (pileData.splitAllEnabled && (data.hasRecipient || game.user.isGM)) { - - let buttonText; - if (pileData.shareItemsEnabled && pileData.shareCurrenciesEnabled) { - buttonText = game.i18n.format("ITEM-PILES.Inspect.SplitAll", { num_players }); - } else if (pileData.shareItemsEnabled) { - buttonText = game.i18n.format("ITEM-PILES.Inspect.SplitItems", { num_players }); - } else { - buttonText = game.i18n.format("ITEM-PILES.Inspect.SplitCurrencies", { num_players }); - } - - data.buttons.push({ - value: "splitAll", - icon: "far fa-handshake", - text: buttonText, - disabled: !num_players || !(hasSplittableItems || hasSplittableCurrencies), - type: "button" - }); - - } - - if (pileData.isContainer && !this.overrides.remote) { - data.buttons.push({ - value: "close", - icon: "fas fa-box", - text: game.i18n.localize("ITEM-PILES.Inspect.Close") - }) - } - - if (data.hasRecipient && !pileData.shareItemsEnabled && !pileData.shareCurrenciesEnabled && pileData.takeAllEnabled) { - - data.buttons.push({ - value: "takeAll", - icon: "fas fa-fist-raised", - text: game.i18n.localize("ITEM-PILES.Inspect.TakeAll") - }); - - } - - return data; - } - - activateListeners(html) { - super.activateListeners(html); - let self = this; - let timer; - html.find('img').mouseenter(function () { - const element = $(this); - timer = setTimeout(function () { - self.previewImage(html, element); - }, 300); - }); - - html.find('img').mouseleave(function () { - self.clearImage(html); - clearTimeout(timer); - }); - - html.find('.item-piles-quantity').keyup(function () { - if (!self.editQuantities) return; - - const itemId = $(this).closest(".item-piles-item-row").attr("data-item-id"); - - const isItem = !!itemId; - - const currentQuantity = Number($(this).val()); - - if (isItem) { - const item = self.items.find(item => item.id === itemId) - item.currentQuantity = currentQuantity; - return; - } - - const currencyPath = $(this).closest(".item-piles-item-row").attr('data-currency-path'); - const attribute = self.currencies.find(currency => currency.path === currencyPath) - - attribute.currentQuantity = currentQuantity; - }); - - html.find(".item-piles-name-container .item-piles-clickable").click(function () { - const itemId = $(this).closest(".item-piles-item-row").attr('data-item-id'); - self.previewItem(itemId); - }) - - html.find(".item-piles-item-take-button").click(function () { - const itemId = $(this).closest(".item-piles-item-row").attr('data-item-id'); - const inputQuantity = $(this).closest(".item-piles-item-row").find(".item-piles-quantity").val(); - self.takeItem(itemId, inputQuantity); - }) - - html.find(".item-piles-currency-take-button").click(function () { - const currency = $(this).closest(".item-piles-item-row").attr('data-currency-path'); - const inputQuantity = $(this).closest(".item-piles-item-row").find(".item-piles-quantity").val(); - self.takeCurrency(currency, inputQuantity); - }) - - html.find('button[name="splitAll"]').click(function () { - self.splitAll(); - }) - - html.find('.item-piles-add-currency').click(function () { - self.addCurrency(); - }) - - if (this.playerActors.length > 1) { - html.find('.item-piles-change-actor').click(function () { - $(this).hide(); - let select = $(this).parent().find('.item-piles-change-actor-select'); - select.insertAfter($(this)); - select.css('display', 'inline-block'); - }); - - html.find(".item-piles-change-actor-select").change(async function () { - $(this).css('display', 'none'); - html.find('.item-piles-change-actor').show(); - const value = $(this).val(); - self.recipient = await fromUuid(value); - if (!self.recipient) { - return; - } - self.render(true); - }); - } else { - const element = html.find('.item-piles-change-actor'); - const innerHTML = element.html(); - element.removeClass(".item-piles-change-actor") - .replaceWith($('' + innerHTML + '')); - html.find('.item-piles-change-actor-select').remove(); - } - - // Activate context menu - this._contextMenu(html); - } - - /* -------------------------------------------- */ - - /** @inheritdoc */ - _contextMenu(html) { - ContextMenu.create(this, html, ".item-piles-item-row", this._getEntryContextOptions()); - } - - /* -------------------------------------------- */ - - /** - * Get the Macro entry context options - * @returns {object[]} The Macro entry context options - * @private - */ - _getEntryContextOptions() { - return [ - { - name: "JOURNAL.ActionShow", - icon: '', - condition: (div) => { - return game.user.isGM && div.data("item-id"); - }, - callback: (div) => { - const item = this.pileActor.items.get(div.data("item-id")); - const popout = new ImagePopout(item.data.img, { title: item.name }).render(true); - popout.shareImage(); - } - } - ]; - } - - previewImage(html, element) { - - const src = element.prop("src"); - - const pos = element.position(); - - const imageContainer = html.find("#item-piles-preview-image"); - - imageContainer.prop("src", src); - - let container = html.find("#item-piles-preview-container"); - - setTimeout(() => { - - container.css({ - position: "absolute", - top: (pos.top - (container.outerHeight() / 2)) + "px", - left: (-container.outerWidth() - pos.left) + "px" - }).fadeIn(150); - - }, 10) - } - - clearImage(html) { - html.find("#item-piles-preview-container").fadeOut(150); - } - - async previewItem(itemId) { - const item = this.pileActor.items.get(itemId); - if (game.user.isGM || item.data.permission[game.user.id] === 3) { - return item.sheet.render(true); - } - - const cls = item._getSheetClass() - const sheet = new cls(item, { editable: false }) - return sheet._render(true); - } - - async takeItem(itemId, inputQuantity) { - const item = this.pileActor.items.get(itemId); - let quantity = lib.getItemQuantity(item); - quantity = Math.min(inputQuantity, quantity); - return API.transferItems(this.pile, this.recipient, [{ - _id: itemId, - quantity - }], { interactionId: this.interactionId }); - } - - async takeCurrency(attribute, inputQuantity) { - let quantity = Number(getProperty(this.pileActor.data, attribute) ?? 0); - quantity = Math.min(inputQuantity, quantity); - await API.transferAttributes(this.pile, this.recipient, { [attribute]: quantity }, { interactionId: this.interactionId }); - } - - async splitAll() { - await API.splitItemPileContents(this.pile); - } - - async addCurrency() { - - if (this.recipient) { - const currencyToAdd = await DropCurrencyDialog.query({ - target: this.pile, - source: this.recipient - }) - return API.transferAttributes(this.recipient, this.pile, currencyToAdd); - } - - if (game.user.isGM) { - const currencyToAdd = await DropCurrencyDialog.query({ - target: this.pile, - source: this.recipient, - includeAllCurrencies: true - }) - return API.addAttributes(this.pile, currencyToAdd); - } - } - - async _updateObject(event, formData) { - - if (event.submitter.value === "update") { - lib.custom_notify("Item Pile successfully updated."); - await this.updatePile(formData); - return this.render(true); - } - - if (event.submitter.value === "takeAll") { - API.transferEverything(this.pile, this.recipient, { interactionId: this.interactionId }); - } - - if (event.submitter.value === "close") { - isPileInventoryOpenForOthers.query(this.pile).then((result) => { - if (!result) API.closeItemPile(this.pile, this.recipient); - }); - } - - return this.close(); - - } - - updatePile(data) { - - const items = []; - const attributes = {}; - - for (let [type, quantity] of Object.entries(data)) { - if (type.startsWith("currency-")) { - const path = type.replace("currency-", ""); - if (quantity === this.currencies.find(currency => currency.path === path).quantity) continue; - attributes[path] = quantity; - } else { - const itemId = type.replace("item-", ""); - if (itemId === this.items.find(item => item.id === itemId).itemId) continue; - items.push({ - _id: itemId, - [API.ITEM_QUANTITY_ATTRIBUTE]: quantity - }) - } - } - - const pileSharingData = lib.getItemPileSharingData(this.pile); - - const hasAttributes = !foundry.utils.isObjectEmpty(attributes); - - if (hasAttributes) { - this.pileActor.update(attributes); - if (pileSharingData?.currencies) { - pileSharingData.currencies = pileSharingData.currencies.map(currency => { - if (attributes[currency.path] !== undefined) { - currency.actors = currency.actors.map(actor => { - actor.quantity = Math.max(0, Math.min(actor.quantity, attributes[currency.path])); - return actor; - }) - } - return currency; - }) - } - } - - if (items.length) { - this.pileActor.updateEmbeddedDocuments("Item", items); - if (pileSharingData?.items) { - pileSharingData.items = pileSharingData.items.map(item => { - const sharingItem = items.find(item => item._id === item.id); - if (sharingItem) { - item.actors = item.actors.map(actor => { - actor.quantity = Math.max(0, Math.min(actor.quantity, sharingItem.quantity)); - return actor; - }) - } - return item; - }) - } - } - - if (items.length || hasAttributes) { - lib.updateItemPileSharingData(this.pile, pileSharingData); - } - - } - -} \ No newline at end of file diff --git a/scripts/formapplications/item-pile-similarities-editor.js b/scripts/formapplications/item-pile-similarities-editor.js deleted file mode 100644 index 841920e8..00000000 --- a/scripts/formapplications/item-pile-similarities-editor.js +++ /dev/null @@ -1,65 +0,0 @@ -import CONSTANTS from "../constants.js"; - -export class ItemPileSimilaritiesEditor extends FormApplication { - - constructor() { - super(); - this.similarities = game.settings.get(CONSTANTS.MODULE_NAME, "itemSimilarities"); - } - - /** @inheritdoc */ - static get defaultOptions() { - return foundry.utils.mergeObject(super.defaultOptions, { - title: game.i18n.localize("ITEM-PILES.SimilaritiesEditor.Title"), - classes: ["sheet", "item-pile-similarities-editor"], - template: `${CONSTANTS.PATH}templates/similarities-editor.html`, - width: 400, - height: "auto", - resizable: false - }); - } - - async getData(options) { - const data = super.getData(options); - data.similarities = this.similarities; - return data; - } - - /* -------------------------------------------- */ - - activateListeners(html) { - super.activateListeners(html); - const self = this; - html.find('.item-pile-similarities-remove').click(function () { - const index = Number($(this).closest('.item-pile-similarities-row').attr("data-similarities-index")); - self.similarities.splice(index, 1); - $(this).closest('.item-pile-similarities-row').remove(); - self.rerender(); - }); - html.find('button[name="newPath"]').click(function () { - self.similarities.push("") - self.render(true); - }); - } - - rerender() { - const self = this; - this.element.find('.item-pile-similarities-row').each(function (index) { - if (index === 0) return; - self.similarities[index - 1] = $(this).find('.item-pile-similarities-path-input').val() - }); - return this.render(true); - } - - async _updateObject(event, formData) { - - const newSettings = []; - for (let [path, value] of Object.entries(formData)) { - setProperty(newSettings, path, value) - } - - game.settings.set(CONSTANTS.MODULE_NAME, "itemSimilarities", newSettings); - - } - -} \ No newline at end of file diff --git a/scripts/formapplications/trade-dialogs.js b/scripts/formapplications/trade-dialogs.js deleted file mode 100644 index e40f9822..00000000 --- a/scripts/formapplications/trade-dialogs.js +++ /dev/null @@ -1,249 +0,0 @@ -import CONSTANTS from "../constants.js"; -import * as lib from "../lib/lib.js"; - -export class TradePromptDialog extends FormApplication { - - constructor(resolve, { actors = false, actor = false, users = false, user = false } = {}) { - super(); - this.resolve = resolve; - this.users = users || game.users.filter(user => user.active && user !== game.user); - this.user = user || users?.[0] || false; - this.actors = actors || game.actors.filter(actor => actor.isOwner); - this.actor = actor || game.user.character || (!game.user.isGM ? this.actors?.[0] : false); - this.isGM = game.user.isGM; - - } - - /** @inheritdoc */ - static get defaultOptions() { - return foundry.utils.mergeObject(super.defaultOptions, { - title: game.i18n.localize("ITEM-PILES.Trade.Title"), - classes: ["dialog"], - template: `${CONSTANTS.PATH}templates/trade-dialog.html`, - width: 400, - height: "auto", - dragDrop: [{ dragSelector: null, dropSelector: ".item-piles-actor-container" }], - }); - } - - static show({ actors = false, actor = false, users = false, user = false }) { - return new Promise(resolve => { - new TradePromptDialog(resolve, { actors, actor, users, user }).render(true); - }) - } - - activateListeners(html) { - super.activateListeners(html); - const self = this; - - html.find(".item-piles-actor-container").on("dragenter", function (event) { - event = event.originalEvent || event; - let newElement = document.elementFromPoint(event.pageX, event.pageY); - if (!$.contains(this, newElement)) { - $(this).addClass("item-piles-box-highlight"); - } - }) - - html.find(".item-piles-actor-container").on("dragleave", function (event) { - event = event.originalEvent || event; - let newElement = document.elementFromPoint(event.pageX, event.pageY); - if (!$.contains(this, newElement)) { - $(this).removeClass("item-piles-box-highlight"); - } - }) - - html.find(".item-piles-pick-selected-token").click(() => { - if (canvas.tokens.controlled.length === 0) return; - this.setActor(canvas.tokens.controlled[0].actor); - }); - - html.find('select[name="user"]').change(function () { - const userId = $(this).val(); - self.user = game.users.get(userId); - }); - - html.find('input[name="private"]').change(function () { - self.private = $(this).is(":checked"); - }); - - html.find('.item-piles-change-actor').click(function () { - $(this).hide(); - let select = $(this).parent().find('.item-piles-change-actor-select'); - select.insertAfter($(this)); - select.css('display', 'inline-block'); - }); - - html.find(".item-piles-change-actor-select").change(async function () { - $(this).css('display', 'none'); - html.find('.item-piles-change-actor').show(); - const actor = await fromUuid($(this).val()); - self.setActor(actor); - }); - } - - async _onDrop(event) { - - super._onDrop(event); - - let data; - try { - data = JSON.parse(event.dataTransfer.getData('text/plain')); - } catch (err) { - return false; - } - - if (data.type !== "Actor") return; - - this.setActor(game.actors.get(data.id)); - - } - - setActor(actor) { - if (!actor.isOwner) { - return lib.custom_warning(game.i18n.localize("ITEM-PILES.Trade.ActorOwnerWarning"), true); - } - this.actor = actor; - this.render(true); - } - - async getData(options) { - const data = await super.getData(options); - data.user = this.user; - data.users = this.users; - data.actor = this.actor; - data.actors = this.actors; - data.private = this.private; - data.multipleActors = this.actors.length > 1 && !game.user.isGM; - data.hasUnlinkedTokenOwnership = this.actors.filter(a => !a.data.token.actorLink).length > 0; - data.buttons = [{ - value: "accept", - icon: "fas fa-check", - text: game.i18n.localize("ITEM-PILES.Trade.Request.Label"), - disabled: !data.actor - }] - return data; - } - - async _updateObject(event, formData) { - const actor = await fromUuid(formData?.actor || this.actor.uuid); - return this.resolve({ - userId: formData.user, - actor: actor, - private: formData.private - }); - } - - async close(...args) { - super.close(...args); - this.resolve(false); - } - -} - -export class TradeRequestDialog extends TradePromptDialog { - - constructor(resolve, { tradeId, tradingUser, tradingActor, isPrivate } = {}) { - super(resolve); - this.tradeId = tradeId; - this.tradingUser = tradingUser; - this.tradingActor = tradingActor; - this.isPrivate = isPrivate; - this.progressbarTimeout = false - this.timeout = false; - this._hasClosed = false; - this.interval = setInterval(() => { - const user = game.users.get(this.tradingUser.id) - if (!user.active) { - lib.custom_warning(game.i18n.localize("ITEM-PILES.Trade.Disconnected"), true) - this.close(); - } - }, 100) - } - - static show({ tradeId, tradingUser, tradingActor, isPrivate } = {}) { - return new Promise(resolve => { - new TradeRequestDialog(resolve, { tradeId, tradingUser, tradingActor, isPrivate }).render(true); - }) - } - - static cancel(tradeId) { - for (const app of Object.values(ui.windows)) { - if (app instanceof TradeRequestDialog && app.tradeId === tradeId) { - return app.close({ type: "cancelled" }); - } - } - return false; - } - - activateListeners(html) { - super.activateListeners(html); - - const progressBarContainer = html.find(".item-piles-progress"); - const progressBar = html.find(".progress-bar"); - progressBarContainer.hide(); - this.progressbarTimeout = setTimeout(() => { - if (this._hasClosed) return; - progressBarContainer.fadeIn(1000) - progressBar.css("transition", 'width 20s linear') - progressBar.css("width", "100%") - this.setPosition(); - }, 14000); - - this.timeout = setTimeout(() => { - if (this._hasClosed) return; - lib.custom_warning(game.i18n.localize("ITEM-PILES.Trade.AutoDecline"), true) - html.find('button[name="decline"]').click(); - }, 35000) - - } - - async getData(options) { - let data = await super.getData(options); - data.isPrompt = true; - data.tradingUser = this.tradingUser; - data.tradingActor = this.tradingActor; - data.isPrivate = this.isPrivate; - data.buttons = [{ - value: "accept", - icon: "fas fa-check", - text: game.i18n.localize("ITEM-PILES.Trade.Accept") - }, { - value: "decline", - icon: "fas fa-times", - text: game.i18n.localize("ITEM-PILES.Trade.Decline") - }, { - value: "mute", - icon: "fas fa-comment-slash", - text: game.i18n.localize("ITEM-PILES.Trade.Mute") - }]; - return data; - } - - async _updateObject(event, formData) { - this._hasClosed = true; - clearInterval(this.interval); - clearTimeout(this.progressbarTimeout); - clearTimeout(this.timeout); - - if (event.submitter.value === "accept") { - const actor = await fromUuid(formData?.actor || this.actor.uuid); - return this.resolve(actor) - } - - if (event.submitter.value === "mute") { - return this.resolve("mute"); - } - - return this.resolve(false); - } - - async close(options) { - this._hasClosed = true; - clearInterval(this.interval); - clearTimeout(this.progressbarTimeout); - clearTimeout(this.timeout); - this.resolve(options?.type); - return super.close(options); - } - -} \ No newline at end of file diff --git a/scripts/formapplications/trading-app.js b/scripts/formapplications/trading-app.js deleted file mode 100644 index 3526aa73..00000000 --- a/scripts/formapplications/trading-app.js +++ /dev/null @@ -1,489 +0,0 @@ -import CONSTANTS from "../constants.js"; -import * as lib from "../lib/lib.js"; -import { hotkeyState } from "../hotkeys.js"; -import DropCurrencyDialog from "./drop-currency-dialog.js"; -import { itemPileSocket, SOCKET_HANDLERS } from "../socket.js"; -import { TradeAPI } from "../trade-api.js"; -import API from "../api.js"; - -export class TradingApp extends FormApplication { - - constructor(leftTrader, rightTrader, publicTradeId, privateTradeId = false, isPrivate = false) { - super(); - - this.leftTraderActor = leftTrader.actor; - this.leftTraderUser = leftTrader.user; - this.leftTraderActorItems = leftTrader.items ?? []; - this.leftTraderActorCurrencies = leftTrader.currencies ?? []; - this.leftTraderAccepted = leftTrader.accepted ?? false; - - this.rightTraderActor = rightTrader.actor; - this.rightTraderUser = rightTrader.user; - this.rightTraderActorItems = rightTrader.items ?? []; - this.rightTraderActorCurrencies = rightTrader.currencies ?? []; - this.rightTraderAccepted = rightTrader.accepted ?? false; - - this.publicTradeId = publicTradeId; - this.privateTradeId = privateTradeId; - - this.isPrivate = isPrivate; - - this.editingInput = false; - this.currencyWindow = false; - } - - - /** @inheritdoc */ - static get defaultOptions() { - return foundry.utils.mergeObject(super.defaultOptions, { - classes: ["dialog", "item-piles-trading-sheet"], - width: 800, - height: "auto", - dragDrop: [{ dragSelector: null, dropSelector: ".item-piles-item-drop-container" }], - closeOnSubmit: false - }); - } - - get template() { - return this.leftTraderUser === game.user || this.rightTraderUser === game.user - ? `${CONSTANTS.PATH}templates/trading-app.html` - : `${CONSTANTS.PATH}templates/trading-app-spectate.html`; - } - - get title() { - return game.i18n.format("ITEM-PILES.Trade.Between", { - actor_1: this.leftTraderActor.name, - actor_2: this.rightTraderActor.name - }); - } - - static getAppByPublicTradeId(publicTradeId) { - for (const app of Object.values(ui.windows)) { - if (app instanceof TradingApp && app?.publicTradeId === publicTradeId) { - return app; - } - } - return false; - } - - static _updateItems(publicTradeId, userId, itemData) { - const app = TradingApp.getAppByPublicTradeId(publicTradeId); - if (app) { - return app.updateItems(userId, itemData); - } - return false; - } - - static _updateCurrencies(publicTradeId, userId, currencyData) { - const app = TradingApp.getAppByPublicTradeId(publicTradeId); - if (app) { - return app.updateCurrencies(userId, currencyData); - } - return false; - } - - static _setAcceptedState(publicTradeId, userId, state) { - const app = TradingApp.getAppByPublicTradeId(publicTradeId); - if (app) { - return app.setAcceptedState(userId, state); - } - return false; - } - - static _tradeCompleted(party_1, party_2, publicTradeId) { - const app = TradingApp.getAppByPublicTradeId(publicTradeId); - if (app) { - return app.close({ accepted: true }); - } - return false; - } - - static _tradeClosed(publicTradeId, userId) { - const app = TradingApp.getAppByPublicTradeId(publicTradeId); - if (app) { - return app.close({ userId }); - } - return false; - } - - async executeSocketAction(socketHandler, ...args) { - if (this.isPrivate) { - return itemPileSocket.executeForUsers(socketHandler, [this.leftTraderUser.id, this.rightTraderUser.id], ...args); - } - return itemPileSocket.executeForEveryone(socketHandler, ...args); - } - - async _onDrop(event) { - - if (game.user !== this.leftTraderUser) return; - - super._onDrop(event); - - let data; - try { - data = JSON.parse(event.dataTransfer.getData('text/plain')); - } catch (err) { - return false; - } - - if (data.type !== "Item") return; - - if (!data.actorId) { - if (!game.user.isGM) return lib.custom_warning(game.i18n.localize("ITEM-PILES.Errors.NoSourceDrop"), true) - } - - if (!game.user.isGM && data.actorId && data.actorId !== this.leftTraderActor.id) { - throw lib.custom_error(`You cannot drop items into the trade UI from a different actor than ${this.leftTraderActor.name}!`) - } - - let itemData; - if (data.pack) { - const uuid = `Compendium.${data.pack}.${data.id}`; - const item = await fromUuid(uuid); - itemData = item.toObject(); - } else if (data.id) { - itemData = game.items.get(data.id)?.toObject(); - } else { - itemData = data.data; - } - - if (!itemData) { - console.error(data); - throw lib.custom_error("Something went wrong when dropping this item!") - } - - const disallowedType = lib.isItemInvalid(this.rightTraderActor, itemData); - if (disallowedType) { - if (!game.user.isGM) { - return lib.custom_warning(game.i18n.format("ITEM-PILES.Errors.DisallowedItemTrade", { type: disallowedType }), true) - } - if (!hotkeyState.shiftDown) { - const force = await Dialog.confirm({ - title: game.i18n.localize("ITEM-PILES.Dialogs.TradeTypeWarning.Title"), - content: `

${game.i18n.format("ITEM-PILES.Dialogs.TradeTypeWarning.Content", { type: disallowedType })}

`, - defaultYes: false - }); - if (!force) { - return false; - } - } - } - - return this.addItem(itemData, !!data.actorId && game.user.isGM); - - } - - async addItem(newItem, limitQuantity = true) { - - const item = lib.findSimilarItem(this.leftTraderActorItems, newItem) - - if (!item) { - this.leftTraderActorItems.push({ - id: newItem._id, - name: newItem.name, - img: newItem?.img ?? "", - quantity: 1, - maxQuantity: limitQuantity ? lib.getItemQuantity(newItem) : Infinity, - data: newItem - }) - } else { - if (item.quantity >= lib.getItemQuantity(newItem)) return; - item.quantity = Math.min(item.quantity + 1, lib.getItemQuantity(newItem)); - } - - await itemPileSocket.executeForUsers(SOCKET_HANDLERS.PRIVATE.TRADE_UPDATE_ITEMS, [this.leftTraderUser.id, this.rightTraderUser.id], this.privateTradeId, game.user.id, this.leftTraderActorItems); - return this.executeSocketAction(SOCKET_HANDLERS.PUBLIC.TRADE_UPDATE_ITEMS, this.publicTradeId, game.user.id, this.leftTraderActorItems); - - } - - updateItems(userId, inItems) { - if (userId === this.leftTraderUser.id) { - this.leftTraderActorItems = inItems; - } else if (userId === this.rightTraderUser.id) { - this.rightTraderActorItems = inItems; - } - this.leftTraderAccepted = false; - this.rightTraderAccepted = false; - this.render(true); - } - - async addCurrency(asGM = false) { - - if (this.currencyWindow) { - this.currencyWindow.close(); - } - - const currencyToAdd = await DropCurrencyDialog.query({ - source: this.leftTraderActor, - target: this.rightTraderActor, - existingCurrencies: this.leftTraderActorCurrencies, - title: game.i18n.localize("ITEM-PILES.Trade.AddCurrency.Title"), - content: game.i18n.format("ITEM-PILES.Trade.AddCurrency.Content", { trader_actor_name: this.rightTraderActor.name }), - button: game.i18n.localize("ITEM-PILES.Trade.AddCurrency.Label"), - includeAllCurrencies: asGM - }); - - if (!currencyToAdd) return; - - const currencies = lib.getActorCurrencies(this.leftTraderActor, { getAll: asGM }); - - Object.entries(currencyToAdd).forEach(entry => { - - const existingCurrency = this.leftTraderActorCurrencies.find(currency => currency.path === entry[0]); - - if (existingCurrency) { - existingCurrency.quantity = entry[1]; - return; - } - - const currency = currencies.find(currency => currency.path === entry[0]); - - this.leftTraderActorCurrencies.push({ - path: entry[0], - quantity: entry[1], - name: currency.name, - img: currency.img, - maxQuantity: !asGM ? currency.quantity : Infinity, - index: currency.index - }); - - }); - - this.leftTraderActorCurrencies = this.leftTraderActorCurrencies.filter(currency => currency.quantity); - - this.leftTraderActorCurrencies.sort((a, b) => a.index - b.index); - - await itemPileSocket.executeForUsers(SOCKET_HANDLERS.PRIVATE.TRADE_UPDATE_CURRENCIES, [this.leftTraderUser.id, this.rightTraderUser.id], this.privateTradeId, game.user.id, this.leftTraderActorCurrencies); - return this.executeSocketAction(SOCKET_HANDLERS.PUBLIC.TRADE_UPDATE_CURRENCIES, this.publicTradeId, game.user.id, this.leftTraderActorCurrencies); - - } - - updateCurrencies(userId, inCurrencies) { - if (userId === this.leftTraderUser.id) { - this.leftTraderActorCurrencies = inCurrencies; - } else if (userId === this.rightTraderUser.id) { - this.rightTraderActorCurrencies = inCurrencies; - } - this.leftTraderAccepted = false; - this.rightTraderAccepted = false; - this.render(true); - } - - setAcceptedState(userId, state) { - if (userId === this.leftTraderUser.id) { - this.leftTraderAccepted = state; - } else if (userId === this.rightTraderUser.id) { - this.rightTraderAccepted = state; - } - this.render(true); - } - - activateListeners(html) { - super.activateListeners(html); - let self = this; - - setTimeout(() => { - let element = html.find(`.item-piles-item-row[data-item="${this.editingInput}"]`) - element = element.length ? element : html.find(`.item-piles-item-row[data-currency="${this.editingInput}"]`) - if (element.length) { - element.find(".item-piles-quantity").focus() - } - }, 50); - - html.find('.item-piles-item-row .item-piles-quantity').keyup(function (event) { - if (event.key === "Enter") { - event.preventDefault(); - } - - const parent = $(this).closest(".item-piles-item-row"); - - let quantity; - const value = Number($(this).val()); - if (parent.attr('data-type') === "item") { - const itemId = parent.attr("data-item"); - const item = self.leftTraderActorItems.find(item => item.id === itemId); - quantity = Math.min(value, item.maxQuantity); - item.quantity = quantity; - } else { - const currencyPath = parent.attr("data-currency"); - const currency = self.leftTraderActorCurrencies.find(currency => currency.path === currencyPath); - quantity = Math.min(value, currency.maxQuantity); - currency.quantity = quantity; - } - - $(this).val(quantity); - - if (event.key === "Enter") { - parent.find(".item-piles-confirm-quantity").click(); - } - - }); - - html.find(".item-piles-quantity-text").dblclick(function () { - self.resetInputs(); - const parent = $(this).closest(".item-piles-item-row"); - $(this).hide(); - parent.find(".item-piles-quantity-container").show(); - parent.find(".item-piles-confirm-quantity").show(); - const quantityInput = parent.find(".item-piles-quantity"); - quantityInput.focus().select(); - self.editingInput = parent.attr('data-type') === "item" - ? parent.attr('data-item') - : parent.attr('data-currency'); - }); - - html.find(".item-piles-remove-item").click(function () { - self.editingInput = false; - const parent = $(this).closest(".item-piles-item-row"); - if (parent.attr('data-type') === "item") { - return self.setItemQuantity(parent.attr('data-item'), 0) - } - return self.setCurrencyQuantity(parent.attr('data-currency'), 0) - }) - - html.find(".item-piles-confirm-quantity").click(function () { - self.editingInput = false; - const parent = $(this).closest(".item-piles-item-row"); - $(this).hide(); - parent.find(".item-piles-quantity-container").hide(); - parent.find(".item-piles-quantity-text").show(); - const value = Number(parent.find(".item-piles-quantity").val()) - - parent.find(".item-piles-quantity-text").text(value); - - if (parent.attr('data-type') === "item") { - return self.setItemQuantity(parent.attr('data-item'), value) - } - - return self.setCurrencyQuantity(parent.attr('data-currency'), value) - }) - - html.find(".item-piles-add-currency").click(() => { - this.addCurrency() - }); - - html.find(".item-piles-gm-add-currency").click(() => { - this.addCurrency(true) - }); - - html.find(".item-piles-accept-button").click(async () => { - await itemPileSocket.executeForUsers(SOCKET_HANDLERS.PRIVATE.TRADE_STATE, [this.leftTraderUser.id, this.rightTraderUser.id], this.privateTradeId, game.user.id, !this.leftTraderAccepted); - return this.executeSocketAction(SOCKET_HANDLERS.PUBLIC.TRADE_STATE, this.publicTradeId, game.user.id, !this.leftTraderAccepted); - }); - - } - - resetInputs() { - this.editingInput = false; - this.element.find(".item-piles-confirm-quantity").each(function () { - const parent = $(this).closest(".item-piles-item-row"); - $(this).hide(); - parent.find(".item-piles-quantity-container").hide(); - const quantityText = parent.find(".item-piles-quantity-text"); - quantityText.show(); - parent.find(".item-piles-quantity").val(quantityText.text()); - }); - } - - async setItemQuantity(itemId, quantity) { - const item = this.leftTraderActorItems.find(item => item.id === itemId); - item.quantity = quantity; - if (!quantity) { - this.leftTraderActorItems.splice(this.leftTraderActorItems.indexOf(item), 1); - } - await itemPileSocket.executeForUsers(SOCKET_HANDLERS.PRIVATE.TRADE_UPDATE_ITEMS, [this.leftTraderUser.id, this.rightTraderUser.id], this.privateTradeId, game.user.id, this.leftTraderActorItems); - return this.executeSocketAction(SOCKET_HANDLERS.PUBLIC.TRADE_UPDATE_ITEMS, this.publicTradeId, game.user.id, this.leftTraderActorItems); - } - - async setCurrencyQuantity(currencyPath, quantity) { - const currency = this.leftTraderActorCurrencies.find(currency => currency.path === currencyPath); - currency.quantity = quantity; - if (!quantity) { - this.leftTraderActorCurrencies.splice(this.leftTraderActorCurrencies.indexOf(currency), 1); - } - await itemPileSocket.executeForUsers(SOCKET_HANDLERS.PRIVATE.TRADE_UPDATE_CURRENCIES, [this.leftTraderUser.id, this.rightTraderUser.id], this.privateTradeId, game.user.id, this.leftTraderActorCurrencies); - return this.executeSocketAction(SOCKET_HANDLERS.PUBLIC.TRADE_UPDATE_CURRENCIES, this.publicTradeId, game.user.id, this.leftTraderActorCurrencies); - } - - getData(options) { - const data = super.getData(options); - - data.isGM = this.leftTraderUser === game.user && game.user.isGM; - - data.leftActor = { - name: this.leftTraderActor.name, - img: this.leftTraderActor.data.img, - items: foundry.utils.duplicate(this.leftTraderActorItems).map(item => { - if (this.editingInput === item.id) { - item.editing = true; - } - return item; - }), - currencies: foundry.utils.duplicate(this.leftTraderActorCurrencies).map(currency => { - if (this.editingInput === currency.path) { - currency.editing = true; - } - return currency; - }), - hasItems: !!this.leftTraderActorItems.length, - accepted: this.leftTraderAccepted - }; - - data.leftActor.hasItems = !!data.leftActor.items.length; - - data.rightActor = { - name: this.rightTraderActor.name, - img: this.rightTraderActor.data.img, - items: this.rightTraderActorItems, - currencies: this.rightTraderActorCurrencies, - hasItems: !!this.rightTraderActorItems.length, - accepted: this.rightTraderAccepted - }; - - data.systemHasCurrencies = !!API.CURRENCIES.length; - - return data; - } - - async close(options) { - super.close(options); - if (!options?.accepted) { - if (!options?.userId && (this.leftTraderUser.id === game.user.id || this.rightTraderUser.id === game.user.id)) { - if (this.isPrivate) { - itemPileSocket.executeAsGM(SOCKET_HANDLERS.DISABLE_CHAT_TRADE_BUTTON, this.publicTradeId); - itemPileSocket.executeForOthers(SOCKET_HANDLERS.TRADE_CLOSED, this.publicTradeId, game.user.id); - } else { - const otherUserId = this.leftTraderUser.id === game.user.id ? this.rightTraderUser.id : this.leftTraderUser.id; - itemPileSocket.executeAsUser(SOCKET_HANDLERS.TRADE_CLOSED, otherUserId, this.publicTradeId, game.user.id); - } - TradeAPI._tradeClosed(this.privateTradeId); - Dialog.prompt({ - title: game.i18n.localize("ITEM-PILES.Trade.Closed.Title"), - content: lib.dialogLayout({ message: game.i18n.localize("ITEM-PILES.Trade.Closed.You") }), - callback: () => { - }, - rejectClose: false - }) - } else { - if (this.leftTraderUser.id === game.user.id && options?.userId === this.rightTraderUser.id) { - TradeAPI._tradeClosed(this.privateTradeId); - Dialog.prompt({ - title: game.i18n.localize("ITEM-PILES.Trade.Closed.Title"), - content: lib.dialogLayout({ message: game.i18n.format("ITEM-PILES.Trade.Closed.Them", { user_name: this.rightTraderUser.name }) }), - callback: () => { - }, - rejectClose: false - }) - } else { - lib.custom_warning(game.i18n.localize("ITEM-PILES.Trade.Closed.Someone"), true); - } - } - } - } - - _updateObject(event, formData) { - return false; - } - - -} \ No newline at end of file diff --git a/scripts/hooks.js b/scripts/hooks.js deleted file mode 100644 index ad115523..00000000 --- a/scripts/hooks.js +++ /dev/null @@ -1,65 +0,0 @@ -import CONSTANTS from "./constants.js"; - -const prefix = (str) => (strs, ...exprs) => `${str}-${strs.reduce((a, c, i) => a + exprs[i - 1] + c)}` -const module = prefix(CONSTANTS.MODULE_NAME); - -const HOOKS = { - READY: module`ready`, - PRE_TRANSFER_EVERYTHING: module`preTransferEverything`, - TRANSFER_EVERYTHING: module`transferEverything`, - PILE: { - PRE_CREATE: module`preCreateItemPile`, - CREATE: module`createItemPile`, - PRE_UPDATE: module`preUpdateItemPile`, - UPDATE: module`updateItemPile`, - PRE_DELETE: module`preDeleteItemPile`, - DELETE: module`deleteItemPile`, - PRE_CLOSE: module`preCloseItemPile`, - CLOSE: module`closeItemPile`, - PRE_OPEN: module`preOpenItemPile`, - OPEN: module`openItemPile`, - PRE_LOCK: module`preLockItemPile`, - LOCK: module`lockItemPile`, - PRE_UNLOCK: module`preUnlockItemPile`, - UNLOCK: module`unlockItemPile`, - PRE_RATTLE: module`preRattleItemPile`, - RATTLE: module`rattleItemPile`, - PRE_TURN_INTO: module`preTurnIntoItemPiles`, - TURN_INTO: module`turnIntoItemPiles`, - PRE_REVERT_FROM: module`preRevertFromItemPiles`, - REVERT_FROM: module`revertFromItemPiles`, - PRE_OPEN_INVENTORY: module`preOpenItemPileInventory`, - OPEN_INVENTORY: module`openItemPileInventory`, - PRE_SPLIT_INVENTORY: module`preSplitItemPileContent`, - SPLIT_INVENTORY: module`splitItemPileContent`, - }, - ITEM: { - PRE_DROP_DETERMINED: module`preDropItemDetermined`, - PRE_DROP: module`preDropItem`, - DROP: module`dropItem`, - PRE_TRANSFER: module`preTransferItems`, - TRANSFER: module`transferItems`, - PRE_ADD: module`preAddItems`, - ADD: module`addItems`, - PRE_REMOVE: module`preRemoveItems`, - REMOVE: module`removeItems`, - PRE_TRANSFER_ALL: module`preTransferAllItems`, - TRANSFER_ALL: module`transferAllItems`, - }, - ATTRIBUTE: { - PRE_TRANSFER: module`preTransferAttributes`, - TRANSFER: module`transferAttributes`, - PRE_ADD: module`preAddAttributes`, - ADD: module`addAttributes`, - PRE_REMOVE: module`preRemoveAttributes`, - REMOVE: module`removeAttributes`, - PRE_TRANSFER_ALL: module`preTransferAllAttributes`, - TRANSFER_ALL: module`transferAllAttributes`, - }, - TRADE: { - STARTED: module`tradeStarted`, - COMPLETE: module`tradeComplete` - } -} - -export default HOOKS; \ No newline at end of file diff --git a/scripts/hotkeys.js b/scripts/hotkeys.js deleted file mode 100644 index 50d4bf11..00000000 --- a/scripts/hotkeys.js +++ /dev/null @@ -1,134 +0,0 @@ -import API from "./api.js"; -import * as lib from "./lib/lib.js"; -import CONSTANTS from "./constants.js"; - -export const hotkeyActionState = { - get openPileInventory() { - return (!hotkeyState.ctrlDown && !game.settings.get(CONSTANTS.MODULE_NAME, "invertSheetOpen")) || (hotkeyState.ctrlDown && game.settings.get(CONSTANTS.MODULE_NAME, "invertSheetOpen")); - } -} - -export const hotkeyState = { - ctrlDown: false, - altDown: false, - shiftDown: false -} - -export function registerHotkeysPre() { - - if (lib.isVersion9()) { - - game.keybindings.register(CONSTANTS.MODULE_NAME, "force-open-item-pile-inventory", { - name: "Force open inventory", - uneditable: [ - { key: "ControlLeft" }, - ], - onDown: () => { - hotkeyState.ctrlDown = true; - }, - onUp: () => { - hotkeyState.ctrlDown = false; - }, - reservedModifiers: ["SHIFT", "ALT"] - }); - - game.keybindings.register(CONSTANTS.MODULE_NAME, "force-drop-item", { - name: "Force drop item (GM only)", - uneditable: [ - { key: "ShiftLeft" }, - ], - onDown: () => { - hotkeyState.shiftDown = true; - }, - onUp: () => { - hotkeyState.shiftDown = false; - }, - reservedModifiers: ["ALT", "CONTROL"] - }); - - game.keybindings.register(CONSTANTS.MODULE_NAME, "force-drop-one-item", { - name: "Force drop one item", - uneditable: [ - { key: "AltLeft" }, - ], - onDown: () => { - hotkeyState.altDown = true; - }, - onUp: () => { - hotkeyState.altDown = false; - }, - reservedModifiers: ["SHIFT", "CONTROL"] - }); - - } - -} - -export function registerHotkeysPost() { - - if (!game.user.isGM) { - let clicked = false; - window.addEventListener("mousedown", (event) => { - if (!canvas.ready) return; - if (!(canvas.activeLayer instanceof TokenLayer)) return; - if (game.activeTool !== "select") return; - const hover = document.elementFromPoint(event.clientX, event.clientY); - if (!hover || (hover.id !== "board")) return; - if (event.button !== 0) return; - - const pos = canvas.app.renderer.plugins.interaction.mouse.getLocalPosition(canvas.app.stage); - const tokens = lib.getTokensAtLocation(pos) - .filter(token => { - const canView = token._canView(game.user); - const canSee = !token.data.hidden || game.user.isGM; - return !canView && canSee; - }); - if (!tokens.length) return; - tokens.sort((a, b) => b.zIndex - a.zIndex); - const token = tokens[0].document; - - if (clicked === token) { - clicked = false; - return API._itemPileClicked(token); - } - - clicked = token; - setTimeout(() => { - clicked = false; - }, 500); - }); - } - - if (!lib.isVersion9()) { - - window.addEventListener("keydown", (event) => { - switch (event.code) { - case "ControlLeft": - hotkeyState.ctrlDown = true; - break; - case "ShiftLeft": - hotkeyState.shiftDown = true; - break; - case "AltLeft": - hotkeyState.altDown = true; - break; - } - }); - - window.addEventListener("keyup", (event) => { - switch (event.code) { - case "ControlLeft": - hotkeyState.ctrlDown = false; - break; - case "ShiftLeft": - hotkeyState.shiftDown = false; - break; - case "AltLeft": - hotkeyState.altDown = false; - break; - } - }); - - } - -} \ No newline at end of file diff --git a/scripts/lib/lib.js b/scripts/lib/lib.js deleted file mode 100644 index f4129e77..00000000 --- a/scripts/lib/lib.js +++ /dev/null @@ -1,758 +0,0 @@ -import CONSTANTS from "../constants.js"; -import API from "../api.js"; - -export function isGMConnected() { - return !!Array.from(game.users).find(user => user.isGM && user.active); -} - -export function wait(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); -} - -export function debug(msg, args = "") { - if (game.settings.get(CONSTANTS.MODULE_NAME, "debug")) console.log(`DEBUG | Item Piles | ${msg}`, args) -} - -export function custom_notify(message) { - message = `Item Piles | ${message}`; - ui.notifications.notify(message); - console.log(message.replace("
", "\n")); -} - -export function custom_warning(warning, notify = false) { - warning = `Item Piles | ${warning}`; - if (notify) ui.notifications.warn(warning); - console.warn(warning.replace("
", "\n")); -} - -export function custom_error(error, notify = true) { - error = `Item Piles | ${error}`; - if (notify) ui.notifications.error(error); - return new Error(error.replace("
", "\n")); -} - -export function isVersion9() { - return isNewerVersion((game?.version ?? game.data.version), "9.00"); -} - -export function getTokensAtLocation(position) { - const tokens = [...canvas.tokens.placeables]; - return tokens.filter(token => { - return position.x >= token.x && position.x < (token.x + (token.data.width * canvas.grid.size)) - && position.y >= token.y && position.y < (token.y + (token.data.height * canvas.grid.size)); - }); -} - -export function distance_between_rect(p1, p2) { - - const x1 = p1.x; - const y1 = p1.y; - const x1b = p1.x + p1.w; - const y1b = p1.y + p1.h; - - const x2 = p2.x; - const y2 = p2.y; - const x2b = p2.x + p2.w; - const y2b = p2.y + p2.h; - - const left = x2b < x1; - const right = x1b < x2; - const bottom = y2b < y1; - const top = y1b < y2; - - if (top && left) { - return distance_between({ x: x1, y: y1b }, { x: x2b, y: y2 }); - } else if (left && bottom) { - return distance_between({ x: x1, y: y1 }, { x: x2b, y: y2b }); - } else if (bottom && right) { - return distance_between({ x: x1b, y: y1 }, { x: x2, y: y2b }); - } else if (right && top) { - return distance_between({ x: x1b, y: y1b }, { x: x2, y: y2 }); - } else if (left) { - return x1 - x2b; - } else if (right) { - return x2 - x1b; - } else if (bottom) { - return y1 - y2b; - } else if (top) { - return y2 - y1b; - } - - return 0; - -} - -export function distance_between(a, b) { - return new Ray(a, b).distance; -} - -export function grids_between_tokens(a, b) { - return Math.floor(distance_between_rect(a, b) / canvas.grid.size) + 1 -} - -export function tokens_close_enough(a, b, maxDistance) { - const distance = grids_between_tokens(a, b); - return maxDistance >= distance; -} - -export function findSimilarItem(items, findItem) { - - const itemSimilarities = API.ITEM_SIMILARITIES; - - const findItemId = findItem?.id ?? findItem?._id; - - return items.find(item => { - const itemId = item.id ?? item._id; - if (itemId === findItemId) return true; - - const itemData = item instanceof Item ? item.data : item; - for (const path of itemSimilarities) { - if (getProperty(itemData, path) !== getProperty(findItem, path)) return false; - } - - return true; - }); -} - -export async function getToken(documentUuid) { - const document = await fromUuid(documentUuid); - return document?.token ?? document; -} - -export function is_UUID(inId) { - return typeof inId === "string" - && (inId.match(/\./g) || []).length - && !inId.endsWith("."); -} - -export function getUuid(target) { - // If it's an actor, get its TokenDocument - // If it's a token, get its Document - // If it's a TokenDocument, just use it - // Otherwise fail - const document = getDocument(target); - return document?.uuid ?? false; -} - -export function getDocument(target) { - if (target instanceof foundry.abstract.Document) return target; - return target?.document; -} - -export function is_real_number(inNumber) { - return !isNaN(inNumber) - && typeof inNumber === "number" - && isFinite(inNumber); -} - -export function dialogLayout({ title="Item Piles", message, icon = "fas fa-exclamation-triangle", extraHtml = "" }={}){ - return ` -
-

-

${title}

-

${message}

- ${extraHtml} -
- `; -} - - -export function getItemPileData(target) { - let inDocument = getDocument(target); - if (inDocument instanceof TokenDocument) { - inDocument = inDocument?.actor; - } - try { - let data = foundry.utils.duplicate(inDocument.getFlag(CONSTANTS.MODULE_NAME, CONSTANTS.PILE_DATA)); - if (!data) return {}; - let defaults = foundry.utils.duplicate(CONSTANTS.PILE_DEFAULTS); - return foundry.utils.mergeObject(defaults, data); - } catch (err) { - return {}; - } -} - -export function getItemPileTokenImage(target, { data = false, items = false, currencies = false } = {}) { - - const pileDocument = getDocument(target); - - data = data || getItemPileData(pileDocument); - - let originalImg; - if (pileDocument instanceof TokenDocument) { - originalImg = pileDocument.data.img; - } else { - originalImg = pileDocument.data.token.img; - } - - if (!isValidItemPile(pileDocument)) return originalImg; - - items = items || getActorItems(pileDocument).map(item => item.toObject()); - currencies = currencies || getActorCurrencies(pileDocument); - - const numItems = items.length + currencies.length; - - let img; - - if (data.displayOne && numItems === 1) { - img = items.length > 0 - ? items[0].img - : currencies[0].img; - } else if (data.displayOne && numItems > 1) { - img = (pileDocument.actor ?? pileDocument).data.token.img; - } - - if (data.isContainer) { - - img = data.lockedImage || data.closedImage || data.openedImage || data.emptyImage; - - if (data.locked && data.lockedImage) { - img = data.lockedImage; - } else if (data.closed && data.closedImage) { - img = data.closedImage; - } else if (data.emptyImage && isItemPileEmpty(pileDocument)) { - img = data.emptyImage; - } else if (data.openedImage) { - img = data.openedImage; - } - - } - - return img || originalImg; - -} - -export function getItemPileTokenScale(target, { data = false, items = false, currencies = false } = {}) { - - const pileDocument = getDocument(target); - - data = data || getItemPileData(pileDocument); - - let baseScale; - if (pileDocument instanceof TokenDocument) { - baseScale = pileDocument.data.scale; - } else { - baseScale = pileDocument.data.token.scale; - } - - items = items || getActorItems(pileDocument); - currencies = currencies || getActorCurrencies(pileDocument); - - const numItems = items.length + currencies.length; - - if (!isValidItemPile(pileDocument, data) || data.isContainer || !data.displayOne || !data.overrideSingleItemScale || numItems > 1 || numItems === 0) return baseScale; - - return data.singleItemScale; - -} - -export function getItemPileName(target, { data = false, items = false, currencies = false } = {}) { - - const pileDocument = getDocument(target); - - data = data || getItemPileData(pileDocument); - - items = items || getActorItems(pileDocument); - currencies = currencies || getActorCurrencies(pileDocument); - - const numItems = items.length + currencies.length; - - let name; - if (pileDocument instanceof TokenDocument) { - name = pileDocument.data.name; - } else { - name = pileDocument.data.token.name; - } - - if (!isValidItemPile(pileDocument, data) || data.isContainer || !data.displayOne || !data.showItemName || numItems > 1 || numItems === 0) return name; - - const item = items.length > 0 - ? items[0] - : currencies[0]; - - return item.name; - -} - - -export function getActorItems(target, itemFilters = false) { - - const pileItemFilters = itemFilters || getActorItemFilters(target); - - const inDocument = getDocument(target); - const targetActor = inDocument instanceof TokenDocument - ? inDocument.actor - : inDocument; - - return Array.from(targetActor.items).filter(item => !isItemInvalid(inDocument, item, pileItemFilters)); - -} - -export function isActiveGM(user) { - return user.active && user.isGM; -} - -export function getActiveGMs() { - return game.users.filter(isActiveGM); -} - -export function isResponsibleGM() { - if (!game.user.isGM) return false; - return !getActiveGMs().some(other => other.data._id < game.user.data._id); -} - -export function getPlayersForItemPile(target) { - const inDocument = getDocument(target); - const pileData = getItemPileData(inDocument); - if (!isValidItemPile(inDocument)) return []; - return Array.from(game.users).filter(u => (u.active || !pileData.activePlayers) && u.character); -} - -export function isItemInvalid(target, item, itemFilters = false) { - const pileItemFilters = itemFilters || getActorItemFilters(target); - const itemData = item instanceof Item ? item.data : item; - for (const filter of pileItemFilters) { - if (!hasProperty(itemData, filter.path)) continue; - const attributeValue = getProperty(itemData, filter.path); - if (filter.filters.has(attributeValue)) { - return attributeValue; - } - } - return false; -} - -export function getActorItemFilters(target) { - if (!target) return API.ITEM_FILTERS; - const inDocument = getDocument(target); - const pileData = getItemPileData(inDocument); - return isValidItemPile(inDocument) && pileData?.overrideItemFilters - ? cleanItemFilters(pileData.overrideItemFilters) - : API.ITEM_FILTERS; -} - -/** - * Cleans item filters and prepares them for use in above functions - * - * @param {Array} itemFilters - * @returns {Array} - */ -export function cleanItemFilters(itemFilters) { - return itemFilters ? foundry.utils.duplicate(itemFilters).map(filter => { - filter.path = filter.path.trim(); - filter.filters = new Set(filter.filters.split(',').map(string => string.trim())); - return filter; - }) : []; -} - -export function isValidItemPile(target, data = false) { - const inDocument = getDocument(target); - const documentActor = inDocument instanceof TokenDocument ? inDocument.actor : inDocument; - return inDocument && !inDocument.destroyed && documentActor && (data || getItemPileData(inDocument))?.enabled; -} - -export function isItemPileEmpty(target) { - - const inDocument = getDocument(target); - - const targetActor = inDocument instanceof TokenDocument - ? inDocument.actor - : inDocument; - - if (!targetActor) return false; - - const hasNoItems = getActorItems(inDocument).length === 0; - const hasNoCurrencies = getActorCurrencies(inDocument).length === 0; - - return isValidItemPile(targetActor) && hasNoItems && hasNoCurrencies; - -} - -export function getActorCurrencyList(target) { - const inDocument = getDocument(target); - const pileData = getItemPileData(inDocument); - return pileData.overrideCurrencies || API.CURRENCIES; -} - -export function getActorCurrencies(target, { currencyList = false, getAll = false } = {}) { - const inDocument = getDocument(target); - const targetActor = inDocument?.actor ?? inDocument; - const currencies = currencyList || getActorCurrencyList(targetActor); - return currencies - .filter(currency => { - return hasProperty(targetActor.data, currency.path) && (Number(getProperty(targetActor.data, currency.path)) > 0 || getAll); - }).map((currency, index) => { - const localizedName = game.i18n.has(currency.name) ? game.i18n.localize(currency.name) : currency.name; - const quantity = Number(getProperty(targetActor.data, currency.path) ?? 0); - return { - name: localizedName, - path: currency.path, - img: currency.img, - quantity: quantity, - index: index - } - }); -} - -function getRelevantTokensAndActor(target) { - - const inDocument = getDocument(target); - - let documentActor; - let documentTokens = []; - - if (inDocument instanceof Actor) { - documentActor = inDocument; - if (inDocument.token) { - documentToken.push(inDocument?.token); - } else { - documentTokens = canvas.tokens.placeables.filter(token => token.document.actor === documentActor).map(token => token.document); - } - } else { - documentActor = inDocument.actor; - if (inDocument.isLinked) { - documentTokens = canvas.tokens.placeables.filter(token => token.document.actor === documentActor).map(token => token.document); - } else { - documentTokens.push(inDocument); - } - } - - return [documentActor, documentTokens] - -} - -export async function updateItemPileData(target, flagData, tokenData) { - - if (!tokenData) tokenData = {}; - - const [documentActor, documentTokens] = getRelevantTokensAndActor(target); - - const targetItems = getActorItems(documentActor, flagData.itemFilters); - const targetCurrencies = getActorCurrencies(documentActor, { currencyList: flagData.currencies }); - - const data = { data: flagData, items: targetItems, currencies: targetCurrencies }; - - const updates = documentTokens.map(tokenDocument => { - const newTokenData = foundry.utils.mergeObject(tokenData, { - "img": getItemPileTokenImage(tokenDocument, data), - "scale": getItemPileTokenScale(tokenDocument, data), - "name": getItemPileName(tokenDocument, data), - }); - return { - "_id": tokenDocument.id, - ...newTokenData, - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: flagData - } - }); - - await canvas.scene.updateEmbeddedDocuments("Token", updates); - - return documentActor.update({ - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: flagData, - [`token.flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: flagData - }); - -} - - -/* -------------------------- Sharing Methods ------------------------- */ - - -export function getItemQuantity(item) { - const itemData = item instanceof Item ? item.data : item; - return Number(getProperty(itemData, API.ITEM_QUANTITY_ATTRIBUTE) ?? 0); -} - - -export function getItemPileSharingData(target) { - let inDocument = getDocument(target); - if (inDocument instanceof TokenDocument) { - inDocument = inDocument?.actor; - } - return foundry.utils.duplicate(inDocument.getFlag(CONSTANTS.MODULE_NAME, CONSTANTS.SHARING_DATA) ?? {}); -} - -export function updateItemPileSharingData(target, data) { - let inDocument = getDocument(target); - if (inDocument instanceof TokenDocument) { - inDocument = inDocument?.actor; - } - const sharingData = foundry.utils.duplicate(inDocument.getFlag(CONSTANTS.MODULE_NAME, CONSTANTS.SHARING_DATA) ?? {}); - const finalData = foundry.utils.mergeObject(sharingData, data); - return inDocument.setFlag(CONSTANTS.MODULE_NAME, CONSTANTS.SHARING_DATA, finalData); -} - -export function clearItemPileSharingData(target) { - let inDocument = getDocument(target); - if (inDocument instanceof TokenDocument) { - inDocument = inDocument?.actor; - } - return inDocument.unsetFlag(CONSTANTS.MODULE_NAME, CONSTANTS.SHARING_DATA); -} - -export async function setItemPileSharingData(sourceUuid, targetUuid, { items = [], currencies = [] } = {}) { - - const source = await fromUuid(sourceUuid); - const target = await fromUuid(targetUuid); - - const sourceActor = source?.actor ?? source; - const targetActor = target?.actor ?? target; - - const sourceIsItemPile = isValidItemPile(sourceActor); - const targetIsItemPile = isValidItemPile(targetActor); - - if (sourceIsItemPile && targetIsItemPile) return; - - if (items.length) { - items = items.map(itemData => { - setProperty(itemData.item, API.ITEM_QUANTITY_ATTRIBUTE, itemData.quantity); - return itemData.item; - }) - } - - if (!Array.isArray(currencies) && typeof currencies === "object") { - currencies = Object.entries(currencies).map(entry => { - return { - path: entry[0], - quantity: entry[1] - } - }) - } - - if (sourceIsItemPile) { - - if (isItemPileEmpty(sourceIsItemPile)) { - return clearItemPileSharingData(sourceIsItemPile); - } - - const sharingData = addToItemPileSharingData(sourceActor, targetActor.uuid, { items, currencies }); - - return updateItemPileSharingData(sourceActor, sharingData); - - } - - const sharingData = removeFromItemPileSharingData(targetActor, sourceActor.uuid, { items, currencies }); - - return updateItemPileSharingData(targetActor, sharingData); - -} - -export function addToItemPileSharingData(itemPile, actorUuid, { - sharingData = false, - items = [], - currencies = [] -} = {}) { - - const pileData = getItemPileData(itemPile); - - let pileSharingData = {}; - if (!sharingData && ((pileData.shareItemsEnabled && items.length) || (pileData.shareCurrenciesEnabled && currencies.length))) { - pileSharingData = getItemPileSharingData(itemPile); - } - - if (pileData.shareItemsEnabled && items.length) { - - if (!pileSharingData.items) { - pileSharingData.items = []; - } - - for (const item of items) { - - let existingItem = findSimilarItem(pileSharingData.items, item); - - if (!existingItem) { - let itemIndex = pileSharingData.items.push({ - name: item.name, - type: item.type, - img: item.img, - actors: [{ uuid: actorUuid, quantity: 0 }] - }) - existingItem = pileSharingData.items[itemIndex - 1]; - } else if (!existingItem.actors) { - existingItem.actors = []; - } - - let actorData = existingItem.actors.find(data => data.uuid === actorUuid); - - const itemQuantity = getItemQuantity(item); - if (!actorData) { - if (itemQuantity > 0) { - existingItem.actors.push({ uuid: actorUuid, quantity: itemQuantity }) - } - } else { - actorData.quantity += itemQuantity; - if (actorData.quantity <= 0) { - existingItem.actors.splice(existingItem.actors.indexOf(actorData), 1); - } - if (existingItem.actors.length === 0) { - pileSharingData.items.splice(pileSharingData.items.indexOf(existingItem), 1) - } - } - - } - - } - - if (pileData.shareCurrenciesEnabled && currencies.length) { - - if (!pileSharingData.currencies) { - pileSharingData.currencies = []; - } - - for (const currency of currencies) { - - let existingCurrency = pileSharingData.currencies.find(sharingCurrency => sharingCurrency.path === currency.path); - - if (!existingCurrency) { - let itemIndex = pileSharingData.currencies.push({ - path: currency.path, - actors: [{ uuid: actorUuid, quantity: 0 }] - }) - existingCurrency = pileSharingData.currencies[itemIndex - 1]; - } else { - if (!existingCurrency.actors) { - existingCurrency.actors = []; - } - } - - let actorData = existingCurrency.actors.find(data => data.uuid === actorUuid); - - if (!actorData) { - if (currency.quantity > 0) { - existingCurrency.actors.push({ uuid: actorUuid, quantity: currency.quantity }) - } - } else { - actorData.quantity += currency.quantity; - if (actorData.quantity <= 0) { - existingCurrency.actors.splice(existingCurrency.actors.indexOf(actorData), 1); - } - if (existingCurrency.actors.length === 0) { - pileSharingData.currencies.splice(pileSharingData.currencies.indexOf(existingCurrency), 1) - } - } - - } - - } - - return pileSharingData; - -} - -export function removeFromItemPileSharingData(itemPile, actorUuid, { items = [], currencies = [] } = {}) { - - items = items.map(item => { - setProperty(item, API.ITEM_QUANTITY_ATTRIBUTE, getItemQuantity(item) * -1) - return item; - }); - - currencies = currencies.map(currency => { - currency.quantity = currency.quantity * -1; - return currency; - }); - - return addToItemPileSharingData(itemPile, actorUuid, { items, currencies }); - -} - -export function getItemPileItemsForActor(pile, recipient, floor = false) { - - const pileData = getItemPileData(pile); - const pileItems = getActorItems(pile); - - const players = getPlayersForItemPile(pile); - const pileSharingData = getItemPileSharingData(pile); - const storedItems = pileSharingData.items ?? []; - - const recipientUuid = getUuid(recipient); - - return pileItems.map(item => { - - const quantity = getItemQuantity(item); - let data = { - id: item.id, - name: item.name, - type: item.type, - img: item.data?.img ?? "", - currentQuantity: 1, - quantity: quantity, - shareLeft: quantity, - previouslyTaken: 0, - toShare: pileData.shareItemsEnabled && recipientUuid - }; - - if (data.toShare) { - - const foundItem = findSimilarItem(storedItems, item); - - let totalShares = quantity; - if (foundItem) { - totalShares += foundItem.actors.reduce((acc, actor) => { - return acc + actor.quantity; - }, 0); - } - - let totalActorShare = totalShares / players.length; - if (!Number.isInteger(totalActorShare) && !floor) { - totalActorShare += 1; - } - - const takenBefore = foundItem?.actors?.find(actor => actor.uuid === recipientUuid); - data.previouslyTaken = takenBefore ? takenBefore.quantity : 0; - - data.shareLeft = Math.max(0, Math.min(quantity, Math.floor(totalActorShare - data.previouslyTaken))); - - } - - return data; - - }); - -} - -export function getItemPileCurrenciesForActor(pile, recipient, floor) { - - const pileData = getItemPileData(pile); - const pileCurrencies = getActorCurrencies(pile, { getAll: !recipient }); - - const players = getPlayersForItemPile(pile); - const pileSharingData = getItemPileSharingData(pile); - const storedCurrencies = pileSharingData.currencies ?? []; - - const recipientUuid = getUuid(recipient); - - return pileCurrencies.filter(currency => { - return !recipient || hasProperty(recipient?.data ?? {}, currency.path); - }).map((currency, index) => { - - currency.currentQuantity = 1; - currency.shareLeft = currency.quantity; - currency.toShare = pileData.shareCurrenciesEnabled && !!recipientUuid; - currency.previouslyTaken = 0; - currency.index = index; - - if (currency.toShare) { - - const foundCurrency = storedCurrencies.find(storedCurrency => storedCurrency.path === currency.path); - - let totalShares = currency.quantity; - if (foundCurrency) { - totalShares += foundCurrency.actors.reduce((acc, actor) => acc + actor.quantity, 0); - } - - let totalActorShare = totalShares / players.length; - if (!Number.isInteger(totalActorShare) && !floor) { - totalActorShare += 1; - } - - const takenBefore = foundCurrency?.actors?.find(actor => actor.uuid === recipientUuid); - currency.previouslyTaken = takenBefore ? takenBefore.quantity : 0; - - currency.shareLeft = Math.max(0, Math.min(currency.quantity, Math.floor(totalActorShare - currency.previouslyTaken))); - - } - - return currency; - - }); - -} diff --git a/scripts/libwrapper.js b/scripts/libwrapper.js deleted file mode 100644 index 83aa362c..00000000 --- a/scripts/libwrapper.js +++ /dev/null @@ -1,33 +0,0 @@ -import API from "./api.js"; -import CONSTANTS from "./constants.js"; -import { hotkeyActionState } from "./hotkeys.js"; -import * as lib from "./lib/lib.js"; -import { ItemPileInventory } from "./formapplications/item-pile-inventory.js"; - -export function registerLibwrappers() { - - libWrapper.register(CONSTANTS.MODULE_NAME, 'Token.prototype._onClickLeft2', function (wrapped, ...args) { - if (API.isValidItemPile(this.document) && hotkeyActionState.openPileInventory) { - return API._itemPileClicked(this.document); - } - return wrapped(...args); - }); - - const actorSidebarMethodName = lib.isVersion9() ? "_onClickDocumentName" : "_onClickEntityName"; - - libWrapper.register(CONSTANTS.MODULE_NAME, `SidebarDirectory.prototype.${actorSidebarMethodName}`, function (wrapped, event) { - - event.preventDefault(); - const element = event.currentTarget; - const documentId = element.parentElement.dataset.documentId; - const document = this.constructor.collection.get(documentId); - - if (API.isValidItemPile(document) && hotkeyActionState.openPileInventory) { - return ItemPileInventory.show(document, game.user.character); - } - - return wrapped(event); - - }); - -} diff --git a/scripts/module.js b/scripts/module.js deleted file mode 100644 index 3db9712b..00000000 --- a/scripts/module.js +++ /dev/null @@ -1,282 +0,0 @@ -import CONSTANTS from "./constants.js"; -import HOOKS from "./hooks.js"; - -import flagManager from "./flagManager.js"; -import chatHandler from "./chathandler.js"; -import API from "./api.js"; -import * as lib from "./lib/lib.js"; -import { getActorCurrencies, getActorItems } from "./lib/lib.js"; - -import { ItemPileConfig } from "./formapplications/item-pile-config.js"; -import { checkSystem, migrateSettings, registerHandlebarHelpers, registerSettings } from "./settings.js"; -import { registerSocket } from "./socket.js"; -import { registerLibwrappers } from "./libwrapper.js"; -import { registerHotkeysPost, registerHotkeysPre } from "./hotkeys.js"; -import { TradeAPI } from "./trade-api.js"; - -Hooks.once("init", async () => { - - registerSettings(); - registerLibwrappers(); - registerHotkeysPre(); - - Hooks.once("socketlib.ready", registerSocket); - Hooks.on("canvasReady", module._canvasReady); - Hooks.on("preCreateToken", module._preCreatePile); - Hooks.on("createToken", module._createPile); - Hooks.on("deleteToken", module._deletePile); - Hooks.on("dropCanvasData", module._dropData); - Hooks.on("updateActor", module._pileCurrencyChanged); - Hooks.on("createItem", module._pileInventoryChanged); - Hooks.on("updateItem", module._pileInventoryChanged); - Hooks.on("deleteItem", module._pileInventoryChanged); - Hooks.on("getActorSheetHeaderButtons", module._insertItemPileHeaderButtons); - Hooks.on("getActorDirectoryEntryContext", module._handleActorContextMenu); - Hooks.on("renderTokenHUD", module._renderPileHUD); - - chatHandler.init(); - - if (game.settings.get(CONSTANTS.MODULE_NAME, "enableTrading") && game.settings.get(CONSTANTS.MODULE_NAME, "showTradeButton")) { - Hooks.on("renderPlayerList", (app, html) => { - const minimalUI = game.modules.get('minimal-ui')?.active; - const classes = "item-piles-player-list-trade-button" + (minimalUI ? " item-piles-minimal-ui" : "") - const text = !minimalUI ? " Request Trade" : "" - const button = $(``) - button.click(() => { - TradeAPI.requestTrade(); - }); - html.append(button); - }) - } - - if (game.settings.get(CONSTANTS.MODULE_NAME, "debugHooks")) { - for (let hook of Object.values(HOOKS)) { - if (typeof hook === "string") { - Hooks.on(hook, (...args) => lib.debug(`Hook called: ${hook}`, ...args)); - lib.debug(`Registered hook: ${hook}`) - } else { - for (let innerHook of Object.values(hook)) { - Hooks.on(innerHook, (...args) => lib.debug(`Hook called: ${innerHook}`, ...args)); - lib.debug(`Registered hook: ${innerHook}`) - } - } - } - } - - window.ItemPiles = { - API - } - -}); - -Hooks.once("ready", async () => { - - if (!game.modules.get('lib-wrapper')?.active && game.user.isGM) { - let word = "install and activate"; - if (game.modules.get('lib-wrapper')) word = "activate"; - throw lib.custom_error(`Item Piles requires the 'libWrapper' module. Please ${word} it.`) - } - if (!game.modules.get('socketlib')?.active && game.user.isGM) { - let word = "install and activate"; - if (game.modules.get('socketlib')) word = "activate"; - throw lib.custom_error(`Item Piles requires the 'socketlib' module. Please ${word} it.`) - } - - if (!lib.isGMConnected()) { - lib.custom_warning(`Item Piles requires a GM to be connected for players to be able to loot item piles.`, true) - } - - await flagManager.migrateDocuments(); - - checkSystem(); - registerHotkeysPost(); - registerHandlebarHelpers(); - migrateSettings(); - Hooks.callAll(HOOKS.READY); - -}); - -const debounceManager = { - - debounces: {}, - - setDebounce(id, method) { - if (this.debounces[id]) { - return this.debounces[id]; - } - this.debounces[id] = debounce(function (...args) { - delete debounceManager.debounces[id]; - return method(...args); - }, 50); - return this.debounces[id]; - } -}; - -const module = { - - async _pileCurrencyChanged(actor, changes) { - const target = actor?.token ?? actor; - if (!lib.isValidItemPile(target)) return; - const sourceCurrencies = lib.getActorCurrencyList(target); - const validCurrency = sourceCurrencies.find(currency => { - return hasProperty(changes, currency.path); - }); - if (!validCurrency) return; - const targetUuid = target.uuid; - return debounceManager.setDebounce(targetUuid, async function (uuid) { - const deleted = await API._checkItemPileShouldBeDeleted(uuid); - await API._rerenderItemPileInventoryApplication(uuid, deleted); - if (deleted || !lib.isResponsibleGM()) return; - return API._refreshItemPile(uuid); - })(targetUuid); - }, - - async _pileInventoryChanged(item) { - let target = item?.parent; - if (!target) return; - target = target?.token ?? target; - if (!lib.isValidItemPile(target)) return; - const targetUuid = target.uuid; - return debounceManager.setDebounce(targetUuid, async function (uuid) { - const deleted = await API._checkItemPileShouldBeDeleted(uuid); - await API._rerenderItemPileInventoryApplication(uuid, deleted); - if (deleted || !lib.isResponsibleGM()) return; - return API._refreshItemPile(uuid); - })(targetUuid); - }, - - async _canvasReady(canvas) { - const tokens = [...canvas.tokens.placeables].map(token => token.document); - for (const doc of tokens) { - await API._initializeItemPile(doc); - } - }, - - async _preCreatePile(document) { - if (!document.isLinked) { - document.data.update({ - [`actorData.flags.${CONSTANTS.MODULE_NAME}.-=${CONSTANTS.SHARING_DATA}`]: null - }); - } - }, - - async _createPile(tokenDoc) { - if (!lib.isResponsibleGM()) return; - if (!lib.isValidItemPile(tokenDoc)) return; - setTimeout(async () => { - const itemPileConfig = lib.getItemPileData(tokenDoc.actor) - Hooks.callAll(HOOKS.PILE.CREATE, tokenDoc, itemPileConfig); - - const targetItems = getActorItems(tokenDoc.actor); - const targetCurrencies = getActorCurrencies(tokenDoc.actor); - const data = { data: itemPileConfig, items: targetItems, currencies: targetCurrencies }; - - await tokenDoc.update({ - "img": lib.getItemPileTokenImage(tokenDoc, data), - "scale": lib.getItemPileTokenScale(tokenDoc, data), - "name": lib.getItemPileName(tokenDoc, data), - [`flags.${CONSTANTS.MODULE_NAME}.${CONSTANTS.PILE_DATA}`]: itemPileConfig - }); - await API._initializeItemPile(tokenDoc); - }, 50) - }, - - async _deletePile(doc) { - if (!lib.isValidItemPile(doc)) return; - Hooks.callAll(HOOKS.PILE.DELETE, doc); - return API._rerenderItemPileInventoryApplication(doc.uuid, true); - }, - - _renderPileHUD(app, html) { - - const document = app?.object?.document; - - if (!document) return; - - if (!lib.isValidItemPile(document)) return; - - const pileData = lib.getItemPileData(document); - - const container = $(`
`); - - if (pileData.isContainer) { - - const lock_button = $(`
`); - lock_button.click(async function () { - $(this).find('.fas').toggleClass('fa-lock').toggleClass('fa-lock-open'); - await API.toggleItemPileLocked(document); - }); - container.append(lock_button); - - const open_button = $(`
`); - open_button.click(async function () { - $(this).find('.fas').toggleClass('fa-box').toggleClass('fa-box-open'); - await API.toggleItemPileClosed(document); - }); - container.append(open_button); - } - - const configure_button = $(`
`); - configure_button.click(async function () { - ItemPileConfig.show(document); - }); - container.append(configure_button); - - html.append(container) - - }, - - _insertItemPileHeaderButtons(actorSheet, buttons) { - - if (!game.user.isGM) return; - - let obj = actorSheet.object; - - buttons.unshift({ - label: game.settings.get(CONSTANTS.MODULE_NAME, "hideActorHeaderText") ? "" : "ITEM-PILES.Defaults.Configure", - icon: "fas fa-box-open", - class: "item-piles-config-button", - onclick: () => { - ItemPileConfig.show(obj); - } - }) - }, - - async _dropData(canvas, data) { - return API._dropData(canvas, data); - }, - - _handleActorContextMenu(html, menuItems) { - - menuItems.push({ - name: "ITEM-PILES.ContextMenu.ShowToPlayers", - icon: ``, - callback: (html) => { - const actorId = html[0].dataset.documentId; - const actor = game.actors.get(actorId); - const users = Array.from(game.users).filter(u => u.active).map(u => u.id); - return API.openItemPileInventory(actor, users, { useDefaultCharacter: true }); - }, - condition: (html) => { - const actorId = html[0].dataset.documentId; - const actor = game.actors.get(actorId); - return game.user.isGM && API.isValidItemPile(actor); - } - }, { - name: "ITEM-PILES.ContextMenu.RequestTrade", - icon: ``, - callback: (html) => { - const actorId = html[0].dataset.documentId; - const actor = game.actors.get(actorId); - const user = Array.from(game.users).find(u => u.character === actor && u.active); - return TradeAPI.requestTrade(user); - }, - condition: (html) => { - const actorId = html[0].dataset.documentId; - const actor = game.actors.get(actorId); - return game.settings.get(CONSTANTS.MODULE_NAME, "enableTrading") - && (game.user?.character !== actor || Array.from(game.users).find(u => u.character === actor && u.active)); - } - }); - } -} \ No newline at end of file diff --git a/scripts/settings.js b/scripts/settings.js deleted file mode 100644 index c1171863..00000000 --- a/scripts/settings.js +++ /dev/null @@ -1,366 +0,0 @@ -import CONSTANTS from "./constants.js"; -import { ItemPileCurrenciesEditor } from "./formapplications/item-pile-currencies-editor.js"; -import { SYSTEMS } from "./systems.js"; -import * as lib from "./lib/lib.js"; -import { ItemPileFiltersEditor } from "./formapplications/item-pile-filters-editor.js"; -import flagManager from "./flagManager.js"; -import { ItemPileSimilaritiesEditor } from "./formapplications/item-pile-similarities-editor.js"; - -const debounceReload = foundry.utils.debounce(() => { - window.location.reload(); -}, 100); - -function defaultSettings(apply = false) { - return { - "currencies": { - scope: "world", - config: false, - default: apply && SYSTEMS.DATA ? SYSTEMS.DATA.CURRENCIES : [], - type: Array - }, - "itemFilters": { - scope: "world", - config: false, - default: apply && SYSTEMS.DATA ? SYSTEMS.DATA.ITEM_FILTERS : [], - type: Array - }, - "actorClassType": { - name: "ITEM-PILES.Setting.ActorClass.Title", - hint: "ITEM-PILES.Setting.ActorClass.Label", - scope: "world", - config: true, - default: apply && SYSTEMS.DATA ? SYSTEMS.DATA.ACTOR_CLASS_TYPE : game.system.template.Actor.types[0], - type: String - }, - "itemQuantityAttribute": { - name: "ITEM-PILES.Setting.Quantity.Title", - hint: "ITEM-PILES.Setting.Quantity.Label", - scope: "world", - config: true, - default: apply && SYSTEMS.DATA ? SYSTEMS.DATA.ITEM_QUANTITY_ATTRIBUTE : "", - type: String - }, - "itemSimilarities": { - name: "ITEM-PILES.Setting.ItemSimilarities.Title", - hint: "ITEM-PILES.Setting.ItemSimilarities.Label", - scope: "world", - config: false, - default: apply && SYSTEMS.DATA ? SYSTEMS.DATA.ITEM_SIMILARITIES : ['name', 'type'], - type: Array - } - } -} - -const otherSettings = { - - "outputToChat": { - name: "ITEM-PILES.Setting.OutputToChat.Title", - hint: "ITEM-PILES.Setting.OutputToChat.Label", - scope: "world", - config: true, - default: 1, - choices: [ - "ITEM-PILES.Setting.OutputToChat.Off", - "ITEM-PILES.Setting.OutputToChat.Public", - "ITEM-PILES.Setting.OutputToChat.SelfGM", - "ITEM-PILES.Setting.OutputToChat.Blind", - ], - type: Number - }, - - "deleteEmptyPiles": { - name: "ITEM-PILES.Setting.DeleteEmptyPiles.Title", - hint: "ITEM-PILES.Setting.DeleteEmptyPiles.Label", - scope: "world", - config: true, - default: false, - type: Boolean - }, - - "enableTrading": { - name: "ITEM-PILES.Setting.EnableTrading.Title", - hint: "ITEM-PILES.Setting.EnableTrading.Hint", - scope: "world", - config: true, - default: true, - type: Boolean, - onChange: debounceReload - }, - - "showTradeButton": { - name: "ITEM-PILES.Setting.ShowTradeButton.Title", - hint: "ITEM-PILES.Setting.ShowTradeButton.Hint", - scope: "world", - config: true, - default: true, - type: Boolean, - onChange: debounceReload - }, - - "invertSheetOpen": { - name: "ITEM-PILES.Setting.InvertSheetOpen.Title", - hint: "ITEM-PILES.Setting.InvertSheetOpen.Label", - scope: "client", - config: true, - default: false, - type: Boolean - }, - - "hideActorHeaderText": { - name: "ITEM-PILES.Setting.HideActorHeaderText.Title", - hint: "ITEM-PILES.Setting.HideActorHeaderText.Label", - scope: "client", - config: true, - default: false, - type: Boolean, - onChange: debounceReload - }, - - "preloadFiles": { - name: "ITEM-PILES.Setting.PreloadFiles.Title", - hint: "ITEM-PILES.Setting.PreloadFiles.Label", - scope: "client", - config: true, - default: true, - type: Boolean - }, - - "defaultItemPileActorID": { - scope: "world", - config: false, - default: "", - type: String - }, - - "debug": { - name: "ITEM-PILES.Setting.Debug.Title", - hint: "ITEM-PILES.Setting.Debug.Label", - scope: "client", - config: true, - default: false, - type: Boolean - }, - - "debugHooks": { - scope: "world", - config: false, - default: false, - type: Boolean - }, - - "systemFound": { - scope: "world", - config: false, - default: false, - type: Boolean - }, - - "systemNotFoundWarningShown": { - scope: "world", - config: false, - default: false, - type: Boolean - }, - - "preconfiguredSystem": { - scope: "world", - config: false, - default: false, - type: Boolean - } -} - -export function registerSettings() { - - game.settings.registerMenu(CONSTANTS.MODULE_NAME, "resetAllSettings", { - name: "ITEM-PILES.Setting.Reset.Title", - label: "ITEM-PILES.Setting.Reset.Label", - hint: "ITEM-PILES.Setting.Reset.Hint", - icon: "fas fa-coins", - type: ResetSettingsDialog, - restricted: true - }); - - game.settings.registerMenu(CONSTANTS.MODULE_NAME, "openCurrenciesEditor", { - name: "ITEM-PILES.Setting.Currencies.Title", - label: "ITEM-PILES.Setting.Currencies.Label", - hint: "ITEM-PILES.Setting.Currencies.Hint", - icon: "fas fa-coins", - type: ItemPileCurrenciesEditor, - restricted: true - }); - - game.settings.registerMenu(CONSTANTS.MODULE_NAME, "openItemFiltersEditor", { - name: "ITEM-PILES.Setting.ItemFilters.Title", - label: "ITEM-PILES.Setting.ItemFilters.Label", - hint: "ITEM-PILES.Setting.ItemFilters.Hint", - icon: "fas fa-list-ul", - type: ItemPileFiltersEditor, - restricted: true - }); - - game.settings.registerMenu(CONSTANTS.MODULE_NAME, "openItemSimilaritiesEditor", { - name: "ITEM-PILES.Setting.ItemSimilarities.Title", - label: "ITEM-PILES.Setting.ItemSimilarities.Label", - hint: "ITEM-PILES.Setting.ItemSimilarities.Hint", - icon: "fas fa-list-ul", - type: ItemPileSimilaritiesEditor, - restricted: true - }); - - const settings = defaultSettings(); - for (const [name, data] of Object.entries(settings)) { - game.settings.register(CONSTANTS.MODULE_NAME, name, data); - } - - for (const [name, data] of Object.entries(otherSettings)) { - game.settings.register(CONSTANTS.MODULE_NAME, name, data); - } - - const hasFlagMigrationVersion = !!game.settings.storage.get("world").getSetting(`${CONSTANTS.MODULE_NAME}.migrationVersion`); - - game.settings.register(CONSTANTS.MODULE_NAME, "migrationVersion", { - scope: "world", - config: false, - default: !hasFlagMigrationVersion ? flagManager.latestFlagVersion : "", - type: String - }); - -} - -export async function migrateSettings() { - - const itemTypeAttribute = game.settings.storage.get("world").getSetting(`${CONSTANTS.MODULE_NAME}.itemTypeAttribute`); - const itemTypeFilters = game.settings.storage.get("world").getSetting(`${CONSTANTS.MODULE_NAME}.itemTypeFilters`); - - if (itemTypeAttribute && itemTypeFilters) { - - const itemTypeAttributeValue = JSON.parse(itemTypeAttribute.data.value) - const itemTypeFiltersValue = JSON.parse(itemTypeFilters.data.value) - - game.settings.set(CONSTANTS.MODULE_NAME, "itemFilters", [ - { - "path": itemTypeAttributeValue, - "filters": itemTypeFiltersValue - } - ]) - - await itemTypeAttribute.delete(); - await itemTypeFilters.delete(); - - } - - const dynamicAttributesSetting = game.settings.storage.get("world").getSetting(`${CONSTANTS.MODULE_NAME}.dynamicAttributes`); - - if (dynamicAttributesSetting) { - - const dynamicAttributesValue = JSON.parse(dynamicAttributesSetting.data.value) - - game.settings.set(CONSTANTS.MODULE_NAME, "currencies", dynamicAttributesValue) - - await dynamicAttributesSetting.delete(); - - } - -} - -class ResetSettingsDialog extends FormApplication { - constructor(...args) { - super(...args); - return new Dialog({ - title: game.i18n.localize("ITEM-PILES.Dialogs.ResetSettings.Title"), - content: `

${game.i18n.localize("ITEM-PILES.Dialogs.ResetSettings.Content")}

`, - buttons: { - confirm: { - icon: '', - label: game.i18n.localize("ITEM-PILES.Dialogs.ResetSettings.Confirm"), - callback: async () => { - await applyDefaultSettings(); - window.location.reload(); - } - }, - cancel: { - icon: '', - label: game.i18n.localize("ITEM-PILES.Dialogs.Cancel") - } - }, - default: "cancel" - }) - } -} - -async function applyDefaultSettings() { - const settings = defaultSettings(true); - for (const [name, data] of Object.entries(settings)) { - await game.settings.set(CONSTANTS.MODULE_NAME, name, data.default); - } -} - -export async function checkSystem() { - - await lib.wait(1000); - - if(game.settings.get(CONSTANTS.MODULE_NAME, "preconfiguredSystem")) return; - - if (!SYSTEMS.DATA) { - - if (game.settings.get(CONSTANTS.MODULE_NAME, "systemNotFoundWarningShown")) return; - - let settingsValid = true; - for (const [name, data] of Object.entries(defaultSettings())) { - settingsValid = settingsValid && game.settings.get(CONSTANTS.MODULE_NAME, name).length !== (new data.type).length - } - - if(settingsValid) return; - - await game.settings.set(CONSTANTS.MODULE_NAME, "systemNotFoundWarningShown", true); - - return Dialog.prompt({ - title: game.i18n.localize("ITEM-PILES.Dialogs.NoSystemFound.Title"), - content: lib.dialogLayout({ message: game.i18n.localize("ITEM-PILES.Dialogs.NoSystemFound.Content") }), - callback: () => { - } - }); - - } - - if (game.settings.get(CONSTANTS.MODULE_NAME, "systemFound")) return; - - game.settings.set(CONSTANTS.MODULE_NAME, "systemFound", true); - - if (game.settings.get(CONSTANTS.MODULE_NAME, "systemNotFoundWarningShown")) { - - return new Dialog({ - title: game.i18n.localize("ITEM-PILES.Dialogs.SystemFound.Title"), - content: lib.dialogLayout({ - message: game.i18n.localize("ITEM-PILES.Dialogs.SystemFound.Content"), - icon: "fas fa-search" - }), - buttons: { - confirm: { - icon: '', - label: game.i18n.localize("ITEM-PILES.Dialogs.SystemFound.Confirm"), - callback: () => { - applyDefaultSettings(); - } - }, - cancel: { - icon: '', - label: game.i18n.localize("No") - } - }, - default: "cancel" - }).render(true); - - } - - return applyDefaultSettings(); -} - -export function registerHandlebarHelpers() { - - Handlebars.registerHelper('concat', function (...args) { - return args.filter(str => typeof str !== "object").join(""); - }); - -} \ No newline at end of file diff --git a/scripts/socket.js b/scripts/socket.js deleted file mode 100644 index 0c8fa971..00000000 --- a/scripts/socket.js +++ /dev/null @@ -1,212 +0,0 @@ -import * as lib from "./lib/lib.js"; -import CONSTANTS from "./constants.js"; -import API from "./api.js"; -import { ItemPileInventory } from "./formapplications/item-pile-inventory.js"; -import chatHandler from "./chathandler.js"; -import { TradeAPI } from "./trade-api.js"; -import { TradingApp } from "./formapplications/trading-app.js"; - -export const SOCKET_HANDLERS = { - /** - * Generic sockets - */ - CALL_HOOK: "callHook", - - /** - * Chat messages - */ - PICKUP_CHAT_MESSAGE: "pickupChatMessage", - SPLIT_CHAT_MESSAGE: "splitChatMessage", - DISABLE_CHAT_TRADE_BUTTON: "disableChatTradeButton", - - /** - * Item pile sockets - */ - CREATE_PILE: "createItemPile", - UPDATE_PILE: "updateItemPile", - UPDATED_PILE: "updatedPile", - DELETE_PILE: "deleteItemPile", - TURN_INTO_PILE: "turnIntoPiles", - REVERT_FROM_PILE: "revertFromPiles", - REFRESH_PILE: "refreshItemPile", - SPLIT_PILE: "splitItemPileContent", - - /** - * UI sockets - */ - RENDER_INTERFACE: "renderItemPileInterface", - RERENDER_TOKEN_HUD: "rerenderTokenHud", - RERENDER_PILE_INVENTORY: "rerenderItemPileInventory", - QUERY_PILE_INVENTORY_OPEN: "queryItemPileInventoryOpen", - RESPOND_PILE_INVENTORY_OPEN: "responseItemPileInventoryOpen", - - /** - * Item & attribute sockets - */ - DROP_ITEMS: "dropItems", - ADD_ITEMS: "addItems", - REMOVE_ITEMS: "removeItems", - TRANSFER_ITEMS: "transferItems", - TRANSFER_ALL_ITEMS: "transferAllItems", - ADD_ATTRIBUTE: "addAttributes", - REMOVE_ATTRIBUTES: "removeAttributes", - TRANSFER_ATTRIBUTES: "transferAttributes", - TRANSFER_ALL_ATTRIBUTES: "transferAllAttributes", - TRANSFER_EVERYTHING: "transferEverything", - - /** - * Trading sockets - */ - TRADE_REQUEST_PROMPT: "tradePrompt", - TRADE_REQUEST_CANCELLED: "tradeCancelled", - TRADE_SPECTATE: "tradeSpectate", - TRADE_CLOSED: "publicTradeClosed", - PUBLIC: { - TRADE_UPDATE_ITEMS: "publicTradeUpdateItems", - TRADE_UPDATE_CURRENCIES: "publicTradeUpdateCurrencies", - TRADE_STATE: "publicTradeAcceptedState", - }, - PRIVATE: { - TRADE_UPDATE_ITEMS: "privateTradeUpdateItems", - TRADE_UPDATE_CURRENCIES: "privateTradeUpdateCurrencies", - TRADE_STATE: "privateTradeAcceptedState", - }, - TRADE_COMPLETED: "tradeCompleted", -}; - -export let itemPileSocket; - -export function registerSocket() { - lib.debug("Registered itemPileSocket"); - itemPileSocket = socketlib.registerModule(CONSTANTS.MODULE_NAME); - - /** - * Generic socket - */ - itemPileSocket.register(SOCKET_HANDLERS.CALL_HOOK, (hook, ...args) => callHook(hook, ...args)) - - /** - * Chat sockets - */ - itemPileSocket.register(SOCKET_HANDLERS.PICKUP_CHAT_MESSAGE, (...args) => chatHandler._outputPickupToChat(...args)) - itemPileSocket.register(SOCKET_HANDLERS.SPLIT_CHAT_MESSAGE, (...args) => chatHandler._outputSplitToChat(...args)) - - /** - * Item pile sockets - */ - itemPileSocket.register(SOCKET_HANDLERS.CREATE_PILE, (...args) => API._createItemPile(...args)) - itemPileSocket.register(SOCKET_HANDLERS.UPDATE_PILE, (...args) => API._updateItemPile(...args)) - itemPileSocket.register(SOCKET_HANDLERS.UPDATED_PILE, (...args) => API._updatedItemPile(...args)) - itemPileSocket.register(SOCKET_HANDLERS.DELETE_PILE, (...args) => API._deleteItemPile(...args)) - itemPileSocket.register(SOCKET_HANDLERS.TURN_INTO_PILE, (...args) => API._turnTokensIntoItemPiles(...args)) - itemPileSocket.register(SOCKET_HANDLERS.REVERT_FROM_PILE, (...args) => API._revertTokensFromItemPiles(...args)) - itemPileSocket.register(SOCKET_HANDLERS.REFRESH_PILE, (...args) => API._refreshItemPile(...args)) - itemPileSocket.register(SOCKET_HANDLERS.SPLIT_PILE, (...args) => API._splitItemPileContents(...args)) - - /** - * UI sockets - */ - itemPileSocket.register(SOCKET_HANDLERS.RENDER_INTERFACE, (...args) => API._renderItemPileInterface(...args)) - itemPileSocket.register(SOCKET_HANDLERS.RERENDER_TOKEN_HUD, (...args) => API._rerenderTokenHud(...args)) - itemPileSocket.register(SOCKET_HANDLERS.RERENDER_PILE_INVENTORY, (...args) => API._rerenderItemPileInventoryApplication(...args)) - itemPileSocket.register(SOCKET_HANDLERS.QUERY_PILE_INVENTORY_OPEN, (...args) => isPileInventoryOpenForOthers.respond(...args)) - itemPileSocket.register(SOCKET_HANDLERS.RESPOND_PILE_INVENTORY_OPEN, (...args) => isPileInventoryOpenForOthers.handleResponse(...args)) - - /** - * Item & attribute sockets - */ - itemPileSocket.register(SOCKET_HANDLERS.DROP_ITEMS, (args) => API._dropItems(args)) - itemPileSocket.register(SOCKET_HANDLERS.ADD_ITEMS, (...args) => API._addItems(...args)) - itemPileSocket.register(SOCKET_HANDLERS.REMOVE_ITEMS, (...args) => API._removeItems(...args)) - itemPileSocket.register(SOCKET_HANDLERS.TRANSFER_ITEMS, (...args) => API._transferItems(...args)) - itemPileSocket.register(SOCKET_HANDLERS.TRANSFER_ALL_ITEMS, (...args) => API._transferAllItems(...args)) - itemPileSocket.register(SOCKET_HANDLERS.ADD_ATTRIBUTE, (...args) => API._addAttributes(...args)) - itemPileSocket.register(SOCKET_HANDLERS.REMOVE_ATTRIBUTES, (...args) => API._removeAttributes(...args)) - itemPileSocket.register(SOCKET_HANDLERS.TRANSFER_ATTRIBUTES, (...args) => API._transferAttributes(...args)) - itemPileSocket.register(SOCKET_HANDLERS.TRANSFER_ALL_ATTRIBUTES, (...args) => API._transferAllAttributes(...args)) - itemPileSocket.register(SOCKET_HANDLERS.TRANSFER_EVERYTHING, (...args) => API._transferEverything(...args)) - - /** - * Trading sockets - */ - itemPileSocket.register(SOCKET_HANDLERS.TRADE_REQUEST_PROMPT, (...args) => TradeAPI._respondPrompt(...args)); - itemPileSocket.register(SOCKET_HANDLERS.TRADE_REQUEST_CANCELLED, (...args) => TradeAPI._tradeCancelled(...args)); - - itemPileSocket.register(SOCKET_HANDLERS.PUBLIC.TRADE_UPDATE_ITEMS, (...args) => TradingApp._updateItems(...args)); - itemPileSocket.register(SOCKET_HANDLERS.PUBLIC.TRADE_UPDATE_CURRENCIES, (...args) => TradingApp._updateCurrencies(...args)); - itemPileSocket.register(SOCKET_HANDLERS.PUBLIC.TRADE_STATE, (...args) => TradingApp._setAcceptedState(...args)); - - itemPileSocket.register(SOCKET_HANDLERS.PRIVATE.TRADE_UPDATE_ITEMS, (...args) => TradeAPI._updateItems(...args)); - itemPileSocket.register(SOCKET_HANDLERS.PRIVATE.TRADE_UPDATE_CURRENCIES, (...args) => TradeAPI._updateCurrencies(...args)); - itemPileSocket.register(SOCKET_HANDLERS.PRIVATE.TRADE_STATE, (...args) => TradeAPI._setAcceptedState(...args)); - - itemPileSocket.register(SOCKET_HANDLERS.TRADE_CLOSED, (...args) => TradingApp._tradeClosed(...args)); - - itemPileSocket.register(SOCKET_HANDLERS.TRADE_COMPLETED, (...args) => { - TradingApp._tradeCompleted(...args) - TradeAPI._tradeCompleted(...args) - }); - - itemPileSocket.register(SOCKET_HANDLERS.TRADE_SPECTATE, (...args) => TradeAPI._spectateTrade(...args)); - - itemPileSocket.register(SOCKET_HANDLERS.DISABLE_CHAT_TRADE_BUTTON, (...args) => chatHandler._disableTradingButton(...args)); -} - -async function callHook(inHookName, ...args) { - const newArgs = []; - for (let arg of args) { - if (lib.is_UUID(arg)) { - const testArg = await fromUuid(arg); - if (testArg) { - arg = testArg; - } - } - newArgs.push(arg); - } - return Hooks.callAll(inHookName, ...newArgs); -} - -export const isPileInventoryOpenForOthers = { - - query(inPile) { - const promise = new Promise(resolve => { - this.resolve = resolve; - }); - - this.usersToRespond = new Set(game.users - .filter(user => user.active && user !== game.user) - .map(user => user.id)); - this.isOpen = false; - - itemPileSocket.executeForOthers(SOCKET_HANDLERS.QUERY_PILE_INVENTORY_OPEN, game.user.id, lib.getUuid(inPile)); - - if (this.usersToRespond.size > 0) { - setTimeout(this.resolve, 200); - } else { - this.resolve(false); - this.usersToRespond = new Set(); - this.isOpen = false; - this.resolve = () => { - }; - } - - return promise; - }, - - async respond(inUserId, inPileUuid) { - const app = ItemPileInventory.getActiveAppFromPile(inPileUuid); - return itemPileSocket.executeAsUser(SOCKET_HANDLERS.RESPOND_PILE_INVENTORY_OPEN, inUserId, game.user.id, !!app); - }, - - handleResponse(inUserId, appOpen) { - this.usersToRespond.delete(inUserId); - this.isOpen = this.isOpen || appOpen; - if (this.usersToRespond.size > 0) return; - this.resolve(this.isOpen); - this.usersToRespond = new Set(); - this.isOpen = false; - this.resolve = () => { - }; - } - -} \ No newline at end of file diff --git a/scripts/systems.js b/scripts/systems.js deleted file mode 100644 index f85728fb..00000000 --- a/scripts/systems.js +++ /dev/null @@ -1,36 +0,0 @@ -import dnd5e from "./systems/dnd5e.js"; - -// ↓ IMPORT SYSTEMS HERE ↓ -import pf1 from "./systems/pf1.js"; -import pf2e from "./systems/pf2e.js"; -import ds4 from "./systems/ds4.js"; -import d35e from "./systems/d35e.js"; -import swade from "./systems/swade.js"; -import tormenta20 from "./systems/tormenta20.js"; -import wfrp4e from "./systems/wfrp4e.js" -import splittermond from "./systems/splittermond.js" -import sfrpg from "./systems/sfrpg.js" -// ↑ IMPORT SYSTEMS HERE ↑ - -/** - * NOTE: YOUR PULL REQUEST WILL NOT BE ACCEPTED IF YOU DO NOT - * FOLLOW THE CONVENTION IN THE D&D 5E SYSTEM FILE - */ -export const SYSTEMS = { - get DATA() { - return { - dnd5e, - // ↓ ADD SYSTEMS HERE ↓ - pf1, - pf2e, - ds4, - d35e, - swade, - tormenta20, - wfrp4e, - splittermond, - sfrpg, - // ↑ ADD SYSTEMS HERE ↑ - }?.[game.system.id]; - } -}; \ No newline at end of file diff --git a/scripts/systems/d35e.js b/scripts/systems/d35e.js deleted file mode 100644 index 92620166..00000000 --- a/scripts/systems/d35e.js +++ /dev/null @@ -1,42 +0,0 @@ -export default { - // The actor class type is the type of actor that will be used for the default item pile actor that is created on first item drop. - "ACTOR_CLASS_TYPE": "npc", - - // The item quantity attribute is the path to the attribute on items that denote how many of that item that exists - "ITEM_QUANTITY_ATTRIBUTE": "data.quantity", - - // Item types and the filters actively remove items from the item pile inventory UI that users cannot loot, such as spells, feats, and classes - "ITEM_FILTERS": [ - { - "path": "type", - "filters": "spell,feat,class,race,attack,full-attack,buff,aura,alignment,enhancement,damage-type,material" - } - ], - - // Item similarities determines how item piles detect similarities and differences in the system - "ITEM_SIMILARITIES": ["name", "type"], - - // Currencies in item piles are a list of names, attribute paths, and images - the attribute path is relative to the actor.data - "CURRENCIES": [ - { - name: "D35E.CurrencyPP", - path: "data.currency.pp", - img: "icons/commodities/currency/coin-inset-snail-silver.webp" - }, - { - name: "D35E.CurrencyGP", - path: "data.currency.gp", - img: "icons/commodities/currency/coin-embossed-crown-gold.webp" - }, - { - name: "D35E.CurrencySP", - path: "data.currency.sp", - img: "icons/commodities/currency/coin-engraved-moon-silver.webp" - }, - { - name: "D35E.CurrencyCP", - path: "data.currency.cp", - img: "icons/commodities/currency/coin-engraved-waves-copper.webp" - } - ] -} \ No newline at end of file diff --git a/scripts/systems/dnd5e.js b/scripts/systems/dnd5e.js deleted file mode 100644 index 1a75a600..00000000 --- a/scripts/systems/dnd5e.js +++ /dev/null @@ -1,51 +0,0 @@ -export default { - // The actor class type is the type of actor that will be used for the default item pile actor that is created on first item drop. - "ACTOR_CLASS_TYPE": "character", - - // The item quantity attribute is the path to the attribute on items that denote how many of that item that exists - "ITEM_QUANTITY_ATTRIBUTE": "data.quantity", - - // Item filters actively remove items from the item pile inventory UI that users cannot loot, such as spells, feats, and classes - "ITEM_FILTERS": [ - { - "path": "type", - "filters": "spell,feat,class" - }, - { - "path": "data.weaponType", - "filters": "natural" - } - ], - - // Item similarities determines how item piles detect similarities and differences in the system - "ITEM_SIMILARITIES": ["name", "type"], - - // Currencies in item piles are a list of names, attribute paths, and images - the attribute path is relative to the actor.data - "CURRENCIES": [ - { - name: "DND5E.CurrencyPP", - path: "data.currency.pp", - img: "icons/commodities/currency/coin-inset-snail-silver.webp" - }, - { - name: "DND5E.CurrencyGP", - path: "data.currency.gp", - img: "icons/commodities/currency/coin-embossed-crown-gold.webp" - }, - { - name: "DND5E.CurrencyEP", - path: "data.currency.ep", - img: "icons/commodities/currency/coin-inset-copper-axe.webp" - }, - { - name: "DND5E.CurrencySP", - path: "data.currency.sp", - img: "icons/commodities/currency/coin-engraved-moon-silver.webp" - }, - { - name: "DND5E.CurrencyCP", - path: "data.currency.cp", - img: "icons/commodities/currency/coin-engraved-waves-copper.webp" - } - ] -} \ No newline at end of file diff --git a/scripts/systems/pf1.js b/scripts/systems/pf1.js deleted file mode 100644 index f8fd3254..00000000 --- a/scripts/systems/pf1.js +++ /dev/null @@ -1,42 +0,0 @@ -export default { - // The actor class type is the type of actor that will be used for the default item pile actor that is created on first item drop. - "ACTOR_CLASS_TYPE": "npc", - - // The item quantity attribute is the path to the attribute on items that denote how many of that item that exists - "ITEM_QUANTITY_ATTRIBUTE": "data.quantity", - - // Item types and the filters actively remove items from the item pile inventory UI that users cannot loot, such as spells, feats, and classes - "ITEM_FILTERS": [ - { - "path": "type", - "filters": "attack,buff,class,feat,race,spell" - } - ], - - // Item similarities determines how item piles detect similarities and differences in the system - "ITEM_SIMILARITIES": ["name", "type"], - - // Currencies in item piles are a list of names, attribute paths, and images - the attribute path is relative to the actor.data - "CURRENCIES": [ - { - name: "PF1.CurrencyPlatinumP", - path: "data.currency.pp", - img: "systems/pf1/icons/items/inventory/coins-silver.jpg" - }, - { - name: "PF1.CurrencyGoldP", - path: "data.currency.gp", - img: "systems/pf1/icons/items/inventory/coin-gold.jpg" - }, - { - name: "PF1.CurrencySilverP", - path: "data.currency.sp", - img: "systems/pf1/icons/items/inventory/coin-silver.jpg" - }, - { - name: "PF1.CurrencyCopperP", - path: "data.currency.cp", - img: "systems/pf1/icons/items/inventory/coin-copper.jpg" - } - ] -} \ No newline at end of file diff --git a/scripts/trade-api.js b/scripts/trade-api.js deleted file mode 100644 index 27a741a0..00000000 --- a/scripts/trade-api.js +++ /dev/null @@ -1,464 +0,0 @@ -import { itemPileSocket, SOCKET_HANDLERS } from "./socket.js"; -import * as lib from "./lib/lib.js"; -import { TradePromptDialog, TradeRequestDialog } from "./formapplications/trade-dialogs.js"; -import { TradingApp } from "./formapplications/trading-app.js"; -import API from "./api.js"; -import HOOKS from "./hooks.js"; - -export class TradeAPI { - - static async requestTrade(user = false) { - - // Grab all of the active users (not self) - const users = game.users.filter(user => user.active && user !== game.user); - - // No users! - if (!users.length) { - return new Dialog({ - title: game.i18n.localize("ITEM-PILES.Trade.Title"), - content: lib.dialogLayout({ - title: game.i18n.localize("ITEM-PILES.Trade.NoActiveUsers.Title"), - message: game.i18n.localize("ITEM-PILES.Trade.NoActiveUsers.Content"), - icon: "fas fa-heart-broken" - }), - buttons: { - ok: { - icon: '', - label: game.i18n.localize("Okay") - } - } - }).render(true); - } - - let userId; - let actor; - let isPrivate; - - // Find actors you own - const actors = game.actors.filter(actor => actor.isOwner); - - // If you only own one actor, and the user was already preselected (through the right click menu in the actors list) - if (actors.length === 1 && user) { - userId = user.id; - actor = actors[0]; - isPrivate = false; - } else { - // If you have more than 1 owned actor, prompt to choose which one - const result = await TradePromptDialog.show({ actors, users, user }); - if (!result) return; - userId = result.userId; - actor = result.actor; - isPrivate = result.private; - } - - if (!actor) return false; - - actor = actor?.actor ?? actor; - - const actorOwner = game.users.find(user => user.character === actor && user !== game.user); - if (actorOwner) { - // If you're not the only owner of the actor you chose, make sure you picked the correct one - const doContinue = await Dialog.confirm({ - title: game.i18n.localize("ITEM-PILES.Trade.Title"), - content: lib.dialogLayout({ - message: actorOwner.active - ? game.i18n.format("ITEM-PILES.Trade.UserActiveCharacterWarning", { - actor_name: actor.name, - player_name: actorOwner.name - }) - : game.i18n.format("ITEM-PILES.Trade.UserCharacterWarning", { - actor_name: actor.name, - player_name: actorOwner.name - }) - }), - defaultYes: false - }); - if (!doContinue) { - return; - } - } - - const privateTradeId = randomID(); - const publicTradeId = randomID(); - - // Spawn a cancel dialog - const cancelDialog = new Dialog({ - title: game.i18n.localize("ITEM-PILES.Trade.Title"), - content: `

${game.i18n.format("ITEM-PILES.Trade.OngoingRequest.Content", { user_name: game.users.get(userId).name })}

`, - buttons: { - confirm: { - icon: '', - label: game.i18n.localize("ITEM-PILES.Trade.OngoingRequest.Label"), - callback: () => { - itemPileSocket.executeAsUser(SOCKET_HANDLERS.TRADE_REQUEST_CANCELLED, userId, game.user.id, privateTradeId); - } - } - } - }, { - top: 50, - width: 300 - }).render(true); - - // Send out the request - return itemPileSocket.executeAsUser(SOCKET_HANDLERS.TRADE_REQUEST_PROMPT, userId, game.user.id, actor.uuid, privateTradeId, publicTradeId, isPrivate) - .then(async (data) => { - - if (data === "cancelled") return; - - cancelDialog.close(); - - // If they declined, show warning - if (!data || !data.fullPrivateTradeId.includes(privateTradeId)) { - return lib.custom_warning(game.i18n.localize("ITEM-PILES.Trade.Declined"), true); - } - - let traderActor = await fromUuid(data.actorUuid); - traderActor = traderActor?.actor ?? traderActor; - - // Otherwise, open trade interface and spawn private trade instance - new TradingApp({ user: game.user, actor }, { - user: game.users.get(userId), - actor: traderActor - }, data.fullPublicTradeId, data.fullPrivateTradeId, isPrivate).render(true, this.getAppOptions(actor).tradeApp); - ongoingTrades[data.fullPrivateTradeId] = new OngoingTrade({ - user: game.user, - actor - }, { - user: game.users.get(userId), - actor: traderActor - }, data.fullPublicTradeId, data.fullPrivateTradeId, isPrivate); - - actor.sheet.render(true, this.getAppOptions(actor).actorSheet); - - if (isPrivate) { - return itemPileSocket.executeForUsers(SOCKET_HANDLERS.CALL_HOOK, [game.user.id, userId], HOOKS.TRADE.STARTED, { - user: game.user.id, - actor: actor.uuid - }, { user: userId, actor: data.actorUuid }, data.fullPublicTradeId, isPrivate); - } - - return itemPileSocket.executeForEveryone(SOCKET_HANDLERS.CALL_HOOK, HOOKS.TRADE.STARTED, { - user: game.user.id, - actor: actor.uuid - }, { user: userId, actor: data.actorUuid }, data.fullPublicTradeId, isPrivate); - - }).catch((err) => { - // If the counterparty disconnected, show that and close dialog - lib.custom_warning(game.i18n.localize("ITEM-PILES.Trade.Disconnected"), true); - cancelDialog.close() - }); - - } - - static async _respondPrompt(tradingUserId, tradingActorUuid, privateTradeId, publicTradeId, isPrivate) { - - // If the user was previously muted, wait for a random amount of time and respond with false - if (mutedUsers.find(u => u === tradingUserId)) { - await lib.wait(Math.random() * 10000); - return false; - } - - // Complete the private and public trade IDs - const fullPrivateTradeId = privateTradeId + randomID(); - const fullPublicTradeId = publicTradeId + randomID(); - - const tradingUser = game.users.get(tradingUserId); - let tradingActor = await fromUuid(tradingActorUuid); - - tradingActor = tradingActor?.actor ?? tradingActor; - - // Make em pick an actor (if more than one) and accept/decline/mute - const result = await TradeRequestDialog.show({ tradeId: privateTradeId, tradingUser, tradingActor, isPrivate }); - - if (!result) return false; - - if (result === "cancelled") { - return "cancelled"; - } - - // If muted, add user to blacklist locally - if (result === "mute") { - mutedUsers.push(tradingUserId); - return false; - } - - const actor = result?.actor ?? result; - - // Spawn trading app and new ongoing trade interface - new TradingApp({ user: game.user, actor }, { - user: tradingUser, - actor: tradingActor - }, fullPublicTradeId, fullPrivateTradeId, isPrivate).render(true, this.getAppOptions(actor).tradeApp); - ongoingTrades[fullPrivateTradeId] = new OngoingTrade({ user: game.user, actor }, { - user: tradingUser, - actor: tradingActor - }, fullPublicTradeId, fullPrivateTradeId, isPrivate); - - actor.sheet.render(true, this.getAppOptions(actor).actorSheet); - - return { - fullPrivateTradeId, - fullPublicTradeId, - actorUuid: result.uuid - }; - - } - - static getAppOptions(actor) { - const midPoint = (window.innerWidth / 2) - 200; - return { - actorSheet: { left: midPoint - actor.sheet.position.width - 25 }, - tradeApp: { left: midPoint + 25 } - } - } - - static async _tradeCancelled(userId, privateTradeId) { - - Dialog.prompt({ - title: game.i18n.localize("ITEM-PILES.Trade.Title"), - content: lib.dialogLayout({ - message: game.i18n.format("ITEM-PILES.Trade.CancelledRequest.Content", { user_name: game.users.get(userId).name }) - }), - callback: () => { - }, - options: { - width: 300 - } - }); - - return TradeRequestDialog.cancel(privateTradeId); - - } - - static async spectateTrade(data) { - - const { tradeId, tradeUser } = data; - - if (TradingApp.getAppByPublicTradeId(tradeId)) { - return TradingApp.getAppByPublicTradeId(tradeId).render(false, { focus: true }); - } - - const user = game.users.get(tradeUser); - - if (!user.active) { - itemPileSocket.executeAsGM(SOCKET_HANDLERS.DISABLE_CHAT_TRADE_BUTTON, tradeId); - return lib.custom_warning(game.i18n.localize("ITEM-PILES.Trade.Over"), true); - } - - const ongoingTrade = await itemPileSocket.executeAsUser(SOCKET_HANDLERS.TRADE_SPECTATE, tradeUser, tradeId); - - if (!ongoingTrade) { - itemPileSocket.executeAsGM(SOCKET_HANDLERS.DISABLE_CHAT_TRADE_BUTTON, tradeId); - return lib.custom_warning(game.i18n.localize("ITEM-PILES.Trade.Over"), true); - } - - ongoingTrade[0].user = game.users.get(ongoingTrade[0].user); - ongoingTrade[0].actor = await fromUuid(ongoingTrade[0].actor); - - ongoingTrade[1].user = game.users.get(ongoingTrade[1].user); - ongoingTrade[1].actor = await fromUuid(ongoingTrade[1].actor); - - return new TradingApp(...ongoingTrade).render(true); - - } - - static async _spectateTrade(tradeId) { - const trade = OngoingTrade.getActiveTrade(tradeId); - if (!trade) return false; - return [ - { - user: trade[1].user.id, - actor: trade[1].actor.uuid, - items: trade[1].actorItems, - currencies: trade[1].actorCurrencies, - accepted: trade[1].accepted - }, - { - user: trade[1].traderUser.id, - actor: trade[1].traderActor.uuid, - items: trade[1].traderActorItems, - currencies: trade[1].traderActorCurrencies, - accepted: trade[1].traderAccepted - }, - tradeId - ] - } - - static async _updateItems(privateTradeId, userId, items) { - if (!ongoingTrades[privateTradeId]) return; - return ongoingTrades[privateTradeId].updateItems(userId, items); - } - - static async _updateCurrencies(privateTradeId, userId, items) { - if (!ongoingTrades[privateTradeId]) return; - return ongoingTrades[privateTradeId].updateCurrencies(userId, items); - } - - static async _setAcceptedState(privateTradeId, userId, status) { - if (!ongoingTrades[privateTradeId]) return; - return ongoingTrades[privateTradeId].setAcceptedState(userId, status); - } - - static async _tradeClosed(privateTradeId) { - if (!ongoingTrades[privateTradeId]) return; - return ongoingTrades[privateTradeId].tradeClosed(); - } - - static async _tradeCompleted(party_1, party_2, publicTradeId, isPrivate) { - if (!lib.isResponsibleGM()) return; - - if (party_1.items.length) { - const items = party_1.items.map(item => { - return { _id: item.id, quantity: item.quantity, item: item.data } - }) - await API._addItems(party_2.actor, items, party_1.user, { runHooks: false }); - await API._removeItems(party_1.actor, items, party_1.user, { runHooks: false }); - } - - if (party_2.items.length) { - const items = party_2.items.map(item => { - return { _id: item.id, quantity: item.quantity, item: item.data } - }) - await API._addItems(party_1.actor, items, party_2.user, { runHooks: false }); - await API._removeItems(party_2.actor, items, party_2.user, { runHooks: false }); - } - - if (party_1.currencies.length) { - const currencies = Object.fromEntries(party_1.currencies.map(currency => { - return [currency.path, currency.quantity]; - })); - await API._addAttributes(party_2.actor, currencies, party_1.user, { runHooks: false }); - await API._removeAttributes(party_1.actor, currencies, party_1.user, { runHooks: false }); - } - - if (party_2.currencies.length) { - const currencies = Object.fromEntries(party_2.currencies.map(currency => { - return [currency.path, currency.quantity]; - })); - await API._addAttributes(party_1.actor, currencies, party_2.user, { runHooks: false }); - await API._removeAttributes(party_2.actor, currencies, party_2.user, { runHooks: false }); - } - - return itemPileSocket.executeForEveryone(SOCKET_HANDLERS.CALL_HOOK, HOOKS.TRADE.COMPLETE, party_1, party_2, publicTradeId, isPrivate); - - } - -} - -const mutedUsers = []; -const ongoingTrades = {}; - -export class OngoingTrade { - - constructor(self, rightTrader, publicTradeId, privateTradeId, isPrivate) { - - this.actor = self.actor; - this.user = self.user; - this.actorItems = []; - this.actorCurrencies = []; - this.accepted = false; - - this.traderActor = rightTrader.actor; - this.traderUser = rightTrader.user; - this.traderActorItems = []; - this.traderActorCurrencies = []; - this.traderAccepted = false; - - this.privateTradeId = privateTradeId; - this.publicTradeId = publicTradeId; - - this.isPrivate = isPrivate; - - this.userHook = Hooks.on("renderPlayerList", this.userDisconnected.bind(this)); - - } - - static getActiveTrade(publicId) { - return Object.entries(ongoingTrades).find(trade => { - return trade[1].publicTradeId === publicId; - }) - } - - userDisconnected(app, html, data) { - if (!data.users.find(u => u === this.traderUser)) { - this.tradeClosed(); - if (!this.isPrivate) { - itemPileSocket.executeAsGM(SOCKET_HANDLERS.DISABLE_CHAT_TRADE_BUTTON, this.publicTradeId); - itemPileSocket.executeForEveryone(SOCKET_HANDLERS.TRADE_CLOSED, this.publicTradeId, this.traderUser.id); - } else { - TradingApp._tradeClosed(this.publicTradeId, this.traderUser.id); - } - } - } - - tradeClosed() { - Hooks.off("renderPlayerList", this.userHook); - delete ongoingTrades[this.privateTradeId]; - } - - updateItems(userId, newItems) { - this.accepted = false; - this.traderAccepted = false; - if (userId === this.user.id) { - this.actorItems = newItems; - } else if (userId === this.traderUser.id) { - this.traderActorItems = newItems; - } - } - - updateCurrencies(userId, newItems) { - this.accepted = false; - this.traderAccepted = false; - if (userId === this.user.id) { - this.actorCurrencies = newItems; - } else if (userId === this.traderUser.id) { - this.traderActorCurrencies = newItems; - } - } - - setAcceptedState(userId, status) { - if (userId === this.user.id) { - this.accepted = status; - } else if (userId === this.traderUser.id) { - this.traderAccepted = status; - } - if (this.accepted && this.traderAccepted) { - setTimeout(() => { - if (this.accepted && this.traderAccepted) { - this.execute(userId); - } - }, 2000); - } - } - - async execute(userId) { - - this.tradeClosed(); - - if (game.user.id !== userId) return; - - const args = [ - { - user: this.user.id, - actor: this.actor.uuid, - items: this.actorItems, - currencies: this.actorCurrencies - }, - { - user: this.traderUser.id, - actor: this.traderActor.uuid, - items: this.traderActorItems, - currencies: this.traderActorCurrencies - }, - this.publicTradeId, - this.isPrivate - ] - - if (this.isPrivate) { - return itemPileSocket.executeForUsers(SOCKET_HANDLERS.TRADE_COMPLETED, [this.user.id, this.traderUser.id], ...args); - } - - await itemPileSocket.executeAsGM(SOCKET_HANDLERS.DISABLE_CHAT_TRADE_BUTTON, this.publicTradeId); - return itemPileSocket.executeForEveryone(SOCKET_HANDLERS.TRADE_COMPLETED, ...args); - } -} \ No newline at end of file diff --git a/src/api.js b/src/api.js new file mode 100644 index 00000000..dd65571c --- /dev/null +++ b/src/api.js @@ -0,0 +1,170 @@ +import * as lib from "./lib/lib.js"; +import { CONSTANTS } from "./constants.js"; + +const API = { + + _SETTINGS_CACHE: {}, + + /** + * The actor class type used for the original item pile actor in this system + * + * @returns {String} + */ + get ACTOR_CLASS_TYPE() { + return lib.getSetting(CONSTANTS.SETTINGS.ACTOR_CLASS_TYPE); + }, + + /** + * The currencies used in this system + * + * @returns {Array<{name: String, currency: String, img: String}>} + */ + get CURRENCIES() { + return lib.getSetting(CONSTANTS.SETTINGS.CURRENCIES); + }, + + /** + * The attribute used to track the price of items in this system + * + * @returns {string} + */ + get ITEM_PRICE_ATTRIBUTE() { + return lib.getSetting(CONSTANTS.SETTINGS.ITEM_PRICE_ATTRIBUTE); + }, + + /** + * The attribute used to track the quantity of items in this system + * + * @returns {String} + */ + get ITEM_QUANTITY_ATTRIBUTE() { + return lib.getSetting(CONSTANTS.SETTINGS.ITEM_QUANTITY_ATTRIBUTE); + }, + + /** + * The filters for item types eligible for interaction within this system + * + * @returns {Array<{name: String, filters: String}>} + */ + get ITEM_FILTERS() { + return lib.getSetting(CONSTANTS.SETTINGS.ITEM_FILTERS); + }, + + /** + * The attributes for detecting item similarities + * + * @returns {Array} + */ + get ITEM_SIMILARITIES() { + return lib.getSetting(CONSTANTS.SETTINGS.ITEM_SIMILARITIES); + }, + + /** + * Sets the actor class type used for the original item pile actor in this system + * + * @param {String} inClassType + * @returns {Promise|Boolean} + */ + setActorClassType(inClassType) { + if (typeof inClassType !== "string") { + throw lib.custom_error("setActorTypeClass | inClassType must be of type string"); + } + return lib.setSetting(CONSTANTS.SETTINGS.ACTOR_CLASS_TYPE, inClassType); + }, + + /** + * Sets the currencies used in this system + * + * @param {Array<{name: String, currency: String, img: String}>} inCurrencies + * @returns {Promise} + */ + async setCurrencies(inCurrencies) { + if (!Array.isArray(inCurrencies)) { + throw lib.custom_error("setCurrencies | inCurrencies must be of type array"); + } + inCurrencies.forEach(currency => { + if (typeof currency !== "object") { + throw lib.custom_error("setCurrencies | each entry in the inCurrencies array must be of type object"); + } + if (typeof currency.name !== "string") { + throw lib.custom_error("setCurrencies | currency.name must be of type string"); + } + if (typeof currency.currency !== "string") { + throw lib.custom_error("setCurrencies | currency.path must be of type string"); + } + if (currency.img && typeof currency.img !== "string") { + throw lib.custom_error("setCurrencies | currency.img must be of type string"); + } + }) + return lib.setSetting(CONSTANTS.SETTINGS.CURRENCIES, inCurrencies); + }, + + /** + * Sets the attribute used to track the price of items in this system + * + * @param {string} inAttribute + * @returns {Promise} + */ + async setItemPriceAttribute(inAttribute) { + if (typeof inAttribute !== "string") { + throw lib.custom_error("setItemPriceAttribute | inAttribute must be of type string"); + } + return lib.setSetting(CONSTANTS.SETTINGS.ITEM_PRICE_ATTRIBUTE, inAttribute); + }, + + /** + * Sets the attribute used to track the quantity of items in this system + * + * @param {String} inAttribute + * @returns {Promise} + */ + async setItemQuantityAttribute(inAttribute) { + if (typeof inAttribute !== "string") { + throw lib.custom_error("setItemQuantityAttribute | inAttribute must be of type string"); + } + return lib.setSetting(CONSTANTS.SETTINGS.ITEM_QUANTITY_ATTRIBUTE, inAttribute); + }, + + /** + * Sets the items filters for interaction within this system + * + * @param {Array<{path: String, filters: String}>} inFilters + * @returns {Promise} + */ + async setItemFilters(inFilters) { + if (!Array.isArray(inFilters)) { + throw lib.custom_error("setItemFilters | inFilters must be of type array"); + } + inFilters.forEach(filter => { + if (typeof filter?.path !== "string") { + throw lib.custom_error("setItemFilters | each entry in inFilters must have a \"path\" property with a value that is of type string"); + } + if (typeof filter?.filters !== "string") { + throw lib.custom_error("setItemFilters | each entry in inFilters must have a \"filters\" property with a value that is of type string"); + } + }); + return lib.setSetting(CONSTANTS.SETTINGS.ITEM_FILTERS, inFilters); + }, + + /** + * Sets the attributes for detecting item similarities + * + * @param {Array} inPaths + * @returns {Promise} + */ + async setItemSimilarities(inPaths) { + if (!Array.isArray(inPaths)) { + throw lib.custom_error("setItemSimilarities | inPaths must be of type array"); + } + inPaths.forEach(path => { + if (typeof path !== "string") { + throw lib.custom_error("setItemSimilarities | each entry in inPaths must be of type string"); + } + }); + return lib.setSetting(CONSTANTS.SETTINGS.ITEM_SIMILARITIES, inPaths); + }, + +} + + +export default API; \ No newline at end of file diff --git a/src/applications/components/Dialog.svelte b/src/applications/components/Dialog.svelte new file mode 100644 index 00000000..daebe4c8 --- /dev/null +++ b/src/applications/components/Dialog.svelte @@ -0,0 +1,40 @@ + + + +
+ + {#if icon} +

+ {/if} +

{header}

+

{content}

+ +
+ + diff --git a/src/applications/components/Tabs.svelte b/src/applications/components/Tabs.svelte new file mode 100644 index 00000000..f1471458 --- /dev/null +++ b/src/applications/components/Tabs.svelte @@ -0,0 +1,67 @@ + + + + + + + \ No newline at end of file diff --git a/src/applications/settings/Setting.svelte b/src/applications/settings/Setting.svelte new file mode 100644 index 00000000..eecb2073 --- /dev/null +++ b/src/applications/settings/Setting.svelte @@ -0,0 +1,113 @@ + + +
+ +
+ +

{localize(data.hint)}

+
+ +
+ + {#if data.type === Boolean} + + + + {:else if data.choices} + +
+ +
+ + {:else if data.type === Number} + + + + {:else} + +
+ + {#if data.localize} + + {/if} +
+ + {/if} +
+ +
+ + + \ No newline at end of file diff --git a/src/applications/settings/SettingButton.svelte b/src/applications/settings/SettingButton.svelte new file mode 100644 index 00000000..ede55f39 --- /dev/null +++ b/src/applications/settings/SettingButton.svelte @@ -0,0 +1,83 @@ + + +
+ +
+ +

{localize(data.hint)}

+
+ +
+
+ +
+
+ +
+ + + \ No newline at end of file diff --git a/src/applications/settings/settings-app.js b/src/applications/settings/settings-app.js new file mode 100644 index 00000000..bf0d7cb0 --- /dev/null +++ b/src/applications/settings/settings-app.js @@ -0,0 +1,50 @@ +import { SvelteApplication } from '@typhonjs-fvtt/runtime/svelte/application'; +import SettingsShell from './settings-shell.svelte'; + +class SettingsApp extends SvelteApplication { + + static get defaultOptions() + { + return foundry.utils.mergeObject(super.defaultOptions, { + id: `item-piles-application-system-settings`, + title: "Item Piles Module Configuration", + width: 600, + svelte: { + class: SettingsShell, + target: document.body + }, + }); + } + + static getActiveApp() { + return Object.values(ui.windows).find(app => app.id === "item-piles-application-system-settings"); + } + + static async show(options = {}, dialogData = {}) { + const app = this.getActiveApp() + if (app) return app.render(false, { focus: true }); + return new Promise((resolve) => { + options.resolve = resolve; + new this(options, dialogData).render(true, { focus: true }); + }) + } +} + +export default class SettingsShim extends FormApplication { + + /** + * @inheritDoc + */ + constructor() { + super({}); + SettingsApp.show(); + } + + async _updateObject(event, formData) { + } + + render() { + this.close(); + } + +} \ No newline at end of file diff --git a/src/applications/settings/settings-shell.svelte b/src/applications/settings/settings-shell.svelte new file mode 100644 index 00000000..bf1f21e5 --- /dev/null +++ b/src/applications/settings/settings-shell.svelte @@ -0,0 +1,189 @@ + + + + + +
+ +

{localize("ITEM-PILES.Applications.Settings.Title")}

+ + + +
+ +
+ + + + + + + +
+

{localize("ITEM-PILES.Applications.Settings.MoreToCome")}

+

+ {localize("ITEM-PILES.Applications.Settings.Request")} +

+

+ {localize("ITEM-PILES.Applications.Settings.Donate")} +

+

+ + + +

+
+ +
+ + {#if userIsGM} +
+ + + + +
+ +
+ + + + + + +
+ {/if} + +
+ +
+ +
+ +
+ + \ No newline at end of file diff --git a/src/constants.js b/src/constants.js new file mode 100644 index 00000000..e6b6409e --- /dev/null +++ b/src/constants.js @@ -0,0 +1,296 @@ +import {SYSTEMS} from "./systems.js"; + +const module_name = "item-piles"; +const module_path = `modules/${module_name}/`; +const baseFlag = `flags.${module_name}.` + +export const CONSTANTS = { + + MODULE_NAME: module_name, + PATH: module_path, + + FLAGS: { + PILE: baseFlag + "data", + SHARING: baseFlag + "sharing", + ITEM: baseFlag + "item" + }, + + ITEM_DEFAULTS: { + override: false + }, + + PILE_DEFAULTS: { + // Core settings + enabled: false, + distance: 1, + macro: "", + deleteWhenEmpty: "default", + canInspectItems: true, + + // Overrides + overrideItemFilters: false, + overrideCurrencies: false, + + // Token settings + displayOne: false, + showItemName: false, + overrideSingleItemScale: false, + singleItemScale: 1.0, + + // Sharing settings + shareItemsEnabled: false, + shareCurrenciesEnabled: true, + takeAllEnabled: false, + splitAllEnabled: true, + activePlayers: false, + + // Container settings + container: { + enabled: false, + closed: false, + locked: false, + closedImage: "", + emptyImage: "", + openedImage: "", + lockedImage: "", + closeSound: "", + openSound: "", + lockedSound: "", + unlockedSound: "", + }, + + // Merchant settings + merchant: { + enabled: false, + priceModifier: 100, + sellModifier: 50, + overridePriceModifiers: [], + openTimes: { + enabled: false, + open: { + hour: 9, + minute: 0 + }, + close: { + hour: 18, + minute: 0 + } + } + } + }, + + SETTINGS: { + + // Public settings + OUTPUT_TO_CHAT: "outputToChat", + DELETE_EMPTY_PILES: "deleteEmptyPiles", + ENABLE_TRADING: "enableTrading", + SHOW_TRADE_BUTTON: "showTradeButton", + INVERT_SHEET_OPEN: "invertSheetOpen", + HIDE_ACTOR_HEADER_TEXT: "hideActorHeaderText", + PRELOAD_FILES: "preloadFiles", + + // Private Settings + CURRENCIES: "currencies", + ITEM_FILTERS: "itemFilters", + ACTOR_CLASS_TYPE: "actorClassType", + ITEM_QUANTITY_ATTRIBUTE: "itemQuantityAttribute", + ITEM_PRICE_ATTRIBUTE: "itemPriceAttribute", + ITEM_SIMILARITIES: "itemSimilarities", + + DEFAULT_ITEM_PILE_ACTOR_ID: "defaultItemPileActorID", + DEBUG: "debug", + DEBUG_HOOKS: "debugHooks", + SYSTEM_FOUND: "systemFound", + SYSTEM_NOT_FOUND_WARNING_SHOWN: "systemNotFoundWarningShown", + PRECONFIGURED_SYSTEM: "preconfiguredSystem", + + GET_DEFAULT() { + return foundry.utils.deepClone(CONSTANTS.SETTINGS.DEFAULTS()) + }, + + } +} + +CONSTANTS.SETTINGS.DEFAULTS = () => ({ + + [CONSTANTS.SETTINGS.CURRENCIES]: { + name: "ITEM-PILES.Setting.Currencies.Title", + label: "ITEM-PILES.Setting.Currencies.Label", + hint: "ITEM-PILES.Setting.Currencies.Hint", + icon: "fa fa-money-bill-alt", + application: "currencies", + scope: "world", + config: false, + default: SYSTEMS.DATA ? SYSTEMS.DATA.CURRENCIES : {}, + type: Object + }, + + [CONSTANTS.SETTINGS.ITEM_FILTERS]: { + name: "ITEM-PILES.Setting.ItemFilters.Title", + label: "ITEM-PILES.Setting.ItemFilters.Label", + hint: "ITEM-PILES.Setting.ItemFilters.Hint", + icon: "fa fa-filter", + application: "item-filters", + scope: "world", + config: false, + default: SYSTEMS.DATA ? SYSTEMS.DATA.ITEM_FILTERS : [], + type: Array + }, + + [CONSTANTS.SETTINGS.ITEM_SIMILARITIES]: { + name: "ITEM-PILES.Setting.ItemSimilarities.Title", + label: "ITEM-PILES.Setting.ItemSimilarities.Label", + hint: "ITEM-PILES.Setting.ItemSimilarities.Hint", + icon: "fa fa-equals", + application: "item-similarities", + scope: "world", + config: false, + default: SYSTEMS.DATA ? SYSTEMS.DATA.ITEM_SIMILARITIES : ['name', 'type'], + type: Array + }, + + [CONSTANTS.SETTINGS.ACTOR_CLASS_TYPE]: { + name: "ITEM-PILES.Setting.ActorClass.Title", + hint: "ITEM-PILES.Setting.ActorClass.Hint", + scope: "world", + config: true, + default: SYSTEMS.DATA ? SYSTEMS.DATA.ACTOR_CLASS_TYPE : game.system.template.Actor.types[0], + type: String + }, + + [CONSTANTS.SETTINGS.ITEM_QUANTITY_ATTRIBUTE]: { + name: "ITEM-PILES.Setting.Quantity.Title", + hint: "ITEM-PILES.Setting.Quantity.Hint", + scope: "world", + config: true, + default: SYSTEMS.DATA ? SYSTEMS.DATA.ITEM_QUANTITY_ATTRIBUTE : "", + type: String + }, + + [CONSTANTS.SETTINGS.ITEM_PRICE_ATTRIBUTE]: { + name: "ITEM-PILES.Setting.Price.Title", + hint: "ITEM-PILES.Setting.Price.Hint", + scope: "world", + config: true, + default: SYSTEMS.DATA ? SYSTEMS.DATA.ITEM_PRICE_ATTRIBUTE : "", + type: String + }, + + [CONSTANTS.SETTINGS.DEFAULT_ITEM_PILE_ACTOR_ID]: { + scope: "world", + config: false, + default: "", + type: String + }, + + [CONSTANTS.SETTINGS.SYSTEM_FOUND]: { + scope: "world", + config: false, + default: false, + type: Boolean + }, + + [CONSTANTS.SETTINGS.SYSTEM_NOT_FOUND_WARNING_SHOWN]: { + scope: "world", + config: false, + default: false, + type: Boolean + }, + + [CONSTANTS.SETTINGS.PRECONFIGURED_SYSTEM]: { + scope: "world", + config: false, + default: false, + type: Boolean + }, + + [CONSTANTS.SETTINGS.OUTPUT_TO_CHAT]: { + name: "ITEM-PILES.Setting.OutputToChat.Title", + hint: "ITEM-PILES.Setting.OutputToChat.Hint", + scope: "world", + config: false, + default: 1, + choices: [ + "ITEM-PILES.Setting.OutputToChat.Off", + "ITEM-PILES.Setting.OutputToChat.Public", + "ITEM-PILES.Setting.OutputToChat.SelfGM", + "ITEM-PILES.Setting.OutputToChat.Blind", + ], + type: Number + }, + + [CONSTANTS.SETTINGS.DELETE_EMPTY_PILES]: { + name: "ITEM-PILES.Setting.DeleteEmptyPiles.Title", + hint: "ITEM-PILES.Setting.DeleteEmptyPiles.Hint", + scope: "world", + config: false, + default: false, + type: Boolean + }, + + [CONSTANTS.SETTINGS.ENABLE_TRADING]: { + name: "ITEM-PILES.Setting.EnableTrading.Title", + hint: "ITEM-PILES.Setting.EnableTrading.Hint", + scope: "world", + config: false, + default: true, + type: Boolean + }, + + [CONSTANTS.SETTINGS.SHOW_TRADE_BUTTON]: { + name: "ITEM-PILES.Setting.ShowTradeButton.Title", + hint: "ITEM-PILES.Setting.ShowTradeButton.Hint", + scope: "world", + config: false, + default: true, + type: Boolean + }, + + [CONSTANTS.SETTINGS.INVERT_SHEET_OPEN]: { + name: "ITEM-PILES.Setting.InvertSheetOpen.Title", + hint: "ITEM-PILES.Setting.InvertSheetOpen.Hint", + scope: "client", + config: false, + default: false, + type: Boolean + }, + + [CONSTANTS.SETTINGS.HIDE_ACTOR_HEADER_TEXT]: { + name: "ITEM-PILES.Setting.HideActorHeaderText.Title", + hint: "ITEM-PILES.Setting.HideActorHeaderText.Hint", + scope: "client", + config: false, + default: false, + type: Boolean + }, + + [CONSTANTS.SETTINGS.PRELOAD_FILES]: { + name: "ITEM-PILES.Setting.PreloadFiles.Title", + hint: "ITEM-PILES.Setting.PreloadFiles.Hint", + scope: "client", + config: false, + default: true, + type: Boolean + }, + + [CONSTANTS.SETTINGS.DEBUG]: { + name: "ITEM-PILES.Setting.Debug.Title", + hint: "ITEM-PILES.Setting.Debug.Hint", + scope: "client", + config: false, + default: false, + type: Boolean + }, + + + [CONSTANTS.SETTINGS.DEBUG_HOOKS]: { + name: "ITEM-PILES.Setting.DebugHooks.Title", + hint: "ITEM-PILES.Setting.DebugHooks.Hint", + scope: "client", + config: false, + default: false, + type: Boolean + }, + +}); \ No newline at end of file diff --git a/src/lib/lib.js b/src/lib/lib.js new file mode 100644 index 00000000..a138a479 --- /dev/null +++ b/src/lib/lib.js @@ -0,0 +1,39 @@ +import { CONSTANTS } from "../constants.js"; + +export function getSetting(key, localize = false) { + const value = game.settings.get(CONSTANTS.MODULE_NAME, key); + if (localize) return game.i18n.localize(value); + return value; +} + +export function setSetting(key, value) { + return game.settings.set(CONSTANTS.MODULE_NAME, key, value); +} + +export function debug(msg, args = "") { + if (game.settings.get(CONSTANTS.MODULE_NAME, "debug")) { + console.log(`DEBUG | Item Piles | ${msg}`, args) + } +} + +export function custom_notify(message) { + message = `Item Piles | ${message}`; + ui.notifications.notify(message); + console.log(message.replace("
", "\n")); +} + +export function custom_warning(warning, notify = false) { + warning = `Item Piles | ${warning}`; + if (notify) { + ui.notifications.warn(warning); + } + console.warn(warning.replace("
", "\n")); +} + +export function custom_error(error, notify = true) { + error = `Item Piles | ${error}`; + if (notify) { + ui.notifications.error(error); + } + return new Error(error.replace("
", "\n")); +} \ No newline at end of file diff --git a/src/module.js b/src/module.js new file mode 100644 index 00000000..2533088b --- /dev/null +++ b/src/module.js @@ -0,0 +1,10 @@ +import registerSettings from "./settings.js"; +import SettingsShim from "./applications/settings/settings-app.js"; + +Hooks.once("init", async () => { + registerSettings(); +}); + +Hooks.once("ready", () => { + new SettingsShim().render(true); +}) diff --git a/src/settings.js b/src/settings.js new file mode 100644 index 00000000..47eae24f --- /dev/null +++ b/src/settings.js @@ -0,0 +1,17 @@ +import { CONSTANTS } from "./constants.js"; +export default function registerSettings() { + + // game.settings.registerMenu(CONSTANTS.MODULE_NAME, "configure-settings", { + // name: "REST-RECOVERY.Settings.Configure.Title", + // label: "REST-RECOVERY.Settings.Configure.Label", + // hint: "REST-RECOVERY.Settings.Configure.Hint", + // icon: "fas fa-bed", + // type: SettingsShim, + // restricted: false + // }); + + for (let [name, data] of Object.entries(CONSTANTS.SETTINGS.GET_DEFAULT())) { + game.settings.register(CONSTANTS.MODULE_NAME, name, data); + } + +} \ No newline at end of file diff --git a/src/systems.js b/src/systems.js new file mode 100644 index 00000000..f2b66145 --- /dev/null +++ b/src/systems.js @@ -0,0 +1,51 @@ +import dnd5e from "./systems/dnd5e.js"; + +// ↓ IMPORT SYSTEMS HERE ↓ +import pf1 from "./systems/pf1.js"; +import pf2e from "./systems/pf2e.js"; +import ds4 from "./systems/ds4.js"; +import d35e from "./systems/d35e.js"; +import sfrpg from "./systems/sfrpg.js"; +import swade from "./systems/swade.js"; +import tormenta20 from "./systems/tormenta20.js"; +import wfrp4e from "./systems/wfrp4e.js" +import splittermond from "./systems/splittermond.js" +// ↑ IMPORT SYSTEMS HERE ↑ + +/** + * NOTE: YOUR PULL REQUEST WILL NOT BE ACCEPTED IF YOU DO NOT + * FOLLOW THE CONVENTION IN THE D&D 5E SYSTEM FILE + */ +export const SYSTEMS = { + + SUPPORTED_SYSTEMS: { + dnd5e, + // ↓ ADD SYSTEMS HERE ↓ + pf1, + pf2e, + ds4, + d35e, + sfrpg, + swade, + tormenta20, + wfrp4e, + splittermond + // ↑ ADD SYSTEMS HERE ↑ + }, + + DEFAULT_SETTINGS: { + ACTOR_CLASS_TYPE: "", + ITEM_QUANTITY_ATTRIBUTE: "", + ITEM_PRICE_ATTRIBUTE: "", + ITEM_FILTERS: [], + ITEM_SIMILARITIES: [], + CURRENCIES: { + "itemBased": false, + "list": [] + } + }, + + get DATA() { + return this.SUPPORTED_SYSTEMS?.[game.system.id] ?? this.DEFAULT_SETTINGS; + } +}; \ No newline at end of file diff --git a/src/systems/d35e.js b/src/systems/d35e.js new file mode 100644 index 00000000..aca94619 --- /dev/null +++ b/src/systems/d35e.js @@ -0,0 +1,53 @@ +export default { + // The actor class type is the type of actor that will be used for the default item pile actor that is created on first item drop. + "ACTOR_CLASS_TYPE": "npc", + + // The item quantity attribute is the path to the attribute on items that denote how many of that item that exists + "ITEM_QUANTITY_ATTRIBUTE": "data.quantity", + + // Item types and the filters actively remove items from the item pile inventory UI that users cannot loot, such as spells, feats, and classes + "ITEM_FILTERS": [ + { + "path": "type", + "filters": "spell,feat,class,race,attack,full-attack,buff,aura,alignment,enhancement,damage-type,material" + } + ], + + // Item similarities determines how item piles detect similarities and differences in the system + "ITEM_SIMILARITIES": ["name", "type"], + + // Currencies in item piles are a list of names, attribute paths, and images - the attribute path is relative to the actor.data + "CURRENCIES": { + "itemBased": false, + "list": [ + { + name: "D35E.CurrencyPP", + path: "data.currency.pp", + img: "icons/commodities/currency/coin-inset-snail-silver.webp", + primary: false, + exchange: 10 + }, + { + name: "D35E.CurrencyGP", + path: "data.currency.gp", + img: "icons/commodities/currency/coin-embossed-crown-gold.webp", + primary: true, + exchange: 1 + }, + { + name: "D35E.CurrencySP", + path: "data.currency.sp", + img: "icons/commodities/currency/coin-engraved-moon-silver.webp", + primary: false, + exchange: 0.1 + }, + { + name: "D35E.CurrencyCP", + path: "data.currency.cp", + img: "icons/commodities/currency/coin-engraved-waves-copper.webp", + primary: false, + exchange: 0.01 + } + ] + } +} \ No newline at end of file diff --git a/src/systems/dnd5e.js b/src/systems/dnd5e.js new file mode 100644 index 00000000..390a3583 --- /dev/null +++ b/src/systems/dnd5e.js @@ -0,0 +1,67 @@ +export default { + // The actor class type is the type of actor that will be used for the default item pile actor that is created on first item drop. + "ACTOR_CLASS_TYPE": "character", + + // The item quantity attribute is the path to the attribute on items that denote how many of that item that exists + "ITEM_QUANTITY_ATTRIBUTE": "data.quantity", + + // The item price attribute is the path to the attribute on each item that determine how much it costs + "ITEM_PRICE_ATTRIBUTE": "data.price", + + // Item filters actively remove items from the item pile inventory UI that users cannot loot, such as spells, feats, and classes + "ITEM_FILTERS": [ + { + "path": "type", + "filters": "spell,feat,class" + }, + { + "path": "data.weaponType", + "filters": "natural" + } + ], + + // Item similarities determines how item piles detect similarities and differences in the system + "ITEM_SIMILARITIES": ["name", "type"], + + // Currencies in item piles are a list of names, attribute paths, and images - the attribute path is relative to the actor.data + "CURRENCIES": { + "itemBased": false, + "list": [ + { + name: "DND5E.CurrencyPP", + path: "data.currency.pp", + img: "icons/commodities/currency/coin-inset-snail-silver.webp", + primary: false, + exchange: 10 + }, + { + name: "DND5E.CurrencyGP", + path: "data.currency.gp", + img: "icons/commodities/currency/coin-embossed-crown-gold.webp", + primary: true, + exchange: 1 + }, + { + name: "DND5E.CurrencyEP", + path: "data.currency.ep", + img: "icons/commodities/currency/coin-inset-copper-axe.webp", + primary: false, + exchange: 0.5 + }, + { + name: "DND5E.CurrencySP", + path: "data.currency.sp", + img: "icons/commodities/currency/coin-engraved-moon-silver.webp", + primary: false, + exchange: 0.1 + }, + { + name: "DND5E.CurrencyCP", + path: "data.currency.cp", + img: "icons/commodities/currency/coin-engraved-waves-copper.webp", + primary: false, + exchange: 0.01 + } + ] + } +} \ No newline at end of file diff --git a/scripts/systems/ds4.js b/src/systems/ds4.js similarity index 53% rename from scripts/systems/ds4.js rename to src/systems/ds4.js index 633713b7..93e0ce4f 100644 --- a/scripts/systems/ds4.js +++ b/src/systems/ds4.js @@ -19,21 +19,30 @@ export default { "ITEM_SIMILARITIES": ["name", "type"], // Currencies in item piles are a list of names, attribute paths, and images - the attribute path is relative to the actor.data - "CURRENCIES": [ - { - name: "DS4.CharacterCurrencyGold", - path: "data.currency.gold", - img: "icons/commodities/currency/coin-embossed-crown-gold.webp" - }, - { - name: "DS4.CharacterCurrencySilver", - path: "data.currency.silver", - img: "icons/commodities/currency/coin-inset-snail-silver.webp" - }, - { - name: "DS4.CharacterCurrencyCopper", - path: "data.currency.copper", - img: "icons/commodities/currency/coin-inset-copper-axe.webp" - } - ] + "CURRENCIES": { + "itemBased": false, + "list": [ + { + name: "DS4.CharacterCurrencyGold", + path: "data.currency.gold", + img: "icons/commodities/currency/coin-embossed-crown-gold.webp", + primary: false, + exchange: 10 + }, + { + name: "DS4.CharacterCurrencySilver", + path: "data.currency.silver", + img: "icons/commodities/currency/coin-inset-snail-silver.webp", + primary: true, + exchange: 1 + }, + { + name: "DS4.CharacterCurrencyCopper", + path: "data.currency.copper", + img: "icons/commodities/currency/coin-inset-copper-axe.webp", + primary: false, + exchange: 0.1 + } + ] + } } \ No newline at end of file diff --git a/src/systems/pf1.js b/src/systems/pf1.js new file mode 100644 index 00000000..81b7c823 --- /dev/null +++ b/src/systems/pf1.js @@ -0,0 +1,53 @@ +export default { + // The actor class type is the type of actor that will be used for the default item pile actor that is created on first item drop. + "ACTOR_CLASS_TYPE": "npc", + + // The item quantity attribute is the path to the attribute on items that denote how many of that item that exists + "ITEM_QUANTITY_ATTRIBUTE": "data.quantity", + + // Item types and the filters actively remove items from the item pile inventory UI that users cannot loot, such as spells, feats, and classes + "ITEM_FILTERS": [ + { + "path": "type", + "filters": "attack,buff,class,feat,race,spell" + } + ], + + // Item similarities determines how item piles detect similarities and differences in the system + "ITEM_SIMILARITIES": ["name", "type"], + + // Currencies in item piles are a list of names, attribute paths, and images - the attribute path is relative to the actor.data + "CURRENCIES": { + "itemBased": false, + "list": [ + { + name: "PF1.CurrencyPlatinumP", + path: "data.currency.pp", + img: "systems/pf1/icons/items/inventory/coins-silver.jpg", + primary: false, + exchange: 10 + }, + { + name: "PF1.CurrencyGoldP", + path: "data.currency.gp", + img: "systems/pf1/icons/items/inventory/coin-gold.jpg", + primary: true, + exchange: 1 + }, + { + name: "PF1.CurrencySilverP", + path: "data.currency.sp", + img: "systems/pf1/icons/items/inventory/coin-silver.jpg", + primary: false, + exchange: 0.1 + }, + { + name: "PF1.CurrencyCopperP", + path: "data.currency.cp", + img: "systems/pf1/icons/items/inventory/coin-copper.jpg", + primary: false, + exchange: 0.01 + } + ] + } +} \ No newline at end of file diff --git a/scripts/systems/pf2e.js b/src/systems/pf2e.js similarity index 91% rename from scripts/systems/pf2e.js rename to src/systems/pf2e.js index 95081ce2..5948753e 100644 --- a/scripts/systems/pf2e.js +++ b/src/systems/pf2e.js @@ -17,5 +17,8 @@ export default { "ITEM_SIMILARITIES": ["name", "type", "data.temporary.value"], // Currencies in item piles are a list of names, attribute paths, and images - the attribute path is relative to the actor.data - "CURRENCIES": [] + "CURRENCIES": { + "itemBased": true, + "list": [] + } } diff --git a/scripts/systems/sfrpg.js b/src/systems/sfrpg.js similarity index 100% rename from scripts/systems/sfrpg.js rename to src/systems/sfrpg.js diff --git a/scripts/systems/splittermond.js b/src/systems/splittermond.js similarity index 61% rename from scripts/systems/splittermond.js rename to src/systems/splittermond.js index ecdbaad0..b348f1a9 100644 --- a/scripts/systems/splittermond.js +++ b/src/systems/splittermond.js @@ -17,21 +17,24 @@ export default { "ITEM_SIMILARITIES": ["name", "type", "data.sufferedDamage", "data.quality"], // Currencies in item piles are a list of names, attribute paths, and images - the attribute path is relative to the actor.data - "CURRENCIES": [ - { - name: "Telare", - path: "data.currency.T", - img: "icons/commodities/currency/coins-assorted-mix-platinum.webp" - }, - { - name: "Lunare", - path: "data.currency.L", - img: "icons/commodities/currency/coin-embossed-unicorn-silver.webp" - }, - { - name: "Solare", - path: "data.currency.S", - img: "icons/commodities/currency/coins-assorted-mix-copper.webp" - } - ] + "CURRENCIES": { + "itemBased": false, + "list": [ + { + name: "Telare", + path: "data.currency.T", + img: "icons/commodities/currency/coins-assorted-mix-platinum.webp" + }, + { + name: "Lunare", + path: "data.currency.L", + img: "icons/commodities/currency/coin-embossed-unicorn-silver.webp" + }, + { + name: "Solare", + path: "data.currency.S", + img: "icons/commodities/currency/coins-assorted-mix-copper.webp" + } + ] + } } \ No newline at end of file diff --git a/scripts/systems/swade.js b/src/systems/swade.js similarity index 73% rename from scripts/systems/swade.js rename to src/systems/swade.js index fd709ace..4bbd739d 100644 --- a/scripts/systems/swade.js +++ b/src/systems/swade.js @@ -17,11 +17,16 @@ export default { "ITEM_SIMILARITIES": ["name", "type"], // Currencies in item piles are a list of names, attribute paths, and images - the attribute path is relative to the actor.data - "CURRENCIES": [ - { - name: "SWADE.Currency", - path: "data.details.currency", - img: "icons/svg/coins.svg" - } - ] + "CURRENCIES": { + "itemBased": false, + "list": [ + { + name: "SWADE.Currency", + path: "data.details.currency", + img: "icons/svg/coins.svg", + primary: true, + exchange: 1 + } + ], + } } \ No newline at end of file diff --git a/scripts/systems/tormenta20.js b/src/systems/tormenta20.js similarity index 52% rename from scripts/systems/tormenta20.js rename to src/systems/tormenta20.js index 56552ef0..03aa1161 100644 --- a/scripts/systems/tormenta20.js +++ b/src/systems/tormenta20.js @@ -21,21 +21,30 @@ export default { "ITEM_SIMILARITIES": ["name", "type"], // Currencies in item piles are a list of names, attribute paths, and images - the attribute path is relative to the actor.data - "CURRENCIES": [ - { - name: "Ouro", - path: "data.dinheiro.to", - img: "icons/commodities/currency/coin-embossed-insect-gold.webp" - }, - { - name: "Prata", - path: "data.dinheiro.tp", - img: "icons/commodities/currency/coin-embossed-unicorn-silver.webp" - }, - { - name: "Cobre", - path: "data.dinheiro.tc", - img: "icons/commodities/currency/coin-engraved-waves-copper.webp" - } - ] + "CURRENCIES": { + "itemBased": false, + "list": [ + { + name: "Ouro", + path: "data.dinheiro.to", + img: "icons/commodities/currency/coin-embossed-insect-gold.webp", + primary: false, + exchange: 10 + }, + { + name: "Prata", + path: "data.dinheiro.tp", + img: "icons/commodities/currency/coin-embossed-unicorn-silver.webp", + primary: true, + exchange: 1 + }, + { + name: "Cobre", + path: "data.dinheiro.tc", + img: "icons/commodities/currency/coin-engraved-waves-copper.webp", + primary: false, + exchange: 0.1 + } + ] + } } \ No newline at end of file diff --git a/scripts/systems/wfrp4e.js b/src/systems/wfrp4e.js similarity index 91% rename from scripts/systems/wfrp4e.js rename to src/systems/wfrp4e.js index 201e286e..c245eb62 100644 --- a/scripts/systems/wfrp4e.js +++ b/src/systems/wfrp4e.js @@ -17,5 +17,8 @@ export default { "ITEM_SIMILARITIES": ["name", "type"], // Currencies in item piles are a list of names, attribute paths, and images - the attribute path is relative to the actor.data - "CURRENCIES": [] + "CURRENCIES": { + "itemBased": true, + "list": [] + } } \ No newline at end of file diff --git a/styles/module.css b/styles/module.css deleted file mode 100644 index 52762c16..00000000 --- a/styles/module.css +++ /dev/null @@ -1,403 +0,0 @@ -/* ----------------------- Generic ----------------------- */ -.item-piles-player-list-trade-button { - line-height: inherit; - font-size: 0.85rem; - width: calc(100% - 0.5rem); - margin: 0.25rem; -} -.item-piles-player-list-trade-button.item-piles-minimal-ui { - padding: 2px 0 0 0; - text-align: center; -} -.item-piles-player-list-trade-button.item-piles-minimal-ui i { - width: 100%; -} -.item-piles-specate-trade:disabled { - background-color: rgba(0, 0, 0, 0.25); -} -.item-piles-progress { - width: calc(100% - 4px); - background: #e1e4e8; - border-radius: 3px; - overflow: hidden; - margin: 0.25rem 2px 0 2px; - height: 6px; -} -.item-piles-progress .progress-bar { - display: block; - height: 100%; - background-color: rgba(0, 0, 0, 0.65); - transition: width 30s linear; -} -.item-piles-dialog { - text-align: center; - font-size: 0.9rem; - margin-bottom: 1rem; -} -.item-piles-disabled { - opacity: 0.75; -} -.item-piles-clickable { - cursor: pointer; -} -.item-piles-clickable-red { - color: red; -} -.item-piles-clickable-green { - color: green; -} -.item-piles-clickable-green:hover { - text-shadow: 0 0 8px #007d00; -} -.item-piles-moveable { - cursor: move; -} -.item-piles-highlight { - color: var(--color-text-hyperlink, #ff6400); - text-decoration: underline; -} -.item-piles-grow { - flex-grow: 1; -} -.item-piles-text-right { - text-align: right; -} -.item-piles-text-center { - text-align: center; -} -.item-piles-small-text { - font-size: 0.75rem; -} -.item-piles-middle { - vertical-align: middle; -} -.item-piles-img-container { - min-height: 37px; - max-width: 37px; - max-height: 37px; - overflow: hidden; - border-radius: 4px; - border: 1px solid black; -} -.item-piles-img-container .item-piles-img { - border: 0; - width: auto; - height: 100%; - transition: transform 150ms; -} -.item-piles-img-container .item-piles-img:hover { - transform: scale(1.125, 1.125); -} -.item-piles-odd-color:nth-child(even) { - background-color: var(--color-text-light-highlight, #f0f0e0); -} -.item-piles-bottom-divider { - border-bottom: 1px solid rgba(0, 0, 0, 0.35); - margin-bottom: 0.5rem; - padding-bottom: 0.5rem; -} -.item-piles-top-divider { - border-top: 1px solid rgba(0, 0, 0, 0.35); - margin-top: 0.5rem; - padding-top: 0.5rem; -} -.item-piles-disabled { - background-color: var(--color-bg-btn-minor-inactive, #c9c7b8); -} - -.item-piles-slider-group { - padding: 0 5px 0 0; - margin-bottom: 0.25rem; - margin-right: 5px; - border-radius: 4px; -} - -#item-piles-preview-container { - position: absolute; - display: none; -} -#item-piles-preview-container #item-piles-preview-image { - border: 0; - width: 300px; - border-radius: 1rem; - box-shadow: rgba(0, 0, 0, 0.25) 0px 54px 55px, rgba(0, 0, 0, 0.12) 0px -12px 30px, rgba(0, 0, 0, 0.12) 0px 4px 6px, rgba(0, 0, 0, 0.17) 0px 12px 13px, rgba(0, 0, 0, 0.09) 0px -3px 5px; -} - -/* ----------------------- INVENTORY ----------------------- */ -.item-piles-items-list { - max-height: 500px; - overflow-y: scroll; -} -.item-piles-items-list .item-piles-change-actor-select { - display: none; -} -.item-piles-items-list #item-piles-preview-container { - position: absolute; - display: none; -} -.item-piles-items-list .item-piles-add-currency { - margin-right: 5px; - flex: 0 1 auto; - vertical-align: middle; -} -.item-piles-items-list .item-piles-item-row { - padding: 0 5px 0 0; - margin-bottom: 0.25rem; - margin-right: 5px; - border-radius: 4px; -} -.item-piles-items-list .item-piles-item-row:nth-child(even):not(.item-piles-disabled) { - background-color: var(--color-text-light-highlight, #f0f0e0); -} -.item-piles-items-list .item-piles-item-row .item-piles-disabled { - background-color: var(--color-bg-btn-minor-inactive, #c9c7b8); -} -.item-piles-items-list .item-piles-item-row div { - display: inline-flex; - flex-direction: column; - justify-content: center; -} -.item-piles-items-list .item-piles-item-row .item-piles-text { - line-height: 1.6rem; - font-size: 1rem; - text-wrap: normal; - flex: 0 1 auto; -} -.item-piles-items-list .item-piles-item-row .item-piles-name { - padding: 0 0.5rem; - flex: 4; - display: inline-flex; - flex-direction: column; -} -.item-piles-items-list .item-piles-item-row .item-piles-name .item-piles-name-container { - flex: 1; - display: inline-flex; - flex-direction: column; - justify-content: center; -} -.item-piles-items-list .item-piles-item-row .item-piles-name .item-piles-name-container a { - max-width: fit-content; -} -.item-piles-items-list .item-piles-item-row .item-piles-name span { - line-height: 1; - flex: 0; -} -.item-piles-items-list .item-piles-item-row .item-piles-quantity { - flex: 1; - margin-left: 0.5rem; - text-align: right; -} -.item-piles-items-list .item-piles-item-row .item-piles-input-divider { - flex: 1; - margin: 0.1rem 0.5rem 0 0.25rem; - font-size: 0.8rem; - line-height: 1.5rem; -} -.item-piles-items-list .item-piles-item-row .item-piles-item-take-button, .item-piles-items-list .item-piles-item-row .item-piles-currency-take-button { - flex: 0; - min-width: 4rem; - height: 26px; - padding: 1px 3px; - line-height: inherit; -} - -.item-piles-collapsible:not(:last-child) { - margin-bottom: 0.75rem; - padding-bottom: 0.75rem; - border-bottom: 1px solid var(--color-border-light-primary, #b5b3a4); -} -.item-piles-collapsible > summary { - display: block; - font-weight: 900; -} -.item-piles-collapsible > summary::before { - font-family: "Font Awesome 5 Free"; - font-weight: 900; - content: "\f054"; - margin-right: 0.5rem; -} -.item-piles-collapsible[open] > summary { - margin-bottom: 0.5rem; -} -.item-piles-collapsible[open] > summary::before { - font-family: "Font Awesome 5 Free"; - font-weight: 900; - content: "\f078"; - margin-right: 0.275rem; -} - -/* ----------------------- CONFIG ----------------------- */ -.item-piles-config { - width: 430px; -} -.item-piles-config .item-piles-config-container { - display: flex; - flex-direction: column; - justify-content: flex-start; - overflow: hidden; -} -.item-piles-config .item-piles-config-container .sheet-navigation { - margin-bottom: 0.5rem; - padding-bottom: 0.5rem; - border-bottom: 1px solid var(--color-border-light-primary, #b5b3a4); -} -.item-piles-config .item-piles-config-container .item-piles-sections { - padding: 0.25rem; - max-height: calc(100% - 51px - 34px); - overflow-y: scroll; -} -.item-piles-config .item-piles-config-container p { - flex: 0; - line-height: 14px; - font-size: var(--font-size-12); - color: var(--color-text-dark-secondary); - padding-right: 1rem; - margin-top: 0; - overflow-y: hidden; -} -.item-piles-config .item-piles-config-container footer { - margin-top: 0.5rem; - padding-top: 0.5rem; - border-top: 1px solid var(--color-border-light-primary, #b5b3a4); -} - -/* ---------------------- CHAT CARDS ---------------------- */ -.item-piles-chat-card { - padding: 0.5rem; -} -.item-piles-chat-card img { - border: 0; - vertical-align: middle; -} -.item-piles-chat-card .item-piles-chat-card-title i { - line-height: 1rem; - font-size: 1.25rem; - margin: 0 0.5rem; -} -.item-piles-chat-card .item-piles-chat-card-title img { - margin-bottom: 5px; -} -.item-piles-chat-card ul { - display: inline-flex; - flex-direction: column; - list-style-type: none; - padding: 0; - margin: 0; - width: 100%; -} -.item-piles-chat-card li { - display: inline-flex; - flex-direction: row; - width: 100%; - margin: 1px 0; - padding: 3px 4px; - border-radius: 3px; - align-items: center; -} -.item-piles-chat-card li:nth-child(odd) { - background-color: var(--color-text-light-highlight, #f0f0e0); -} -.item-piles-chat-card li img { - margin-right: 5px; - flex: 0; -} -.item-piles-chat-card li label { - flex: 1; - flex-wrap: wrap; -} -.item-piles-chat-card li small { - min-width: 1rem; - text-align: right; - padding-right: 2px; -} - -/* ---------------------- TRADING UI ---------------------- */ -.item-piles-trading-sheet .item-piles-item-row { - padding: 2px; -} -.item-piles-trading-sheet .item-piles-remove-item { - opacity: 0.5; -} -.item-piles-trading-sheet .item-piles-remove-item:hover { - opacity: 1; -} -.item-piles-trading-sheet .item-piles-confirm-quantity { - display: none; -} -.item-piles-trading-sheet .item-piles-quantity-text { - line-height: 1.6rem; - font-size: 0.85rem; - background-color: rgba(255, 255, 255, 0.15); - border: 1px solid rgba(0, 0, 0, 0.15); - padding-right: 5px; - border-radius: 4px; - margin-left: 10px; -} -.item-piles-trading-sheet .item-piles-quantity-text:hover { - background-color: rgba(255, 255, 255, 0.5); - border: 1px solid rgba(0, 0, 0, 0.5); -} -.item-piles-trading-sheet .item-piles-add-currency { - flex: 1; - vertical-align: middle; - margin-bottom: 5px; -} -.item-piles-trading-sheet .item-piles-items-list { - min-height: 300px; - max-height: 300px; -} -.item-piles-trading-sheet .item-piles-currency-list { - min-height: unset; - max-height: unset; -} -.item-piles-trading-sheet .item-piles-img-container { - min-height: 29px; - max-width: 29px; - max-height: 29px; - overflow: hidden; - border-radius: 4px; - border: 1px solid black; -} -.item-piles-trading-sheet .item-piles-img-container .item-piles-img { - border: 0; - width: auto; - height: 100%; - transition: transform 250ms; -} -.item-piles-trading-sheet .item-piles-img-container .item-piles-img:hover { - transform: scale(1.25, 1.25); -} -.item-piles-trading-sheet .accepted { - box-shadow: 0 0 40px rgba(0, 255, 0, 0.35) inset, 0 0 10px rgba(0, 255, 0, 0.35); - transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1); -} -.item-piles-trading-sheet h1, .item-piles-trading-sheet h2 { - border: 0; - vertical-align: center; -} -.item-piles-trading-sheet .character-header { - display: inline-flex; - flex-direction: row; - flex: 0 1 auto; - padding: 5px; -} -.item-piles-trading-sheet .character-header .character-name { - padding-top: 0.5rem; - text-align: center; - flex: 1; -} -.item-piles-trading-sheet .character-header img { - max-width: 40px; - max-height: 40px; - width: auto; - height: auto; - border: 0; - margin-right: auto; - flex: 0 1 auto; - border-radius: 5px; -} -.item-piles-trading-sheet .character-header.trader img { - margin-left: auto; -} - -/*# sourceMappingURL=module.css.map */ diff --git a/styles/module.css.map b/styles/module.css.map deleted file mode 100644 index 3be509a9..00000000 --- a/styles/module.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sourceRoot":"","sources":["module.scss"],"names":[],"mappings":"AAAA;AAIE;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;AAKN;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAKJ;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;;AAIJ;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAIA;EACE;;AAGF;EACE;;AAIJ;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EAEA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;;AAKJ;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;;AAIJ;AAGA;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AASJ;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;;AAEA;EACE;EACA;EACA;EACA;;;AAKN;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;;AAON;AAEA;EACE;;AAEA;EACE;EACA;;AAIA;EACE;EACA;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;;AAKN;AAKE;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAKA;EACE;EACA;EACA;EAEA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AASR;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EAEE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EACE","file":"module.css"} \ No newline at end of file diff --git a/styles/module.scss b/styles/module.scss deleted file mode 100644 index 172070fb..00000000 --- a/styles/module.scss +++ /dev/null @@ -1,522 +0,0 @@ -/* ----------------------- Generic ----------------------- */ - -.item-piles { - - &-player-list-trade-button { - line-height: inherit; - font-size: 0.85rem; - width: calc(100% - 0.5rem); - margin: 0.25rem; - - &.item-piles-minimal-ui { - padding: 2px 0 0 0; - text-align: center; - - i { - width: 100%; - } - } - } - - &-specate-trade:disabled { - background-color: rgba(0, 0, 0, 0.25); - } - - &-progress { - width: calc(100% - 4px); - background: #e1e4e8; - border-radius: 3px; - overflow: hidden; - margin: 0.25rem 2px 0 2px; - height: 6px; - - .progress-bar { - display: block; - height: 100%; - background-color: rgba(0, 0, 0, 0.65); - transition: width 30s linear; - } - } - - - &-dialog { - text-align: center; - font-size: 0.9rem; - margin-bottom: 1rem; - } - - &-disabled { - opacity: 0.75; - } - - &-clickable { - cursor: pointer; - - &-red { - color: red; - } - - &-green { - color: green; - } - - &-green:hover { - text-shadow: 0 0 8px rgba(0, 125, 0, 1); - } - } - - &-moveable { - cursor: move; - } - - &-highlight { - color: var(--color-text-hyperlink, #ff6400); - text-decoration: underline; - } - - &-grow { - flex-grow: 1; - } - - &-text { - &-right { - text-align: right; - } - - &-center { - text-align: center; - } - } - - &-small-text { - font-size: 0.75rem; - } - - &-middle { - vertical-align: middle; - } - - &-img-container { - min-height: 37px; - max-width: 37px; - max-height: 37px; - - overflow: hidden; - border-radius: 4px; - border: 1px solid black; - - .item-piles-img { - border: 0; - width: auto; - height: 100%; - transition: transform 150ms; - - &:hover { - transform: scale(1.125, 1.125); - } - } - } - - &-odd-color:nth-child(even) { - background-color: var(--color-text-light-highlight, #f0f0e0); - } - - &-bottom-divider { - border-bottom: 1px solid rgba(0, 0, 0, 0.35); - margin-bottom: 0.5rem; - padding-bottom: 0.5rem; - } - - &-top-divider { - border-top: 1px solid rgba(0, 0, 0, 0.35); - margin-top: 0.5rem; - padding-top: 0.5rem; - } - - &-disabled { - background-color: var(--color-bg-btn-minor-inactive, #c9c7b8) - } - -} - -.item-piles-slider-group { - padding: 0 5px 0 0; - margin-bottom: 0.25rem; - margin-right: 5px; - border-radius: 4px; -} - -#item-piles-preview-container { - position: absolute; - display: none; - - #item-piles-preview-image { - border: 0; - width: 300px; - border-radius: 1rem; - box-shadow: rgba(0, 0, 0, 0.25) 0px 54px 55px, rgba(0, 0, 0, 0.12) 0px -12px 30px, rgba(0, 0, 0, 0.12) 0px 4px 6px, rgba(0, 0, 0, 0.17) 0px 12px 13px, rgba(0, 0, 0, 0.09) 0px -3px 5px; - } -} - -/* ----------------------- INVENTORY ----------------------- */ - - -.item-piles-items-list { - max-height: 500px; - overflow-y: scroll; - - .item-piles-change-actor-select { - display: none; - } - - #item-piles-preview-container { - position: absolute; - display: none; - } - - .item-piles-add-currency { - margin-right: 5px; - flex: 0 1 auto; - vertical-align: middle; - } - - .item-piles-item-row { - padding: 0 5px 0 0; - margin-bottom: 0.25rem; - margin-right: 5px; - border-radius: 4px; - - &:nth-child(even):not(.item-piles-disabled) { - background-color: var(--color-text-light-highlight, #f0f0e0); - } - - .item-piles-disabled { - background-color: var(--color-bg-btn-minor-inactive, #c9c7b8) - } - - div { - display: inline-flex; - flex-direction: column; - justify-content: center; - } - - .item-piles-text { - line-height: 1.6rem; - font-size: 1rem; - text-wrap: normal; - flex: 0 1 auto; - } - - .item-piles-name { - padding: 0 0.5rem; - flex: 4; - display: inline-flex; - flex-direction: column; - - .item-piles-name-container { - flex: 1; - display: inline-flex; - flex-direction: column; - justify-content: center; - - a { - max-width: fit-content; - } - } - - span { - line-height: 1; - flex: 0; - } - } - - .item-piles-quantity { - flex: 1; - margin-left: 0.5rem; - text-align: right; - } - - .item-piles-input-divider { - flex: 1; - margin: 0.1rem 0.5rem 0 0.25rem; - font-size: 0.8rem; - line-height: 1.5rem; - } - - .item-piles-item-take-button, .item-piles-currency-take-button { - flex: 0; - min-width: 4rem; - height: 26px; - padding: 1px 3px; - line-height: inherit; - } - - } - -} - -.item-piles-collapsible { - - &:not(:last-child) { - margin-bottom: 0.75rem; - padding-bottom: 0.75rem; - border-bottom: 1px solid var(--color-border-light-primary, #b5b3a4); - } - - & > summary { - display: block; - font-weight: 900; - - &::before { - font-family: "Font Awesome 5 Free"; - font-weight: 900; - content: "\f054"; - margin-right: 0.5rem; - } - } - - &[open] > summary { - margin-bottom: 0.5rem; - - &::before { - font-family: "Font Awesome 5 Free"; - font-weight: 900; - content: "\f078"; - margin-right: 0.275rem; - } - } -} - -/* ----------------------- CONFIG ----------------------- */ - -.item-piles-config { - width: 430px; - - .item-piles-config-container { - display: flex; - flex-direction: column; - justify-content: flex-start; - overflow: hidden; - - .sheet-navigation { - margin-bottom: 0.5rem; - padding-bottom: 0.5rem; - border-bottom: 1px solid var(--color-border-light-primary, #b5b3a4); - } - - .item-piles-sections { - padding: 0.25rem; - max-height: calc(100% - 51px - 34px); - overflow-y: scroll; - } - - p { - flex: 0; - line-height: 14px; - font-size: var(--font-size-12); - color: var(--color-text-dark-secondary); - padding-right: 1rem; - margin-top: 0; - overflow-y: hidden; - } - - footer { - margin-top: 0.5rem; - padding-top: 0.5rem; - border-top: 1px solid var(--color-border-light-primary, #b5b3a4); - } - - } - -} - -/* ---------------------- CHAT CARDS ---------------------- */ - -.item-piles-chat-card { - padding: 0.5rem; - - img { - border: 0; - vertical-align: middle; - } - - .item-piles-chat-card-title { - i { - line-height: 1rem; - font-size: 1.25rem; - margin: 0 0.5rem; - } - - img { - margin-bottom: 5px; - } - } - - ul { - display: inline-flex; - flex-direction: column; - list-style-type: none; - padding: 0; - margin: 0; - width: 100%; - } - - li { - display: inline-flex; - flex-direction: row; - width: 100%; - margin: 1px 0; - padding: 3px 4px; - border-radius: 3px; - align-items: center; - - &:nth-child(odd) { - background-color: var(--color-text-light-highlight, #f0f0e0); - } - - img { - margin-right: 5px; - flex: 0; - } - - label { - flex: 1; - flex-wrap: wrap; - } - - small { - min-width: 1rem; - text-align: right; - padding-right: 2px; - } - } -} - -/* ---------------------- TRADING UI ---------------------- */ - - -.item-piles-trading-sheet { - - .item-piles-item-row { - padding: 2px; - } - - .item-piles-remove-item { - opacity: 0.5; - } - - .item-piles-remove-item:hover { - opacity: 1; - } - - .item-piles-confirm-quantity { - display: none; - } - - .item-piles-quantity-text { - line-height: 1.6rem; - font-size: 0.85rem; - background-color: rgba(255, 255, 255, 0.15); - border: 1px solid rgba(0, 0, 0, 0.15); - padding-right: 5px; - border-radius: 4px; - margin-left: 10px; - } - - .item-piles-quantity-text:hover { - background-color: rgba(255, 255, 255, 0.5); - border: 1px solid rgba(0, 0, 0, 0.5); - } - - .item-piles-add-currency { - flex: 1; - vertical-align: middle; - margin-bottom: 5px; - } - - .item-piles-items-list { - min-height: 300px; - max-height: 300px; - } - - .item-piles-currency-list { - min-height: unset; - max-height: unset; - } - - .item-piles { - - &-img-container { - min-height: 29px; - max-width: 29px; - max-height: 29px; - - overflow: hidden; - border-radius: 4px; - border: 1px solid black; - - .item-piles-img { - border: 0; - width: auto; - height: 100%; - transition: transform 250ms; - - &:hover { - transform: scale(1.25, 1.25); - } - } - - - } - - } - - .accepted { - box-shadow: 0 0 40px rgba(0, 255, 0, 0.35) inset, 0 0 10px rgba(0, 255, 0, 0.35); - transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1); - } - - h1, h2 { - border: 0; - vertical-align: center; - } - - .character-header { - - display: inline-flex; - flex-direction: row; - flex: 0 1 auto; - padding: 5px; - - .character-name { - padding-top: 0.5rem; - text-align: center; - flex: 1; - } - - img { - max-width: 40px; - max-height: 40px; - width: auto; - height: auto; - border: 0; - margin-right: auto; - flex: 0 1 auto; - border-radius: 5px; - } - - &.trader { - img { - margin-left: auto; - } - } - - } - -} - - - - - - diff --git a/templates/currencies-editor.html b/templates/currencies-editor.html deleted file mode 100644 index 0ea50cc5..00000000 --- a/templates/currencies-editor.html +++ /dev/null @@ -1,51 +0,0 @@ -
- - - -

{{localize "ITEM-PILES.CurrenciesEditor.Explanation"}}

- -
-
-
{{localize "ITEM-PILES.CurrenciesEditor.Name"}}
-
{{localize "ITEM-PILES.CurrenciesEditor.Path"}}
-
{{localize "ITEM-PILES.CurrenciesEditor.Icon"}}
- Add -
-
-
- {{#each currencies as |currency id|}} -
-
-
-
- {{filePicker target=(concat id ".img") type="imagevideo"}} - -
-
- -
-
- {{/each}} -
-
- -
- - -
- -
\ No newline at end of file diff --git a/templates/drop-currency-dialog.html b/templates/drop-currency-dialog.html deleted file mode 100644 index 1a3e4d41..00000000 --- a/templates/drop-currency-dialog.html +++ /dev/null @@ -1,41 +0,0 @@ -
- -

- {{ content }} -

- - {{#each currencies as |currency id|}} -
-
-
-
{{currency.name}}
- {{#unless @root.source}} - x{{currency.quantity}} - {{/unless}} -
- - {{#unless @root.includeAllCurrencies}} - - {{/unless}} - - - {{#unless @root.includeAllCurrencies}} -
/ {{currency.quantity}}
- {{/unless}} -
- {{/each}} - - {{#unless currencies.length}} -

- {{localize "ITEM-PILES.DropCurrencies.NoCurrency" actor_name=source.name}} -

- {{/unless}} - -
- - -
- -
diff --git a/templates/drop-item-dialog.html b/templates/drop-item-dialog.html deleted file mode 100644 index b2f8fdc2..00000000 --- a/templates/drop-item-dialog.html +++ /dev/null @@ -1,34 +0,0 @@ -
- -

{{localize "ITEM-PILES.DropItem.Dropping"}}: {{droppedItem.name}}

- - {{#if itemPileAtLocation}} - -

{{localize "ITEM-PILES.DropItem.ExistingPiles" item_pile_name=itemPile.name}}

- - {{/if}} - - {{#if itemQuantityMoreThanOne}} - -
- -
-
- - -
- - {{else}} - - {{/if}} - -
- {{#if itemPileAtLocation}} - - {{else}} - - {{/if}} - -
- -
diff --git a/templates/filter-editor.html b/templates/filter-editor.html deleted file mode 100644 index 45e09fcc..00000000 --- a/templates/filter-editor.html +++ /dev/null @@ -1,40 +0,0 @@ -
- - - -

{{localize "ITEM-PILES.FilterEditor.Explanation"}}

- -
-
-
-
{{localize "ITEM-PILES.FilterEditor.Path"}}
-
{{localize "ITEM-PILES.FilterEditor.Filters"}}
-
- {{#each filters as |filter id|}} -
-
-
-
-
- {{/each}} - -
-
- -
- -
\ No newline at end of file diff --git a/templates/item-pile-config.html b/templates/item-pile-config.html deleted file mode 100644 index 45687e8e..00000000 --- a/templates/item-pile-config.html +++ /dev/null @@ -1,274 +0,0 @@ -
- - - -
- -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
-
- -
- -
- -
- -
-
- -
- -
- -
- -
- -
- -
- - {{ localize "ITEM-PILES.Defaults.SingleItem.Title"}} - - - -
- - -
- -
- -
- - -
- -
- - -
- -
- - - -
- -
- -
- -
- - {{ localize "ITEM-PILES.Defaults.Container.Title"}} - -
- - -
- -
- -
- - -
- -
- - -
- -
- -
- {{filePicker target="closedImage" type="imagevideo"}} - -
-
- -
- -
- {{filePicker target="openedImage" type="imagevideo"}} - -
-
- -
- -
- {{filePicker target="emptyImage" type="imagevideo"}} - -
-
- -
- -
- {{filePicker target="lockedImage" type="imagevideo"}} - -
-
- -
- -
- {{filePicker target="closeSound" type="audio"}} - -
-
- -
- -
- {{filePicker target="openSound" type="audio"}} - -
-
- -
- -
- {{filePicker target="lockedSound" type="audio"}} - -
-
-
- -
- -
- - {{ localize "ITEM-PILES.Defaults.Sharing.Title"}} - -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
diff --git a/templates/item-pile-inventory.html b/templates/item-pile-inventory.html deleted file mode 100644 index 74bcad20..00000000 --- a/templates/item-pile-inventory.html +++ /dev/null @@ -1,161 +0,0 @@ -
- -
- - {{#if isDeleted}} - -

{{localize "ITEM-PILES.Inspect.Destroyed"}}

- - {{else}} - - {{#if editQuantities}} -

{{localize "ITEM-PILES.Inspect.Owner"}}

- {{else}} -

- {{{ localize "ITEM-PILES.Inspect.AsActor" actorName=recipient.name }}} - -

- {{/if}} - -
- - {{#if isEmpty}} -

{{localize "ITEM-PILES.Inspect.Empty"}}

- {{/if}} - -
- -
- -
- - {{#if hasItems}} -

{{localize "ITEM-PILES.Items"}}:

- {{/if}} - {{#each items as |item id|}} -
- -
- -
- - {{#unless @root.editQuantities}}x{{item.quantity}}{{/unless}} -
- -
- {{#if @root.editQuantities}} -
- -
- {{else}} - {{#if item.shareLeft}} -
- - - - / {{item.shareLeft}} - -
- {{else}} - {{#if @root.shareItemsEnabled}} - {{localize "ITEM-PILES.Inspect.NoShareLeft"}} - {{else}} - {{localize "ITEM-PILES.Inspect.NoneLeft"}} - {{/if}} - {{/if}} - {{/if}} -
- - {{#unless @root.editQuantities}} -
- -
- {{/unless}} - -
- {{/each}} - - {{#if systemHasCurrencies}} -
- -
-

{{localize "ITEM-PILES.Currencies"}}:

- {{#if @root.hasRecipient}} - - {{localize "ITEM-PILES.Inspect.AddCurrency"}} - - {{/if}} -
- {{#each currencies as |currency id|}} -
- -
- -
-
{{currency.name}}
- {{#unless @root.editQuantities}}x{{currency.quantity}}{{/unless}} -
- -
- {{#if @root.editQuantities}} -
- -
- {{else}} - {{#if currency.shareLeft}} -
- - - / {{currency.shareLeft}} -
- {{else}} - {{#if @root.shareCurrenciesEnabled}} - {{localize "ITEM-PILES.Inspect.NoShareLeft"}} - {{else}} - {{localize "ITEM-PILES.Inspect.NoneLeft"}} - {{/if}} - {{/if}} - {{/if}} -
- - {{#unless @root.editQuantities}} -
- -
- {{/unless}} - -
- {{/each}} - {{/if}} - -
- - {{/if}} - -
- {{#each buttons as |button id|}} - - {{/each}} - -
- -
- -
diff --git a/templates/loot-chat-message.html b/templates/loot-chat-message.html deleted file mode 100644 index 61691ec9..00000000 --- a/templates/loot-chat-message.html +++ /dev/null @@ -1,39 +0,0 @@ -
- -
-

- - {{#if actor}} {{/if}} -

-

{{message}}

-
- - {{#if items}} -
    - {{#each items as |item id|}} -
  • - - - {{item.quantity}} -
  • - {{/each}} -
- {{/if}} - {{#if items}} - {{#if currencies}} -
- {{/if}} - {{/if}} - {{#if currencies}} -
    - {{#each currencies as |currency id|}} -
  • - - - {{currency.quantity}} -
  • - {{/each}} -
- {{/if}} - -
diff --git a/templates/similarities-editor.html b/templates/similarities-editor.html deleted file mode 100644 index af3135dc..00000000 --- a/templates/similarities-editor.html +++ /dev/null @@ -1,36 +0,0 @@ -
- - - -

{{localize "ITEM-PILES.SimilaritiesEditor.Explanation_P1"}}

-

{{localize "ITEM-PILES.SimilaritiesEditor.Explanation_P2"}}

- -
-
- {{#each similarities as |path id|}} -
-
-
-
- {{/each}} - -
-
- -
- -
\ No newline at end of file diff --git a/templates/trade-complete-chat-message.html b/templates/trade-complete-chat-message.html deleted file mode 100644 index fa1e1774..00000000 --- a/templates/trade-complete-chat-message.html +++ /dev/null @@ -1,94 +0,0 @@ -
- -
-

- - -

-

{{ localize "ITEM-PILES.Chat.TradeComplete" party_1=party_1.actor.name party_2=party_2.actor.name}}

-
- - {{#if enableCollapse}} -
- {{ localize "ITEM-PILES.Chat.ExpandTrade" }} - {{/if}} - - {{#unless party_1.got_nothing}} - -

{{party_1.actor.name}} received:

- - {{#if party_1.items}} -
    - {{#each party_1.items as |item id|}} -
  • - - - {{item.quantity}} -
  • - {{/each}} -
- {{/if}} - {{#if party_1.items}} - {{#if party_1.currencies}} -
- {{/if}} - {{/if}} - {{#if party_1.currencies}} -
    - {{#each party_1.currencies as |currency id|}} -
  • - - - {{currency.quantity}} -
  • - {{/each}} -
- {{/if}} - - {{/unless}} - - {{#unless party_1.got_nothing}} - {{#unless party_2.got_nothing}} -
- {{/unless}} - {{/unless}} - - {{#unless party_2.got_nothing}} - -

{{party_2.actor.name}} received:

- - {{#if party_2.items}} -
    - {{#each party_2.items as |item id|}} -
  • - - - {{item.quantity}} -
  • - {{/each}} -
- {{/if}} - {{#if party_2.items}} - {{#if party_2.currencies}} -
- {{/if}} - {{/if}} - {{#if party_2.currencies}} -
    - {{#each party_2.currencies as |currency id|}} -
  • - - - {{currency.quantity}} -
  • - {{/each}} -
- {{/if}} - - {{/unless}} - - {{#if enableCollapse}} -
- {{/if}} - -
diff --git a/templates/trade-dialog.html b/templates/trade-dialog.html deleted file mode 100644 index a813c775..00000000 --- a/templates/trade-dialog.html +++ /dev/null @@ -1,151 +0,0 @@ -
- - - -

- -

- {{#if isPrompt}} - {{localize "ITEM-PILES.Trade.Prompt.Title"}} - {{else}} - {{localize "ITEM-PILES.Trade.Request.Title"}} - {{/if}} -

- - {{#if isPrompt}} -
- {{#if isPrivate}} -

{{{localize "ITEM-PILES.Trade.Prompt.PrivateContent" trading_user_name=tradingUser.name trading_actor_name=tradingActor.name}}}

- {{else}} -

{{{localize "ITEM-PILES.Trade.Prompt.Content" trading_user_name=tradingUser.name trading_actor_name=tradingActor.name}}}

- {{/if}} -

{{localize "ITEM-PILES.Trade.Prompt.AcceptQuery"}}

-
- - {{else}} - -

{{localize "ITEM-PILES.Trade.Request.User"}}

- -
-
- - {{#select user.id}} - - {{/select}} -
-
-
-
- - {{ localize "ITEM-PILES.Trade.PrivateExplanation"}} -
-
- - {{/if}} - - {{#if actor}} -

{{localize "ITEM-PILES.Trade.Request.PickedActor"}}

- {{else}} -

{{localize "ITEM-PILES.Trade.Request.PickActor"}}

- {{/if}} - -
-
- {{#if actor}} -
- {{#if actor.data.img}} - - {{/if}} - - {{#if multipleActors}} - {{#select actor.uuid}} - {{actor.name}} - - - {{/select}} - {{else}} - {{actor.name}} - {{/if}} - -
- {{else}} -

{{ localize "ITEM-PILES.Trade.Request.DropActor" }}

- {{/if}} -
- {{#if hasUnlinkedTokenOwnership}} -
- -
- {{/if}} -
- -
- {{#each buttons as |button id|}} - - {{/each}} -
- - {{#if isPrompt}} -
- -
- {{/if}} - -
\ No newline at end of file diff --git a/templates/trade-started-chat-message.html b/templates/trade-started-chat-message.html deleted file mode 100644 index b4eeacab..00000000 --- a/templates/trade-started-chat-message.html +++ /dev/null @@ -1,17 +0,0 @@ -
- -
-

- - -

-

{{ localize "ITEM-PILES.Chat.TradeStarted" party_1=party_1_actor.name party_2=party_2_actor.name}}

-
- -

{{ localize "ITEM-PILES.Chat.TradeStartedButton" }}

- - - -
diff --git a/templates/trading-app-spectate.html b/templates/trading-app-spectate.html deleted file mode 100644 index 6b1b1e4f..00000000 --- a/templates/trading-app-spectate.html +++ /dev/null @@ -1,157 +0,0 @@ -
- - - -
- -
- -
- -

{{ leftActor.name }}

-
- -
- -
- - {{#each leftActor.items as |item id|}} - -
- -
- -
- -
- -
- {{item.quantity}} -
-
- - {{/each}} - -
- -
- -
-
- - {{#each leftActor.currencies as |currency id|}} - -
- -
- - - -
- {{currency.quantity}} -
-
- - {{/each}} - -
- -
- -
- - -
- -
-

{{ rightActor.name }}

- -
- -
- -
- - {{#each rightActor.items as |item id|}} - -
- -
- -
- -
- -
- {{item.quantity}} -
-
- - {{/each}} - -
- -
- -
-
- - {{#each rightActor.currencies as |currency id|}} - -
- -
- - - -
- {{currency.quantity}} -
-
- - {{/each}} - -
- -
- -
-
- -
diff --git a/templates/trading-app.html b/templates/trading-app.html deleted file mode 100644 index 3ffa2001..00000000 --- a/templates/trading-app.html +++ /dev/null @@ -1,208 +0,0 @@ -
- - - -
- -
- -
- -

{{ leftActor.name }}

-
- -
- -
- - {{#unless leftActor.hasItems}} -
-

{{ localize "ITEM-PILES.Trade.DragDrop" }}

-
- {{/unless}} - - {{#each leftActor.items as |item id|}} - -
- -
- -
- -
- -
- -
- -
- -
- -
- {{item.quantity}} -
- -
-
-
- - {{/each}} - -
- - {{#if systemHasCurrencies}} - -
- - - - {{#each leftActor.currencies as |currency id|}} - -
- -
- -
- -
- - - -
- -
- -
- {{currency.quantity}} -
- -
-
-
- - {{/each}} - -
- - {{/if}} - -
- - {{#if leftActor.accepted}} - - {{else}} - - {{/if}} - -
- - -
- -
-

{{ rightActor.name }}

- -
- -
- -
- - {{#each rightActor.items as |item id|}} - -
- -
- -
- -
- -
- {{item.quantity}} -
-
- - {{/each}} - -
- - {{#if systemHasCurrencies}} - -
- - {{#if rightActor.currencies.length}} -
- {{/if}} - - {{#each rightActor.currencies as |currency id|}} - -
- -
- - - -
- {{currency.quantity}} -
-
- - {{/each}} - -
- - {{/if}} - -
- -
-
- -
From 7a4678910f168d8b79a0363a26aaca768a5d424a Mon Sep 17 00:00:00 2001 From: Haxxer Date: Sun, 19 Jun 2022 00:15:52 +0100 Subject: [PATCH 02/93] editors refactored and reimplemented --- languages/en.json | 38 +++- src/api.js | 2 - src/applications/components/Dialog.svelte | 48 ++-- src/applications/components/FilePicker.svelte | 44 ++++ src/applications/components/Tabs.svelte | 32 +-- .../currencies/AttributeCurrencyList.svelte | 135 +++++++++++ .../currencies/ItemCurrencyList.svelte | 165 ++++++++++++++ .../currencies/currencies-editor-shell.svelte | 80 +++++++ .../editors/currencies/currencies-editor.js | 48 ++++ .../editors/currencies/currency-store.js | 38 ++++ src/applications/editors/index.js | 11 + .../item-filters/item-filters-editor.js | 48 ++++ .../item-filters/item-filters-editor.svelte | 91 ++++++++ .../item-similarities-editor.js | 40 ++++ .../item-similarities-editor.svelte | 83 +++++++ .../price-modifiers-editor.js | 56 +++++ .../price-modifiers-editor.svelte | 140 ++++++++++++ src/applications/settings/Setting.svelte | 94 ++++---- .../settings/SettingButton.svelte | 54 +++-- src/applications/settings/settings-app.js | 76 +++---- .../settings/settings-shell.svelte | 213 +++++++++--------- src/constants.js | 92 ++++---- src/lib/lib.js | 65 ++++-- src/module.js | 14 +- src/settings.js | 88 +++++++- src/systems.js | 4 + src/systems/d35e.js | 94 ++++---- src/systems/dnd5e.js | 120 +++++----- src/systems/ds4.js | 80 +++---- src/systems/pf1.js | 94 ++++---- src/systems/pf2e.js | 39 ++-- src/systems/sfrpg.js | 55 +++-- src/systems/splittermond.js | 68 +++--- src/systems/swade.js | 52 +++-- src/systems/tormenta20.js | 88 ++++---- src/systems/wfrp4e.js | 36 +-- 36 files changed, 1842 insertions(+), 683 deletions(-) create mode 100644 src/applications/components/FilePicker.svelte create mode 100644 src/applications/editors/currencies/AttributeCurrencyList.svelte create mode 100644 src/applications/editors/currencies/ItemCurrencyList.svelte create mode 100644 src/applications/editors/currencies/currencies-editor-shell.svelte create mode 100644 src/applications/editors/currencies/currencies-editor.js create mode 100644 src/applications/editors/currencies/currency-store.js create mode 100644 src/applications/editors/index.js create mode 100644 src/applications/editors/item-filters/item-filters-editor.js create mode 100644 src/applications/editors/item-filters/item-filters-editor.svelte create mode 100644 src/applications/editors/item-similarities-editor/item-similarities-editor.js create mode 100644 src/applications/editors/item-similarities-editor/item-similarities-editor.svelte create mode 100644 src/applications/editors/price-modifiers-editor/price-modifiers-editor.js create mode 100644 src/applications/editors/price-modifiers-editor/price-modifiers-editor.svelte diff --git a/languages/en.json b/languages/en.json index a0f4c839..02d4275b 100644 --- a/languages/en.json +++ b/languages/en.json @@ -120,6 +120,12 @@ "Content": "This will reset all of the history of players having taken their share from this pile.

Are you sure you want to do this?", "Confirm": "Reset Sharing Data" }, + "SwitchCurrencyType": { + "Title": "Switching Currency Type", + "Header": "Are you sure?", + "Content1": "Are you sure you want to switch currency type?", + "Content2": "This will reset the existing currency setup." + }, "Cancel": "Cancel" }, "Applications": { @@ -135,7 +141,15 @@ }, "CurrenciesEditor": { "Title": "Currencies Editor", + + "AttributeTitle": "Attribute Based Currencies", "Explanation": "Here you can define which currencies on characters that can be picked up from item piles, such as currencies. In D&D5e, currencies exist on actors on the attribute path \"actor.data.data.currency.gp\", so you'd add your own with the name \"Gold Coins\" and attribute path \"data.currency.gp\".", + + "ItemTitle": "Item Based Currencies", + "ItemExplanation": "In some systems, currencies are actual items in character inventories. Drag and drop any items into the lower part here to add a new item-based currency.", + + "DragDrop": "Drag and drop an item to add it to the list", + "Name": "Currency name", "Path": "Currency path", "Icon": "Currency icon", @@ -153,11 +167,20 @@ "SimilaritiesEditor": { "Title": "Item Similarities Editor", "Explanation_P1": "Here you can define multiple types of identifiers that helps Item Piles differentiate between similar items. In almost every system, items can be differentiated with their \"name\" and \"type\".", - "Explanation_P2": "But in some cases, such as in Pathfinder 2nd Edition, temporary items may share those with permanent items. So by adding \"data.temporary.value\", you temporary items are considered \"unique\".", + "Explanation_P2": "But in some cases, such as in Pathfinder 2nd Edition, temporary items may share those with permanent items. So by adding \"data.temporary.value\", your temporary items are considered \"unique\" and separate from permanent ones.", "Path": "Attribute path", "AddNew": "Add new attribute path", "Submit": "Submit item similarities" }, + "PriceModifiersEditor": { + "Title": "Price Modifiers Editor", + "Explanation": "Here you can define the price and sell price modifiers for this merchant relating to specific actors.", + "DragDrop": "Drag and drop an actor to add it to the list", + "Actor": "Actor", + "PriceModifier": "Price Modifier (%)", + "SellModifier": "Sell Price Modifier (%)", + "Submit": "Submit price modifiers" + }, "Defaults": { "Title": "Item Pile Configuration", "Configure": "Item Pile", @@ -261,7 +284,12 @@ "PrivateTrade": "Private Trade", "ExpandTrade": "View full trade details" }, - "Setting": { + "Settings": { + "Configure": { + "Title": "Module Configuration", + "Label": "Configure Module", + "Hint": "You can configure Item Piles in this dialog." + }, "Reset": { "Title": "Reset settings to default", "Label": "Reset Item Piles Settings To Default", @@ -269,15 +297,15 @@ }, "ActorClass": { "Title": "Actor class type", - "Label": "This setting defines the type of actor that will be used for the default item pile actor that is created on first item drop. In the case of D&D5e, this is \"character\", as it does not have a dedicated loot actor type." + "Hint": "This setting defines the type of actor that will be used for the default item pile actor that is created on first item drop. In the case of D&D5e, this is \"character\", as it does not have a dedicated loot actor type." }, "Quantity": { "Title": "Item quantity attribute", - "Label": "Here you can configure what the attribute path is for each item's quantity. For example, in D&D5e system, each item's quantity is stored in the item's \"item.data.data.quantity\" attribute, so you'd put \"data.quantity\" in this setting." + "Hint": "Here you can configure what the attribute path is for each item's quantity. For example, in D&D5e system, each item's quantity is stored in the item's \"item.data.data.quantity\" attribute, so you'd put \"data.quantity\" in this setting." }, "Price": { "Title": "Item price attribute", - "Label": "Here you can configure what the attribute path is for each item's price. For example, in D&D5e system, each item's quantity is stored in the item's \"item.data.data.price\" attribute, so you'd put \"data.price\" in this setting." + "Hint": "Here you can configure what the attribute path is for each item's price. For example, in D&D5e system, each item's quantity is stored in the item's \"item.data.data.price\" attribute, so you'd put \"data.price\" in this setting." }, "Currencies": { "Title": "Currencies", diff --git a/src/api.js b/src/api.js index dd65571c..88c071c1 100644 --- a/src/api.js +++ b/src/api.js @@ -3,8 +3,6 @@ import { CONSTANTS } from "./constants.js"; const API = { - _SETTINGS_CACHE: {}, - /** * The actor class type used for the original item pile actor in this system * diff --git a/src/applications/components/Dialog.svelte b/src/applications/components/Dialog.svelte index daebe4c8..c8f69ed2 100644 --- a/src/applications/components/Dialog.svelte +++ b/src/applications/components/Dialog.svelte @@ -1,40 +1,48 @@
- {#if icon} + {#if icon}

- {/if} -

{header}

-

{content}

+ {/if} +

{header}

+ {#if Array.isArray(content)} + {#each content as part} +

{@html part}

+ {/each} + {:else} +

{@html content}

+ {/if}
diff --git a/src/applications/components/FilePicker.svelte b/src/applications/components/FilePicker.svelte new file mode 100644 index 00000000..6ef0a795 --- /dev/null +++ b/src/applications/components/FilePicker.svelte @@ -0,0 +1,44 @@ + + +
+ + +
+ + \ No newline at end of file diff --git a/src/applications/components/Tabs.svelte b/src/applications/components/Tabs.svelte index f1471458..cba62d23 100644 --- a/src/applications/components/Tabs.svelte +++ b/src/applications/components/Tabs.svelte @@ -1,20 +1,24 @@ @@ -27,12 +31,12 @@ } .item { - display:flex; + display: flex; flex-direction: row; align-items: center; } - .icon{ + .icon { margin-right: 0.25rem; } diff --git a/src/applications/editors/currencies/AttributeCurrencyList.svelte b/src/applications/editors/currencies/AttributeCurrencyList.svelte new file mode 100644 index 00000000..2fa76965 --- /dev/null +++ b/src/applications/editors/currencies/AttributeCurrencyList.svelte @@ -0,0 +1,135 @@ + + + + + + + + + + + + + {#each $attributesStore as { id, primary, name, exchange, path, img }, index (index)} + { if(dragging !== null) hovering = index; }} + on:drop|preventDefault={event => { attributeDrop(event, index) }} + > + + + + + + + + {/each} +
Primary{localize("ITEM-PILES.Applications.CurrenciesEditor.Name")}Exchange{localize("ITEM-PILES.Applications.CurrenciesEditor.Path")}{localize("ITEM-PILES.Applications.CurrenciesEditor.Icon")}
+ { attributeDragStart(event, index) }} + ondragover="return false" + > + { currencyStore.setPrimary(index) }}/> +
+ + \ No newline at end of file diff --git a/src/applications/editors/currencies/ItemCurrencyList.svelte b/src/applications/editors/currencies/ItemCurrencyList.svelte new file mode 100644 index 00000000..7f523069 --- /dev/null +++ b/src/applications/editors/currencies/ItemCurrencyList.svelte @@ -0,0 +1,165 @@ + + +
+ + + + + + + + + {#each $itemStore as { primary, name, exchange, img }, index (index)} + { if(dragging !== null) hovering = index; }} + on:drop|preventDefault={event => itemDrop(event, index)} + > + + + + + + + {/each} +
Primary{localize("ITEM-PILES.Applications.CurrenciesEditor.Name")}Exchange{localize("ITEM-PILES.Applications.CurrenciesEditor.Icon")}
+ itemDragStart(event, index)} + ondragover="return false" + > + { currencyStore.setPrimary(index, true) }}/> +
+ +
+ +

{localize("ITEM-PILES.Applications.CurrenciesEditor.DragDrop")}

+ +
+
+ + \ No newline at end of file diff --git a/src/applications/editors/currencies/currencies-editor-shell.svelte b/src/applications/editors/currencies/currencies-editor-shell.svelte new file mode 100644 index 00000000..8cac8212 --- /dev/null +++ b/src/applications/editors/currencies/currencies-editor-shell.svelte @@ -0,0 +1,80 @@ + + + + +
+ +

Attribute based currencies:

+ +

{localize("ITEM-PILES.Applications.CurrenciesEditor.Explanation")}

+ + +

Item based currencies:

+ +

{localize("ITEM-PILES.Applications.CurrenciesEditor.ItemExplanation")}

+ + + + + + \ No newline at end of file diff --git a/src/applications/editors/currencies/currencies-editor.js b/src/applications/editors/currencies/currencies-editor.js new file mode 100644 index 00000000..705f0a24 --- /dev/null +++ b/src/applications/editors/currencies/currencies-editor.js @@ -0,0 +1,48 @@ +import { TJSDialog } from '@typhonjs-fvtt/runtime/svelte/application'; +import CurrenciesEditorShell from './currencies-editor-shell.svelte'; + +export default class CurrenciesEditor extends TJSDialog { + + constructor(data = false, options, dialogData = {}) { + super({ + ...dialogData, + title: game.i18n.localize("ITEM-PILES.Applications.CurrenciesEditor.Title"), + content: { + class: CurrenciesEditorShell, + props: { + data + } + }, + buttons: { + save: { + icon: 'fas fa-save', + label: "ITEM-PILES.Applications.CurrenciesEditor.Submit", + onclick: "requestSubmit" + }, + no: { + icon: 'fas fa-times', + label: 'Cancel', + onclick: () => { + this.options.resolve(false); + this.close(); + } + } + }, + default: 'save', + autoClose: false, // Don't automatically close on button onclick. + zIndex: 102, + close: () => this.options.resolve?.(null) + }, { + width: 630, + height: "auto", + ...options, + }); + } + + static async show(data = false, options = {}, dialogData = {}) { + return new Promise((resolve) => { + options.resolve = resolve; + new this(data, options, dialogData).render(true, { focus: true }); + }) + } +} \ No newline at end of file diff --git a/src/applications/editors/currencies/currency-store.js b/src/applications/editors/currencies/currency-store.js new file mode 100644 index 00000000..eff537ee --- /dev/null +++ b/src/applications/editors/currencies/currency-store.js @@ -0,0 +1,38 @@ +import { writable, get } from 'svelte/store'; + +const currencyStore = writable([]); + +currencyStore.attributes = writable([]); +currencyStore.items = writable([]); +currencyStore.primary = writable(false) + +currencyStore.setPrimary = (index, item = false) => { + const attributes = get(currencyStore.attributes); + const items = get(currencyStore.items); + + items.forEach(item => { + item.primary = false; + }); + attributes.forEach(attr => { + attr.primary = false; + }); + + if(item){ + items[index].primary = true; + }else{ + attributes[index].primary = true; + } + currencyStore.primary.set(true); + + currencyStore.attributes.set(attributes); + currencyStore.items.set(items); +} + +currencyStore.export = () => { + return { + attributes: get(currencyStore.attributes), + items: get(currencyStore.items) + }; +} + +export { currencyStore }; \ No newline at end of file diff --git a/src/applications/editors/index.js b/src/applications/editors/index.js new file mode 100644 index 00000000..1458dae5 --- /dev/null +++ b/src/applications/editors/index.js @@ -0,0 +1,11 @@ +import CurrenciesEditor from "./currencies/currencies-editor.js"; +import ItemFiltersEditor from "./item-filters/item-filters-editor.js"; +import ItemSimilaritiesEditor from "./item-similarities-editor/item-similarities-editor.js"; +import PriceModifiersEditor from "./price-modifiers-editor/price-modifiers-editor.js"; + +export default { + "currencies": CurrenciesEditor, + "item-filters": ItemFiltersEditor, + "item-similarities": ItemSimilaritiesEditor, + "price-modifiers": PriceModifiersEditor +} \ No newline at end of file diff --git a/src/applications/editors/item-filters/item-filters-editor.js b/src/applications/editors/item-filters/item-filters-editor.js new file mode 100644 index 00000000..946d95f5 --- /dev/null +++ b/src/applications/editors/item-filters/item-filters-editor.js @@ -0,0 +1,48 @@ +import { TJSDialog } from '@typhonjs-fvtt/runtime/svelte/application'; +import ItemFiltersShell from './item-filters-editor.svelte'; + +export default class ItemFiltersEditor extends TJSDialog { + + constructor(data = false, options, dialogData = {}) { + super({ + ...dialogData, + title: "ITEM-PILES.Applications.FilterEditor.Title", + content: { + class: ItemFiltersShell, + props: { + itemFilters: data + } + }, + buttons: { + save: { + icon: 'fas fa-save', + label: "ITEM-PILES.Applications.FilterEditor.Submit", + onclick: "requestSubmit" + }, + no: { + icon: 'fas fa-times', + label: 'Cancel', + onclick: () => { + this.options.resolve(false); + this.close(); + } + } + }, + zIndex: 102, + default: 'save', + autoClose: false, // Don't automatically close on button onclick. + close: () => this.options.resolve(null) + }, { + width: 400, + height: "auto", + ...options + }); + } + + static async show(data = false, options = {}, dialogData = {}) { + return new Promise((resolve) => { + options.resolve = resolve; + new this(data, options, dialogData).render(true, { focus: true }); + }) + } +} \ No newline at end of file diff --git a/src/applications/editors/item-filters/item-filters-editor.svelte b/src/applications/editors/item-filters/item-filters-editor.svelte new file mode 100644 index 00000000..0a0b1612 --- /dev/null +++ b/src/applications/editors/item-filters/item-filters-editor.svelte @@ -0,0 +1,91 @@ + + + + +
+ +

{localize("ITEM-PILES.Applications.FilterEditor.Explanation")}

+ + + + + + + + {#each itemFilters as { path, filters }, index (index)} + + + + + + {/each} +
{localize("ITEM-PILES.Applications.FilterEditor.Path")}{localize("ITEM-PILES.Applications.FilterEditor.Filters")}
+ +
+ + + \ No newline at end of file diff --git a/src/applications/editors/item-similarities-editor/item-similarities-editor.js b/src/applications/editors/item-similarities-editor/item-similarities-editor.js new file mode 100644 index 00000000..9576606e --- /dev/null +++ b/src/applications/editors/item-similarities-editor/item-similarities-editor.js @@ -0,0 +1,40 @@ +import { TJSDialog } from '@typhonjs-fvtt/runtime/svelte/application'; +import ItemSimilaritiesShell from './item-similarities-editor.svelte'; + +export default class ItemSimilaritiesEditor extends TJSDialog { + + constructor(options, dialogData = {}) { + super({ + ...dialogData, + title: "ITEM-PILES.Applications.SimilaritiesEditor.Title", + content: { + class: ItemSimilaritiesShell, + }, + buttons: { + save: { + icon: 'fas fa-save', + label: "ITEM-PILES.Applications.SimilaritiesEditor.Submit", + onclick: "requestSubmit" + }, + no: { + icon: 'fas fa-times', + label: 'Cancel', + onclick: () => { + this.close(); + } + } + }, + zIndex: 102, + default: 'save', + autoClose: false, // Don't automatically close on button onclick. + }, { + width: 400, + height: "auto", + ...options + }); + } + + static async show(options = {}, dialogData = {}) { + return new this(options, dialogData).render(true, { focus: true }); + } +} \ No newline at end of file diff --git a/src/applications/editors/item-similarities-editor/item-similarities-editor.svelte b/src/applications/editors/item-similarities-editor/item-similarities-editor.svelte new file mode 100644 index 00000000..3473cb28 --- /dev/null +++ b/src/applications/editors/item-similarities-editor/item-similarities-editor.svelte @@ -0,0 +1,83 @@ + + + + +
+

{localize("ITEM-PILES.Applications.SimilaritiesEditor.Explanation_P1")}

+

{localize("ITEM-PILES.Applications.SimilaritiesEditor.Explanation_P2")}

+ + + + + + + {#each itemSimilarities as path, index (index)} + + + + + {/each} +
{localize("ITEM-PILES.Applications.SimilaritiesEditor.Path")}
+ +
+ + + \ No newline at end of file diff --git a/src/applications/editors/price-modifiers-editor/price-modifiers-editor.js b/src/applications/editors/price-modifiers-editor/price-modifiers-editor.js new file mode 100644 index 00000000..b3140402 --- /dev/null +++ b/src/applications/editors/price-modifiers-editor/price-modifiers-editor.js @@ -0,0 +1,56 @@ +import { TJSDialog } from '@typhonjs-fvtt/runtime/svelte/application'; +import PriceModifiersShell from './price-modifiers-editor.svelte'; + +export default class PriceModifiersEditor extends TJSDialog { + + constructor(priceModifiers, options, dialogData = {}) { + + priceModifiers = priceModifiers.map(data => { + data.actor = game.actors.get(data.actor); + if (!data.actor) return false; + return data; + }).filter(Boolean); + + super({ + ...dialogData, + title: "ITEM-PILES.Applications.PriceModifiersEditor.Title", + content: { + class: PriceModifiersShell, + props: { + priceModifiers + } + }, + buttons: { + save: { + icon: 'fas fa-save', + label: "ITEM-PILES.Applications.PriceModifiersEditor.Submit", + onclick: "requestSubmit" + }, + no: { + icon: 'fas fa-times', + label: 'Cancel', + onclick: () => { + this.options.resolve?.(false); + this.close(); + } + } + }, + zIndex: 102, + default: 'save', + autoClose: false, // Don't automatically close on button onclick. + close: () => this.options.resolve?.(false) + }, { + width: 600, + height: "auto", + ...options + }); + } + + static async show(data = false, options = {}, dialogData = {}) { + return new Promise((resolve) => { + options.resolve = resolve; + new this(data, options, dialogData).render(true, { focus: true }); + }) + } + +} \ No newline at end of file diff --git a/src/applications/editors/price-modifiers-editor/price-modifiers-editor.svelte b/src/applications/editors/price-modifiers-editor/price-modifiers-editor.svelte new file mode 100644 index 00000000..6e9cd8a4 --- /dev/null +++ b/src/applications/editors/price-modifiers-editor/price-modifiers-editor.svelte @@ -0,0 +1,140 @@ + + + + +
+ +

{localize("ITEM-PILES.Applications.PriceModifiersEditor.Explanation")}

+ +
+ + {#if priceModifiers.length} + + + + + + + + {#each priceModifiers as priceData, index (index)} + + + + + + + {/each} +
{localize("ITEM-PILES.Applications.PriceModifiersEditor.Actor")}{localize("ITEM-PILES.Applications.PriceModifiersEditor.PriceModifier")}{localize("ITEM-PILES.Applications.PriceModifiersEditor.SellModifier")}
+ {priceData.actor.name} + +
+ + +
+
+
+ + +
+
+ {/if} + +

{localize("ITEM-PILES.Applications.PriceModifiersEditor.DragDrop")}

+ +
+ +
+ + + \ No newline at end of file diff --git a/src/applications/settings/Setting.svelte b/src/applications/settings/Setting.svelte index eecb2073..710122c8 100644 --- a/src/applications/settings/Setting.svelte +++ b/src/applications/settings/Setting.svelte @@ -1,60 +1,60 @@
-
- -

{localize(data.hint)}

-
- -
+
+ +

{localize(data.hint)}

+
- {#if data.type === Boolean} +
- + {#if data.type === Boolean} - {:else if data.choices} + -
- -
+ {:else if data.choices} - {:else if data.type === Number} +
+ +
- + {:else if data.type === Number} - {:else} + -
- - {#if data.localize} - - {/if} -
+ {:else} +
+ + {#if data.localize} + {/if} -
+
+ + {/if} +
\ No newline at end of file diff --git a/src/applications/editors/item-filters/item-filters-editor.svelte b/src/applications/editors/item-filters/item-filters-editor.svelte index 0a0b1612..154c8f7b 100644 --- a/src/applications/editors/item-filters/item-filters-editor.svelte +++ b/src/applications/editors/item-filters/item-filters-editor.svelte @@ -1,42 +1,42 @@ @@ -44,22 +44,24 @@
-

{localize("ITEM-PILES.Applications.FilterEditor.Explanation")}

- - - - - - - - {#each itemFilters as { path, filters }, index (index)} - - - - - - {/each} -
{localize("ITEM-PILES.Applications.FilterEditor.Path")}{localize("ITEM-PILES.Applications.FilterEditor.Filters")}
+

{localize("ITEM-PILES.Applications.FilterEditor.Explanation")}

+ + + + + + + + {#each itemFilters as { path, filters }, index (index)} + + + + + + {/each} +
{localize("ITEM-PILES.Applications.FilterEditor.Path")}{localize("ITEM-PILES.Applications.FilterEditor.Filters")}
+ +
@@ -67,13 +69,13 @@ \ No newline at end of file diff --git a/src/applications/settings/settings-shell.svelte b/src/applications/settings/settings-shell.svelte index 6402d966..eb7bd2c1 100644 --- a/src/applications/settings/settings-shell.svelte +++ b/src/applications/settings/settings-shell.svelte @@ -5,7 +5,7 @@ import { localize } from '@typhonjs-fvtt/runtime/svelte/helper'; import { ApplicationShell } from '@typhonjs-fvtt/runtime/svelte/component/core'; - import * as lib from "../../lib/lib.js" + import * as helpers from "../../helpers/helpers.js" import Setting from "./Setting.svelte"; import SettingButton from "./SettingButton.svelte"; @@ -17,7 +17,7 @@ let form; let settings = Object.fromEntries(Object.entries(CONSTANTS.SETTINGS.GET_DEFAULT()).map(entry => { - entry[1].value = lib.getSetting(entry[0]); + entry[1].value = helpers.getSetting(entry[0]); return entry; })); @@ -30,7 +30,7 @@ async function updateSettings() { let settingsToUpdate = Object.entries(settings).filter(entry => userIsGM || entry[1].scope === "client"); for (let [key, setting] of settingsToUpdate) { - await lib.setSetting(key, setting.value); + await helpers.setSetting(key, setting.value); } application.close(); } diff --git a/src/helpers/actor-helpers.js b/src/helpers/actor-helpers.js new file mode 100644 index 00000000..e69de29b diff --git a/src/lib/lib.js b/src/helpers/helpers.js similarity index 100% rename from src/lib/lib.js rename to src/helpers/helpers.js diff --git a/src/settings.js b/src/settings.js index 3743adad..09136ec9 100644 --- a/src/settings.js +++ b/src/settings.js @@ -1,89 +1,91 @@ import { CONSTANTS } from "./constants.js"; -import * as lib from "./lib/lib.js"; +import * as helpers from "./helpers/helpers.js"; import { SYSTEMS } from "./systems.js"; import SettingsShim from "./applications/settings/settings-app.js"; export default function registerSettings() { - game.settings.registerMenu(CONSTANTS.MODULE_NAME, "configure-settings", { - name: "ITEM-PILES.Settings.Configure.Title", - label: "ITEM-PILES.Settings.Configure.Label", - hint: "ITEM-PILES.Settings.Configure.Hint", - icon: "fas fa-cog", - type: SettingsShim, - restricted: false - }); + game.settings.registerMenu(CONSTANTS.MODULE_NAME, "configure-settings", { + name: "ITEM-PILES.Settings.Configure.Title", + label: "ITEM-PILES.Settings.Configure.Label", + hint: "ITEM-PILES.Settings.Configure.Hint", + icon: "fas fa-cog", + type: SettingsShim, + restricted: false + }); - for (let [name, data] of Object.entries(CONSTANTS.SETTINGS.GET_DEFAULT())) { - game.settings.register(CONSTANTS.MODULE_NAME, name, data); - } + for (let [name, data] of Object.entries(CONSTANTS.SETTINGS.GET_DEFAULT())) { + game.settings.register(CONSTANTS.MODULE_NAME, name, data); + } - checkSystem(); + checkSystem(); } + async function applyDefaultSettings() { - const settings = CONSTANTS.SETTINGS.GET_DEFAULT(); - for (const [name, data] of Object.entries(settings)) { - await lib.setSetting(name, data.default); - } + const settings = CONSTANTS.SETTINGS.GET_DEFAULT(); + for (const [name, data] of Object.entries(settings)) { + await helpers.setSetting(name, data.default); + } } export async function checkSystem() { - await lib.wait(1000); - - if(lib.getSetting(CONSTANTS.SETTINGS.PRECONFIGURED_SYSTEM)) return; + await helpers.wait(1000); - if (!SYSTEMS.HAS_SYSTEM_SUPPORT) { + if (helpers.getSetting(CONSTANTS.SETTINGS.PRECONFIGURED_SYSTEM)) return; - if (lib.getSetting(CONSTANTS.SETTINGS.SYSTEM_NOT_FOUND_WARNING_SHOWN)) return; + if (!SYSTEMS.HAS_SYSTEM_SUPPORT) { - let settingsValid = true; - for (const [name, data] of Object.entries(CONSTANTS.SETTINGS.GET_DEFAULT())) { - settingsValid = settingsValid && lib.getSetting(name).length !== (new data.type).length - } + if (helpers.getSetting(CONSTANTS.SETTINGS.SYSTEM_NOT_FOUND_WARNING_SHOWN)) return; - if(settingsValid) return; + let settingsValid = true; + for (const [name, data] of Object.entries(CONSTANTS.SETTINGS.GET_DEFAULT())) { + settingsValid = settingsValid && helpers.getSetting(name).length !== (new data.type).length + } - await lib.setSetting(CONSTANTS.SETTINGS.SYSTEM_NOT_FOUND_WARNING_SHOWN, true); + if (settingsValid) return; - return Dialog.prompt({ - title: game.i18n.localize("ITEM-PILES.Dialogs.NoSystemFound.Title"), - content: dialogLayout({ message: game.i18n.localize("ITEM-PILES.Dialogs.NoSystemFound.Content") }), - callback: () => {} - }); + await helpers.setSetting(CONSTANTS.SETTINGS.SYSTEM_NOT_FOUND_WARNING_SHOWN, true); - } + return Dialog.prompt({ + title: game.i18n.localize("ITEM-PILES.Dialogs.NoSystemFound.Title"), + content: dialogLayout({ message: game.i18n.localize("ITEM-PILES.Dialogs.NoSystemFound.Content") }), + callback: () => { + } + }); - if (lib.getSetting(CONSTANTS.SETTINGS.SYSTEM_FOUND)) return; - - await lib.setSetting(CONSTANTS.SETTINGS.SYSTEM_FOUND, true); - - if (lib.getSetting(CONSTANTS.SETTINGS.SYSTEM_NOT_FOUND_WARNING_SHOWN)) { - - return new Dialog({ - title: game.i18n.localize("ITEM-PILES.Dialogs.SystemFound.Title"), - content: lib.dialogLayout({ - message: game.i18n.localize("ITEM-PILES.Dialogs.SystemFound.Content"), - icon: "fas fa-search" - }), - buttons: { - confirm: { - icon: '', - label: game.i18n.localize("ITEM-PILES.Dialogs.SystemFound.Confirm"), - callback: () => { - applyDefaultSettings(); - } - }, - cancel: { - icon: '', - label: game.i18n.localize("No") - } - }, - default: "cancel" - }).render(true); + } + + if (helpers.getSetting(CONSTANTS.SETTINGS.SYSTEM_FOUND)) return; + + await helpers.setSetting(CONSTANTS.SETTINGS.SYSTEM_FOUND, true); + + if (helpers.getSetting(CONSTANTS.SETTINGS.SYSTEM_NOT_FOUND_WARNING_SHOWN)) { + + return new Dialog({ + title: game.i18n.localize("ITEM-PILES.Dialogs.SystemFound.Title"), + content: helpers.dialogLayout({ + message: game.i18n.localize("ITEM-PILES.Dialogs.SystemFound.Content"), + icon: "fas fa-search" + }), + buttons: { + confirm: { + icon: '', + label: game.i18n.localize("ITEM-PILES.Dialogs.SystemFound.Confirm"), + callback: () => { + applyDefaultSettings(); + } + }, + cancel: { + icon: '', + label: game.i18n.localize("No") + } + }, + default: "cancel" + }).render(true); - } + } - return applyDefaultSettings(); + return applyDefaultSettings(); } \ No newline at end of file From 8c05c27d0e0264ed6acd6091e67b27d6e00849bc Mon Sep 17 00:00:00 2001 From: Haxxer Date: Sun, 19 Jun 2022 03:24:34 +0100 Subject: [PATCH 04/93] Reworks, reworks, reworks --- src/api.js | 458 +++++++++++++++--- .../currencies/ItemCurrencyList.svelte | 278 +++++------ .../currencies/currencies-editor-shell.svelte | 10 +- .../editors/currencies/currencies-editor.js | 2 +- .../item-filters/item-filters-editor.js | 2 +- .../item-filters/item-filters-editor.svelte | 6 +- .../item-similarities-editor.js | 2 +- .../item-similarities-editor.svelte | 8 +- .../price-modifiers-editor.js | 2 +- .../settings/SettingButton.svelte | 12 +- .../settings/settings-shell.svelte | 34 +- src/constants.js | 296 ----------- src/constants/constants.js | 81 ++++ src/constants/hooks.js | 65 +++ src/constants/settings.js | 226 +++++++++ src/helpers/actor-helpers.js | 0 src/helpers/helpers.js | 5 +- src/helpers/pile-utilities.js | 338 +++++++++++++ src/helpers/sharing-utilities.js | 333 +++++++++++++ src/helpers/utilities.js | 88 ++++ src/module.js | 11 +- src/settings.js | 21 +- src/socket.js | 132 +++++ src/transaction.js | 22 + 24 files changed, 1890 insertions(+), 542 deletions(-) delete mode 100644 src/constants.js create mode 100644 src/constants/constants.js create mode 100644 src/constants/hooks.js create mode 100644 src/constants/settings.js delete mode 100644 src/helpers/actor-helpers.js create mode 100644 src/helpers/pile-utilities.js create mode 100644 src/helpers/sharing-utilities.js create mode 100644 src/helpers/utilities.js create mode 100644 src/socket.js create mode 100644 src/transaction.js diff --git a/src/api.js b/src/api.js index 6f0d953d..051e99c3 100644 --- a/src/api.js +++ b/src/api.js @@ -1,61 +1,67 @@ -import * as helpers from "./helpers/helpers.js"; -import { CONSTANTS } from "./constants.js"; +import * as Helpers from "./helpers/helpers.js"; +import * as Utilities from "./helpers/utilities.js"; +import * as PileUtilities from "./helpers/pile-utilities.js"; +import * as SharingUtilities from "./helpers/sharing-utilities.js"; +import SETTINGS from "./constants/settings.js"; +import HOOKS from "./constants/hooks.js"; +import ItemPileSocket from "./socket.js"; +import { getItemsToAdd } from "./helpers/pile-utilities.js"; -const API = { +export default class API { /** * The actor class type used for the original item pile actor in this system * * @returns {String} */ - get ACTOR_CLASS_TYPE() { - return helpers.getSetting(CONSTANTS.SETTINGS.ACTOR_CLASS_TYPE); - }, + static get ACTOR_CLASS_TYPE() { + return Helpers.getSetting(SETTINGS.ACTOR_CLASS_TYPE); + } /** * The currencies used in this system * * @returns {Array<{name: String, currency: String, img: String}>} */ - get CURRENCIES() { - return helpers.getSetting(CONSTANTS.SETTINGS.CURRENCIES); - }, + static get CURRENCIES() { + return Helpers.getSetting(SETTINGS.CURRENCIES); + } /** * The attribute used to track the price of items in this system * * @returns {string} */ - get ITEM_PRICE_ATTRIBUTE() { - return helpers.getSetting(CONSTANTS.SETTINGS.ITEM_PRICE_ATTRIBUTE); - }, + static get ITEM_PRICE_ATTRIBUTE() { + return Helpers.getSetting(SETTINGS.ITEM_PRICE_ATTRIBUTE); + } /** * The attribute used to track the quantity of items in this system * * @returns {String} */ - get ITEM_QUANTITY_ATTRIBUTE() { - return helpers.getSetting(CONSTANTS.SETTINGS.ITEM_QUANTITY_ATTRIBUTE); - }, + static get ITEM_QUANTITY_ATTRIBUTE() { + return Helpers.getSetting(SETTINGS.ITEM_QUANTITY_ATTRIBUTE); + } /** * The filters for item types eligible for interaction within this system * * @returns {Array<{name: String, filters: String}>} */ - get ITEM_FILTERS() { - return helpers.getSetting(CONSTANTS.SETTINGS.ITEM_FILTERS); - }, + static get ITEM_FILTERS() { + return Helpers.getSetting(SETTINGS.ITEM_FILTERS); + } /** * The attributes for detecting item similarities * * @returns {Array} */ - get ITEM_SIMILARITIES() { - return helpers.getSetting(CONSTANTS.SETTINGS.ITEM_SIMILARITIES); - }, + static get ITEM_SIMILARITIES() { + return Helpers.getSetting(SETTINGS.ITEM_SIMILARITIES); + } /** * Sets the actor class type used for the original item pile actor in this system @@ -63,39 +69,68 @@ const API = { * @param {String} inClassType * @returns {Promise|Boolean} */ - setActorClassType(inClassType) { + static setActorClassType(inClassType) { if (typeof inClassType !== "string") { - throw helpers.custom_error("setActorTypeClass | inClassType must be of type string"); + throw Helpers.custom_error("setActorTypeClass | inClassType must be of type string"); } - return helpers.setSetting(CONSTANTS.SETTINGS.ACTOR_CLASS_TYPE, inClassType); - }, + return Helpers.setSetting(SETTINGS.ACTOR_CLASS_TYPE, inClassType); + } /** * Sets the currencies used in this system * - * @param {Array<{name: String, currency: String, img: String}>} inCurrencies + * @param {Object<{attributes: Array, items: Array}>} inCurrencies * @returns {Promise} */ - async setCurrencies(inCurrencies) { - if (!Array.isArray(inCurrencies)) { - throw helpers.custom_error("setCurrencies | inCurrencies must be of type array"); + static setCurrencies(inCurrencies) { + if (!Array.isArray(inCurrencies.attributes) || Array.isArray(inCurrencies.items)) { + throw Helpers.custom_error("setCurrencies | inCurrencies must be an object with the 'attributes' and 'items' keys, and both must be arrays"); } - inCurrencies.forEach(currency => { - if (typeof currency !== "object") { - throw helpers.custom_error("setCurrencies | each entry in the inCurrencies array must be of type object"); + + inCurrencies.attributes.forEach(attribute => { + if (typeof attribute !== "object") { + throw Helpers.custom_error("setCurrencies | each entry in the inCurrencies array must be of type object"); + } + if (typeof attribute.primary !== "boolean") { + throw Helpers.custom_error("setCurrencies | attribute.primary must be of type boolean"); + } + if (typeof attribute.name !== "string") { + throw Helpers.custom_error("setCurrencies | attribute.name must be of type string"); + } + if (typeof attribute.exchange !== "number") { + throw Helpers.custom_error("setCurrencies | attribute.exchange must be of type number"); + } + if (typeof attribute.path !== "string") { + throw Helpers.custom_error("setCurrencies | attribute.path must be of type string"); + } + if (attribute.img && typeof attribute.img !== "string") { + throw Helpers.custom_error("setCurrencies | attribute.img must be of type string"); + } + }); + + inCurrencies.items.forEach(item => { + if (typeof item !== "object") { + throw Helpers.custom_error("setCurrencies | each entry in the inCurrencies array must be of type object"); + } + if (typeof item.primary !== "boolean") { + throw Helpers.custom_error("setCurrencies | item.primary must be of type boolean"); } - if (typeof currency.name !== "string") { - throw helpers.custom_error("setCurrencies | currency.name must be of type string"); + if (typeof item.name !== "string") { + throw Helpers.custom_error("setCurrencies | item.name must be of type string"); } - if (typeof currency.currency !== "string") { - throw helpers.custom_error("setCurrencies | currency.path must be of type string"); + if (typeof item.type !== "string") { + throw Helpers.custom_error("setCurrencies | item.type must be of type string"); } - if (currency.img && typeof currency.img !== "string") { - throw helpers.custom_error("setCurrencies | currency.img must be of type string"); + if (typeof item.exchange !== "number") { + throw Helpers.custom_error("setCurrencies | item.exchange must be of type number"); } - }) - return helpers.setSetting(CONSTANTS.SETTINGS.CURRENCIES, inCurrencies); - }, + if (item.img && typeof item.img !== "string") { + throw Helpers.custom_error("setCurrencies | item.img must be of type string"); + } + }); + + return Helpers.setSetting(SETTINGS.CURRENCIES, inCurrencies); + } /** * Sets the attribute used to track the price of items in this system @@ -103,12 +138,12 @@ const API = { * @param {string} inAttribute * @returns {Promise} */ - async setItemPriceAttribute(inAttribute) { + static setItemPriceAttribute(inAttribute) { if (typeof inAttribute !== "string") { - throw helpers.custom_error("setItemPriceAttribute | inAttribute must be of type string"); + throw Helpers.custom_error("setItemPriceAttribute | inAttribute must be of type string"); } - return helpers.setSetting(CONSTANTS.SETTINGS.ITEM_PRICE_ATTRIBUTE, inAttribute); - }, + return Helpers.setSetting(SETTINGS.ITEM_PRICE_ATTRIBUTE, inAttribute); + } /** * Sets the attribute used to track the quantity of items in this system @@ -116,12 +151,12 @@ const API = { * @param {String} inAttribute * @returns {Promise} */ - async setItemQuantityAttribute(inAttribute) { + static setItemQuantityAttribute(inAttribute) { if (typeof inAttribute !== "string") { - throw helpers.custom_error("setItemQuantityAttribute | inAttribute must be of type string"); + throw Helpers.custom_error("setItemQuantityAttribute | inAttribute must be of type string"); } - return helpers.setSetting(CONSTANTS.SETTINGS.ITEM_QUANTITY_ATTRIBUTE, inAttribute); - }, + return Helpers.setSetting(SETTINGS.ITEM_QUANTITY_ATTRIBUTE, inAttribute); + } /** * Sets the items filters for interaction within this system @@ -129,20 +164,20 @@ const API = { * @param {Array<{path: String, filters: String}>} inFilters * @returns {Promise} */ - async setItemFilters(inFilters) { + static setItemFilters(inFilters) { if (!Array.isArray(inFilters)) { - throw helpers.custom_error("setItemFilters | inFilters must be of type array"); + throw Helpers.custom_error("setItemFilters | inFilters must be of type array"); } inFilters.forEach(filter => { if (typeof filter?.path !== "string") { - throw helpers.custom_error("setItemFilters | each entry in inFilters must have a \"path\" property with a value that is of type string"); + throw Helpers.custom_error("setItemFilters | each entry in inFilters must have a \"path\" property with a value that is of type string"); } if (typeof filter?.filters !== "string") { - throw helpers.custom_error("setItemFilters | each entry in inFilters must have a \"filters\" property with a value that is of type string"); + throw Helpers.custom_error("setItemFilters | each entry in inFilters must have a \"filters\" property with a value that is of type string"); } }); - return helpers.setSetting(CONSTANTS.SETTINGS.ITEM_FILTERS, inFilters); - }, + return Helpers.setSetting(SETTINGS.ITEM_FILTERS, inFilters); + } /** * Sets the attributes for detecting item similarities @@ -150,19 +185,320 @@ const API = { * @param {Array} inPaths * @returns {Promise} */ - async setItemSimilarities(inPaths) { + static setItemSimilarities(inPaths) { if (!Array.isArray(inPaths)) { - throw helpers.custom_error("setItemSimilarities | inPaths must be of type array"); + throw Helpers.custom_error("setItemSimilarities | inPaths must be of type array"); } inPaths.forEach(path => { if (typeof path !== "string") { - throw helpers.custom_error("setItemSimilarities | each entry in inPaths must be of type string"); + throw Helpers.custom_error("setItemSimilarities | each entry in inPaths must be of type string"); } }); - return helpers.setSetting(CONSTANTS.SETTINGS.ITEM_SIMILARITIES, inPaths); + return Helpers.setSetting(SETTINGS.ITEM_SIMILARITIES, inPaths); } -} + /* --- ITEM AND ATTRIBUTE METHODS --- */ + /** + * Adds item to an actor, increasing item quantities if matches were found + * + * @param {Actor/TokenDocument/Token} target The target to add an item to + * @param {Array} items An array of objects, with the key "item" being an item object or an Item class (the foundry class), with an optional key of "quantity" being the amount of the item to add + * @param {Boolean} [mergeSimilarItems=true] Whether to merge similar items based on their name and type + * @param {String/Boolean} [interactionId=false] The interaction ID of this action + * + * @returns {Promise} An array of objects, each containing the item that was added or updated, and the quantity that was added + */ + static addItems(target, items, { mergeSimilarItems = true, interactionId = false } = {}) { + + const targetUuid = Utilities.getUuid(target); + if (!targetUuid) throw Helpers.custom_error(`AddItems | Could not determine the UUID, please provide a valid target`, true) + + const itemsToAdd = [] + items.forEach(itemData => { + + let item = itemData; + if (itemData instanceof Item) { + item = itemData.toObject(); + } else if (itemData.item instanceof Item) { + item = itemData.item.toObject(); + } else if (itemData.item) { + item = itemData.item; + } + + if (itemData?.quantity !== undefined) { + setProperty(item, API.ITEM_QUANTITY_ATTRIBUTE, itemData?.quantity) + } + + const existingItems = mergeSimilarItems ? Utilities.findSimilarItem(itemsToAdd, item) : false; + if (existingItems) { + setProperty(existingItems, API.ITEM_QUANTITY_ATTRIBUTE, Utilities.getItemQuantity(existingItems) + Utilities.getItemQuantity(item)) + } else { + itemsToAdd.push(item); + } + + }); + + if (interactionId) { + if (typeof interactionId !== "string") throw Helpers.custom_error(`AddItems | interactionId must be of type string`); + } + + return ItemPileSocket.executeAsGM(ItemPileSocket.HANDLERS.ADD_ITEMS, targetUuid, itemsToAdd, game.user.id, { interactionId }); + } + + /** + * @private + */ + static async _addItems(targetUuid, items, userId, { interactionId = false } = {}) { + + const targetActor = Utilities.getActor(targetUuid); + + const { itemsAdded, itemsToUpdate, itemsToCreate } = PileUtilities.getItemsToAdd(targetActor, items); + + const hookResult = Hooks.call(HOOKS.ITEM.PRE_ADD, targetActor, itemsToCreate, itemsToUpdate, userId, interactionId); + if (hookResult === false) return; + + const itemsCreated = await targetActor.createEmbeddedDocuments("Item", itemsToCreate); + await targetActor.updateEmbeddedDocuments("Item", itemsToUpdate); + + itemsCreated.forEach(item => { + const itemObject = item.toObject() + itemsAdded.push({ + item: itemObject, + quantity: Utilities.getItemQuantity(itemObject) + }) + }); + + await ItemPileSocket.executeForEveryone(ItemPileSocket.HANDLERS.CALL_HOOK, HOOKS.ITEM.ADD, targetUuid, itemsAdded, userId, interactionId); + + const macroData = { + action: "addItems", + target: targetUuid, + items: itemsAdded, + userId: userId, + interactionId: interactionId + }; + + // await this._executeItemPileMacro(targetUuid, macroData); + + // await this.updateItemPileApplication(targetUuid); + + return itemsAdded; + + } + + + static getActorItems() { + + } + + /** + * Subtracts the quantity of items on an actor. If the quantity of an item reaches 0, the item is removed from the actor. + * + * @param {Actor/Token/TokenDocument} target The target to remove a items from + * @param {Array} items An array of objects each containing the item id (key "_id") and the quantity to remove (key "quantity"), or Items (the foundry class) or strings of IDs to remove all quantities of + * @param {String/Boolean} [interactionId=false] The interaction ID of this action + * + * @returns {Promise} An array of objects, each containing the item that was removed or updated, the quantity that was removed, and whether the item was deleted + */ + static async removeItems(target, items, { interactionId = false } = {}) { + + const targetUuid = Utilities.getUuid(target); + if (!targetUuid) throw Helpers.custom_error(`RemoveItems | Could not determine the UUID, please provide a valid target`, true); + + const targetActorItems = game.itempiles.getActorItems(target); + + items = items.map(itemData => { + + let item; + if (typeof itemData === "string" || itemData._id) { + const itemId = typeof itemData === "string" ? itemData : itemData._id; + item = targetActorItems.find(actorItem => actorItem.id === itemId); + if (!item) { + throw Helpers.custom_error(`RemoveItems | Could not find item with id "${itemId}" on target "${targetUuid}"`, true) + } + item = item.toObject(); + } else { + if (itemData.item instanceof Item) { + item = itemData.item.toObject(); + } else if (itemData instanceof Item) { + item = itemData.toObject(); + } else { + item = itemData.item; + } + let foundActorItem = targetActorItems.find(actorItem => actorItem.id === item._id); + if (!foundActorItem) { + throw Helpers.custom_error(`RemoveItems | Could not find item with id "${item._id}" on target "${targetUuid}"`, true) + } + } + + return { + _id: item._id, + quantity: itemData?.quantity ?? Utilities.getItemQuantity(item) + } + }); + + if (interactionId) { + if (typeof interactionId !== "string") throw Helpers.custom_error(`RemoveItems | interactionId must be of type string`); + } + + return ItemPileSocket.executeAsGM(ItemPileSocket.HANDLERS.REMOVE_ITEMS, targetUuid, items, game.user.id, { interactionId }); + } + + /** + * @private + */ + static async _removeItems(targetUuid, items, userId, { interactionId = false } = {}) { + + const targetActor = Utilities.getActor(targetUuid); + + const { itemsRemoved, itemsToUpdate, itemsToDelete } = PileUtilities.getItemsToRemove(targetActor, items); + + const hookResult = Hooks.call(HOOKS.ITEM.PRE_REMOVE, targetActor, itemsToUpdate, itemsToDelete, userId, interactionId); + if (hookResult === false) return; + + await targetActor.updateEmbeddedDocuments("Item", itemsToUpdate); + await targetActor.deleteEmbeddedDocuments("Item", itemsToDelete); + + await ItemPileSocket.executeForEveryone(ItemPileSocket.HANDLERS.CALL_HOOK, HOOKS.ITEM.REMOVE, targetUuid, itemsRemoved, userId, interactionId); + + const macroData = { + action: "removeItems", + target: targetUuid, + items: itemsRemoved, + userId: userId, + interactionId: interactionId + }; + + // await API._executeItemPileMacro(targetUuid, macroData); + // + // const shouldBeDeleted = await API._checkItemPileShouldBeDeleted(targetUuid); + // + // await API.updateItemPileApplication(targetUuid, shouldBeDeleted); + // + // if (shouldBeDeleted) { + // await API._deleteItemPile(targetUuid); + // } + + return itemsRemoved; + + } + + + /** + * Transfers items from the source to the target, subtracting a number of quantity from the source's item and adding it to the target's item, deleting items from the source if their quantity reaches 0 + * + * @param {Actor/Token/TokenDocument} source The source to transfer the items from + * @param {Actor/Token/TokenDocument} target The target to transfer the items to + * @param {Array} items An array of objects each containing the item id (key "_id") and the quantity to transfer (key "quantity"), or Items (the foundry class) or strings of IDs to transfer all quantities of + * @param {String/Boolean} [interactionId=false] The interaction ID of this action + * + * @returns {Promise} An array of objects, each containing the item that was added or updated, and the quantity that was transferred + */ + async transferItems(source, target, items, { interactionId = false } = {}) { + + const sourceUuid = Utilities.getUuid(source); + if (!sourceUuid) throw Helpers.custom_error(`TransferItems | Could not determine the UUID, please provide a valid source`, true) + + const sourceActorItems = API.getActorItems(source); + + items = items.map(itemData => { + + let item; + if (typeof itemData === "string" || itemData._id) { + const itemId = typeof itemData === "string" ? itemData : itemData._id; + item = sourceActorItems.find(actorItem => actorItem.id === itemId); + if (!item) { + throw Helpers.custom_error(`TransferItems | Could not find item with id "${itemId}" on target "${sourceUuid}"`, true) + } + item = item.toObject(); + } else if (itemData instanceof Item) { + item = itemData.toObject(); + } else if (itemData.item instanceof Item) { + item = itemData.item.toObject(); + } else { + item = itemData.item; + } + + let foundActorItem = sourceActorItems.find(actorItem => actorItem.id === item._id); + if (!foundActorItem) { + throw Helpers.custom_error(`TransferItems | Could not find item with id "${item._id}" on target "${sourceUuid}"`, true) + } + + return { + _id: item._id, + quantity: Math.max((itemData?.quantity ?? 0) ?? Utilities.getItemQuantity(itemData)) + } + }); + + const targetUuid = Utilities.getUuid(target); + if (!targetUuid) throw Helpers.custom_error(`TransferItems | Could not determine the UUID, please provide a valid target`, true) + + if (interactionId) { + if (typeof interactionId !== "string") throw Helpers.custom_error(`TransferItems | interactionId must be of type string`); + } + + return ItemPileSocket.executeAsGM(ItemPileSocket.HANDLERS.TRANSFER_ITEMS, sourceUuid, targetUuid, items, game.user.id, { interactionId }); + + } + + /** + * @private + */ + async _transferItems(sourceUuid, targetUuid, items, userId, { interactionId = false } = {}) { + + const sourceActor = Utilities.fromUuidFast(sourceUuid); + const targetActor = Utilities.fromUuidFast(targetUuid); + + const sourceUpdates = PileUtilities.getItemsToRemove(sourceUuid, items); + const targetUpdates = PileUtilities.getItemsToAdd(targetActor, sourceUpdates.itemsRemoved); + + const hookResult = Hooks.call(HOOKS.ITEM.PRE_TRANSFER, sourceActor, targetActor, sourceUpdates, targetUpdates, interactionId); + if (hookResult === false) return; + + await targetActor.updateEmbeddedDocuments("Item", sourceUpdates.itemsToUpdate); + await targetActor.deleteEmbeddedDocuments("Item", sourceUpdates.itemsToDelete); + + const itemsCreated = await targetActor.createEmbeddedDocuments("Item", targetUpdates.itemsToCreate); + await targetActor.updateEmbeddedDocuments("Item", targetUpdates.itemsToUpdate); + + itemsCreated.forEach(item => { + const itemObject = item.toObject() + targetUpdates.itemsAdded.push({ + item: itemObject, + quantity: Utilities.getItemQuantity(itemObject) + }) + }); + + await ItemPileSocket.executeForEveryone(ItemPileSocket.HANDLERS.CALL_HOOK, HOOKS.ITEM.TRANSFER, sourceUuid, targetUuid, targetUpdates.itemsAdded, userId, interactionId); + + const macroData = { + action: "transferItems", + source: sourceUuid, + target: targetUuid, + itemsAdded: targetUpdates.itemsAdded, + userId: userId, + interactionId: interactionId + }; + await API._executeItemPileMacro(sourceUuid, macroData); + await API._executeItemPileMacro(targetUuid, macroData); + + const shouldBeDeleted = await API._checkItemPileShouldBeDeleted(sourceUuid); + await API.updateItemPileApplication(sourceUuid, shouldBeDeleted); + await API.updateItemPileApplication(targetUuid); + + const itemPile = await fromUuid(sourceUuid); + + if (shouldBeDeleted) { + await API._deleteItemPile(sourceUuid); + } else if (PileUtilities.isItemPileEmpty(itemPile)) { + await SharingUtilities.clearItemPileSharingData(itemPile); + } else { + await SharingUtilities.setItemPileSharingData(sourceUuid, targetUuid, { items: targetUpdates.itemsAdded }); + } + + return targetUpdates.itemsAdded; + + } -export default API; \ No newline at end of file +} \ No newline at end of file diff --git a/src/applications/editors/currencies/ItemCurrencyList.svelte b/src/applications/editors/currencies/ItemCurrencyList.svelte index 7f523069..b694dba1 100644 --- a/src/applications/editors/currencies/ItemCurrencyList.svelte +++ b/src/applications/editors/currencies/ItemCurrencyList.svelte @@ -1,165 +1,171 @@
- - - - - - - - - {#each $itemStore as { primary, name, exchange, img }, index (index)} - { if(dragging !== null) hovering = index; }} - on:drop|preventDefault={event => itemDrop(event, index)} - > - - - - - - - {/each} -
Primary{localize("ITEM-PILES.Applications.CurrenciesEditor.Name")}Exchange{localize("ITEM-PILES.Applications.CurrenciesEditor.Icon")}
- itemDragStart(event, index)} - ondragover="return false" - > - { currencyStore.setPrimary(index, true) }}/> -
- -
- -

{localize("ITEM-PILES.Applications.CurrenciesEditor.DragDrop")}

- -
+ + + + + + + + + {#each $itemStore as { primary, name, exchange, img }, index (index)} + { if(dragging !== null) hovering = index; }} + on:drop|preventDefault={event => itemDrop(event, index)} + > + + + + + + + {/each} +
Primary{localize("ITEM-PILES.Applications.CurrenciesEditor.Name")}Exchange{localize("ITEM-PILES.Applications.CurrenciesEditor.Icon")}
+ itemDragStart(event, index)} + ondragover="return false" + > + { currencyStore.setPrimary(index, true) }}/> + + + + +
+ +
+ +

{localize("ITEM-PILES.Applications.CurrenciesEditor.DragDrop")}

+ +
\ No newline at end of file diff --git a/src/applications/editors/currencies/currencies-editor-shell.svelte b/src/applications/editors/currencies/currencies-editor-shell.svelte index 167a4e1b..d9130033 100644 --- a/src/applications/editors/currencies/currencies-editor-shell.svelte +++ b/src/applications/editors/currencies/currencies-editor-shell.svelte @@ -1,5 +1,5 @@
@@ -17,7 +27,7 @@
- diff --git a/src/applications/settings/settings-shell.svelte b/src/applications/settings/settings-shell.svelte index eb7bd2c1..975872c6 100644 --- a/src/applications/settings/settings-shell.svelte +++ b/src/applications/settings/settings-shell.svelte @@ -1,5 +1,5 @@ + +
+ +
+ + +
+ +
+
+ {attribute.name} + x{attribute.quantity} +
+
+ +
+ + {#if $store.editQuantities} + +
+ +
+ + {:else} + + {#if attribute.shareLeft} +
+ + + / {attribute.shareLeft} + +
+ {:else} + {localize(`ITEM-PILES.Inspect.${$store.pileData.shareCurrenciesEnabled ? "NoShareLeft" : "NoneLeft"}`)} + {/if} + {/if} + +
+ + {#if !$store.editQuantities} + + + + + {/if} + +
+ + \ No newline at end of file diff --git a/src/applications/item-pile-inventory/AttributeList.svelte b/src/applications/item-pile-inventory/AttributeList.svelte new file mode 100644 index 00000000..c6155f4e --- /dev/null +++ b/src/applications/item-pile-inventory/AttributeList.svelte @@ -0,0 +1,39 @@ + + +
+ + {#if !!attributes.length} + +
+

{localize("ITEM-PILES.Currencies")}:

+ {#if $store.recipientActor} + + + {localize("ITEM-PILES.Inspect.AddCurrency")} + + {/if} +
+ +
+ {#each attributes as attribute, index (attribute.path)} + {#if attribute.visible} + + {/if} + {/each} +
+ + {/if} + +
\ No newline at end of file diff --git a/src/applications/item-pile-inventory/ItemEntry.svelte b/src/applications/item-pile-inventory/ItemEntry.svelte new file mode 100644 index 00000000..5eb3f11c --- /dev/null +++ b/src/applications/item-pile-inventory/ItemEntry.svelte @@ -0,0 +1,162 @@ + + +
+ +
+ + +
+ +
+
+ + {item.name} + (x{item.quantity}) +
+
+ +
+ + {#if $store.editQuantities} + +
+ +
+ + {:else} + + {#if item.shareLeft} +
+ + + + / {item.shareLeft} + +
+ {:else} + {localize(`ITEM-PILES.Inspect.${$store.pileData.shareItemsEnabled ? "NoShareLeft" : "NoneLeft"}`)} + {/if} + {/if} + +
+ + {#if !$store.editQuantities} + + + + + + {/if} + +
+ + \ No newline at end of file diff --git a/src/applications/item-pile-inventory/ItemList.svelte b/src/applications/item-pile-inventory/ItemList.svelte new file mode 100644 index 00000000..515ebb12 --- /dev/null +++ b/src/applications/item-pile-inventory/ItemList.svelte @@ -0,0 +1,64 @@ + + +
+ + {#if !!$items.length} + +

{localize("ITEM-PILES.Items")}:

+ + {#each $items as item (item.id)} + {#if item.visible} + + {/if} + {/each} + + {/if} + +
+ + + \ No newline at end of file diff --git a/src/applications/item-pile-inventory/item-pile-inventory-shell.svelte b/src/applications/item-pile-inventory/item-pile-inventory-shell.svelte new file mode 100644 index 00000000..f17aa2a7 --- /dev/null +++ b/src/applications/item-pile-inventory/item-pile-inventory-shell.svelte @@ -0,0 +1,388 @@ + + + + +
+ {#if showImage} + + {/if} +
+ + + +
+ +
+ + {#if deleted} +

{localize("ITEM-PILES.Inspect.Destroyed")}

+ {:else} + + {#if editQuantities} +

{localize("ITEM-PILES.Inspect.Owner")}

+ {:else} +

+ {localize("ITEM-PILES.Inspect.AsActor", { actorName: recipientActor.name })} + { changingActor = true }} class:hidden={changingActor}>Change actor. + +

+ {/if} + + {#if isPileEmpty} +

{localize("ITEM-PILES.Inspect.Empty")}

+ {:else} + {#if showSearch} +
+ + { store.filterByName(search) }, 250)}> +
+ {/if} + {/if} + +
+ + {#if scrolled} +
+ {/if} + + + + {#if !!items.length && !!currencies.length} +
+ {/if} + + + +
+ + {/if} + + +
+ {#if !recipient && editQuantities} + + {/if} + + {#if pileData.splitAllEnabled && (recipient || game.user.isGM) && (hasSplittableItems || hasSplittableCurrencies)} + + {/if} + + {#if recipient && pileData.takeAllEnabled} + + {/if} + + {#if pileData.isContainer && !overrides.remove} + + {/if} + + +
+ +
+ +
+
+ + \ No newline at end of file diff --git a/src/applications/item-pile-inventory/item-pile-inventory.js b/src/applications/item-pile-inventory/item-pile-inventory.js new file mode 100644 index 00000000..599a560f --- /dev/null +++ b/src/applications/item-pile-inventory/item-pile-inventory.js @@ -0,0 +1,95 @@ +import { SvelteApplication } from '@typhonjs-fvtt/runtime/svelte/application'; +import ItemPileInventoryShell from "./item-pile-inventory-shell.svelte"; +import * as Utilities from "../../helpers/utilities.js"; +import CONSTANTS from "../../constants/constants.js"; + +//import ItemPileConfig from "../item-pile-config/item-pile-config"; + +export class ItemPileInventory extends SvelteApplication { + + /** + * + * @param pile + * @param recipient + * @param overrides + * @param options + * @param dialogData + */ + constructor(pile, recipient, overrides = {}, options = {}, dialogData = {}) { + + super({ + id: `item-pile-inventory-${pile.id}`, + title: pile.name, + zIndex: 100, + svelte: { + class: ItemPileInventoryShell, + target: document.body, + props: { + pileActor: Utilities.getDocument(pile), + recipient: Utilities.getDocument(recipient), + overrides + } + }, + ...options + }, dialogData); + + this.pile = pile; + + Hooks.callAll(HOOKS.PILE.OPEN_INVENTORY, this, pile, recipient, overrides); + + } + + /** @inheritdoc */ + static get defaultOptions() { + return foundry.utils.mergeObject(super.defaultOptions, { + closeOnSubmit: false, + classes: ["app window-app sheet"], + width: 550, + height: "auto", + }); + } + + static getActiveApp(id) { + return Object.values(ui.windows).find(app => app.id === `item-pile-inventory-${id}`); + } + + static async show(pile, recipient = false, overrides = {}, options = {}, dialogData = {}) { + let pileActor = pile?.actor ?? pile; + const app = this.getActiveApp(pileActor.id) + if (app) return app.render(false, { focus: true }); + return new Promise((resolve) => { + options.resolve = resolve; + new this(pileActor, recipient, overrides, options, dialogData).render(true, { focus: true }); + }) + } + + /* -------------------------------------------- */ + + /** @override */ + _getHeaderButtons() { + let buttons = super._getHeaderButtons(); + const canConfigure = game.user.isGM; + if (canConfigure) { + buttons = [ + { + label: "ITEM-PILES.Inspect.OpenSheet", + class: "item-piles-open-actor-sheet", + icon: "fas fa-user", + onclick: () => { + this.pile.sheet.render(true, { focus: true }); + } + }, + { + label: "ITEM-PILES.HUD.Configure", + class: "item-piles-configure-pile", + icon: "fas fa-box-open", + onclick: () => { + //ItemPileConfig.show(this.pile); + } + }, + ].concat(buttons); + } + return buttons + } + +} \ No newline at end of file diff --git a/src/applications/item-pile-inventory/item-pile-store.js b/src/applications/item-pile-inventory/item-pile-store.js new file mode 100644 index 00000000..6fd92bd6 --- /dev/null +++ b/src/applications/item-pile-inventory/item-pile-store.js @@ -0,0 +1,113 @@ +import { writable, get } from 'svelte/store'; +import * as Utilities from "../../helpers/utilities.js"; +import * as SharingUtilities from "../../helpers/sharing-utilities.js"; +import * as PileUtilities from "../../helpers/pile-utilities.js"; + +export default class ItemPileStore { + + constructor(pileActor, recipientActor) { + this.pileActor = pileActor; + this.recipientActor = recipientActor; + this.pileData = PileUtilities.getActorFlagData(pileActor) + this.attributes = writable([]); + this.items = writable([]); + this.editQuantities = writable(false); + } + + updateItems() { + + const items = get(this.items); + + // Get all the items on the actor right now + const newItems = SharingUtilities.getItemPileItemsForActor(this.pileActor, this.recipientActor); + + if (!items.length) { + this.items.set(newItems); + return; + } + + // If there are none, stop displaying them in the UI + if (!newItems.length) { + this.items.set([]); + return; + } + + // Otherwise, loop through the old items + for (let oldItem of items) { + + // If we find an item that was previously listed + const foundItem = Utilities.findSimilarItem(newItems, oldItem); + + // We update the previously listed attribute to reflect this + oldItem.quantity = foundItem ? foundItem.quantity : 0; + oldItem.shareLeft = foundItem ? foundItem.shareLeft : 0; + oldItem.currentQuantity = foundItem ? Math.min(oldItem.currentQuantity, foundItem.shareLeft) : 0; + + // We then remove it from the incoming list, as we already have it + if (foundItem) { + newItems.splice(newItems.indexOf(foundItem), 1) + } + + } + + // Add the new items to the list + this.items.set(items.concat(newItems)); + + } + + updateCurrencies() { + + const attributes = get(this.attributes); + + // Get all the attributes on the actor right now + const newAttributes = SharingUtilities.getItemPileAttributesForActor(this.pileActor, this.recipientActor); + + if (!attributes) { + this.attributes.set(newAttributes); + return; + } + + // If there are none, stop displaying them in the UI + if (!newAttributes.length) { + this.attributes.set([]); + return; + } + + // Otherwise, loop through the old attributes + for (let oldCurrency of attributes) { + + // If we find attribute that was previously listed + const foundAttribute = newAttributes.find(newCurrency => newCurrency.path === oldCurrency.path); + + // We update the previously listed attribute to reflect this + oldCurrency.quantity = foundAttribute ? foundAttribute.quantity : 0; + oldCurrency.shareLeft = foundAttribute ? foundAttribute.shareLeft : 0; + oldCurrency.currentQuantity = foundAttribute ? Math.min(oldCurrency.currentQuantity, foundAttribute.shareLeft) : 0; + + if (foundAttribute) { + // We then remove it from the incoming list, as we already have it + newAttributes.splice(newAttributes.indexOf(foundAttribute), 1) + } + + } + + // Add the new attributes to the list + this.attributes.set(attributes.concat(newAttributes)); + + } + + filterByName(search) { + const items = get(this.items); + const attributes = get(this.attributes); + + items.forEach(item => { + item.visible = !search || item.name.toLowerCase().includes(search.toLowerCase()); + }); + attributes.forEach(attributes => { + attributes.visible = !search || attributes.name.toLowerCase().includes(search.toLowerCase()); + }); + + this.items.set(items); + this.attributes.set(attributes); + } +} \ No newline at end of file diff --git a/src/helpers/pile-utilities.js b/src/helpers/pile-utilities.js index 55c40685..50e733b6 100644 --- a/src/helpers/pile-utilities.js +++ b/src/helpers/pile-utilities.js @@ -21,6 +21,26 @@ export function isValidItemPile(target, data = false) { return targetActor && !targetActor.destroyed && (data || getActorFlagData(targetActor))?.enabled; } +export function isItemPileContainer(target) { + const targetActor = Utilities.getActor(target); + const pileData = getActorFlagData(targetActor); + return pileData?.enabled && pileData?.isContainer; +} + +export function isItemPileClosed(target) { + const targetActor = Utilities.getActor(target); + const pileData = getActorFlagData(targetActor); + if (!pileData?.enabled || !pileData?.isContainer) return false; + return pileData.closed; +} + +export function isItemPileLocked(target) { + const targetActor = Utilities.getActor(target); + const pileData = getActorFlagData(targetActor); + if (!pileData?.enabled || !pileData?.isContainer) return false; + return pileData.locked; +} + export function getActorItems(target, { itemFilters = false, itemCurrencies = true } = {}) { const targetActor = Utilities.getActor(target); const pileItemFilters = itemFilters ? itemFilters : getActorItemFilters(targetActor); diff --git a/src/module.js b/src/module.js index 12ac83c9..1fbe1fc7 100644 --- a/src/module.js +++ b/src/module.js @@ -14,7 +14,6 @@ Hooks.once("init", async () => { Hooks.once("ready", () => { Socket.initialize(); - new SettingsShim().render(true); }) Hooks.on("reset-item-pile-settings", async () => { diff --git a/src/private-api.js b/src/private-api.js index 83a6c7a7..1f1e8dc0 100644 --- a/src/private-api.js +++ b/src/private-api.js @@ -433,7 +433,6 @@ export default class PrivateAPI { * @param {Object} [itemData=false] * * @returns {Promise<{sourceUuid: string/boolean, targetUuid: string/boolean, position: object/boolean, itemsDropped: array }>} - * @private */ static async _dropItems({ userId, @@ -680,9 +679,10 @@ export default class PrivateAPI { static async _updateItemPile(targetUuid, newData, { interactingTokenUuid = false, tokenSettings = false } = {}) { - const target = Utilities.getActor(targetUuid); + const targetActor = Utilities.getActor(targetUuid); + const interactingToken = Utilities.getToken(interactingTokenUuid); - const oldData = PileUtilities.getActorFlagData(target); + const oldData = PileUtilities.getActorFlagData(targetActor); const data = foundry.utils.mergeObject( foundry.utils.duplicate(oldData), @@ -691,9 +691,12 @@ export default class PrivateAPI { const diff = foundry.utils.diffObject(oldData, data); + const hookResult = Hooks.call(HOOKS.PILE.PRE_UPDATE, targetActor, data, interactingToken, tokenSettings); + if (hookResult === false) return false; + await Helpers.wait(15); - await PileUtilities.updateItemPileData(target, data, tokenSettings); + await PileUtilities.updateItemPileData(targetActor, data, tokenSettings); if (data.enabled && data.isContainer) { if (diff?.closed === true) { @@ -772,7 +775,6 @@ export default class PrivateAPI { * * @param {TokenDocument} tokenDocument * @return {Promise} - * @private */ static async _initializeItemPile(tokenDocument) { @@ -783,18 +785,18 @@ export default class PrivateAPI { if (Helpers.getSetting("preloadFiles")) { await Promise.allSettled(Object.entries(pileData).map(entry => { return new Promise(async (resolve) => { - const [key, value] = entry; - if (preloadedFiles.has(value) || !value) { - return resolve(); - } - if (key.toLowerCase().includes("image")) { - preloadedFiles.add(value); - Helpers.debug(`Preloaded image: ${value}`); - await loadTexture(value); - } else if (key.toLowerCase().includes("sound")) { - preloadedFiles.add(value); - Helpers.debug(`Preloaded sound: ${value}`); - await AudioHelper.preloadSound(value); + const [property, filePath] = entry; + const isImage = property.toLowerCase().includes("image"); + const isSound = property.toLowerCase().includes("sound"); + if ((!isImage && !isSound) || (!filePath || preloadedFiles.has(filePath))) return resolve(); + preloadedFiles.add(filePath); + + if (isImage) { + await loadTexture(filePath); + Helpers.debug(`Preloaded image: ${filePath}`); + } else if (isSound) { + Helpers.debug(`Preloaded sound: ${filePath}`); + await AudioHelper.preloadSound(filePath); } return resolve(); }); @@ -858,7 +860,6 @@ export default class PrivateAPI { * @param {Object} data * @param {Actor/Token/TokenDocument/Boolean}[target=false] * @return {Promise/Boolean} - * @private */ static async _dropData(canvas, data, { target = false } = {}) { diff --git a/src/transaction.js b/src/transaction.js deleted file mode 100644 index 932de203..00000000 --- a/src/transaction.js +++ /dev/null @@ -1,22 +0,0 @@ -class Transaction { - - constructor(party_1, party_2) { - this.id = randomID(); - this.privateId = randomID(); - this.party_1 = party_1; - this.party_2 = party_2; - this.party_1_offers = []; - this.party_2_offers = []; - } - - - handshake() { - - } - - commit() { - - - } - -} \ No newline at end of file From 806a428fbfc154eb54441f994c636c37101ed066 Mon Sep 17 00:00:00 2001 From: Haxxer Date: Sun, 19 Jun 2022 21:16:58 +0100 Subject: [PATCH 07/93] Item pile config refactored --- languages/en.json | 18 +- src/applications/components/Tabs.svelte | 58 +- .../currencies/AttributeCurrencyList.svelte | 162 ++--- .../currencies/ItemCurrencyList.svelte | 11 +- .../currencies/currencies-editor-shell.svelte | 16 +- .../editors/currencies/currency-store.js | 62 +- .../item-pile-config/item-pile-config.js | 59 ++ .../item-pile-config/item-pile-config.svelte | 559 ++++++++++++++++++ .../item-pile-inventory-shell.svelte | 2 +- .../settings/settings-shell.svelte | 6 +- src/module.js | 7 + src/styles/styles.scss | 408 +++++++++++++ 12 files changed, 1197 insertions(+), 171 deletions(-) create mode 100644 src/applications/item-pile-config/item-pile-config.js create mode 100644 src/applications/item-pile-config/item-pile-config.svelte create mode 100644 src/styles/styles.scss diff --git a/languages/en.json b/languages/en.json index 02d4275b..6901bb4f 100644 --- a/languages/en.json +++ b/languages/en.json @@ -141,15 +141,11 @@ }, "CurrenciesEditor": { "Title": "Currencies Editor", - "AttributeTitle": "Attribute Based Currencies", "Explanation": "Here you can define which currencies on characters that can be picked up from item piles, such as currencies. In D&D5e, currencies exist on actors on the attribute path \"actor.data.data.currency.gp\", so you'd add your own with the name \"Gold Coins\" and attribute path \"data.currency.gp\".", - "ItemTitle": "Item Based Currencies", "ItemExplanation": "In some systems, currencies are actual items in character inventories. Drag and drop any items into the lower part here to add a new item-based currency.", - "DragDrop": "Drag and drop an item to add it to the list", - "Name": "Currency name", "Path": "Currency path", "Icon": "Currency icon", @@ -181,7 +177,7 @@ "SellModifier": "Sell Price Modifier (%)", "Submit": "Submit price modifiers" }, - "Defaults": { + "ItemPileConfig": { "Title": "Item Pile Configuration", "Configure": "Item Pile", "Update": "Update Item Pile", @@ -248,6 +244,18 @@ "InactivePlayersExplanation": "Only players who are active when this item pile is looted will be given their share of the pile.", "ResetSharingData": "Reset Sharing Data", "ResetSharingDataExplanation": "If the Item Pile's content was manually changed while people were looting it, the sharing data may become out of sync with the players' actual shares. Pressing this button will reset everyone's share in this pile." + }, + "Merchant": { + "Title": "Merchant Settings", + "Enabled": "Is Merchant", + "EnabledExplanation": "Players cannot pick up items from merchants, but must instead purchase them", + "OpenTimes": "Open Times", + "OpenTimesExplanation": "When enabled, the merchant is can only be interacted by players at certain times of the day.", + "PriceModifier": "Price Modifier (%)", + "SellModifier": "Sell Price Modifier (%)", + "ActorPriceModifiers": "Per-Actor Override Price Modifiers", + "ActorPriceModifiersExplanation": "Here you can configure if certain specific actors should have different price modifiers than the price modifiers above.", + "ConfigureActorPriceModifiers": "Configure Override Price Modifiers." } } }, diff --git a/src/applications/components/Tabs.svelte b/src/applications/components/Tabs.svelte index cba62d23..9ecc2bae 100644 --- a/src/applications/components/Tabs.svelte +++ b/src/applications/components/Tabs.svelte @@ -3,23 +3,23 @@ export let activeTab; export let tabs; - + console.log(tabs, activeTab) + + - + \ No newline at end of file diff --git a/src/applications/editors/currencies/AttributeCurrencyList.svelte b/src/applications/editors/currencies/AttributeCurrencyList.svelte index 2fa76965..a54fd3af 100644 --- a/src/applications/editors/currencies/AttributeCurrencyList.svelte +++ b/src/applications/editors/currencies/AttributeCurrencyList.svelte @@ -1,98 +1,104 @@ - - - - - - - + + + + + + + + + {#each $attributesStore as { id, primary, name, exchange, path, img }, index (index)} + { if(dragging !== null) hovering = index; }} + on:drop|preventDefault={event => { attributeDrop(event, index) }} + > + + + + + + - {#each $attributesStore as { id, primary, name, exchange, path, img }, index (index)} - { if(dragging !== null) hovering = index; }} - on:drop|preventDefault={event => { attributeDrop(event, index) }} - > - - - - - - - - {/each} + {/each}
Primary{localize("ITEM-PILES.Applications.CurrenciesEditor.Name")}Exchange{localize("ITEM-PILES.Applications.CurrenciesEditor.Path")}{localize("ITEM-PILES.Applications.CurrenciesEditor.Icon")}
Primary{localize("ITEM-PILES.Applications.CurrenciesEditor.Name")}Exchange{localize("ITEM-PILES.Applications.CurrenciesEditor.Path")}{localize("ITEM-PILES.Applications.CurrenciesEditor.Icon")}
+ { attributeDragStart(event, index) }} + ondragover="return false" + > + { store.setPrimary(index) }}/> + + + + +
- { attributeDragStart(event, index) }} - ondragover="return false" - > - { currencyStore.setPrimary(index) }}/> -
\ No newline at end of file diff --git a/src/applications/item-pile-inventory/item-pile-inventory-shell.svelte b/src/applications/item-pile-inventory/item-pile-inventory-shell.svelte index f17aa2a7..b6ee6cab 100644 --- a/src/applications/item-pile-inventory/item-pile-inventory-shell.svelte +++ b/src/applications/item-pile-inventory/item-pile-inventory-shell.svelte @@ -321,7 +321,7 @@