diff --git a/.vscode/settings.json b/.vscode/settings.json index 0ac4ef4b..87146d22 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,17 +4,24 @@ "typescript.preferences.quoteStyle": "single", "typescript.format.placeOpenBraceOnNewLineForControlBlocks": true, "typescript.format.placeOpenBraceOnNewLineForFunctions": true, + "typescript.format.enable": false, "editor.codeActionsOnSave": { - "source.fixAll": true, - "source.fixAll.sortJSON": false, + "source.fixAll.eslint": true, "source.organizeImports": true }, - "git.ignoreLimitWarning": true, + "git.ignoreLimitWarning": true, "files.eol": "\n", "files.insertFinalNewline": true, "files.trimFinalNewlines": true, "editor.wordWrap": "on", "emmet.showExpandedAbbreviation": "never", - "eslint.validate": [ "javascript", "javascriptreact", "html", "typescriptreact" ], - "eslint.workingDirectories": [ "./src" ] + "eslint.validate": [ + "javascript", + "javascriptreact", + "html", + "typescriptreact" + ], + "eslint.workingDirectories": [ + "./src" + ] } diff --git a/craco.config.js b/craco.config.js index 4f5320a4..51847cbb 100644 --- a/craco.config.js +++ b/craco.config.js @@ -24,20 +24,25 @@ module.exports = { }, module: { ...webpackConfig.module, - rules: webpackConfig.module.rules.map((rule) => - { - if(!rule.oneOf) return rule; + rules: [ + { + test: /\.mjs$/, + include: /node_modules/, + type: 'javascript/auto' + }, + ...webpackConfig.module.rules.map((rule) => { + if (!rule.oneOf) return rule; - return { - ...rule, - oneOf: rule.oneOf.map((ruleObject) => - { - if(!new RegExp(ruleObject.test).test('.ts') || !ruleObject.include) return ruleObject; - - return { ...ruleObject, include: undefined }; - }) - }; - }) + return { + ...rule, + oneOf: rule.oneOf.map((ruleObject) => { + if (!new RegExp(ruleObject.test).test('.ts') || !ruleObject.include) return ruleObject; + + return { ...ruleObject, include: undefined }; + }) + }; + }) + ] } }) } diff --git a/package.json b/package.json index a5ea631c..14123f6e 100644 --- a/package.json +++ b/package.json @@ -3,54 +3,54 @@ "version": "2.0.0", "private": true, "scripts": { - "start": "cross-env SKIP_PREFLIGHT_CHECK=true BROWSER=none IMAGE_INLINE_SIZE_LIMIT=100000 craco start", - "build": "cross-env SKIP_PREFLIGHT_CHECK=true GENERATE_SOURCEMAP=false IMAGE_INLINE_SIZE_LIMIT=100000 craco build", + "start": "cross-env SKIP_PREFLIGHT_CHECK=true BROWSER=none IMAGE_INLINE_SIZE_LIMIT=100000 craco --openssl-legacy-provider start", + "build": "cross-env SKIP_PREFLIGHT_CHECK=true GENERATE_SOURCEMAP=false IMAGE_INLINE_SIZE_LIMIT=100000 craco --openssl-legacy-provider build", "build:prod": "npx browserslist@latest --update-db && yarn build", "test": "craco test", "eject": "react-scripts eject", "eslint": "eslint src --ext .ts,.tsx" }, "dependencies": { - "@craco/craco": "^6.3.0", - "@fortawesome/fontawesome-svg-core": "^6.1.0", - "@fortawesome/free-solid-svg-icons": "^6.1.0", - "@fortawesome/react-fontawesome": "^0.1.17", - "@nitrots/nitro-renderer": "^1.2.5", - "@types/react-transition-group": "^4.4.4", + "@craco/craco": "^6.4.5", + "@fortawesome/fontawesome-svg-core": "^6.1.1", + "@fortawesome/free-solid-svg-icons": "^6.1.1", + "@fortawesome/react-fontawesome": "^0.2.0", + "@nitrots/nitro-renderer": "^1.3.1", "animate.css": "^4.1.1", "classnames": "^2.3.1", "cross-env": "^7.0.3", "emoji-toolkit": "^6.6.0", - "node-sass": "^6.0.1", - "react": "^18.0.0", + "react": "^18.2.0", "react-bootstrap": "^2.2.2", - "react-dom": "^18.0.0", + "react-dom": "^18.2.0", "react-scripts": "4.0.3", "react-slider": "^2.0.0", "react-transition-group": "^4.4.2", "react-virtualized": "^9.22.3", "react-youtube": "^7.13.1", + "sass": "^1.53.0", "typescript": "^4.3.5", - "use-between": "^1.3.1" + "use-between": "^1.3.4" }, "resolutions": { - "react-error-overlay": "6.0.9", - "@types/react": "^18.0.8", - "@types/react-dom": "^18.0.3" + "react-error-overlay": "6.0.11", + "@types/react": "^18.0.15", + "@types/react-dom": "^18.0.6" }, "devDependencies": { - "@types/node": "^12.20.19", - "@types/react": "^18.0.8", - "@types/react-dom": "^18.0.3", + "@types/node": "^18.6.1", + "@types/react": "^18.0.15", + "@types/react-dom": "^18.0.6", "@types/react-slider": "^1.3.1", - "@types/react-virtualized": "^9.21.13", - "@typescript-eslint/eslint-plugin": "^5.17.0", - "@typescript-eslint/parser": "^5.17.0", - "eslint": "^8.12.0", - "eslint-plugin-import": "^2.25.4", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.29.4", - "eslint-plugin-react-hooks": "^4.4.0", - "react-error-overlay": "6.0.9" + "@types/react-transition-group": "^4.4.5", + "@types/react-virtualized": "^9.21.21", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.6.0", + "eslint-plugin-react": "^7.30.1", + "eslint-plugin-react-hooks": "^4.6.0", + "react-error-overlay": "6.0.11" } } diff --git a/public/ui-config.json.example b/public/ui-config.json.example index 1145a59a..403bb68a 100644 --- a/public/ui-config.json.example +++ b/public/ui-config.json.example @@ -17,41 +17,41 @@ "motto.max.length": 38, "bot.name.max.length": 15, "navigator.room.models": [ - { "clubLevel": 0, "tileSize": 104, "name": "a" }, - { "clubLevel": 0, "tileSize": 94, "name": "b" }, - { "clubLevel": 0, "tileSize": 36, "name": "c" }, - { "clubLevel": 0, "tileSize": 84, "name": "d" }, - { "clubLevel": 0, "tileSize": 80, "name": "e" }, - { "clubLevel": 0, "tileSize": 80, "name": "f" }, - { "clubLevel": 0, "tileSize": 416, "name": "i" }, - { "clubLevel": 0, "tileSize": 320, "name": "j" }, - { "clubLevel": 0, "tileSize": 448, "name": "k" }, - { "clubLevel": 0, "tileSize": 352, "name": "l" }, - { "clubLevel": 0, "tileSize": 384, "name": "m" }, - { "clubLevel": 0, "tileSize": 372, "name": "n" }, - { "clubLevel": 1, "tileSize": 80, "name": "g" }, - { "clubLevel": 1, "tileSize": 74, "name": "h" }, - { "clubLevel": 1, "tileSize": 416, "name": "o" }, - { "clubLevel": 1, "tileSize": 352, "name": "p" }, - { "clubLevel": 1, "tileSize": 304, "name": "q" }, - { "clubLevel": 1, "tileSize": 336, "name": "r" }, - { "clubLevel": 1, "tileSize": 748, "name": "u" }, - { "clubLevel": 1, "tileSize": 438, "name": "v" }, - { "clubLevel": 2, "tileSize": 540, "name": "t" }, - { "clubLevel": 2, "tileSize": 512, "name": "w" }, - { "clubLevel": 2, "tileSize": 396, "name": "x" }, - { "clubLevel": 2, "tileSize": 440, "name": "y" }, - { "clubLevel": 2, "tileSize": 456, "name": "z" }, - { "clubLevel": 2, "tileSize": 208, "name": "0" }, - { "clubLevel": 2, "tileSize": 1009, "name": "1" }, - { "clubLevel": 2, "tileSize": 1044, "name": "2" }, - { "clubLevel": 2, "tileSize": 183, "name": "3" }, - { "clubLevel": 2, "tileSize": 254, "name": "4" }, - { "clubLevel": 2, "tileSize": 1024, "name": "5" }, - { "clubLevel": 2, "tileSize": 801, "name": "6" }, - { "clubLevel": 2, "tileSize": 354, "name": "7" }, - { "clubLevel": 2, "tileSize": 888, "name": "8" }, - { "clubLevel": 2, "tileSize": 926, "name": "9" } + { "clubLevel": 0, "tileSize": 104, "name": "a" }, + { "clubLevel": 0, "tileSize": 94, "name": "b" }, + { "clubLevel": 0, "tileSize": 36, "name": "c" }, + { "clubLevel": 0, "tileSize": 84, "name": "d" }, + { "clubLevel": 0, "tileSize": 80, "name": "e" }, + { "clubLevel": 0, "tileSize": 80, "name": "f" }, + { "clubLevel": 0, "tileSize": 416, "name": "i" }, + { "clubLevel": 0, "tileSize": 320, "name": "j" }, + { "clubLevel": 0, "tileSize": 448, "name": "k" }, + { "clubLevel": 0, "tileSize": 352, "name": "l" }, + { "clubLevel": 0, "tileSize": 384, "name": "m" }, + { "clubLevel": 0, "tileSize": 372, "name": "n" }, + { "clubLevel": 1, "tileSize": 80, "name": "g" }, + { "clubLevel": 1, "tileSize": 74, "name": "h" }, + { "clubLevel": 1, "tileSize": 416, "name": "o" }, + { "clubLevel": 1, "tileSize": 352, "name": "p" }, + { "clubLevel": 1, "tileSize": 304, "name": "q" }, + { "clubLevel": 1, "tileSize": 336, "name": "r" }, + { "clubLevel": 1, "tileSize": 748, "name": "u" }, + { "clubLevel": 1, "tileSize": 438, "name": "v" }, + { "clubLevel": 2, "tileSize": 540, "name": "t" }, + { "clubLevel": 2, "tileSize": 512, "name": "w" }, + { "clubLevel": 2, "tileSize": 396, "name": "x" }, + { "clubLevel": 2, "tileSize": 440, "name": "y" }, + { "clubLevel": 2, "tileSize": 456, "name": "z" }, + { "clubLevel": 2, "tileSize": 208, "name": "0" }, + { "clubLevel": 2, "tileSize": 1009, "name": "1" }, + { "clubLevel": 2, "tileSize": 1044, "name": "2" }, + { "clubLevel": 2, "tileSize": 183, "name": "3" }, + { "clubLevel": 2, "tileSize": 254, "name": "4" }, + { "clubLevel": 2, "tileSize": 1024, "name": "5" }, + { "clubLevel": 2, "tileSize": 801, "name": "6" }, + { "clubLevel": 2, "tileSize": 354, "name": "7" }, + { "clubLevel": 2, "tileSize": 888, "name": "8" }, + { "clubLevel": 2, "tileSize": 926, "name": "9" } ], "hotelview": { "show.avatar": true, diff --git a/src/App.tsx b/src/App.tsx index 104e858f..82ca72a4 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,10 +1,10 @@ import { ConfigurationEvent, HabboWebTools, LegacyExternalInterface, Nitro, NitroCommunicationDemoEvent, NitroEvent, NitroLocalizationEvent, NitroVersion, RoomEngineEvent, WebGL } from '@nitrots/nitro-renderer'; import { FC, useCallback, useEffect, useState } from 'react'; -import { GetCommunication, GetConfiguration, GetNitroInstance, GetUIVersion } from './api'; +import { DispatchUiEvent, GetCommunication, GetConfiguration, GetNitroInstance, GetUIVersion } from './api'; import { Base, TransitionAnimation, TransitionAnimationTypes } from './common'; import { LoadingView } from './components/loading/LoadingView'; import { MainView } from './components/main/MainView'; -import { DispatchUiEvent, UseConfigurationEvent, UseLocalizationEvent, UseMainEvent, UseRoomEngineEvent } from './hooks'; +import { useConfigurationEvent, useLocalizationEvent, useMainEvent, useRoomEngineEvent } from './hooks'; import IntervalWebWorker from './workers/IntervalWebWorker'; import { WorkerBuilder } from './workers/WorkerBuilder'; @@ -107,17 +107,17 @@ export const App: FC<{}> = props => } }, []); - UseMainEvent(Nitro.WEBGL_UNAVAILABLE, handler); - UseMainEvent(Nitro.WEBGL_CONTEXT_LOST, handler); - UseMainEvent(NitroCommunicationDemoEvent.CONNECTION_HANDSHAKING, handler); - UseMainEvent(NitroCommunicationDemoEvent.CONNECTION_HANDSHAKE_FAILED, handler); - UseMainEvent(NitroCommunicationDemoEvent.CONNECTION_AUTHENTICATED, handler); - UseMainEvent(NitroCommunicationDemoEvent.CONNECTION_ERROR, handler); - UseMainEvent(NitroCommunicationDemoEvent.CONNECTION_CLOSED, handler); - UseRoomEngineEvent(RoomEngineEvent.ENGINE_INITIALIZED, handler); - UseLocalizationEvent(NitroLocalizationEvent.LOADED, handler); - UseConfigurationEvent(ConfigurationEvent.LOADED, handler); - UseConfigurationEvent(ConfigurationEvent.FAILED, handler); + useMainEvent(Nitro.WEBGL_UNAVAILABLE, handler); + useMainEvent(Nitro.WEBGL_CONTEXT_LOST, handler); + useMainEvent(NitroCommunicationDemoEvent.CONNECTION_HANDSHAKING, handler); + useMainEvent(NitroCommunicationDemoEvent.CONNECTION_HANDSHAKE_FAILED, handler); + useMainEvent(NitroCommunicationDemoEvent.CONNECTION_AUTHENTICATED, handler); + useMainEvent(NitroCommunicationDemoEvent.CONNECTION_ERROR, handler); + useMainEvent(NitroCommunicationDemoEvent.CONNECTION_CLOSED, handler); + useRoomEngineEvent(RoomEngineEvent.ENGINE_INITIALIZED, handler); + useLocalizationEvent(NitroLocalizationEvent.LOADED, handler); + useConfigurationEvent(ConfigurationEvent.LOADED, handler); + useConfigurationEvent(ConfigurationEvent.FAILED, handler); useEffect(() => { diff --git a/src/api/achievements/AchievementCategory.ts b/src/api/achievements/AchievementCategory.ts index cc92d8c4..906d8da4 100644 --- a/src/api/achievements/AchievementCategory.ts +++ b/src/api/achievements/AchievementCategory.ts @@ -1,6 +1,5 @@ import { AchievementData } from '@nitrots/nitro-renderer'; -import { GetAchievementCategoryProgress } from '.'; -import { GetAchievementCategoryMaxProgress } from './GetAchievementCategoryMaxProgress'; +import { AchievementUtilities } from './AchievementUtilities'; import { IAchievementCategory } from './IAchievementCategory'; export class AchievementCategory implements IAchievementCategory @@ -16,12 +15,12 @@ export class AchievementCategory implements IAchievementCategory public getProgress(): number { - return GetAchievementCategoryProgress(this); + return AchievementUtilities.getAchievementCategoryProgress(this); } public getMaxProgress(): number { - return GetAchievementCategoryMaxProgress(this); + return AchievementUtilities.getAchievementCategoryMaxProgress(this); } public get code(): string diff --git a/src/api/achievements/AchievementUtilities.ts b/src/api/achievements/AchievementUtilities.ts new file mode 100644 index 00000000..b581f979 --- /dev/null +++ b/src/api/achievements/AchievementUtilities.ts @@ -0,0 +1,97 @@ +import { AchievementData } from '@nitrots/nitro-renderer'; +import { GetConfiguration, GetLocalization } from '../nitro'; +import { IAchievementCategory } from './IAchievementCategory'; + +export class AchievementUtilities +{ + public static getAchievementBadgeCode(achievement: AchievementData): string + { + if(!achievement) return null; + + let badgeId = achievement.badgeId; + + if(!achievement.finalLevel) badgeId = GetLocalization().getPreviousLevelBadgeId(badgeId); + + return badgeId; + } + + public static getAchievementCategoryImageUrl(category: IAchievementCategory, progress: number = null, icon: boolean = false): string + { + const imageUrl = GetConfiguration('achievements.images.url'); + + let imageName = icon ? 'achicon_' : 'achcategory_'; + + imageName += category.code; + + if(progress !== null) imageName += `_${ ((progress > 0) ? 'active' : 'inactive') }`; + + return imageUrl.replace('%image%', imageName); + } + + public static getAchievementCategoryMaxProgress(category: IAchievementCategory): number + { + if(!category) return 0; + + let progress = 0; + + for(const achievement of category.achievements) + { + progress += achievement.levelCount; + } + + return progress; + } + + public static getAchievementCategoryProgress(category: IAchievementCategory): number + { + if(!category) return 0; + + let progress = 0; + + for(const achievement of category.achievements) progress += (achievement.finalLevel ? achievement.level : (achievement.level - 1)); + + return progress; + } + + public static getAchievementCategoryTotalUnseen(category: IAchievementCategory): number + { + if(!category) return 0; + + let unseen = 0; + + for(const achievement of category.achievements) ((achievement.unseen > 0) && unseen++); + + return unseen; + } + + public static getAchievementHasStarted(achievement: AchievementData): boolean + { + if(!achievement) return false; + + if(achievement.finalLevel || ((achievement.level - 1) > 0)) return true; + + return false; + } + + public static getAchievementIsIgnored(achievement: AchievementData): boolean + { + if(!achievement) return false; + + const ignored = GetConfiguration('achievements.unseen.ignored'); + const value = achievement.badgeId.replace(/[0-9]/g, ''); + const index = ignored.indexOf(value); + + if(index >= 0) return true; + + return false; + } + + public static getAchievementLevel(achievement: AchievementData): number + { + if(!achievement) return 0; + + if(achievement.finalLevel) return achievement.level; + + return (achievement.level - 1); + } +} diff --git a/src/api/achievements/GetAchievementBadgeCode.ts b/src/api/achievements/GetAchievementBadgeCode.ts deleted file mode 100644 index a9da2c88..00000000 --- a/src/api/achievements/GetAchievementBadgeCode.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { AchievementData } from '@nitrots/nitro-renderer'; -import { GetLocalization } from '..'; - -export const GetAchievementBadgeCode = (achievement: AchievementData) => -{ - if(!achievement) return null; - - let badgeId = achievement.badgeId; - - if(!achievement.finalLevel) badgeId = GetLocalization().getPreviousLevelBadgeId(badgeId); - - return badgeId; -} diff --git a/src/api/achievements/GetAchievementCategoryImageUrl.ts b/src/api/achievements/GetAchievementCategoryImageUrl.ts deleted file mode 100644 index ea7dff06..00000000 --- a/src/api/achievements/GetAchievementCategoryImageUrl.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { GetConfiguration, IAchievementCategory } from '..'; - -export const GetAchievementCategoryImageUrl = (category: IAchievementCategory, progress: number = null, icon: boolean = false) => -{ - const imageUrl = GetConfiguration('achievements.images.url'); - - let imageName = icon ? 'achicon_' : 'achcategory_'; - - imageName += category.code; - - if(progress !== null) imageName += `_${ ((progress > 0) ? 'active' : 'inactive') }`; - - return imageUrl.replace('%image%', imageName); -} diff --git a/src/api/achievements/GetAchievementCategoryMaxProgress.ts b/src/api/achievements/GetAchievementCategoryMaxProgress.ts deleted file mode 100644 index 6667fe9d..00000000 --- a/src/api/achievements/GetAchievementCategoryMaxProgress.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { IAchievementCategory } from '.'; - -export const GetAchievementCategoryMaxProgress = (category: IAchievementCategory) => -{ - if(!category) return 0; - - let progress = 0; - - for(const achievement of category.achievements) - { - progress += achievement.levelCount; - } - - return progress; -} diff --git a/src/api/achievements/GetAchievementCategoryProgress.ts b/src/api/achievements/GetAchievementCategoryProgress.ts deleted file mode 100644 index bc0a2b42..00000000 --- a/src/api/achievements/GetAchievementCategoryProgress.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { IAchievementCategory } from '.'; - -export const GetAchievementCategoryProgress = (category: IAchievementCategory) => -{ - if(!category) return 0; - - let progress = 0; - - for(const achievement of category.achievements) progress += (achievement.finalLevel ? achievement.level : (achievement.level - 1)); - - return progress; -} diff --git a/src/api/achievements/GetAchievementCategoryTotalUnseen.ts b/src/api/achievements/GetAchievementCategoryTotalUnseen.ts deleted file mode 100644 index a2771275..00000000 --- a/src/api/achievements/GetAchievementCategoryTotalUnseen.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { IAchievementCategory } from '.'; - -export const GetAchievementCategoryTotalUnseen = (category: IAchievementCategory) => -{ - if(!category) return 0; - - let unseen = 0; - - for(const achievement of category.achievements) ((achievement.unseen > 0) && unseen++); - - return unseen; -} diff --git a/src/api/achievements/GetAchievementHasStarted.ts b/src/api/achievements/GetAchievementHasStarted.ts deleted file mode 100644 index c97d2fb8..00000000 --- a/src/api/achievements/GetAchievementHasStarted.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { AchievementData } from '@nitrots/nitro-renderer'; - -export const GetAchievementHasStarted = (achievement: AchievementData) => -{ - if(!achievement) return false; - - if(achievement.finalLevel || ((achievement.level - 1) > 0)) return true; - - return false; -} diff --git a/src/api/achievements/GetAchievementIsIgnored.ts b/src/api/achievements/GetAchievementIsIgnored.ts deleted file mode 100644 index 3f03501a..00000000 --- a/src/api/achievements/GetAchievementIsIgnored.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { AchievementData } from '@nitrots/nitro-renderer'; -import { GetConfiguration } from '..'; - -export const GetAchievementIsIgnored = (achievement: AchievementData) => -{ - if(!achievement) return false; - - const ignored = GetConfiguration('achievements.unseen.ignored'); - const value = achievement.badgeId.replace(/[0-9]/g, ''); - const index = ignored.indexOf(value); - - if(index >= 0) return true; - - return false; -} diff --git a/src/api/achievements/GetAchievementLevel.ts b/src/api/achievements/GetAchievementLevel.ts deleted file mode 100644 index c59cc1ee..00000000 --- a/src/api/achievements/GetAchievementLevel.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { AchievementData } from '@nitrots/nitro-renderer'; - -export const GetAchievementLevel = (achievement: AchievementData) => -{ - if(!achievement) return 0; - - if(achievement.finalLevel) return achievement.level; - - return (achievement.level - 1); -} diff --git a/src/api/achievements/index.ts b/src/api/achievements/index.ts index 16e9e760..a3d44b73 100644 --- a/src/api/achievements/index.ts +++ b/src/api/achievements/index.ts @@ -1,10 +1,3 @@ export * from './AchievementCategory'; -export * from './GetAchievementBadgeCode'; -export * from './GetAchievementCategoryImageUrl'; -export * from './GetAchievementCategoryMaxProgress'; -export * from './GetAchievementCategoryProgress'; -export * from './GetAchievementCategoryTotalUnseen'; -export * from './GetAchievementHasStarted'; -export * from './GetAchievementIsIgnored'; -export * from './GetAchievementLevel'; +export * from './AchievementUtilities'; export * from './IAchievementCategory'; diff --git a/src/components/avatar-editor/common/AvatarEditorAction.ts b/src/api/avatar/AvatarEditorAction.ts similarity index 100% rename from src/components/avatar-editor/common/AvatarEditorAction.ts rename to src/api/avatar/AvatarEditorAction.ts diff --git a/src/components/avatar-editor/common/AvatarEditorGridColorItem.ts b/src/api/avatar/AvatarEditorGridColorItem.ts similarity index 100% rename from src/components/avatar-editor/common/AvatarEditorGridColorItem.ts rename to src/api/avatar/AvatarEditorGridColorItem.ts diff --git a/src/components/avatar-editor/common/AvatarEditorGridPartItem.ts b/src/api/avatar/AvatarEditorGridPartItem.ts similarity index 99% rename from src/components/avatar-editor/common/AvatarEditorGridPartItem.ts rename to src/api/avatar/AvatarEditorGridPartItem.ts index a277b5ad..a3b16616 100644 --- a/src/components/avatar-editor/common/AvatarEditorGridPartItem.ts +++ b/src/api/avatar/AvatarEditorGridPartItem.ts @@ -1,5 +1,5 @@ import { AvatarFigurePartType, IAvatarImageListener, IAvatarRenderManager, IFigurePart, IFigurePartSet, IGraphicAsset, IPartColor, NitroAlphaFilter, NitroContainer, NitroSprite, TextureUtils } from '@nitrots/nitro-renderer'; -import { GetAvatarRenderManager } from '../../../api'; +import { GetAvatarRenderManager } from '../nitro'; import { FigureData } from './FigureData'; export class AvatarEditorGridPartItem implements IAvatarImageListener diff --git a/src/components/avatar-editor/common/AvatarEditorUtilities.ts b/src/api/avatar/AvatarEditorUtilities.ts similarity index 99% rename from src/components/avatar-editor/common/AvatarEditorUtilities.ts rename to src/api/avatar/AvatarEditorUtilities.ts index 5a7b9f52..3626ab8e 100644 --- a/src/components/avatar-editor/common/AvatarEditorUtilities.ts +++ b/src/api/avatar/AvatarEditorUtilities.ts @@ -1,5 +1,5 @@ import { IPartColor } from '@nitrots/nitro-renderer'; -import { GetAvatarPalette, GetAvatarRenderManager, GetAvatarSetType, GetClubMemberLevel, GetConfiguration } from '../../../api'; +import { GetAvatarPalette, GetAvatarRenderManager, GetAvatarSetType, GetClubMemberLevel, GetConfiguration } from '../nitro'; import { AvatarEditorGridColorItem } from './AvatarEditorGridColorItem'; import { AvatarEditorGridPartItem } from './AvatarEditorGridPartItem'; import { CategoryBaseModel } from './CategoryBaseModel'; diff --git a/src/components/avatar-editor/common/BodyModel.ts b/src/api/avatar/BodyModel.ts similarity index 97% rename from src/components/avatar-editor/common/BodyModel.ts rename to src/api/avatar/BodyModel.ts index d7170dbd..7cdb34ce 100644 --- a/src/components/avatar-editor/common/BodyModel.ts +++ b/src/api/avatar/BodyModel.ts @@ -1,5 +1,5 @@ import { AvatarEditorFigureCategory, AvatarScaleType, AvatarSetType } from '@nitrots/nitro-renderer'; -import { GetAvatarRenderManager } from '../../../api'; +import { GetAvatarRenderManager } from '../nitro'; import { AvatarEditorUtilities } from './AvatarEditorUtilities'; import { CategoryBaseModel } from './CategoryBaseModel'; import { FigureData } from './FigureData'; diff --git a/src/components/avatar-editor/common/CategoryBaseModel.ts b/src/api/avatar/CategoryBaseModel.ts similarity index 100% rename from src/components/avatar-editor/common/CategoryBaseModel.ts rename to src/api/avatar/CategoryBaseModel.ts diff --git a/src/components/avatar-editor/common/CategoryData.ts b/src/api/avatar/CategoryData.ts similarity index 100% rename from src/components/avatar-editor/common/CategoryData.ts rename to src/api/avatar/CategoryData.ts diff --git a/src/components/avatar-editor/common/FigureData.ts b/src/api/avatar/FigureData.ts similarity index 100% rename from src/components/avatar-editor/common/FigureData.ts rename to src/api/avatar/FigureData.ts diff --git a/src/components/avatar-editor/common/FigureGenerator.ts b/src/api/avatar/FigureGenerator.ts similarity index 96% rename from src/components/avatar-editor/common/FigureGenerator.ts rename to src/api/avatar/FigureGenerator.ts index 30ac1385..b83a6616 100644 --- a/src/components/avatar-editor/common/FigureGenerator.ts +++ b/src/api/avatar/FigureGenerator.ts @@ -1,6 +1,6 @@ import { AvatarFigureContainer, IFigurePartSet, IPalette, IPartColor, SetType } from '@nitrots/nitro-renderer'; -import { GetAvatarRenderManager } from '../../../api'; -import { Randomizer } from '../../../api/utils'; +import { GetAvatarRenderManager } from '../nitro'; +import { Randomizer } from '../utils'; import { FigureData } from './FigureData'; function getTotalColors(partSet: IFigurePartSet): number diff --git a/src/components/avatar-editor/common/HeadModel.ts b/src/api/avatar/HeadModel.ts similarity index 100% rename from src/components/avatar-editor/common/HeadModel.ts rename to src/api/avatar/HeadModel.ts diff --git a/src/components/avatar-editor/common/IAvatarEditorCategoryModel.ts b/src/api/avatar/IAvatarEditorCategoryModel.ts similarity index 100% rename from src/components/avatar-editor/common/IAvatarEditorCategoryModel.ts rename to src/api/avatar/IAvatarEditorCategoryModel.ts diff --git a/src/components/avatar-editor/common/LegModel.ts b/src/api/avatar/LegModel.ts similarity index 100% rename from src/components/avatar-editor/common/LegModel.ts rename to src/api/avatar/LegModel.ts diff --git a/src/components/avatar-editor/common/TorsoModel.ts b/src/api/avatar/TorsoModel.ts similarity index 100% rename from src/components/avatar-editor/common/TorsoModel.ts rename to src/api/avatar/TorsoModel.ts diff --git a/src/api/avatar/index.ts b/src/api/avatar/index.ts new file mode 100644 index 00000000..37b30721 --- /dev/null +++ b/src/api/avatar/index.ts @@ -0,0 +1,13 @@ +export * from './AvatarEditorAction'; +export * from './AvatarEditorGridColorItem'; +export * from './AvatarEditorGridPartItem'; +export * from './AvatarEditorUtilities'; +export * from './BodyModel'; +export * from './CategoryBaseModel'; +export * from './CategoryData'; +export * from './FigureData'; +export * from './FigureGenerator'; +export * from './HeadModel'; +export * from './IAvatarEditorCategoryModel'; +export * from './LegModel'; +export * from './TorsoModel'; diff --git a/src/components/camera/common/CameraEditorTabs.ts b/src/api/camera/CameraEditorTabs.ts similarity index 100% rename from src/components/camera/common/CameraEditorTabs.ts rename to src/api/camera/CameraEditorTabs.ts diff --git a/src/components/camera/common/CameraPicture.ts b/src/api/camera/CameraPicture.ts similarity index 100% rename from src/components/camera/common/CameraPicture.ts rename to src/api/camera/CameraPicture.ts diff --git a/src/components/camera/common/CameraPictureThumbnail.ts b/src/api/camera/CameraPictureThumbnail.ts similarity index 100% rename from src/components/camera/common/CameraPictureThumbnail.ts rename to src/api/camera/CameraPictureThumbnail.ts diff --git a/src/api/camera/index.ts b/src/api/camera/index.ts new file mode 100644 index 00000000..93c6ccb9 --- /dev/null +++ b/src/api/camera/index.ts @@ -0,0 +1,3 @@ +export * from './CameraEditorTabs'; +export * from './CameraPicture'; +export * from './CameraPictureThumbnail'; diff --git a/src/components/chat-history/common/ChatEntryType.ts b/src/api/chat-history/ChatEntryType.ts similarity index 100% rename from src/components/chat-history/common/ChatEntryType.ts rename to src/api/chat-history/ChatEntryType.ts diff --git a/src/components/chat-history/common/Utilities.ts b/src/api/chat-history/ChatHistoryCurrentDate.ts similarity index 78% rename from src/components/chat-history/common/Utilities.ts rename to src/api/chat-history/ChatHistoryCurrentDate.ts index 12d6d3eb..6947bca4 100644 --- a/src/components/chat-history/common/Utilities.ts +++ b/src/api/chat-history/ChatHistoryCurrentDate.ts @@ -1,5 +1,6 @@ -export const currentDate = () => +export const ChatHistoryCurrentDate = () => { const currentTime = new Date(); + return `${ currentTime.getHours().toString().padStart(2, '0') }:${ currentTime.getMinutes().toString().padStart(2, '0') }`; } diff --git a/src/components/chat-history/common/IChatEntry.ts b/src/api/chat-history/IChatEntry.ts similarity index 100% rename from src/components/chat-history/common/IChatEntry.ts rename to src/api/chat-history/IChatEntry.ts diff --git a/src/api/chat-history/IRoomHistoryEntry.ts b/src/api/chat-history/IRoomHistoryEntry.ts new file mode 100644 index 00000000..4986154a --- /dev/null +++ b/src/api/chat-history/IRoomHistoryEntry.ts @@ -0,0 +1,5 @@ +export interface IRoomHistoryEntry +{ + id: number; + name: string; +} diff --git a/src/api/chat-history/index.ts b/src/api/chat-history/index.ts new file mode 100644 index 00000000..a1447992 --- /dev/null +++ b/src/api/chat-history/index.ts @@ -0,0 +1,4 @@ +export * from './ChatEntryType'; +export * from './ChatHistoryCurrentDate'; +export * from './IChatEntry'; +export * from './IRoomHistoryEntry'; diff --git a/src/api/events/DispatchEvent.ts b/src/api/events/DispatchEvent.ts new file mode 100644 index 00000000..79e2f5ce --- /dev/null +++ b/src/api/events/DispatchEvent.ts @@ -0,0 +1,3 @@ +import { IEventDispatcher, NitroEvent } from '@nitrots/nitro-renderer'; + +export const DispatchEvent = (eventDispatcher: IEventDispatcher, event: NitroEvent) => eventDispatcher.dispatchEvent(event); diff --git a/src/api/events/DispatchMainEvent.ts b/src/api/events/DispatchMainEvent.ts new file mode 100644 index 00000000..385a888e --- /dev/null +++ b/src/api/events/DispatchMainEvent.ts @@ -0,0 +1,5 @@ +import { NitroEvent } from '@nitrots/nitro-renderer'; +import { GetNitroInstance } from '../nitro'; +import { DispatchEvent } from './DispatchEvent'; + +export const DispatchMainEvent = (event: NitroEvent) => DispatchEvent(GetNitroInstance().events, event); diff --git a/src/api/events/DispatchUiEvent.ts b/src/api/events/DispatchUiEvent.ts new file mode 100644 index 00000000..5200bb4f --- /dev/null +++ b/src/api/events/DispatchUiEvent.ts @@ -0,0 +1,5 @@ +import { NitroEvent } from '@nitrots/nitro-renderer'; +import { DispatchEvent } from './DispatchEvent'; +import { UI_EVENT_DISPATCHER } from './UI_EVENT_DISPATCHER'; + +export const DispatchUiEvent = (event: NitroEvent) => DispatchEvent(UI_EVENT_DISPATCHER, event); diff --git a/src/hooks/events/ui/UiEventDispatcher.ts b/src/api/events/UI_EVENT_DISPATCHER.ts similarity index 100% rename from src/hooks/events/ui/UiEventDispatcher.ts rename to src/api/events/UI_EVENT_DISPATCHER.ts diff --git a/src/api/events/index.ts b/src/api/events/index.ts new file mode 100644 index 00000000..b7c22ee5 --- /dev/null +++ b/src/api/events/index.ts @@ -0,0 +1,4 @@ +export * from './DispatchEvent'; +export * from './DispatchMainEvent'; +export * from './DispatchUiEvent'; +export * from './UI_EVENT_DISPATCHER'; diff --git a/src/api/friends/GroupType.ts b/src/api/friends/MessengerGroupType.ts similarity index 74% rename from src/api/friends/GroupType.ts rename to src/api/friends/MessengerGroupType.ts index 0cbc1a43..d46a1b63 100644 --- a/src/api/friends/GroupType.ts +++ b/src/api/friends/MessengerGroupType.ts @@ -1,4 +1,4 @@ -export class GroupType +export class MessengerGroupType { public static readonly GROUP_CHAT = 0; public static readonly PRIVATE_CHAT = 1; diff --git a/src/api/friends/MessengerThread.ts b/src/api/friends/MessengerThread.ts index e0b0ca85..88128065 100644 --- a/src/api/friends/MessengerThread.ts +++ b/src/api/friends/MessengerThread.ts @@ -1,7 +1,7 @@ import { LocalizeText } from '../utils'; import { GetGroupChatData } from './GetGroupChatData'; -import { GroupType } from './GroupType'; import { MessengerFriend } from './MessengerFriend'; +import { MessengerGroupType } from './MessengerGroupType'; import { MessengerThreadChat } from './MessengerThreadChat'; import { MessengerThreadChatGroup } from './MessengerThreadChatGroup'; @@ -41,7 +41,7 @@ export class MessengerThread if(!group) return; - if(isGroupChat) group.type = GroupType.GROUP_CHAT; + if(isGroupChat) group.type = MessengerGroupType.GROUP_CHAT; const chat = new MessengerThreadChat(senderId, message, secondsSinceSent, extraData, type); diff --git a/src/api/friends/MessengerThreadChatGroup.ts b/src/api/friends/MessengerThreadChatGroup.ts index b1eb9a60..1668aedc 100644 --- a/src/api/friends/MessengerThreadChatGroup.ts +++ b/src/api/friends/MessengerThreadChatGroup.ts @@ -1,4 +1,4 @@ -import { GroupType } from './GroupType'; +import { MessengerGroupType } from './MessengerGroupType'; import { MessengerThreadChat } from './MessengerThreadChat'; export class MessengerThreadChatGroup @@ -7,7 +7,7 @@ export class MessengerThreadChatGroup private _chats: MessengerThreadChat[]; private _type: number; - constructor(userId: number, type = GroupType.PRIVATE_CHAT) + constructor(userId: number, type = MessengerGroupType.PRIVATE_CHAT) { this._userId = userId; this._chats = []; diff --git a/src/api/friends/index.ts b/src/api/friends/index.ts index da3d2c64..ce1ed60a 100644 --- a/src/api/friends/index.ts +++ b/src/api/friends/index.ts @@ -1,7 +1,7 @@ export * from './GetGroupChatData'; -export * from './GroupType'; export * from './IGroupChatData'; export * from './MessengerFriend'; +export * from './MessengerGroupType'; export * from './MessengerIconState'; export * from './MessengerRequest'; export * from './MessengerSettings'; diff --git a/src/components/groups/common/GroupBadgePart.ts b/src/api/groups/GroupBadgePart.ts similarity index 100% rename from src/components/groups/common/GroupBadgePart.ts rename to src/api/groups/GroupBadgePart.ts diff --git a/src/components/groups/common/GroupMembershipType.ts b/src/api/groups/GroupMembershipType.ts similarity index 100% rename from src/components/groups/common/GroupMembershipType.ts rename to src/api/groups/GroupMembershipType.ts diff --git a/src/components/groups/common/GroupType.ts b/src/api/groups/GroupType.ts similarity index 100% rename from src/components/groups/common/GroupType.ts rename to src/api/groups/GroupType.ts diff --git a/src/components/groups/common/IGroupCustomize.ts b/src/api/groups/IGroupCustomize.ts similarity index 100% rename from src/components/groups/common/IGroupCustomize.ts rename to src/api/groups/IGroupCustomize.ts diff --git a/src/components/groups/common/IGroupData.ts b/src/api/groups/IGroupData.ts similarity index 100% rename from src/components/groups/common/IGroupData.ts rename to src/api/groups/IGroupData.ts diff --git a/src/api/groups/index.ts b/src/api/groups/index.ts index 2f528cab..4842948b 100644 --- a/src/api/groups/index.ts +++ b/src/api/groups/index.ts @@ -1,5 +1,10 @@ export * from './GetGroupInformation'; export * from './GetGroupManager'; export * from './GetGroupMembers'; +export * from './GroupBadgePart'; +export * from './GroupMembershipType'; +export * from './GroupType'; +export * from './IGroupCustomize'; +export * from './IGroupData'; export * from './ToggleFavoriteGroup'; export * from './TryJoinGroup'; diff --git a/src/components/guide-tool/common/GuideSessionState.ts b/src/api/guide-tool/GuideSessionState.ts similarity index 100% rename from src/components/guide-tool/common/GuideSessionState.ts rename to src/api/guide-tool/GuideSessionState.ts diff --git a/src/components/guide-tool/common/GuideToolMessage.ts b/src/api/guide-tool/GuideToolMessage.ts similarity index 100% rename from src/components/guide-tool/common/GuideToolMessage.ts rename to src/api/guide-tool/GuideToolMessage.ts diff --git a/src/components/guide-tool/common/GuideToolMessageGroup.ts b/src/api/guide-tool/GuideToolMessageGroup.ts similarity index 100% rename from src/components/guide-tool/common/GuideToolMessageGroup.ts rename to src/api/guide-tool/GuideToolMessageGroup.ts diff --git a/src/api/guide-tool/index.ts b/src/api/guide-tool/index.ts new file mode 100644 index 00000000..1400adc9 --- /dev/null +++ b/src/api/guide-tool/index.ts @@ -0,0 +1,3 @@ +export * from './GuideSessionState'; +export * from './GuideToolMessage'; +export * from './GuideToolMessageGroup'; diff --git a/src/components/help/common/CallForHelpResult.ts b/src/api/help/CallForHelpResult.ts similarity index 100% rename from src/components/help/common/CallForHelpResult.ts rename to src/api/help/CallForHelpResult.ts diff --git a/src/components/help/common/GetCloseReasonKey.ts b/src/api/help/GetCloseReasonKey.ts similarity index 100% rename from src/components/help/common/GetCloseReasonKey.ts rename to src/api/help/GetCloseReasonKey.ts diff --git a/src/components/help/common/IHelpReportState.ts b/src/api/help/IHelpReportState.ts similarity index 76% rename from src/components/help/common/IHelpReportState.ts rename to src/api/help/IHelpReportState.ts index 26aba823..38c73095 100644 --- a/src/components/help/common/IHelpReportState.ts +++ b/src/api/help/IHelpReportState.ts @@ -1,4 +1,4 @@ -import { IChatEntry } from '../../chat-history/common/IChatEntry'; +import { IChatEntry } from '../chat-history'; export interface IHelpReportState { diff --git a/src/components/help/common/IReportedUser.ts b/src/api/help/IReportedUser.ts similarity index 100% rename from src/components/help/common/IReportedUser.ts rename to src/api/help/IReportedUser.ts diff --git a/src/api/help/index.ts b/src/api/help/index.ts new file mode 100644 index 00000000..b46aad9e --- /dev/null +++ b/src/api/help/index.ts @@ -0,0 +1,4 @@ +export * from './CallForHelpResult'; +export * from './GetCloseReasonKey'; +export * from './IHelpReportState'; +export * from './IReportedUser'; diff --git a/src/api/index.ts b/src/api/index.ts index d3473996..58e6f4ca 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,26 +1,28 @@ export * from './achievements'; +export * from './avatar'; +export * from './camera'; export * from './campaign'; export * from './catalog'; -export * from './core'; +export * from './chat-history'; +export * from './events'; export * from './friends'; export * from './GetRendererVersion'; export * from './GetUIVersion'; export * from './groups'; +export * from './guide-tool'; export * from './hc-center'; +export * from './help'; export * from './inventory'; -export * from './inventory/unseen'; export * from './navigator'; export * from './nitro'; export * from './nitro/avatar'; export * from './nitro/camera'; +export * from './nitro/core'; export * from './nitro/room'; -export * from './nitro/room/widgets'; -export * from './nitro/room/widgets/events'; -export * from './nitro/room/widgets/handlers'; -export * from './nitro/room/widgets/messages'; export * from './nitro/session'; export * from './notification'; export * from './purse'; +export * from './room'; export * from './user'; export * from './utils'; export * from './wired'; diff --git a/src/api/inventory/FurnitureItem.ts b/src/api/inventory/FurnitureItem.ts index dc055010..2ad27ce5 100644 --- a/src/api/inventory/FurnitureItem.ts +++ b/src/api/inventory/FurnitureItem.ts @@ -1,6 +1,6 @@ import { IFurnitureItemData, IObjectData } from '@nitrots/nitro-renderer'; -import { IFurnitureItem } from '.'; -import { GetNitroInstance } from '..'; +import { GetNitroInstance } from '../nitro'; +import { IFurnitureItem } from './IFurnitureItem'; export class FurnitureItem implements IFurnitureItem { diff --git a/src/api/inventory/GroupItem.ts b/src/api/inventory/GroupItem.ts index 96477f92..8569321e 100644 --- a/src/api/inventory/GroupItem.ts +++ b/src/api/inventory/GroupItem.ts @@ -1,5 +1,5 @@ import { IObjectData, IRoomEngine } from '@nitrots/nitro-renderer'; -import { LocalizeText } from '..'; +import { LocalizeText } from '../utils'; import { FurniCategory } from './FurniCategory'; import { FurnitureItem } from './FurnitureItem'; import { IFurnitureItem } from './IFurnitureItem'; diff --git a/src/api/inventory/unseen/IUnseenItemTracker.ts b/src/api/inventory/IUnseenItemTracker.ts similarity index 100% rename from src/api/inventory/unseen/IUnseenItemTracker.ts rename to src/api/inventory/IUnseenItemTracker.ts diff --git a/src/api/inventory/InventoryUtilities.ts b/src/api/inventory/InventoryUtilities.ts index 2dae7d84..e263b8c8 100644 --- a/src/api/inventory/InventoryUtilities.ts +++ b/src/api/inventory/InventoryUtilities.ts @@ -1,6 +1,7 @@ import { FurniturePlacePaintComposer, RoomObjectCategory, RoomObjectPlacementSource, RoomObjectType } from '@nitrots/nitro-renderer'; -import { FurniCategory, GroupItem } from '.'; -import { CreateLinkEvent, GetRoomEngine, GetRoomSessionManager, SendMessageComposer } from '..'; +import { CreateLinkEvent, GetRoomEngine, GetRoomSessionManager, SendMessageComposer } from '../nitro'; +import { FurniCategory } from './FurniCategory'; +import { GroupItem } from './GroupItem'; import { IBotItem } from './IBotItem'; import { IPetItem } from './IPetItem'; diff --git a/src/api/inventory/PetUtilities.ts b/src/api/inventory/PetUtilities.ts index 871eb538..881a09e4 100644 --- a/src/api/inventory/PetUtilities.ts +++ b/src/api/inventory/PetUtilities.ts @@ -2,7 +2,7 @@ import { PetData } from '@nitrots/nitro-renderer'; import { CreateLinkEvent } from '../nitro'; import { cancelRoomObjectPlacement, getPlacingItemId } from './InventoryUtilities'; import { IPetItem } from './IPetItem'; -import { UnseenItemCategory } from './unseen'; +import { UnseenItemCategory } from './UnseenItemCategory'; export const getAllPetIds = (petItems: IPetItem[]) => petItems.map(item => item.petData.id); diff --git a/src/api/inventory/TradingNotificationMessage.ts b/src/api/inventory/TradingNotificationMessage.ts deleted file mode 100644 index eb0ecfac..00000000 --- a/src/api/inventory/TradingNotificationMessage.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { LocalizeText, NotificationUtilities } from '..'; -import { TradingNotificationType } from './TradingNotificationType'; - -export const TradingNotificationMessage = (type: number, otherUsername: string = '') => -{ - switch(type) - { - case TradingNotificationType.ALERT_SCAM: - NotificationUtilities.simpleAlert(LocalizeText('inventory.trading.warning.other_not_offering'), null, null, null, LocalizeText('inventory.trading.notification.title')); - return; - case TradingNotificationType.HOTEL_TRADING_DISABLED: - case TradingNotificationType.YOU_NOT_ALLOWED: - case TradingNotificationType.THEY_NOT_ALLOWED: - case TradingNotificationType.ROOM_DISABLED: - case TradingNotificationType.YOU_OPEN: - case TradingNotificationType.THEY_OPEN: - NotificationUtilities.simpleAlert(LocalizeText(`inventory.trading.openfail.${ type }`, [ 'otherusername' ], [ otherUsername ]), null, null, null, LocalizeText('inventory.trading.openfail.title')); - return; - case TradingNotificationType.ERROR_WHILE_COMMIT: - NotificationUtilities.simpleAlert(`${ LocalizeText('inventory.trading.notification.caption') }, ${ LocalizeText('inventory.trading.notification.commiterror.info') }`, null, null, null, LocalizeText('inventory.trading.notification.title')); - return; - case TradingNotificationType.THEY_CANCELLED: - NotificationUtilities.simpleAlert(LocalizeText('inventory.trading.info.closed'), null, null, null, LocalizeText('inventory.trading.notification.title')); - return; - } -} diff --git a/src/api/inventory/unseen/UnseenItemCategory.ts b/src/api/inventory/UnseenItemCategory.ts similarity index 100% rename from src/api/inventory/unseen/UnseenItemCategory.ts rename to src/api/inventory/UnseenItemCategory.ts diff --git a/src/api/inventory/index.ts b/src/api/inventory/index.ts index de840525..76962cfe 100644 --- a/src/api/inventory/index.ts +++ b/src/api/inventory/index.ts @@ -6,10 +6,10 @@ export * from './IBotItem'; export * from './IFurnitureItem'; export * from './InventoryUtilities'; export * from './IPetItem'; +export * from './IUnseenItemTracker'; export * from './PetUtilities'; export * from './TradeState'; export * from './TradeUserData'; -export * from './TradingNotificationMessage'; export * from './TradingNotificationType'; export * from './TradingUtilities'; -export * from './unseen'; +export * from './UnseenItemCategory'; diff --git a/src/api/inventory/unseen/index.ts b/src/api/inventory/unseen/index.ts deleted file mode 100644 index 31936cbd..00000000 --- a/src/api/inventory/unseen/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './IUnseenItemTracker'; -export * from './UnseenItemCategory'; diff --git a/src/api/navigator/RoomSettingsData.ts b/src/api/navigator/RoomSettingsData.ts deleted file mode 100644 index 84cce5ae..00000000 --- a/src/api/navigator/RoomSettingsData.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { RoomSettingsParser } from '@nitrots/nitro-renderer'; - -export class RoomSettingsData -{ - public roomId: number; - public roomName: string; - public roomOriginalName: string; - public roomDescription: string; - public categoryId: number; - public userCount: number; - public tags: string[]; - public tradeState: number; - public allowWalkthrough: boolean; - - public lockState: number; - public originalLockState: number; - public password: string; - public confirmPassword: string; - public allowPets: boolean; - public allowPetsEat: boolean; - - public usersWithRights: Map; - - public hideWalls: boolean; - public wallThickness: number; - public floorThickness: number; - public chatBubbleMode: number; - public chatBubbleWeight: number; - public chatBubbleSpeed: number; - public chatFloodProtection: number; - public chatDistance: number; - - public muteState: number; - public kickState: number; - public banState: number; - public bannedUsers: any[]; - public selectedUserToUnban: number; - - constructor(parser: RoomSettingsParser) - { - if(!parser) throw new Error('invalid_parser'); - - this.roomId = parser.roomId; - this.roomName = parser.name; - this.roomOriginalName = parser.name; - this.roomDescription = parser.description; - this.categoryId = parser.categoryId; - this.userCount = parser.userCount; - this.tags = parser.tags; - this.tradeState = parser.tradeMode; - this.allowWalkthrough = parser.allowWalkthrough; - - this.lockState = parser.state; - this.originalLockState = parser.state; - this.password = null; - this.confirmPassword = null; - this.allowPets = parser.allowPets; - this.allowPetsEat = parser.allowPetsEat; - - this.usersWithRights = new Map(); - - this.hideWalls = parser.hideWalls; - this.wallThickness = parser.thicknessWall; - this.floorThickness = parser.thicknessFloor; - this.chatBubbleMode = parser.chatSettings.mode; - this.chatBubbleWeight = parser.chatSettings.weight; - this.chatBubbleSpeed = parser.chatSettings.speed; - this.chatFloodProtection = parser.chatSettings.protection; - this.chatDistance = parser.chatSettings.distance; - - this.muteState = parser.moderationSettings.allowMute; - this.kickState = parser.moderationSettings.allowKick; - this.banState = parser.moderationSettings.allowBan; - this.bannedUsers = []; - } -} diff --git a/src/api/navigator/TryVisitRoom.ts b/src/api/navigator/TryVisitRoom.ts index 94d8e6fc..81138d6c 100644 --- a/src/api/navigator/TryVisitRoom.ts +++ b/src/api/navigator/TryVisitRoom.ts @@ -1,7 +1,7 @@ -import { RoomInfoComposer } from '@nitrots/nitro-renderer'; +import { GetGuestRoomMessageComposer } from '@nitrots/nitro-renderer'; import { SendMessageComposer } from '../nitro'; export function TryVisitRoom(roomId: number): void { - SendMessageComposer(new RoomInfoComposer(roomId, false, true)); + SendMessageComposer(new GetGuestRoomMessageComposer(roomId, false, true)); } diff --git a/src/api/navigator/index.ts b/src/api/navigator/index.ts index 77b0a417..bceb33e4 100644 --- a/src/api/navigator/index.ts +++ b/src/api/navigator/index.ts @@ -7,7 +7,6 @@ export * from './IRoomModel'; export * from './IRoomModerationSettings'; export * from './NavigatorSearchResultViewDisplayMode'; export * from './RoomInfoData'; -export * from './RoomSettingsData'; export * from './RoomSettingsUtils'; export * from './SearchFilterOptions'; export * from './TryVisitRoom'; diff --git a/src/api/nitro/OpenUrl.ts b/src/api/nitro/OpenUrl.ts new file mode 100644 index 00000000..096776d7 --- /dev/null +++ b/src/api/nitro/OpenUrl.ts @@ -0,0 +1,16 @@ +import { HabboWebTools } from '@nitrots/nitro-renderer'; +import { CreateLinkEvent } from './CreateLinkEvent'; + +export const OpenUrl = (url: string) => +{ + if(!url || !url.length) return; + + if(url.startsWith('http')) + { + HabboWebTools.openWebPage(url); + } + else + { + CreateLinkEvent(url); + } +} diff --git a/src/api/core/GetConfigurationManager.ts b/src/api/nitro/core/GetConfigurationManager.ts similarity index 100% rename from src/api/core/GetConfigurationManager.ts rename to src/api/nitro/core/GetConfigurationManager.ts diff --git a/src/api/core/GetNitroCore.ts b/src/api/nitro/core/GetNitroCore.ts similarity index 75% rename from src/api/core/GetNitroCore.ts rename to src/api/nitro/core/GetNitroCore.ts index 19c2e586..ef34b663 100644 --- a/src/api/core/GetNitroCore.ts +++ b/src/api/nitro/core/GetNitroCore.ts @@ -1,5 +1,5 @@ import { INitroCore } from '@nitrots/nitro-renderer'; -import { GetNitroInstance } from '../nitro'; +import { GetNitroInstance } from '..'; export function GetNitroCore(): INitroCore { diff --git a/src/api/core/index.ts b/src/api/nitro/core/index.ts similarity index 100% rename from src/api/core/index.ts rename to src/api/nitro/core/index.ts diff --git a/src/api/nitro/index.ts b/src/api/nitro/index.ts index 3e371d5d..c5af3a30 100644 --- a/src/api/nitro/index.ts +++ b/src/api/nitro/index.ts @@ -2,6 +2,7 @@ export * from './AddLinkEventTracker'; export * from './AddWorkerEventTracker'; export * from './avatar'; export * from './camera'; +export * from './core'; export * from './CreateLinkEvent'; export * from './GetCommunication'; export * from './GetConfiguration'; @@ -9,13 +10,10 @@ export * from './GetConnection'; export * from './GetLocalization'; export * from './GetNitroInstance'; export * from './GetTicker'; +export * from './OpenUrl'; export * from './RemoveLinkEventTracker'; export * from './RemoveWorkerEventTracker'; export * from './room'; -export * from './room/widgets'; -export * from './room/widgets/events'; -export * from './room/widgets/handlers'; -export * from './room/widgets/messages'; export * from './SendMessageComposer'; export * from './SendWorkerEvent'; export * from './session'; diff --git a/src/api/nitro/room/index.ts b/src/api/nitro/room/index.ts index dace0981..764b72e9 100644 --- a/src/api/nitro/room/index.ts +++ b/src/api/nitro/room/index.ts @@ -8,4 +8,3 @@ export * from './InitializeRoomInstanceRenderingCanvas'; export * from './IsFurnitureSelectionDisabled'; export * from './ProcessRoomObjectOperation'; export * from './SetActiveRoomId'; -export * from './widgets'; diff --git a/src/api/nitro/room/widgets/events/RoomWidgetAvatarInfoEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetAvatarInfoEvent.ts deleted file mode 100644 index e780711f..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetAvatarInfoEvent.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetAvatarInfoEvent extends RoomWidgetUpdateEvent -{ - public static AVATAR_INFO: string = 'RWAIE_AVATAR_INFO'; - - private _userId: number; - private _userName: string; - private _userType: number; - private _roomIndex: number; - private _allowNameChange: boolean; - - constructor(userId: number, userName: string, userType: number, roomIndex: number, allowNameChange: boolean) - { - super(RoomWidgetAvatarInfoEvent.AVATAR_INFO); - - this._userId = userId; - this._userName = userName; - this._userType = userType; - this._roomIndex = roomIndex; - this._allowNameChange = allowNameChange; - } - - public get userId(): number - { - return this._userId; - } - - public get userName(): string - { - return this._userName; - } - - public get userType(): number - { - return this._userType; - } - - public get roomIndex(): number - { - return this._roomIndex; - } - - public get allowNameChange(): boolean - { - return this._allowNameChange; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetChooserContentEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetChooserContentEvent.ts deleted file mode 100644 index 75ec5f8e..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetChooserContentEvent.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { RoomObjectItem } from './RoomObjectItem'; -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetChooserContentEvent extends RoomWidgetUpdateEvent -{ - public static USER_CHOOSER_CONTENT: string = 'RWCCE_USER_CHOOSER_CONTENT'; - public static FURNI_CHOOSER_CONTENT: string = 'RWCCE_FURNI_CHOOSER_CONTENT'; - - private _items: RoomObjectItem[]; - - constructor(type: string, items: RoomObjectItem[]) - { - super(type); - - this._items = items; - } - - public get items(): RoomObjectItem[] - { - return this._items; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetFloodControlEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetFloodControlEvent.ts deleted file mode 100644 index 8b1e10af..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetFloodControlEvent.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetFloodControlEvent extends RoomWidgetUpdateEvent -{ - public static FLOOD_CONTROL: string = 'RWFCE_FLOOD_CONTROL'; - - private _seconds: number = 0; - - constructor(seconds: number) - { - super(RoomWidgetFloodControlEvent.FLOOD_CONTROL); - - this._seconds = seconds; - } - - public get seconds(): number - { - return this._seconds; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetObjectNameEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetObjectNameEvent.ts deleted file mode 100644 index 87fbe42f..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetObjectNameEvent.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetObjectNameEvent extends RoomWidgetUpdateEvent -{ - public static TYPE: string = 'RWONE_TYPE'; - - private _roomIndex: number; - private _category: number; - private _id: number; - private _name: string; - private _userType: number; - - constructor(type: string, roomIndex: number, category: number, id: number, name: string, userType: number) - { - super(type); - - this._roomIndex = roomIndex; - this._category = category; - this._id = id; - this._name = name; - this._userType = userType; - } - - public get roomIndex(): number - { - return this._roomIndex; - } - - public get category(): number - { - return this._category; - } - - public get id(): number - { - return this._id; - } - - public get name(): string - { - return this._name; - } - - public get userType(): number - { - return this._userType; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateChatEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdateChatEvent.ts deleted file mode 100644 index bef476b1..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateChatEvent.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdateChatEvent extends RoomWidgetUpdateEvent -{ - public static CHAT_EVENT: string = 'RWUCE_CHAT_EVENT'; - public static CHAT_TYPE_SPEAK: number = 0; - public static CHAT_TYPE_WHISPER: number = 1; - public static CHAT_TYPE_SHOUT: number = 2; - public static CHAT_TYPE_RESPECT: number = 3; - public static CHAT_TYPE_PETRESPECT: number = 4; - public static CHAT_TYPE_NOTIFY: number = 5; - public static CHAT_TYPE_PETTREAT: number = 6; - public static CHAT_TYPE_PETREVIVE: number = 7; - public static CHAT_TYPE_PET_REBREED_FERTILIZE: number = 8; - public static CHAT_TYPE_PET_SPEED_FERTILIZE: number = 9; - public static CHAT_TYPE_BOT_SPEAK: number = 10; - public static CHAT_TYPE_BOT_SHOUT: number = 11; - public static CHAT_TYPE_BOT_WHISPER: number = 12; - - private _userId: number; - private _text: string; - private _chatType: number; - private _userName: string; - private _links: string[]; - private _userX: number; - private _userY: number; - private _userImage: string; - private _userColor: number; - private _roomId: number; - private _userCategory: number; - private _userType: number; - private _petType: number; - private _styleId: number; - - constructor(type: string, userId: number, text: string, userName: string, userCategory: number, userType: number, petType: number, userX: number, userY: number, userImage: string, userColor: number, roomId: number, chatType: number = 0, styleId: number = 0, links: string[] = null) - { - super(type); - - this._userId = userId; - this._text = text; - this._chatType = chatType; - this._userName = userName; - this._userCategory = userCategory; - this._userType = userType; - this._petType = petType; - this._links = links; - this._userX = userX; - this._userY = userY; - this._userImage = userImage; - this._userColor = userColor; - this._roomId = roomId; - this._styleId = styleId; - } - - public get userId(): number - { - return this._userId; - } - - public get text(): string - { - return this._text; - } - - public get chatType(): number - { - return this._chatType; - } - - public get userName(): string - { - return this._userName; - } - - public get userCategory(): number - { - return this._userCategory; - } - - public get userType(): number - { - return this._userType; - } - - public get petType(): number - { - return this._petType; - } - - public get links(): string[] - { - return this._links; - } - - public get userX(): number - { - return this._userX; - } - - public get userY(): number - { - return this._userY; - } - - public get userImage(): string - { - return this._userImage; - } - - public get userColor(): number - { - return this._userColor; - } - - public get roomId(): number - { - return this._roomId; - } - - public get styleId(): number - { - return this._styleId; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateCreditFurniEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdateCreditFurniEvent.ts deleted file mode 100644 index be70172a..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateCreditFurniEvent.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdateCreditFurniEvent extends RoomWidgetUpdateEvent -{ - public static CREDIT_FURNI_UPDATE: string = 'RWUCFE_CREDIT_FURNI_UPDATE'; - - private _objectId: number; - private _value: number; - private _furniType: string; - - constructor(type: string, objectId: number, value: number, furniType: string) - { - super(type); - - this._objectId = objectId; - this._value = value; - this._furniType = furniType; - } - - public get objectId(): number - { - return this._objectId; - } - - public get value(): number - { - return this._value; - } - - public get furniType(): string - { - return this._furniType; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateCustomStackHeightEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdateCustomStackHeightEvent.ts deleted file mode 100644 index 983b5633..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateCustomStackHeightEvent.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdateCustomStackHeightEvent extends RoomWidgetUpdateEvent -{ - public static UPDATE_CUSTOM_STACK_HEIGHT: string = 'RWUCSHE_UPDATE_CUSTOM_STACK_HEIGHT'; - - private _objectId: number; - private _height: number; - - constructor(objectId: number, height: number = 0) - { - super(RoomWidgetUpdateCustomStackHeightEvent.UPDATE_CUSTOM_STACK_HEIGHT); - - this._objectId = objectId; - this._height = height; - } - - public get objectId(): number - { - return this._objectId; - } - - public get height(): number - { - return this._height; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateDanceStatusEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdateDanceStatusEvent.ts deleted file mode 100644 index a1c0d206..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateDanceStatusEvent.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdateDanceStatusEvent extends RoomWidgetUpdateEvent -{ - public static UPDATE_DANCE: string = 'RWUDSE_UPDATE_DANCE'; - - private _isDancing: boolean; - - constructor(isDancing: boolean) - { - super(RoomWidgetUpdateDanceStatusEvent.UPDATE_DANCE); - - this._isDancing = isDancing; - } - - public get isDancing(): boolean - { - return this._isDancing; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateDecorateModeEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdateDecorateModeEvent.ts deleted file mode 100644 index 212e371c..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateDecorateModeEvent.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdateDecorateModeEvent extends RoomWidgetUpdateEvent -{ - public static UPDATE_DECORATE: string = 'RWUDME_UPDATE_DECORATE'; - - private _isDecorating: boolean; - - constructor(isDecorating: boolean) - { - super(RoomWidgetUpdateDecorateModeEvent.UPDATE_DECORATE); - - this._isDecorating = isDecorating; - } - - public get isDecorating(): boolean - { - return this._isDecorating; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateDimmerEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdateDimmerEvent.ts deleted file mode 100644 index 30556c71..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateDimmerEvent.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { RoomDimmerPreset } from './RoomDimmerPreset'; -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdateDimmerEvent extends RoomWidgetUpdateEvent -{ - public static PRESETS: string = 'RWUDE_PRESETS'; - public static HIDE: string = 'RWUDE_HIDE'; - - private _selectedPresetId: number = 0; - private _presets: RoomDimmerPreset[]; - - constructor(type: string) - { - super(type); - - this._presets = []; - } - - public get presetCount(): number - { - return this._presets.length; - } - - public get presets(): RoomDimmerPreset[] - { - return this._presets; - } - - public get selectedPresetId(): number - { - return this._selectedPresetId; - } - - public set selectedPresetId(k: number) - { - this._selectedPresetId = k; - } - - public setPresetValues(id: number, type: number, color: number, brightness: number): void - { - const preset = new RoomDimmerPreset(id, type, color, brightness); - - this._presets[(id - 1)] = preset; - } - - public getPresetNumber(id: number): RoomDimmerPreset - { - return this._presets[id]; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateDimmerStateEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdateDimmerStateEvent.ts deleted file mode 100644 index 80dea562..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateDimmerStateEvent.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdateDimmerStateEvent extends RoomWidgetUpdateEvent -{ - public static DIMMER_STATE: string = 'RWUDSE_DIMMER_STATE'; - - private _state: number; - private _presetId: number; - private _effectId: number; - private _color: number; - private _brightness: number; - - constructor(state: number, presetId: number, effectId: number, color: number, brightness: number) - { - super(RoomWidgetUpdateDimmerStateEvent.DIMMER_STATE); - - this._state = state; - this._presetId = presetId; - this._effectId = effectId; - this._color = color; - this._brightness = brightness; - } - - public get state(): number - { - return this._state; - } - - public get presetId(): number - { - return this._presetId; - } - - public get effectId(): number - { - return this._effectId; - } - - public get color(): number - { - return this._color; - } - - public get brightness(): number - { - return this._brightness; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateExternalImageEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdateExternalImageEvent.ts deleted file mode 100644 index 781f2b44..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateExternalImageEvent.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { IPhotoData } from './IPhotoData'; -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdateExternalImageEvent extends RoomWidgetUpdateEvent -{ - public static UPDATE_EXTERNAL_IMAGE: string = 'RWUEIE_UPDATE_EXTERNAL_IMAGE'; - - private _objectId: number; - private _photoData: IPhotoData; - - constructor(objectId: number, photoData: IPhotoData = null) - { - super(RoomWidgetUpdateExternalImageEvent.UPDATE_EXTERNAL_IMAGE); - - this._objectId = objectId; - this._photoData = photoData; - } - - public get objectId(): number - { - return this._objectId; - } - - public get photoData(): IPhotoData - { - return this._photoData; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateInfostandEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdateInfostandEvent.ts deleted file mode 100644 index 0e383daa..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateInfostandEvent.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdateInfostandEvent extends RoomWidgetUpdateEvent -{} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateMannequinEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdateMannequinEvent.ts deleted file mode 100644 index 1894a9fb..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateMannequinEvent.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdateMannequinEvent extends RoomWidgetUpdateEvent -{ - public static MANNEQUIN_UPDATE: string = 'RWUME_MANNEQUIN_UPDATE'; - - private _objectId: number; - private _figure: string; - private _gender: string; - private _name: string; - - constructor(type: string, objectId: number, figure: string, gender: string, name: string) - { - super(type); - - this._objectId = objectId; - this._figure = figure; - this._gender = gender; - this._name = name; - } - - public get objectId(): number - { - return this._objectId; - } - - public get figure(): string - { - return this._figure; - } - - public get gender(): string - { - return this._gender; - } - - public get name(): string - { - return this._name; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdatePresentDataEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdatePresentDataEvent.ts deleted file mode 100644 index 4a4567b3..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdatePresentDataEvent.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdatePresentDataEvent extends RoomWidgetUpdateEvent -{ - public static PACKAGEINFO: string = 'RWUPDE_PACKAGEINFO'; - public static CONTENTS: string = 'RWUPDE_CONTENTS'; - public static CONTENTS_CLUB: string = 'RWUPDE_CONTENTS_CLUB'; - public static CONTENTS_FLOOR: string = 'RWUPDE_CONTENTS_FLOOR'; - public static CONTENTS_LANDSCAPE: string = 'RWUPDE_CONTENTS_LANDSCAPE'; - public static CONTENTS_WALLPAPER: string = 'RWUPDE_CONTENTS_WALLPAPER'; - public static CONTENTS_IMAGE: string = 'RWUPDE_CONTENTS_IMAGE'; - - private _objectId: number = -1; - private _classId: number = 0; - private _itemType: string = ''; - private _giftMessage: string = ''; - private _imageUrl: string = null; - private _isController: boolean; - private _purchaserName: string; - private _purchaserFigure: string; - private _placedItemId: number = -1; - private _placedItemType: string = ''; - private _placedInRoom: boolean; - - constructor(type: string, objectId: number, giftMessage: string, isOwnerOfFurniture: boolean = false, imageUrl: string = null, purchaserName: string = null, purchaserFigure: string = null) - { - super(type); - - this._objectId = objectId; - this._giftMessage = giftMessage; - this._imageUrl = imageUrl; - this._isController = isOwnerOfFurniture; - this._purchaserName = purchaserName; - this._purchaserFigure = purchaserFigure; - } - - public get objectId(): number - { - return this._objectId; - } - - public get classId(): number - { - return this._classId; - } - - public set classId(classId: number) - { - this._classId = classId; - } - - public get itemType(): string - { - return this._itemType; - } - - public set itemType(type: string) - { - this._itemType = type; - } - - public get giftMessage(): string - { - return this._giftMessage; - } - - public get imageUrl(): string - { - return this._imageUrl; - } - - public get isController(): boolean - { - return this._isController; - } - - public get purchaserName(): string - { - return this._purchaserName; - } - - public get purchaserFigure(): string - { - return this._purchaserFigure; - } - - public get placedItemId(): number - { - return this._placedItemId; - } - - public set placedItemId(itemId: number) - { - this._placedItemId = itemId; - } - - public get placedInRoom(): boolean - { - return this._placedInRoom; - } - - public set placedInRoom(flag: boolean) - { - this._placedInRoom = flag; - } - - public get placedItemType(): string - { - return this._placedItemType; - } - - public set placedItemType(type: string) - { - this._placedItemType = type; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateRoomEngineEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdateRoomEngineEvent.ts deleted file mode 100644 index 0e72f2c3..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateRoomEngineEvent.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdateRoomEngineEvent extends RoomWidgetUpdateEvent -{ - public static GAME_MODE: string = 'RWUREE_GAME_MODE'; - public static NORMAL_MODE: string = 'RWUREE_NORMAL_MODE'; - - private _roomId: number = 0; - - constructor(type: string, roomId: number) - { - super(type); - - this._roomId = roomId; - } - - public get roomId(): number - { - return this._roomId; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateSongEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdateSongEvent.ts deleted file mode 100644 index a676a06a..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateSongEvent.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdateSongEvent extends RoomWidgetUpdateEvent -{ - public static PLAYING_CHANGED: string = 'RWUSE_PLAYING_CHANGED'; - public static DATA_RECEIVED: string = 'RWUSE_DATA_RECEIVED'; - - private _songId: number; - private _songName: string; - private _songAuthor: string; - - constructor(type: string, songId: number, songName: string, songAuthor: string) - { - super(type); - - this._songId = songId; - this._songName = songName; - this._songAuthor = songAuthor; - } - - public get songId(): number - { - return this._songId; - } - - public get songName(): string - { - return this._songName; - } - - public get songAuthor(): string - { - return this._songAuthor; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateTrophyEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdateTrophyEvent.ts deleted file mode 100644 index b13b2b66..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateTrophyEvent.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdateTrophyEvent extends RoomWidgetUpdateEvent -{ - public static TROPHY_UPDATE: string = 'RWUTE_TROPHY_UPDATE'; - - private _color: number; - private _name: string; - private _date: string; - private _message: string; - private _extra: number; - - constructor(type: string, color: number, name: string, date: string, message: string, extra: number) - { - super(type); - - this._color = color; - this._name = name; - this._date = date; - this._message = message; - this._extra = extra; - } - - public get color(): number - { - return this._color; - } - - public get name(): string - { - return this._name; - } - - public get date(): string - { - return this._date; - } - - public get message(): string - { - return this._message; - } - - public get extra(): number - { - return this._extra; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateUserDataEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdateUserDataEvent.ts deleted file mode 100644 index 7ad9f2f3..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateUserDataEvent.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdateUserDataEvent extends RoomWidgetUpdateEvent -{ - public static USER_DATA_UPDATED: string = 'RWUUDE_USER_DATA_UPDATED'; - - constructor() - { - super(RoomWidgetUpdateUserDataEvent.USER_DATA_UPDATED); - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateYoutubeDisplayEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUpdateYoutubeDisplayEvent.ts deleted file mode 100644 index 0a4773e1..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateYoutubeDisplayEvent.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetUpdateYoutubeDisplayEvent extends RoomWidgetUpdateEvent -{ - public static UPDATE_YOUTUBE_DISPLAY: string = 'RWUEIE_UPDATE_YOUTUBE_DISPLAY'; - - private _objectId: number; - private _hasControl: boolean; - - constructor(objectId: number, hasControl = false) - { - super(RoomWidgetUpdateYoutubeDisplayEvent.UPDATE_YOUTUBE_DISPLAY); - - this._objectId = objectId; - this._hasControl = hasControl; - } - - public get objectId(): number - { - return this._objectId; - } - - public get hasControl(): boolean - { - return this._hasControl; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUseProductBubbleEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetUseProductBubbleEvent.ts deleted file mode 100644 index 54c8ef62..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetUseProductBubbleEvent.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; -import { UseProductItem } from './UseProductItem'; - -export class RoomWidgetUseProductBubbleEvent extends RoomWidgetUpdateEvent -{ - public static USE_PRODUCT_BUBBLES: string = 'RWUPBE_USE_PRODUCT_BUBBLES'; - - private _items: UseProductItem[]; - - constructor(type: string, items: UseProductItem[]) - { - super(type); - - this._items = items; - } - - public get items(): UseProductItem[] - { - return this._items; - } -} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetWordQuizUpdateEvent.ts b/src/api/nitro/room/widgets/events/RoomWidgetWordQuizUpdateEvent.ts deleted file mode 100644 index 3652881c..00000000 --- a/src/api/nitro/room/widgets/events/RoomWidgetWordQuizUpdateEvent.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { IQuestion } from '@nitrots/nitro-renderer'; -import { RoomWidgetUpdateEvent } from './RoomWidgetUpdateEvent'; - -export class RoomWidgetWordQuizUpdateEvent extends RoomWidgetUpdateEvent -{ - public static readonly NEW_QUESTION = 'RWPUW_NEW_QUESTION'; - public static readonly QUESTION_FINISHED = 'RWPUW_QUESION_FINSIHED'; - public static readonly QUESTION_ANSWERED = 'RWPUW_QUESTION_ANSWERED'; - - private _id: number = -1; - private _pollType: string = null; - private _pollId: number = -1; - private _questionId: number = -1; - private _duration: number = -1; - private _question: IQuestion = null; - private _userId: number = -1; - private _value: string; - private _answerCounts: Map; - - constructor(type: string, id: number) - { - super(type); - this._id = id; - } - - public get id(): number - { - return this._id; - } - - public get pollType(): string - { - return this._pollType; - } - - public set pollType(k: string) - { - this._pollType = k; - } - - public get pollId(): number - { - return this._pollId; - } - - public set pollId(k: number) - { - this._pollId = k; - } - - public get questionId(): number - { - return this._questionId; - } - - public set questionId(k: number) - { - this._questionId = k; - } - - public get duration(): number - { - return this._duration; - } - - public set duration(k: number) - { - this._duration = k; - } - - public get question(): IQuestion - { - return this._question; - } - - public set question(k: IQuestion) - { - this._question = k; - } - - public get userId(): number - { - return this._userId; - } - - public set userId(k: number) - { - this._userId = k; - } - - public get value(): string - { - return this._value; - } - - public set value(k: string) - { - this._value = k; - } - - public get answerCounts(): Map - { - return this._answerCounts; - } - - public set answerCounts(k: Map) - { - this._answerCounts = k; - } -} diff --git a/src/api/nitro/room/widgets/events/UseProductItem.ts b/src/api/nitro/room/widgets/events/UseProductItem.ts deleted file mode 100644 index c886c403..00000000 --- a/src/api/nitro/room/widgets/events/UseProductItem.ts +++ /dev/null @@ -1,50 +0,0 @@ -export class UseProductItem -{ - private _id: number; - private _category: number; - private _name: string; - private _requestRoomObjectId: number; - private _targetRoomObjectId: number; - private _requestInventoryStripId: number; - private _replace: boolean; - - constructor(id: number, category: number, name: string, requestRoomObjectId: number, targetRoomObjectId: number, requestInventoryStripId: number, replace: boolean) - { - this._id = id; - this._category = category; - this._name = name; - this._requestRoomObjectId = requestRoomObjectId; - this._requestInventoryStripId = requestInventoryStripId; - this._replace = replace; - } - - public get id(): number - { - return this._id; - } - - public get category(): number - { - return this._category; - } - - public get name(): string - { - return this._name; - } - - public get requestRoomObjectId(): number - { - return this._requestRoomObjectId; - } - - public get requestInventoryStripId(): number - { - return this._requestInventoryStripId; - } - - public get replace(): boolean - { - return this._replace; - } -} diff --git a/src/api/nitro/room/widgets/events/index.ts b/src/api/nitro/room/widgets/events/index.ts deleted file mode 100644 index ca4183f4..00000000 --- a/src/api/nitro/room/widgets/events/index.ts +++ /dev/null @@ -1,36 +0,0 @@ -export * from './IPhotoData'; -export * from './RoomDimmerPreset'; -export * from './RoomObjectItem'; -export * from './RoomWidgetAvatarInfoEvent'; -export * from './RoomWidgetChooserContentEvent'; -export * from './RoomWidgetFloodControlEvent'; -export * from './RoomWidgetObjectNameEvent'; -export * from './RoomWidgetPollUpdateEvent'; -export * from './RoomWidgetUpdateBackgroundColorPreviewEvent'; -export * from './RoomWidgetUpdateChatEvent'; -export * from './RoomWidgetUpdateChatInputContentEvent'; -export * from './RoomWidgetUpdateCreditFurniEvent'; -export * from './RoomWidgetUpdateCustomStackHeightEvent'; -export * from './RoomWidgetUpdateDanceStatusEvent'; -export * from './RoomWidgetUpdateDecorateModeEvent'; -export * from './RoomWidgetUpdateDimmerEvent'; -export * from './RoomWidgetUpdateDimmerStateEvent'; -export * from './RoomWidgetUpdateEvent'; -export * from './RoomWidgetUpdateExternalImageEvent'; -export * from './RoomWidgetUpdateInfostandEvent'; -export * from './RoomWidgetUpdateInfostandFurniEvent'; -export * from './RoomWidgetUpdateInfostandPetEvent'; -export * from './RoomWidgetUpdateInfostandRentableBotEvent'; -export * from './RoomWidgetUpdateInfostandUserEvent'; -export * from './RoomWidgetUpdateMannequinEvent'; -export * from './RoomWidgetUpdatePresentDataEvent'; -export * from './RoomWidgetUpdateRentableBotChatEvent'; -export * from './RoomWidgetUpdateRoomEngineEvent'; -export * from './RoomWidgetUpdateRoomObjectEvent'; -export * from './RoomWidgetUpdateSongEvent'; -export * from './RoomWidgetUpdateTrophyEvent'; -export * from './RoomWidgetUpdateUserDataEvent'; -export * from './RoomWidgetUpdateYoutubeDisplayEvent'; -export * from './RoomWidgetUseProductBubbleEvent'; -export * from './RoomWidgetWordQuizUpdateEvent'; -export * from './UseProductItem'; diff --git a/src/api/nitro/room/widgets/handlers/FurniChooserWidgetHandler.ts b/src/api/nitro/room/widgets/handlers/FurniChooserWidgetHandler.ts deleted file mode 100644 index 46c3f502..00000000 --- a/src/api/nitro/room/widgets/handlers/FurniChooserWidgetHandler.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { NitroEvent, RoomObjectCategory, RoomObjectVariable, RoomWidgetEnum } from '@nitrots/nitro-renderer'; -import { GetRoomEngine, GetSessionDataManager } from '../../../..'; -import { LocalizeText } from '../../../../utils'; -import { RoomObjectItem, RoomWidgetChooserContentEvent, RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetMessage, RoomWidgetRequestWidgetMessage, RoomWidgetRoomObjectMessage } from '../messages'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class FurniChooserWidgetHandler extends RoomWidgetHandler -{ - public processEvent(event: NitroEvent): void - { - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - if(!message) return null; - - switch(message.type) - { - case RoomWidgetRequestWidgetMessage.FURNI_CHOOSER: - this.processChooser(); - break; - case RoomWidgetRoomObjectMessage.SELECT_OBJECT: - this.selectRoomObject((message as RoomWidgetRoomObjectMessage)); - break; - } - - return null; - } - - private processChooser(): void - { - const roomId = this.container.roomSession.roomId; - const items: RoomObjectItem[] = []; - - const wallItems = GetRoomEngine().getRoomObjects(roomId, RoomObjectCategory.WALL); - const floorItems = GetRoomEngine().getRoomObjects(roomId, RoomObjectCategory.FLOOR); - - wallItems.forEach(roomObject => - { - let name = roomObject.type; - - if(name.startsWith('poster')) - { - name = LocalizeText(`poster_${ name.replace('poster', '') }_name`); - } - else - { - const typeId = roomObject.model.getValue(RoomObjectVariable.FURNITURE_TYPE_ID); - const furniData = GetSessionDataManager().getWallItemData(typeId); - - if(furniData && furniData.name.length) name = furniData.name; - } - - items.push(new RoomObjectItem(roomObject.id, RoomObjectCategory.WALL, name)); - }); - - floorItems.forEach(roomObject => - { - let name = roomObject.type; - - const typeId = roomObject.model.getValue(RoomObjectVariable.FURNITURE_TYPE_ID); - const furniData = GetSessionDataManager().getFloorItemData(typeId); - - if(furniData && furniData.name.length) name = furniData.name; - - items.push(new RoomObjectItem(roomObject.id, RoomObjectCategory.FLOOR, name)); - }); - - items.sort((a, b) => - { - return (a.name < b.name) ? -1 : 1; - }); - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetChooserContentEvent(RoomWidgetChooserContentEvent.FURNI_CHOOSER_CONTENT, items)); - } - - private selectRoomObject(message: RoomWidgetRoomObjectMessage): void - { - if((message.category !== RoomObjectCategory.WALL) && (message.category !== RoomObjectCategory.FLOOR)) return; - - GetRoomEngine().selectRoomObject(this.container.roomSession.roomId, message.id, message.category); - } - - public get type(): string - { - return RoomWidgetEnum.FURNI_CHOOSER; - } - - public get eventTypes(): string[] - { - return []; - } - - public get messageTypes(): string[] - { - return [ - RoomWidgetRequestWidgetMessage.FURNI_CHOOSER, - RoomWidgetRoomObjectMessage.SELECT_OBJECT - ]; - } -} diff --git a/src/api/nitro/room/widgets/handlers/FurnitureContextMenuWidgetHandler.ts b/src/api/nitro/room/widgets/handlers/FurnitureContextMenuWidgetHandler.ts deleted file mode 100644 index 02f838e9..00000000 --- a/src/api/nitro/room/widgets/handlers/FurnitureContextMenuWidgetHandler.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { NitroEvent, RoomEngineTriggerWidgetEvent, RoomWidgetEnum } from '@nitrots/nitro-renderer'; -import { RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetMessage, RoomWidgetUseProductMessage } from '../messages'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class FurnitureContextMenuWidgetHandler extends RoomWidgetHandler -{ - public processEvent(event: NitroEvent): void - { - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - switch(message.type) - { - case RoomWidgetUseProductMessage.MONSTERPLANT_SEED: - const productMessage = (message as RoomWidgetUseProductMessage); - - this.container.roomSession.useMultistateItem(productMessage.objectId); - break; - } - - return null; - } - - public get type(): string - { - return RoomWidgetEnum.FURNITURE_CONTEXT_MENU; - } - - public get eventTypes(): string[] - { - return [ - RoomEngineTriggerWidgetEvent.OPEN_FURNI_CONTEXT_MENU, - RoomEngineTriggerWidgetEvent.CLOSE_FURNI_CONTEXT_MENU - ]; - } - - public get messageTypes(): string[] - { - return [ - RoomWidgetUseProductMessage.MONSTERPLANT_SEED - ]; - } -} diff --git a/src/api/nitro/room/widgets/handlers/FurnitureCreditWidgetHandler.ts b/src/api/nitro/room/widgets/handlers/FurnitureCreditWidgetHandler.ts deleted file mode 100644 index 7ab62fbb..00000000 --- a/src/api/nitro/room/widgets/handlers/FurnitureCreditWidgetHandler.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { FurnitureExchangeComposer, NitroEvent, RoomObjectVariable, RoomWidgetEnum } from '@nitrots/nitro-renderer'; -import { RoomWidgetCreditFurniRedeemMessage, RoomWidgetUpdateCreditFurniEvent, RoomWidgetUpdateEvent } from '..'; -import { GetRoomEngine } from '../..'; -import { IsOwnerOfFurniture } from '../../..'; -import { RoomWidgetFurniToWidgetMessage, RoomWidgetMessage } from '../messages'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class FurnitureCreditWidgetHandler extends RoomWidgetHandler -{ - public processEvent(event: NitroEvent): void - { - return; - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - switch(message.type) - { - case RoomWidgetFurniToWidgetMessage.REQUEST_CREDITFURNI: { - const creditMessage = (message as RoomWidgetFurniToWidgetMessage); - - const roomObject = GetRoomEngine().getRoomObject(creditMessage.roomId, creditMessage.objectId, creditMessage.category); - - if(!roomObject || !IsOwnerOfFurniture(roomObject)) return; - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdateCreditFurniEvent(RoomWidgetUpdateCreditFurniEvent.CREDIT_FURNI_UPDATE, creditMessage.objectId, roomObject.model.getValue(RoomObjectVariable.FURNITURE_CREDIT_VALUE), (roomObject.model.getValue(RoomObjectVariable.FURNITURE_TYPE_ID) + '_' + creditMessage.type + '_' + creditMessage.objectId))); - - break; - } - case RoomWidgetCreditFurniRedeemMessage.REDEEM: { - const redeemMessage = (message as RoomWidgetCreditFurniRedeemMessage); - - this.container.roomSession.connection.send(new FurnitureExchangeComposer(redeemMessage.objectId)); - - break; - } - } - - return null; - } - - public get type(): string - { - return RoomWidgetEnum.FURNI_CREDIT_WIDGET; - } - - public get eventTypes(): string[] - { - return []; - } - - public get messageTypes(): string[] - { - return [ - RoomWidgetFurniToWidgetMessage.REQUEST_CREDITFURNI, - RoomWidgetCreditFurniRedeemMessage.REDEEM - ]; - } -} diff --git a/src/api/nitro/room/widgets/handlers/FurnitureCustomStackHeightWidgetHandler.ts b/src/api/nitro/room/widgets/handlers/FurnitureCustomStackHeightWidgetHandler.ts deleted file mode 100644 index d9d858b8..00000000 --- a/src/api/nitro/room/widgets/handlers/FurnitureCustomStackHeightWidgetHandler.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { NitroEvent, RoomEngineTriggerWidgetEvent, RoomWidgetEnum } from '@nitrots/nitro-renderer'; -import { GetRoomEngine } from '../../../..'; -import { RoomWidgetUpdateCustomStackHeightEvent, RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetMessage } from '../messages'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class FurnitureCustomStackHeightWidgetHandler extends RoomWidgetHandler -{ - private _lastFurniId: number = -1; - - public processEvent(event: NitroEvent): void - { - switch(event.type) - { - case RoomEngineTriggerWidgetEvent.OPEN_WIDGET: { - const widgetEvent = (event as RoomEngineTriggerWidgetEvent); - - const roomObject = GetRoomEngine().getRoomObject(widgetEvent.roomId, widgetEvent.objectId, widgetEvent.category); - - if(!roomObject) return; - - this._lastFurniId = widgetEvent.objectId; - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdateCustomStackHeightEvent(this._lastFurniId, roomObject.getLocation().z)); - return; - } - case RoomEngineTriggerWidgetEvent.CLOSE_WIDGET: { - const widgetEvent = (event as RoomEngineTriggerWidgetEvent); - - if(widgetEvent.objectId !== this._lastFurniId) return; - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdateCustomStackHeightEvent(-1)); - return; - } - } - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - switch(message.type) - { - } - - return null; - } - - public get type(): string - { - return RoomWidgetEnum.CUSTOM_STACK_HEIGHT; - } - - public get eventTypes(): string[] - { - return []; - } - - public get messageTypes(): string[] - { - return []; - } -} diff --git a/src/api/nitro/room/widgets/handlers/FurnitureDimmerWidgetHandler.ts b/src/api/nitro/room/widgets/handlers/FurnitureDimmerWidgetHandler.ts deleted file mode 100644 index b0d62b45..00000000 --- a/src/api/nitro/room/widgets/handlers/FurnitureDimmerWidgetHandler.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { NitroEvent, RoomControllerLevel, RoomEngineDimmerStateEvent, RoomEngineTriggerWidgetEvent, RoomSessionDimmerPresetsEvent, RoomWidgetEnum } from '@nitrots/nitro-renderer'; -import { GetRoomEngine } from '../..'; -import { GetSessionDataManager } from '../../..'; -import { RoomWidgetUpdateDimmerEvent, RoomWidgetUpdateDimmerStateEvent, RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetDimmerChangeStateMessage, RoomWidgetDimmerPreviewMessage, RoomWidgetDimmerSavePresetMessage, RoomWidgetFurniToWidgetMessage, RoomWidgetMessage } from '../messages'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class FurnitureDimmerWidgetHandler extends RoomWidgetHandler -{ - public processEvent(event: NitroEvent): void - { - switch(event.type) - { - case RoomSessionDimmerPresetsEvent.ROOM_DIMMER_PRESETS: { - const presetsEvent = (event as RoomSessionDimmerPresetsEvent); - const updateEvent = new RoomWidgetUpdateDimmerEvent(RoomWidgetUpdateDimmerEvent.PRESETS); - - updateEvent.selectedPresetId = presetsEvent.selectedPresetId; - - let i = 0; - - while(i < presetsEvent.presetCount) - { - const preset = presetsEvent.getPreset(i); - - if(preset) updateEvent.setPresetValues(preset.id, preset.type, preset.color, preset.brightness); - - i++; - } - - this.container.eventDispatcher.dispatchEvent(updateEvent); - return; - } - case RoomEngineDimmerStateEvent.ROOM_COLOR: { - const stateEvent = (event as RoomEngineDimmerStateEvent); - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdateDimmerStateEvent(stateEvent.state, stateEvent.presetId, stateEvent.effectId, stateEvent.color, stateEvent.brightness)); - return; - } - case RoomEngineTriggerWidgetEvent.REMOVE_DIMMER: { - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdateDimmerEvent(RoomWidgetUpdateDimmerEvent.HIDE)); - return; - } - } - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - switch(message.type) - { - case RoomWidgetFurniToWidgetMessage.REQUEST_DIMMER: { - if(this.canOpenWidget()) this.container.roomSession.requestMoodlightSettings(); - - break; - } - case RoomWidgetDimmerSavePresetMessage.SAVE_PRESET: { - if(this.canOpenWidget()) - { - const savePresetMessage = (message as RoomWidgetDimmerSavePresetMessage); - - this.container.roomSession.updateMoodlightData(savePresetMessage.presetNumber, savePresetMessage.effectTypeId, savePresetMessage.color, savePresetMessage.brightness, savePresetMessage.apply); - } - - break; - } - case RoomWidgetDimmerChangeStateMessage.CHANGE_STATE: { - if(this.canOpenWidget()) this.container.roomSession.toggleMoodlightState(); - - break; - } - case RoomWidgetDimmerPreviewMessage.PREVIEW_DIMMER_PRESET: { - const roomId = this.container.roomSession.roomId; - const previewMessage = (message as RoomWidgetDimmerPreviewMessage); - - GetRoomEngine().updateObjectRoomColor(roomId, previewMessage.color, previewMessage.brightness, previewMessage.bgOnly); - - break; - } - } - - return null; - } - - private canOpenWidget(): boolean - { - return (this.container.roomSession.isRoomOwner || (this.container.roomSession.controllerLevel >= RoomControllerLevel.GUEST) || GetSessionDataManager().isModerator); - } - - public get type(): string - { - return RoomWidgetEnum.ROOM_DIMMER; - } - - public get eventTypes(): string[] - { - return [ - RoomSessionDimmerPresetsEvent.ROOM_DIMMER_PRESETS, - RoomEngineDimmerStateEvent.ROOM_COLOR, - RoomEngineTriggerWidgetEvent.REMOVE_DIMMER - ]; - } - - public get messageTypes(): string[] - { - return [ - RoomWidgetFurniToWidgetMessage.REQUEST_DIMMER, - RoomWidgetDimmerSavePresetMessage.SAVE_PRESET, - RoomWidgetDimmerChangeStateMessage.CHANGE_STATE, - RoomWidgetDimmerPreviewMessage.PREVIEW_DIMMER_PRESET - ]; - } -} diff --git a/src/api/nitro/room/widgets/handlers/FurnitureExternalImageWidgetHandler.ts b/src/api/nitro/room/widgets/handlers/FurnitureExternalImageWidgetHandler.ts deleted file mode 100644 index b3323520..00000000 --- a/src/api/nitro/room/widgets/handlers/FurnitureExternalImageWidgetHandler.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { NitroEvent, RoomEngineTriggerWidgetEvent, RoomObjectVariable, RoomWidgetEnum } from '@nitrots/nitro-renderer'; -import { GetRoomEngine } from '../../../..'; -import { IPhotoData, RoomWidgetUpdateEvent, RoomWidgetUpdateExternalImageEvent } from '../events'; -import { RoomWidgetMessage } from '../messages/RoomWidgetMessage'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class FurnitureExternalImageWidgetHandler extends RoomWidgetHandler -{ - private _lastFurniId: number = -1; - - public processEvent(event: NitroEvent): void - { - switch(event.type) - { - case RoomEngineTriggerWidgetEvent.OPEN_WIDGET: { - const widgetEvent = (event as RoomEngineTriggerWidgetEvent); - - const roomObject = GetRoomEngine().getRoomObject(widgetEvent.roomId, widgetEvent.objectId, widgetEvent.category); - - if(!roomObject) return; - - this._lastFurniId = widgetEvent.objectId; - - const data = roomObject.model.getValue(RoomObjectVariable.FURNITURE_DATA); - const photoData = (JSON.parse(data) as IPhotoData); - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdateExternalImageEvent(roomObject.id, photoData)); - return; - } - case RoomEngineTriggerWidgetEvent.CLOSE_WIDGET: { - const widgetEvent = (event as RoomEngineTriggerWidgetEvent); - - if(widgetEvent.objectId !== this._lastFurniId) return; - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdateExternalImageEvent(-1)); - return; - } - } - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - switch(message.type) - { - } - - return null; - } - - public get type(): string - { - return RoomWidgetEnum.EXTERNAL_IMAGE; - } - - public get eventTypes(): string[] - { - return []; - } - - public get messageTypes(): string[] - { - return []; - } -} diff --git a/src/api/nitro/room/widgets/handlers/FurnitureInternalLinkHandler.ts b/src/api/nitro/room/widgets/handlers/FurnitureInternalLinkHandler.ts deleted file mode 100644 index 8996cf38..00000000 --- a/src/api/nitro/room/widgets/handlers/FurnitureInternalLinkHandler.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { NitroEvent, RoomEngineTriggerWidgetEvent, RoomObjectVariable, RoomWidgetEnum } from '@nitrots/nitro-renderer'; -import { CreateLinkEvent } from '../../../CreateLinkEvent'; -import { GetRoomEngine } from '../../GetRoomEngine'; -import { RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetMessage } from '../messages'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class FurnitureInternalLinkHandler extends RoomWidgetHandler -{ - private static readonly INTERNALLINK = 'internalLink'; - - public processEvent(event: NitroEvent): void - { - if(!event) return; - - switch(event.type) - { - case RoomEngineTriggerWidgetEvent.REQUEST_INTERNAL_LINK: - const linkEvent = event as RoomEngineTriggerWidgetEvent; - const roomEngine = GetRoomEngine(); - if(!linkEvent || !roomEngine) return; - - const object = roomEngine.getRoomObject(linkEvent.roomId, linkEvent.objectId, linkEvent.category); - if(object) - { - let data = object.model.getValue(RoomObjectVariable.FURNITURE_DATA); - let link = data[FurnitureInternalLinkHandler.INTERNALLINK]; - if(!link || !link.length) link = object.model.getValue(RoomObjectVariable.FURNITURE_INTERNAL_LINK); - if(link && link.length) CreateLinkEvent(link); - } - } - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - return null; - } - - public get type(): string - { - return RoomWidgetEnum.INTERNAL_LINK; - } - - public get eventTypes(): string[] - { - return [ RoomEngineTriggerWidgetEvent.REQUEST_INTERNAL_LINK ]; - } - - public get messageTypes(): string[] - { - return []; - } -} diff --git a/src/api/nitro/room/widgets/handlers/FurnitureMannequinWidgetHandler.ts b/src/api/nitro/room/widgets/handlers/FurnitureMannequinWidgetHandler.ts deleted file mode 100644 index 75864ee7..00000000 --- a/src/api/nitro/room/widgets/handlers/FurnitureMannequinWidgetHandler.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { NitroEvent, RoomEngineTriggerWidgetEvent, RoomObjectVariable, RoomWidgetEnum } from '@nitrots/nitro-renderer'; -import { RoomWidgetUpdateMannequinEvent } from '..'; -import { GetRoomEngine } from '../../GetRoomEngine'; -import { RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetMessage } from '../messages'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class FurnitureMannequinWidgetHandler extends RoomWidgetHandler -{ - public processEvent(event: NitroEvent): void - { - switch(event.type) - { - case RoomEngineTriggerWidgetEvent.REQUEST_MANNEQUIN: { - const widgetEvent = (event as RoomEngineTriggerWidgetEvent); - const roomObject = GetRoomEngine().getRoomObject(widgetEvent.roomId, widgetEvent.objectId, widgetEvent.category); - - if(!roomObject) return; - - const model = roomObject.model; - const figure = model.getValue(RoomObjectVariable.FURNITURE_MANNEQUIN_FIGURE); - const gender = model.getValue(RoomObjectVariable.FURNITURE_MANNEQUIN_GENDER); - const name = model.getValue(RoomObjectVariable.FURNITURE_MANNEQUIN_NAME); - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdateMannequinEvent(RoomWidgetUpdateMannequinEvent.MANNEQUIN_UPDATE, roomObject.id, figure, gender, name)); - return; - } - } - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - switch(message.type) - { - } - - return null; - } - - public get type(): string - { - return RoomWidgetEnum.MANNEQUIN; - } - - public get eventTypes(): string[] - { - return [ RoomEngineTriggerWidgetEvent.REQUEST_MANNEQUIN ]; - } - - public get messageTypes(): string[] - { - return []; - } -} diff --git a/src/api/nitro/room/widgets/handlers/FurniturePresentWidgetHandler.ts b/src/api/nitro/room/widgets/handlers/FurniturePresentWidgetHandler.ts deleted file mode 100644 index 6de7aa2f..00000000 --- a/src/api/nitro/room/widgets/handlers/FurniturePresentWidgetHandler.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { IFurnitureData, IGetImageListener, NitroEvent, NitroRenderTexture, PetFigureData, RoomObjectCategory, RoomObjectVariable, RoomSessionPresentEvent, RoomWidgetEnum, TextureUtils, Vector3d } from '@nitrots/nitro-renderer'; -import { GetSessionDataManager, IsOwnerOfFurniture } from '../../..'; -import { GetRoomEngine, LocalizeText } from '../../../..'; -import { ProductTypeEnum } from '../../../../catalog'; -import { RoomWidgetUpdateEvent, RoomWidgetUpdatePresentDataEvent } from '../events'; -import { RoomWidgetFurniToWidgetMessage, RoomWidgetPresentOpenMessage } from '../messages'; -import { RoomWidgetMessage } from '../messages/RoomWidgetMessage'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class FurniturePresentWidgetHandler extends RoomWidgetHandler implements IGetImageListener -{ - private static FLOOR: string = 'floor'; - private static WALLPAPER: string = 'wallpaper'; - private static LANDSCAPE: string = 'landscape'; - private static POSTER: string = 'poster'; - - private _lastFurniId: number = -1; - private _name: string = null; - - public processEvent(event: NitroEvent): void - { - switch(event.type) - { - case RoomSessionPresentEvent.RSPE_PRESENT_OPENED: { - const presentEvent = (event as RoomSessionPresentEvent); - - let furniData: IFurnitureData = null; - - if(presentEvent.itemType === ProductTypeEnum.FLOOR) - { - furniData = GetSessionDataManager().getFloorItemData(presentEvent.classId); - } - else if(presentEvent.itemType === ProductTypeEnum.WALL) - { - furniData = GetSessionDataManager().getWallItemData(presentEvent.classId); - } - - let isOwnerOfFurni = false; - - if(presentEvent.placedInRoom) - { - const roomObject = GetRoomEngine().getRoomObject(this.container.roomSession.roomId, presentEvent.placedItemId, RoomObjectCategory.FLOOR); - - if(roomObject) isOwnerOfFurni = IsOwnerOfFurniture(roomObject); - } - - let giftImage: string = null; - let dataUpdateEvent: RoomWidgetUpdatePresentDataEvent = null; - - switch(presentEvent.itemType) - { - case ProductTypeEnum.WALL: { - if(furniData) - { - switch(furniData.className) - { - case FurniturePresentWidgetHandler.FLOOR: - dataUpdateEvent = new RoomWidgetUpdatePresentDataEvent(RoomWidgetUpdatePresentDataEvent.CONTENTS_FLOOR, 0, LocalizeText('inventory.furni.item.floor.name'), isOwnerOfFurni); - break; - case FurniturePresentWidgetHandler.LANDSCAPE: - dataUpdateEvent = new RoomWidgetUpdatePresentDataEvent(RoomWidgetUpdatePresentDataEvent.CONTENTS_LANDSCAPE, 0, LocalizeText('inventory.furni.item.landscape.name'), isOwnerOfFurni); - break; - case FurniturePresentWidgetHandler.WALLPAPER: - dataUpdateEvent = new RoomWidgetUpdatePresentDataEvent(RoomWidgetUpdatePresentDataEvent.CONTENTS_WALLPAPER, 0, LocalizeText('inventory.furni.item.wallpaper.name'), isOwnerOfFurni); - break; - case FurniturePresentWidgetHandler.POSTER: { - const productCode = presentEvent.productCode; - - let extras: string = null; - - if(productCode.indexOf('poster') === 0) extras = productCode.replace('poster', ''); - - giftImage = GetRoomEngine().getFurnitureWallIconUrl(presentEvent.classId, extras); - - const productData = GetSessionDataManager().getProductData(productCode); - - if(productData) this._name = productData.name; - else if(furniData) this._name = furniData.name; - - dataUpdateEvent = new RoomWidgetUpdatePresentDataEvent(RoomWidgetUpdatePresentDataEvent.CONTENTS, 0, this._name, isOwnerOfFurni, giftImage); - - break; - } - default: { - giftImage = GetRoomEngine().getFurnitureWallIconUrl(presentEvent.classId); - - if(furniData) this._name = furniData.name; - - dataUpdateEvent = new RoomWidgetUpdatePresentDataEvent(RoomWidgetUpdatePresentDataEvent.CONTENTS, 0, this._name, isOwnerOfFurni, giftImage); - break; - } - } - } - - break; - } - case ProductTypeEnum.HABBO_CLUB: - dataUpdateEvent = new RoomWidgetUpdatePresentDataEvent(RoomWidgetUpdatePresentDataEvent.CONTENTS_CLUB, 0, LocalizeText('widget.furni.present.hc'), false); - break; - default: { - if(presentEvent.placedItemType === ProductTypeEnum.PET) - { - const petfigureString = presentEvent.petFigureString; - - if(petfigureString && petfigureString.length) - { - const petFigureData = new PetFigureData(petfigureString); - - const petImage = GetRoomEngine().getRoomObjectPetImage(petFigureData.typeId, petFigureData.paletteId, petFigureData.color, new Vector3d(90), 64, this, true, 0, petFigureData.customParts); - - if(petImage) giftImage = petImage.getImage().src; - } - } - - if(!giftImage) - { - const furniImage = GetRoomEngine().getFurnitureFloorImage(presentEvent.classId, new Vector3d(90), 64, this); - - if(furniImage) giftImage = furniImage.getImage().src; - } - - const productData = GetSessionDataManager().getProductData(presentEvent.productCode); - - if(productData) this._name = productData.name; - else this._name = furniData.name; - - if(giftImage) dataUpdateEvent = new RoomWidgetUpdatePresentDataEvent(RoomWidgetUpdatePresentDataEvent.CONTENTS, 0, this._name, isOwnerOfFurni, giftImage); - - break; - } - } - - if(dataUpdateEvent) - { - dataUpdateEvent.classId = presentEvent.classId; - dataUpdateEvent.itemType = presentEvent.itemType; - dataUpdateEvent.placedItemId = presentEvent.placedItemId; - dataUpdateEvent.placedInRoom = presentEvent.placedInRoom; - dataUpdateEvent.placedItemType = presentEvent.placedItemType; - - this.container.eventDispatcher.dispatchEvent(dataUpdateEvent); - } - - return; - } - } - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - switch(message.type) - { - case RoomWidgetFurniToWidgetMessage.REQUEST_PRESENT: { - const widgetMessage = (message as RoomWidgetFurniToWidgetMessage); - - const roomObject = GetRoomEngine().getRoomObject(widgetMessage.roomId, widgetMessage.objectId, widgetMessage.category); - - if(!roomObject) return null; - - this._lastFurniId = widgetMessage.objectId; - - const giftMessage = (roomObject.model.getValue(RoomObjectVariable.FURNITURE_DATA) || ''); - const purchaserName = roomObject.model.getValue(RoomObjectVariable.FURNITURE_PURCHASER_NAME); - const purchaserFigure = roomObject.model.getValue(RoomObjectVariable.FURNITURE_PURCHASER_FIGURE); - const typeId = roomObject.model.getValue(RoomObjectVariable.FURNITURE_TYPE_ID); - const extras = roomObject.model.getValue(RoomObjectVariable.FURNITURE_EXTRAS); - const giftImage = GetRoomEngine().getFurnitureFloorImage(typeId, new Vector3d(180), 64, null, 0, extras); - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdatePresentDataEvent(RoomWidgetUpdatePresentDataEvent.PACKAGEINFO, widgetMessage.objectId, giftMessage, IsOwnerOfFurniture(roomObject), giftImage.getImage().src, purchaserName, purchaserFigure)); - - break; - } - case RoomWidgetPresentOpenMessage.OPEN_PRESENT: { - const openMessage = (message as RoomWidgetPresentOpenMessage); - - if(openMessage.objectId !== this._lastFurniId) return null; - - this.container.roomSession.openGift(openMessage.objectId); - - GetRoomEngine().changeObjectModelData(GetRoomEngine().activeRoomId, openMessage.objectId, RoomObjectCategory.FLOOR, RoomObjectVariable.FURNITURE_DISABLE_PICKING_ANIMATION, 1); - - break; - } - } - - return null; - } - - public imageReady(id: number, texture: NitroRenderTexture, image: HTMLImageElement = null): void - { - let imageUrl: string = null; - - if(image) imageUrl = image.src; - else if(texture) imageUrl = TextureUtils.generateImageUrl(texture); - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdatePresentDataEvent(RoomWidgetUpdatePresentDataEvent.CONTENTS_IMAGE, 0, this._name, false, imageUrl)); - } - - public imageFailed(id: number): void - { - - } - - public get type(): string - { - return RoomWidgetEnum.FURNI_PRESENT_WIDGET; - } - - public get eventTypes(): string[] - { - return [ - RoomSessionPresentEvent.RSPE_PRESENT_OPENED - ]; - } - - public get messageTypes(): string[] - { - return [ - RoomWidgetFurniToWidgetMessage.REQUEST_PRESENT, - RoomWidgetPresentOpenMessage.OPEN_PRESENT - ]; - } -} diff --git a/src/api/nitro/room/widgets/handlers/FurnitureRoomLinkHandler.ts b/src/api/nitro/room/widgets/handlers/FurnitureRoomLinkHandler.ts deleted file mode 100644 index 2f0a74d1..00000000 --- a/src/api/nitro/room/widgets/handlers/FurnitureRoomLinkHandler.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { IMessageEvent, NitroEvent, RoomEngineTriggerWidgetEvent, RoomObjectVariable, RoomWidgetEnum } from '@nitrots/nitro-renderer'; -import { CreateLinkEvent } from '../../../CreateLinkEvent'; -import { GetRoomEngine } from '../../GetRoomEngine'; -import { RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetMessage } from '../messages'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class FurnitureRoomLinkHandler extends RoomWidgetHandler -{ - private static readonly INTERNALLINK = 'internalLink'; - - private onRoomInfo(event: IMessageEvent): void - { - //todo - } - - public processEvent(event: NitroEvent): void - { - if(!event) return; - - switch(event.type) - { - case RoomEngineTriggerWidgetEvent.REQUEST_ROOM_LINK: - const roomLinkEvent = (event as RoomEngineTriggerWidgetEvent); - const roomEngine = GetRoomEngine(); - - if(!roomLinkEvent || !roomEngine) return; - - const object = roomEngine.getRoomObject(roomLinkEvent.roomId, roomLinkEvent.objectId, roomLinkEvent.category); - if(object) - { - const data = object.model.getValue(RoomObjectVariable.FURNITURE_DATA); - let roomId = data[FurnitureRoomLinkHandler.INTERNALLINK]; - if(!roomId || !roomId.length) roomId = object.model.getValue(RoomObjectVariable.FURNITURE_INTERNAL_LINK); - if(roomId && roomId.length) CreateLinkEvent('navigator/goto/' + roomId); - } - } - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - return null; - } - - public get type(): string - { - return RoomWidgetEnum.ROOM_LINK; - } - - public get eventTypes(): string[] - { - return [ RoomEngineTriggerWidgetEvent.REQUEST_ROOM_LINK ]; - } - - public get messageTypes(): string[] - { - return []; - } -} diff --git a/src/api/nitro/room/widgets/handlers/FurnitureTrophyWidgetHandler.ts b/src/api/nitro/room/widgets/handlers/FurnitureTrophyWidgetHandler.ts deleted file mode 100644 index 8554977a..00000000 --- a/src/api/nitro/room/widgets/handlers/FurnitureTrophyWidgetHandler.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { NitroEvent, RoomObjectVariable, RoomWidgetEnum } from '@nitrots/nitro-renderer'; -import { RoomWidgetUpdateEvent } from '..'; -import { GetRoomEngine } from '../..'; -import { RoomWidgetFurniToWidgetMessage, RoomWidgetMessage } from '../messages'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class FurnitureTrophyWidgetHandler extends RoomWidgetHandler -{ - public processEvent(event: NitroEvent): void - { - return; - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - switch(message.type) - { - case RoomWidgetFurniToWidgetMessage.REQUEST_TROPHY: { - const widgetMessage = (message as RoomWidgetFurniToWidgetMessage); - const roomObject = GetRoomEngine().getRoomObject(widgetMessage.roomId, widgetMessage.objectId, widgetMessage.category); - - if(!roomObject) return; - - const color = roomObject.model.getValue(RoomObjectVariable.FURNITURE_COLOR); - const extra = parseInt(roomObject.model.getValue(RoomObjectVariable.FURNITURE_EXTRAS)); - - let data = roomObject.model.getValue(RoomObjectVariable.FURNITURE_DATA); - - const ownerName = data.substring(0, data.indexOf('\t')); - - data = data.substring((ownerName.length + 1), data.length); - - const date = data.substring(0, data.indexOf('\t')); - const text = data.substr((date.length + 1), data.length); - - - - break; - } - } - - return null; - } - - public get type(): string - { - return RoomWidgetEnum.FURNI_TROPHY_WIDGET; - } - - public get eventTypes(): string[] - { - return []; - } - - public get messageTypes(): string[] - { - return [ - RoomWidgetFurniToWidgetMessage.REQUEST_TROPHY - ]; - } -} diff --git a/src/api/nitro/room/widgets/handlers/FurnitureYoutubeDisplayWidgetHandler.ts b/src/api/nitro/room/widgets/handlers/FurnitureYoutubeDisplayWidgetHandler.ts deleted file mode 100644 index 8974053b..00000000 --- a/src/api/nitro/room/widgets/handlers/FurnitureYoutubeDisplayWidgetHandler.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { GetYoutubeDisplayStatusMessageComposer, NitroEvent, RoomWidgetEnum, SecurityLevel } from '@nitrots/nitro-renderer'; -import { RoomEngineTriggerWidgetEvent } from '@nitrots/nitro-renderer/'; -import { RoomWidgetMessage, RoomWidgetUpdateEvent } from '..'; -import { GetSessionDataManager, IsOwnerOfFurniture, SendMessageComposer } from '../../..'; -import { GetRoomEngine } from '../../GetRoomEngine'; -import { RoomWidgetUpdateYoutubeDisplayEvent } from '../events'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class FurnitureYoutubeDisplayWidgetHandler extends RoomWidgetHandler -{ - public static readonly CONTROL_COMMAND_PREVIOUS_VIDEO = 0; - public static readonly CONTROL_COMMAND_NEXT_VIDEO = 1; - public static readonly CONTROL_COMMAND_PAUSE_VIDEO = 2; - public static readonly CONTROL_COMMAND_CONTINUE_VIDEO = 3; - - private _lastFurniId: number = -1; - - public processEvent(event: NitroEvent): void - { - switch(event.type) - { - case RoomEngineTriggerWidgetEvent.OPEN_WIDGET: { - const widgetEvent = (event as RoomEngineTriggerWidgetEvent); - - const roomObject = GetRoomEngine().getRoomObject(widgetEvent.roomId, widgetEvent.objectId, widgetEvent.category); - - if(!roomObject) return; - - this._lastFurniId = widgetEvent.objectId; - - const hasControl = GetSessionDataManager().hasSecurity(SecurityLevel.EMPLOYEE) || IsOwnerOfFurniture(roomObject); - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdateYoutubeDisplayEvent(roomObject.id, hasControl)); - SendMessageComposer(new GetYoutubeDisplayStatusMessageComposer(this._lastFurniId)); - return; - } - case RoomEngineTriggerWidgetEvent.CLOSE_WIDGET: { - const widgetEvent = (event as RoomEngineTriggerWidgetEvent); - - if(widgetEvent.objectId !== this._lastFurniId) return; - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdateYoutubeDisplayEvent(-1)); - return; - } - } - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - switch(message.type) - { - } - - return null; - } - - public get type(): string - { - return RoomWidgetEnum.YOUTUBE; - } - - public get eventTypes(): string[] - { - return []; - } - - public get messageTypes(): string[] - { - return []; - } -} diff --git a/src/api/nitro/room/widgets/handlers/IRoomWidgetHandler.ts b/src/api/nitro/room/widgets/handlers/IRoomWidgetHandler.ts deleted file mode 100644 index 4043b096..00000000 --- a/src/api/nitro/room/widgets/handlers/IRoomWidgetHandler.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NitroEvent } from '@nitrots/nitro-renderer'; -import { RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetMessage } from '../messages'; -import { IRoomWidgetHandlerManager } from './IRoomWidgetHandlerManager'; - -export interface IRoomWidgetHandler -{ - processEvent: (event: NitroEvent) => void; - processWidgetMessage: (message: RoomWidgetMessage) => RoomWidgetUpdateEvent; - container: IRoomWidgetHandlerManager; - type: string; - eventTypes: string[]; - messageTypes: string[]; -} diff --git a/src/api/nitro/room/widgets/handlers/IRoomWidgetHandlerManager.ts b/src/api/nitro/room/widgets/handlers/IRoomWidgetHandlerManager.ts deleted file mode 100644 index cb173f01..00000000 --- a/src/api/nitro/room/widgets/handlers/IRoomWidgetHandlerManager.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IEventDispatcher, IRoomSession, NitroEvent } from '@nitrots/nitro-renderer'; -import { RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetMessage } from '../messages'; -import { IRoomWidgetHandler } from './IRoomWidgetHandler'; - -export interface IRoomWidgetHandlerManager -{ - registerHandler(handler: IRoomWidgetHandler): void; - processEvent(event: NitroEvent): void; - processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent; - roomSession: IRoomSession; - eventDispatcher: IEventDispatcher; -} diff --git a/src/api/nitro/room/widgets/handlers/PollWidgetHandler.ts b/src/api/nitro/room/widgets/handlers/PollWidgetHandler.ts deleted file mode 100644 index 99639167..00000000 --- a/src/api/nitro/room/widgets/handlers/PollWidgetHandler.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { NitroEvent, RoomSessionPollEvent, RoomWidgetEnum } from '@nitrots/nitro-renderer'; -import { RoomWidgetPollUpdateEvent, RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetMessage, RoomWidgetPollMessage } from '../messages'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class PollWidgetHandler extends RoomWidgetHandler -{ - public processEvent(event: NitroEvent): void - { - const pollEvent = (event as RoomSessionPollEvent); - - let widgetEvent: RoomWidgetPollUpdateEvent; - - switch(event.type) - { - case RoomSessionPollEvent.OFFER: - widgetEvent = new RoomWidgetPollUpdateEvent(RoomWidgetPollUpdateEvent.OFFER, pollEvent.id); - widgetEvent.summary = pollEvent.summary; - widgetEvent.headline = pollEvent.headline; - break; - case RoomSessionPollEvent.ERROR: - widgetEvent = new RoomWidgetPollUpdateEvent(RoomWidgetPollUpdateEvent.ERROR, pollEvent.id); - widgetEvent.summary = pollEvent.summary; - widgetEvent.headline = pollEvent.headline; - break; - case RoomSessionPollEvent.CONTENT: - widgetEvent = new RoomWidgetPollUpdateEvent(RoomWidgetPollUpdateEvent.CONTENT, pollEvent.id); - widgetEvent.startMessage = pollEvent.startMessage; - widgetEvent.endMessage = pollEvent.endMessage; - widgetEvent.numQuestions = pollEvent.numQuestions; - widgetEvent.questionArray = pollEvent.questionArray; - widgetEvent.npsPoll = pollEvent.npsPoll; - break; - } - - if(!widgetEvent) return; - - this.container.eventDispatcher.dispatchEvent(widgetEvent); - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - const pollMessage = (message as RoomWidgetPollMessage); - switch(message.type) - { - case RoomWidgetPollMessage.START: - this.container.roomSession.sendPollStartMessage(pollMessage.id); - break; - case RoomWidgetPollMessage.REJECT: - this.container.roomSession.sendPollRejectMessage(pollMessage.id); - break; - case RoomWidgetPollMessage.ANSWER: - this.container.roomSession.sendPollAnswerMessage(pollMessage.id, pollMessage.questionId, pollMessage.answers); - break; - } - return null; - } - - public get type(): string - { - return RoomWidgetEnum.ROOM_POLL; - } - - public get eventTypes(): string[] - { - return [ RoomSessionPollEvent.OFFER, RoomSessionPollEvent.ERROR, RoomSessionPollEvent.CONTENT ]; - } - - public get messageTypes(): string[] - { - return [ RoomWidgetPollMessage.ANSWER, RoomWidgetPollMessage.REJECT, RoomWidgetPollMessage.START ]; - } -} diff --git a/src/api/nitro/room/widgets/handlers/RoomWidgetAvatarInfoHandler.ts b/src/api/nitro/room/widgets/handlers/RoomWidgetAvatarInfoHandler.ts deleted file mode 100644 index 2c979b4c..00000000 --- a/src/api/nitro/room/widgets/handlers/RoomWidgetAvatarInfoHandler.ts +++ /dev/null @@ -1,233 +0,0 @@ -import { NitroEvent, RoomEngineUseProductEvent, RoomObjectCategory, RoomObjectType, RoomObjectVariable, RoomSessionDanceEvent, RoomSessionPetStatusUpdateEvent, RoomSessionUserDataUpdateEvent, RoomWidgetEnum, SetRelationshipStatusComposer } from '@nitrots/nitro-renderer'; -import { SendMessageComposer } from '../../..'; -import { GetRoomEngine, GetSessionDataManager, IsOwnerOfFurniture } from '../../../..'; -import { MessengerFriend } from '../../../../friends/MessengerFriend'; -import { FurniCategory } from '../../../../inventory/FurniCategory'; -import { RoomWidgetAvatarInfoEvent, RoomWidgetUpdateDanceStatusEvent, RoomWidgetUpdateEvent, RoomWidgetUpdateUserDataEvent, RoomWidgetUseProductBubbleEvent, UseProductItem } from '../events'; -import { RoomWidgetAvatarExpressionMessage, RoomWidgetChangePostureMessage, RoomWidgetDanceMessage, RoomWidgetMessage, RoomWidgetRoomObjectMessage, RoomWidgetUseProductMessage, RoomWidgetUserActionMessage } from '../messages'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class RoomWidgetAvatarInfoHandler extends RoomWidgetHandler -{ - public processEvent(event: NitroEvent): void - { - switch(event.type) - { - case RoomSessionUserDataUpdateEvent.USER_DATA_UPDATED: - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdateUserDataEvent()); - return; - case RoomSessionDanceEvent.RSDE_DANCE: - const danceEvent = (event as RoomSessionDanceEvent); - - let isDancing = false; - - const userData = this.container.roomSession.userDataManager.getUserData(GetSessionDataManager().userId); - - if(userData && (userData.roomIndex === danceEvent.roomIndex)) isDancing = (danceEvent.danceId !== 0); - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdateDanceStatusEvent(isDancing)); - return; - case RoomEngineUseProductEvent.USE_PRODUCT_FROM_INVENTORY: - return; - case RoomEngineUseProductEvent.USE_PRODUCT_FROM_ROOM: - this.processUsableRoomObject((event as RoomEngineUseProductEvent).objectId); - return; - case RoomSessionPetStatusUpdateEvent.PET_STATUS_UPDATE: - this.processRoomSessionPetStatusUpdateEvent((event as RoomSessionPetStatusUpdateEvent)); - return; - } - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - let userId = 0; - - if(message instanceof RoomWidgetUserActionMessage) userId = message.userId; - - switch(message.type) - { - case RoomWidgetRoomObjectMessage.GET_OWN_CHARACTER_INFO: - this.processOwnCharacterInfo(); - break; - case RoomWidgetUserActionMessage.START_NAME_CHANGE: - // habbo help - start name change - break; - case RoomWidgetUserActionMessage.REQUEST_PET_UPDATE: - break; - case RoomWidgetUseProductMessage.PET_PRODUCT: { - const productMessage = (message as RoomWidgetUseProductMessage); - - this.container.roomSession.usePetProduct(productMessage.objectId, productMessage.petId); - break; - } - case RoomWidgetUserActionMessage.HARVEST_PET: - this.container.roomSession.harvestPet(userId); - break; - case RoomWidgetUserActionMessage.COMPOST_PLANT: - this.container.roomSession.compostPlant(userId); - break; - case RoomWidgetDanceMessage.DANCE: { - const danceMessage = (message as RoomWidgetDanceMessage); - - this.container.roomSession.sendDanceMessage(danceMessage.style); - break; - } - case RoomWidgetAvatarExpressionMessage.AVATAR_EXPRESSION: { - const expressionMessage = (message as RoomWidgetAvatarExpressionMessage); - - this.container.roomSession.sendExpressionMessage(expressionMessage.animation.ordinal) - break; - } - case RoomWidgetChangePostureMessage.CHANGE_POSTURE: { - const postureMessage = (message as RoomWidgetChangePostureMessage); - - this.container.roomSession.sendPostureMessage(postureMessage.posture); - break; - } - case RoomWidgetUserActionMessage.RELATIONSHIP_NONE: { - SendMessageComposer(new SetRelationshipStatusComposer(userId, MessengerFriend.RELATIONSHIP_NONE)); - break; - } - case RoomWidgetUserActionMessage.RELATIONSHIP_HEART: { - SendMessageComposer(new SetRelationshipStatusComposer(userId, MessengerFriend.RELATIONSHIP_HEART)); - break; - } - case RoomWidgetUserActionMessage.RELATIONSHIP_SMILE: { - SendMessageComposer(new SetRelationshipStatusComposer(userId, MessengerFriend.RELATIONSHIP_SMILE)); - break; - } - case RoomWidgetUserActionMessage.RELATIONSHIP_BOBBA: { - SendMessageComposer(new SetRelationshipStatusComposer(userId, MessengerFriend.RELATIONSHIP_BOBBA)); - break; - } - } - - return null; - } - - private processOwnCharacterInfo(): void - { - const userId = GetSessionDataManager().userId; - const userName = GetSessionDataManager().userName; - const allowNameChange = GetSessionDataManager().canChangeName; - const userData = this.container.roomSession.userDataManager.getUserData(userId); - - if(!userData) return; - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetAvatarInfoEvent(userId, userName, userData.type, userData.roomIndex, allowNameChange)); - } - - private processUsableRoomObject(objectId: number): void - { - const roomId = this.container.roomSession.roomId; - const roomObject = GetRoomEngine().getRoomObject(roomId, objectId, RoomObjectCategory.FLOOR); - - if(!roomObject || !IsOwnerOfFurniture(roomObject)) return; - - const ownerId = roomObject.model.getValue(RoomObjectVariable.FURNITURE_OWNER_ID); - const typeId = roomObject.model.getValue(RoomObjectVariable.FURNITURE_TYPE_ID); - const furniData = GetSessionDataManager().getFloorItemData(typeId); - const parts = furniData.customParams.split(' '); - const part = (parts.length ? parseInt(parts[0]) : -1); - - if(part === -1) return; - - this.processUseableProduct(roomId, objectId, part, furniData.specialType, ownerId); - } - - private processUseableProduct(roomId: number, objectId: number, part: number, specialType: number, ownerId: number, arg6 = -1): void - { - const useProductBubbles: UseProductItem[] = []; - const roomObjects = GetRoomEngine().getRoomObjects(roomId, RoomObjectCategory.UNIT); - - for(const roomObject of roomObjects) - { - const userData = this.container.roomSession.userDataManager.getUserDataByIndex(roomObject.id); - - let replace = false; - - if(!userData || (userData.type !== RoomObjectType.PET)) - { - - } - else - { - if(userData.ownerId === ownerId) - { - if(userData.hasSaddle && (specialType === FurniCategory.PET_SADDLE)) replace = true; - - const figureParts = userData.figure.split(' '); - const figurePart = (figureParts.length ? parseInt(figureParts[0]) : -1); - - if(figurePart === part) - { - if(specialType === FurniCategory.MONSTERPLANT_REVIVAL) - { - if(!userData.canRevive) continue; - } - - if(specialType === FurniCategory.MONSTERPLANT_REBREED) - { - if((userData.petLevel < 7) || userData.canRevive || userData.canBreed) continue; - } - - if(specialType === FurniCategory.MONSTERPLANT_FERTILIZE) - { - if((userData.petLevel >= 7) || userData.canRevive) continue; - } - - useProductBubbles.push(new UseProductItem(userData.roomIndex, RoomObjectCategory.UNIT, userData.name, objectId, roomObject.id, arg6, replace)); - } - } - } - } - - if(useProductBubbles.length) this.container.eventDispatcher.dispatchEvent(new RoomWidgetUseProductBubbleEvent(RoomWidgetUseProductBubbleEvent.USE_PRODUCT_BUBBLES, useProductBubbles)); - } - - private processRoomSessionPetStatusUpdateEvent(event: RoomSessionPetStatusUpdateEvent): void - { - - } - - public get type(): string - { - return RoomWidgetEnum.AVATAR_INFO; - } - - public get eventTypes(): string[] - { - return [ - RoomSessionUserDataUpdateEvent.USER_DATA_UPDATED, - RoomSessionDanceEvent.RSDE_DANCE, - RoomEngineUseProductEvent.USE_PRODUCT_FROM_INVENTORY, - RoomEngineUseProductEvent.USE_PRODUCT_FROM_ROOM, - RoomSessionPetStatusUpdateEvent.PET_STATUS_UPDATE - ]; - } - - // UserNameUpdateEvent.UNUE_NAME_UPDATED - // RoomSessionNestBreedingSuccessEvent.RSPFUE_NEST_BREEDING_SUCCESS - // RoomSessionPetLevelUpdateEvent.RSPLUE_PET_LEVEL_UPDATE - - public get messageTypes(): string[] - { - return [ - RoomWidgetRoomObjectMessage.GET_OWN_CHARACTER_INFO, - RoomWidgetUserActionMessage.START_NAME_CHANGE, - RoomWidgetUserActionMessage.REQUEST_PET_UPDATE, - RoomWidgetUseProductMessage.PET_PRODUCT, - RoomWidgetUserActionMessage.REQUEST_BREED_PET, - RoomWidgetUserActionMessage.HARVEST_PET, - RoomWidgetUserActionMessage.REVIVE_PET, - RoomWidgetUserActionMessage.COMPOST_PLANT, - RoomWidgetDanceMessage.DANCE, - RoomWidgetAvatarExpressionMessage.AVATAR_EXPRESSION, - RoomWidgetChangePostureMessage.CHANGE_POSTURE, - RoomWidgetUserActionMessage.RELATIONSHIP_NONE, - RoomWidgetUserActionMessage.RELATIONSHIP_HEART, - RoomWidgetUserActionMessage.RELATIONSHIP_SMILE, - RoomWidgetUserActionMessage.RELATIONSHIP_BOBBA - ]; - } -} diff --git a/src/api/nitro/room/widgets/handlers/RoomWidgetChatHandler.ts b/src/api/nitro/room/widgets/handlers/RoomWidgetChatHandler.ts deleted file mode 100644 index 29c7d371..00000000 --- a/src/api/nitro/room/widgets/handlers/RoomWidgetChatHandler.ts +++ /dev/null @@ -1,210 +0,0 @@ -import { AvatarFigurePartType, AvatarScaleType, AvatarSetType, IAvatarImageListener, NitroEvent, PetFigureData, RoomObjectCategory, RoomObjectType, RoomObjectVariable, RoomSessionChatEvent, RoomUserData, RoomWidgetEnum, SystemChatStyleEnum, TextureUtils, Vector3d } from '@nitrots/nitro-renderer'; -import { GetAvatarRenderManager, GetConfigurationManager, GetRoomEngine, PlaySound } from '../../../..'; -import { LocalizeText } from '../../../../utils/LocalizeText'; -import { GetRoomObjectScreenLocation } from '../../GetRoomObjectScreenLocation'; -import { RoomWidgetUpdateChatEvent, RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetMessage } from '../messages'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class RoomWidgetChatHandler extends RoomWidgetHandler implements IAvatarImageListener -{ - private _avatarColorCache: Map = new Map(); - private _avatarImageCache: Map = new Map(); - private _petImageCache: Map = new Map(); - - public processEvent(event: NitroEvent): void - { - switch(event.type) - { - case RoomSessionChatEvent.CHAT_EVENT: { - const chatEvent = (event as RoomSessionChatEvent); - - const roomObject = GetRoomEngine().getRoomObject(chatEvent.session.roomId, chatEvent.objectId, RoomObjectCategory.UNIT); - - const objectLocation = roomObject ? roomObject.getLocation() : new Vector3d(); - const bubbleLocation = GetRoomObjectScreenLocation(chatEvent.session.roomId, roomObject?.id, RoomObjectCategory.UNIT); - const userData = roomObject ? this.container.roomSession.userDataManager.getUserDataByIndex(chatEvent.objectId) : new RoomUserData(-1); - - let username = ''; - let avatarColor = 0; - let imageUrl: string = null; - let chatType = chatEvent.chatType; - let styleId = chatEvent.style; - let userType = 0; - let petType = -1; - let text = chatEvent.message; - - if(userData) - { - userType = userData.type; - - const figure = userData.figure; - - switch(userType) - { - case RoomObjectType.PET: - imageUrl = this.getPetImage(figure, 2, true, 64, roomObject.model.getValue(RoomObjectVariable.FIGURE_POSTURE)); - petType = new PetFigureData(figure).typeId; - break; - case RoomObjectType.USER: - imageUrl = this.getUserImage(figure); - break; - case RoomObjectType.RENTABLE_BOT: - case RoomObjectType.BOT: - styleId = SystemChatStyleEnum.BOT; - break; - } - - avatarColor = this._avatarColorCache.get(figure); - username = userData.name; - } - - switch(chatType) - { - case RoomSessionChatEvent.CHAT_TYPE_RESPECT: - text = LocalizeText('widgets.chatbubble.respect', [ 'username' ], [ username ]); - if(GetConfigurationManager().getValue('respect.options')['enabled']) - PlaySound(GetConfigurationManager().getValue('respect.options')['sound']) - break; - case RoomSessionChatEvent.CHAT_TYPE_PETREVIVE: - case RoomSessionChatEvent.CHAT_TYPE_PET_REBREED_FERTILIZE: - case RoomSessionChatEvent.CHAT_TYPE_PET_SPEED_FERTILIZE: { - let textKey = 'widget.chatbubble.petrevived'; - - if(chatType === RoomSessionChatEvent.CHAT_TYPE_PET_REBREED_FERTILIZE) - { - textKey = 'widget.chatbubble.petrefertilized;'; - } - - else if(chatType === RoomSessionChatEvent.CHAT_TYPE_PET_SPEED_FERTILIZE) - { - textKey = 'widget.chatbubble.petspeedfertilized'; - } - - let targetUserName: string = null; - - const newRoomObject = GetRoomEngine().getRoomObject(chatEvent.session.roomId, chatEvent.extraParam, RoomObjectCategory.UNIT); - - if(newRoomObject) - { - const newUserData = this.container.roomSession.userDataManager.getUserDataByIndex(roomObject.id); - - if(newUserData) targetUserName = newUserData.name; - } - - text = LocalizeText(textKey, [ 'petName', 'userName' ], [ username, targetUserName ]); - break; - } - case RoomSessionChatEvent.CHAT_TYPE_PETRESPECT: - text = LocalizeText('widget.chatbubble.petrespect', [ 'petname' ], [ username ]); - break; - case RoomSessionChatEvent.CHAT_TYPE_PETTREAT: - text = LocalizeText('widget.chatbubble.pettreat', [ 'petname' ], [ username ]); - break; - case RoomSessionChatEvent.CHAT_TYPE_HAND_ITEM_RECEIVED: - text = LocalizeText('widget.chatbubble.handitem', [ 'username', 'handitem' ], [ username, LocalizeText(('handitem' + chatEvent.extraParam)) ]); - break; - case RoomSessionChatEvent.CHAT_TYPE_MUTE_REMAINING: { - const hours = ((chatEvent.extraParam > 0) ? Math.floor((chatEvent.extraParam / 3600)) : 0).toString(); - const minutes = ((chatEvent.extraParam > 0) ? Math.floor((chatEvent.extraParam % 3600) / 60) : 0).toString(); - const seconds = (chatEvent.extraParam % 60).toString(); - - text = LocalizeText('widget.chatbubble.mutetime', [ 'hours', 'minutes', 'seconds' ], [ hours, minutes, seconds ]); - break; - } - } - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdateChatEvent(RoomWidgetUpdateChatEvent.CHAT_EVENT, userData.roomIndex, text, username, RoomObjectCategory.UNIT, userType, petType, bubbleLocation.x, bubbleLocation.y, imageUrl, avatarColor, chatEvent.session.roomId, chatType, styleId, [])); - - return; - } - } - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - return null; - } - - public getUserImage(figure: string): string - { - let existing = this._avatarImageCache.get(figure); - - if(!existing) - { - existing = this.setFigureImage(figure); - } - - return existing; - } - - private setFigureImage(figure: string): string - { - const avatarImage = GetAvatarRenderManager().createAvatarImage(figure, AvatarScaleType.LARGE, null, this); - - if(!avatarImage) return; - - const image = avatarImage.getCroppedImage(AvatarSetType.HEAD); - const color = avatarImage.getPartColor(AvatarFigurePartType.CHEST); - - this._avatarColorCache.set(figure, ((color && color.rgb) || 16777215)); - - avatarImage.dispose(); - - this._avatarImageCache.set(figure, image.src); - - return image.src; - } - - private getPetImage(figure: string, direction: number, _arg_3: boolean, scale: number = 64, posture: string = null): string - { - let existing = this._petImageCache.get((figure + posture)); - - if(existing) return existing; - - const figureData = new PetFigureData(figure); - const typeId = figureData.typeId; - const image = GetRoomEngine().getRoomObjectPetImage(typeId, figureData.paletteId, figureData.color, new Vector3d((direction * 45)), scale, null, false, 0, figureData.customParts, posture); - - if(image) - { - existing = TextureUtils.generateImageUrl(image.data); - - this._petImageCache.set((figure + posture), existing); - } - - return existing; - } - - public resetFigure(figure: string): void - { - this.setFigureImage(figure); - } - - public dispose(): void - { - - } - - public get disposed(): boolean - { - return false; - } - - public get type(): string - { - return RoomWidgetEnum.CHAT_WIDGET; - } - - public get eventTypes(): string[] - { - return [ - RoomSessionChatEvent.CHAT_EVENT - ]; - } - - public get messageTypes(): string[] - { - return []; - } -} diff --git a/src/api/nitro/room/widgets/handlers/RoomWidgetChatInputHandler.ts b/src/api/nitro/room/widgets/handlers/RoomWidgetChatInputHandler.ts deleted file mode 100644 index 997eb4b4..00000000 --- a/src/api/nitro/room/widgets/handlers/RoomWidgetChatInputHandler.ts +++ /dev/null @@ -1,235 +0,0 @@ -import { AvatarExpressionEnum, HabboClubLevelEnum, NitroEvent, RoomControllerLevel, RoomRotatingEffect, RoomSessionChatEvent, RoomSettingsComposer, RoomShakingEffect, RoomWidgetEnum, RoomZoomEvent, TextureUtils } from '@nitrots/nitro-renderer'; -import { GetClubMemberLevel, GetConfiguration, GetNitroInstance, SendMessageComposer } from '../../..'; -import { GetRoomEngine, GetSessionDataManager, LocalizeText, NotificationUtilities } from '../../../..'; -import { CreateLinkEvent } from '../../../CreateLinkEvent'; -import { RoomWidgetFloodControlEvent, RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetChatMessage, RoomWidgetChatSelectAvatarMessage, RoomWidgetChatTypingMessage, RoomWidgetMessage, RoomWidgetRequestWidgetMessage } from '../messages'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class RoomWidgetChatInputHandler extends RoomWidgetHandler -{ - public processEvent(event: NitroEvent): void - { - switch(event.type) - { - case RoomSessionChatEvent.FLOOD_EVENT: { - const floodEvent = (event as RoomSessionChatEvent); - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetFloodControlEvent(parseInt(floodEvent.message))); - } - } - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - switch(message.type) - { - case RoomWidgetChatTypingMessage.TYPING_STATUS: { - const typingMessage = (message as RoomWidgetChatTypingMessage); - - this.container.roomSession.sendChatTypingMessage(typingMessage.isTyping); - break; - } - case RoomWidgetChatMessage.MESSAGE_CHAT: { - const chatMessage = (message as RoomWidgetChatMessage); - - if(chatMessage.text === '') return null; - - let text = chatMessage.text; - const parts = text.split(' '); - - if(parts.length > 0) - { - const firstPart = parts[0]; - let secondPart = ''; - - if(parts.length > 1) secondPart = parts[1]; - - if((firstPart.charAt(0) === ':') && (secondPart === 'x')) - { - const selectedAvatarId = GetRoomEngine().selectedAvatarId; - - if(selectedAvatarId > -1) - { - const userData = this.container.roomSession.userDataManager.getUserDataByIndex(selectedAvatarId); - - if(userData) - { - secondPart = userData.name; - text = chatMessage.text.replace(' x', (' ' + userData.name)); - } - } - } - - switch(firstPart.toLowerCase()) - { - case ':shake': - RoomShakingEffect.init(2500, 5000); - RoomShakingEffect.turnVisualizationOn(); - - return null; - - case ':rotate': - RoomRotatingEffect.init(2500, 5000); - RoomRotatingEffect.turnVisualizationOn(); - - return null; - case ':d': - case ';d': - if(GetClubMemberLevel() === HabboClubLevelEnum.VIP) - { - this.container.roomSession.sendExpressionMessage(AvatarExpressionEnum.LAUGH.ordinal); - } - - break; - case 'o/': - case '_o/': - this.container.roomSession.sendExpressionMessage(AvatarExpressionEnum.WAVE.ordinal); - - return null; - case ':kiss': - if(GetClubMemberLevel() === HabboClubLevelEnum.VIP) - { - this.container.roomSession.sendExpressionMessage(AvatarExpressionEnum.BLOW.ordinal); - - return null; - } - - break; - case ':jump': - if(GetClubMemberLevel() === HabboClubLevelEnum.VIP) - { - this.container.roomSession.sendExpressionMessage(AvatarExpressionEnum.JUMP.ordinal); - - return null; - } - - break; - case ':idle': - this.container.roomSession.sendExpressionMessage(AvatarExpressionEnum.IDLE.ordinal); - - return null; - case '_b': - this.container.roomSession.sendExpressionMessage(AvatarExpressionEnum.RESPECT.ordinal); - - return null; - case ':sign': - this.container.roomSession.sendSignMessage(parseInt(secondPart)); - - return null; - case ':iddqd': - case ':flip': - GetRoomEngine().events.dispatchEvent(new RoomZoomEvent(this.container.roomSession.roomId, -1, true)); - - return null; - case ':zoom': - GetRoomEngine().events.dispatchEvent(new RoomZoomEvent(this.container.roomSession.roomId, parseFloat(secondPart), false)); - - return null; - case ':screenshot': - const texture = GetRoomEngine().createTextureFromRoom(this.container.roomSession.roomId, 1); - - const image = new Image(); - - image.src = TextureUtils.generateImageUrl(texture); - - const newWindow = window.open(''); - newWindow.document.write(image.outerHTML); - return null; - case ':pickall': - if(this.container.roomSession.isRoomOwner || GetSessionDataManager().isModerator) - { - NotificationUtilities.confirm(LocalizeText('room.confirm.pick_all'), () => - { - GetSessionDataManager().sendSpecialCommandMessage(':pickall'); - }, - null, null, null, LocalizeText('generic.alert.title')); - } - - return null; - case ':furni': - this.container.processWidgetMessage(new RoomWidgetRequestWidgetMessage(RoomWidgetRequestWidgetMessage.FURNI_CHOOSER)); - - return null; - case ':chooser': - this.container.processWidgetMessage(new RoomWidgetRequestWidgetMessage(RoomWidgetRequestWidgetMessage.USER_CHOOSER)); - - return null; - case ':floor': - case ':bcfloor': - if(this.container.roomSession.controllerLevel >= RoomControllerLevel.ROOM_OWNER) CreateLinkEvent('floor-editor/show'); - - return null; - case ':togglefps': { - if(GetNitroInstance().ticker.maxFPS > 0) GetNitroInstance().ticker.maxFPS = 0; - else GetNitroInstance().ticker.maxFPS = GetConfiguration('system.animation.fps'); - - return null; - } - case ':client': - case ':nitro': - case ':billsonnn': - NotificationUtilities.showNitroAlert(); - return null; - case ':settings': - if(this.container.roomSession.isRoomOwner || GetSessionDataManager().isModerator) - { - SendMessageComposer(new RoomSettingsComposer(this.container.roomSession.roomId)); - } - - return null; - } - } - - const styleId = chatMessage.styleId; - - if(this.container && this.container.roomSession) - { - switch(chatMessage.chatType) - { - case RoomWidgetChatMessage.CHAT_DEFAULT: - this.container.roomSession.sendChatMessage(text, styleId); - break; - case RoomWidgetChatMessage.CHAT_SHOUT: - this.container.roomSession.sendShoutMessage(text, styleId); - break; - case RoomWidgetChatMessage.CHAT_WHISPER: - this.container.roomSession.sendWhisperMessage(chatMessage.recipientName, text, styleId); - break; - } - } - - break; - } - case RoomWidgetChatSelectAvatarMessage.MESSAGE_SELECT_AVATAR: { - const selectedEvent = (message as RoomWidgetChatSelectAvatarMessage); - - GetRoomEngine().setSelectedAvatar(selectedEvent.roomId, selectedEvent.objectId); - break; - } - } - - return null; - } - - public get type(): string - { - return RoomWidgetEnum.CHAT_INPUT_WIDGET; - } - - public get eventTypes(): string[] - { - return [ - RoomSessionChatEvent.FLOOD_EVENT - ]; - } - - public get messageTypes(): string[] - { - return [ - RoomWidgetChatTypingMessage.TYPING_STATUS, - RoomWidgetChatMessage.MESSAGE_CHAT, - RoomWidgetChatSelectAvatarMessage.MESSAGE_SELECT_AVATAR - ]; - } -} diff --git a/src/api/nitro/room/widgets/handlers/RoomWidgetHandler.ts b/src/api/nitro/room/widgets/handlers/RoomWidgetHandler.ts deleted file mode 100644 index ef0c9d39..00000000 --- a/src/api/nitro/room/widgets/handlers/RoomWidgetHandler.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { NitroEvent } from '@nitrots/nitro-renderer'; -import { RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetMessage } from '../messages'; -import { IRoomWidgetHandler } from './IRoomWidgetHandler'; -import { IRoomWidgetHandlerManager } from './IRoomWidgetHandlerManager'; - -export abstract class RoomWidgetHandler implements IRoomWidgetHandler -{ - private _container: IRoomWidgetHandlerManager = null; - - public abstract processEvent(event: NitroEvent): void; - - public abstract processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent; - - public get container(): IRoomWidgetHandlerManager - { - return this._container; - } - - public set container(container: IRoomWidgetHandlerManager) - { - this._container = container; - } - - public abstract get type(): string; - - public abstract get eventTypes(): string[]; - - public abstract get messageTypes(): string[]; -} diff --git a/src/api/nitro/room/widgets/handlers/RoomWidgetHandlerManager.ts b/src/api/nitro/room/widgets/handlers/RoomWidgetHandlerManager.ts deleted file mode 100644 index 4bf56a99..00000000 --- a/src/api/nitro/room/widgets/handlers/RoomWidgetHandlerManager.ts +++ /dev/null @@ -1,125 +0,0 @@ -import { IEventDispatcher, IRoomSession, NitroEvent, RoomEngineTriggerWidgetEvent } from '@nitrots/nitro-renderer'; -import { RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetMessage } from '../messages'; -import { IRoomWidgetHandler } from './IRoomWidgetHandler'; -import { IRoomWidgetHandlerManager } from './IRoomWidgetHandlerManager'; - -export class RoomWidgetHandlerManager implements IRoomWidgetHandlerManager -{ - private _roomSession: IRoomSession; - private _eventDispatcher: IEventDispatcher; - private _handlers: IRoomWidgetHandler[] = []; - private _eventMap: Map = new Map(); - private _messageMap: Map = new Map(); - - constructor(roomSession: IRoomSession, eventDispatcher: IEventDispatcher) - { - this._roomSession = roomSession; - this._eventDispatcher = eventDispatcher; - } - - public registerHandler(handler: IRoomWidgetHandler): void - { - const eventTypes = handler.eventTypes; - - eventTypes.push(RoomEngineTriggerWidgetEvent.OPEN_WIDGET, RoomEngineTriggerWidgetEvent.CLOSE_WIDGET); - - if(eventTypes && eventTypes.length) - { - for(const name of eventTypes) - { - if(!name) continue; - - let events = this._eventMap.get(name); - - if(!events) - { - events = []; - - this._eventMap.set(name, events); - } - - events.push(handler); - } - } - - const messageTypes = handler.messageTypes; - - if(messageTypes && messageTypes.length) - { - for(const name of messageTypes) - { - if(!name) continue; - - let messages = this._messageMap.get(name); - - if(!messages) - { - messages = []; - - this._messageMap.set(name, messages); - } - - messages.push(handler); - } - } - - handler.container = this; - - this._handlers.push(handler); - } - - public processEvent(event: NitroEvent): void - { - const handlers = this._eventMap.get(event.type); - - if(!handlers || !handlers.length) return null; - - for(const handler of handlers) - { - if(!handler) continue; - - let dispatch = true; - - if((event.type === RoomEngineTriggerWidgetEvent.OPEN_WIDGET) || (event.type === RoomEngineTriggerWidgetEvent.CLOSE_WIDGET)) - { - if(event instanceof RoomEngineTriggerWidgetEvent) - { - dispatch = (handler.type === event.widget); - } - } - - if(dispatch) handler.processEvent(event); - } - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - const handlers = this._messageMap.get(message.type); - - if(!handlers || !handlers.length) return null; - - for(const handler of handlers) - { - if(!handler) continue; - - const update = handler.processWidgetMessage(message); - - if(!update) continue; - - return update; - } - - return null; - } - - public get roomSession(): IRoomSession - { - return this._roomSession; - } - - public get eventDispatcher(): IEventDispatcher - { - return this._eventDispatcher; - } -} diff --git a/src/api/nitro/room/widgets/handlers/RoomWidgetInfostandHandler.ts b/src/api/nitro/room/widgets/handlers/RoomWidgetInfostandHandler.ts deleted file mode 100644 index 1b620f2b..00000000 --- a/src/api/nitro/room/widgets/handlers/RoomWidgetInfostandHandler.ts +++ /dev/null @@ -1,784 +0,0 @@ -import { IFurnitureData, NitroEvent, ObjectDataFactory, PetFigureData, PetRespectComposer, PetSupplementComposer, PetType, RoomControllerLevel, RoomModerationSettings, RoomObjectCategory, RoomObjectOperationType, RoomObjectType, RoomObjectVariable, RoomSessionFavoriteGroupUpdateEvent, RoomSessionPetInfoUpdateEvent, RoomSessionUserBadgesEvent, RoomSessionUserFigureUpdateEvent, RoomTradingLevelEnum, RoomUnitDropHandItemComposer, RoomUnitGiveHandItemComposer, RoomUnitGiveHandItemPetComposer, RoomUserData, RoomWidgetEnum, RoomWidgetEnumItemExtradataParameter, TradingOpenComposer, Vector3d } from '@nitrots/nitro-renderer'; -import { SendMessageComposer } from '../../..'; -import { GetNitroInstance, GetRoomEngine, GetSessionDataManager, IsOwnerOfFurniture } from '../../../..'; -import { PetSupplementEnum } from '../../../../../components/room/widgets/avatar-info/common/PetSupplementEnum'; -import { HelpReportUserEvent, WiredSelectObjectEvent } from '../../../../../events'; -import { DispatchUiEvent } from '../../../../../hooks'; -import { LocalizeText } from '../../../../utils/LocalizeText'; -import { RoomWidgetObjectNameEvent, RoomWidgetUpdateChatInputContentEvent, RoomWidgetUpdateEvent, RoomWidgetUpdateInfostandFurniEvent, RoomWidgetUpdateInfostandPetEvent, RoomWidgetUpdateInfostandRentableBotEvent, RoomWidgetUpdateInfostandUserEvent } from '../events'; -import { RoomWidgetChangeMottoMessage, RoomWidgetFurniActionMessage, RoomWidgetMessage, RoomWidgetRoomObjectMessage, RoomWidgetUserActionMessage } from '../messages'; -import { RoomWidgetHandler } from './RoomWidgetHandler'; - -export class RoomWidgetInfostandHandler extends RoomWidgetHandler -{ - public processEvent(event: NitroEvent): void - { - switch(event.type) - { - case RoomSessionPetInfoUpdateEvent.PET_INFO: - this.processPetInfoEvent((event as RoomSessionPetInfoUpdateEvent)); - return; - case RoomSessionUserBadgesEvent.RSUBE_BADGES: - this.container.eventDispatcher.dispatchEvent(event); - return; - case RoomSessionUserFigureUpdateEvent.USER_FIGURE: - this.container.eventDispatcher.dispatchEvent(event); - return; - case RoomSessionFavoriteGroupUpdateEvent.FAVOURITE_GROUP_UPDATE: - this.container.eventDispatcher.dispatchEvent(event); - return; - } - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - let userId = 0; - let userData: RoomUserData = null; - let objectId = 0; - let category = 0; - - if(message instanceof RoomWidgetUserActionMessage) - { - userId = message.userId; - - const petMessages = [ - RoomWidgetUserActionMessage.REQUEST_PET_UPDATE, - RoomWidgetUserActionMessage.RESPECT_PET, - RoomWidgetUserActionMessage.PICKUP_PET, - RoomWidgetUserActionMessage.MOUNT_PET, - RoomWidgetUserActionMessage.TOGGLE_PET_RIDING_PERMISSION, - RoomWidgetUserActionMessage.TOGGLE_PET_BREEDING_PERMISSION, - RoomWidgetUserActionMessage.DISMOUNT_PET, - RoomWidgetUserActionMessage.SADDLE_OFF, - RoomWidgetUserActionMessage.GIVE_CARRY_ITEM_TO_PET, - RoomWidgetUserActionMessage.GIVE_WATER_TO_PET, - RoomWidgetUserActionMessage.GIVE_LIGHT_TO_PET, - RoomWidgetUserActionMessage.TREAT_PET - ]; - - if(petMessages.indexOf(message.type) >= 0) - { - userData = this.container.roomSession.userDataManager.getPetData(userId); - } - else - { - userData = this.container.roomSession.userDataManager.getUserData(userId); - } - - if(!userData) return null; - } - - else if(message instanceof RoomWidgetFurniActionMessage) - { - objectId = message.furniId; - category = message.furniCategory; - } - - switch(message.type) - { - case RoomWidgetRoomObjectMessage.GET_OBJECT_NAME: - return this.processObjectNameMessage((message as RoomWidgetRoomObjectMessage)); - case RoomWidgetRoomObjectMessage.GET_OBJECT_INFO: - return this.processObjectInfoMessage((message as RoomWidgetRoomObjectMessage)); - case RoomWidgetUserActionMessage.RESPECT_USER: - GetSessionDataManager().giveRespect(userId); - break; - case RoomWidgetUserActionMessage.RESPECT_PET: - GetSessionDataManager().givePetRespect(userId); - break; - case RoomWidgetUserActionMessage.WHISPER_USER: - this.container.eventDispatcher.dispatchEvent(new RoomWidgetUpdateChatInputContentEvent(RoomWidgetUpdateChatInputContentEvent.WHISPER, userData.name)); - break; - case RoomWidgetUserActionMessage.IGNORE_USER: - GetSessionDataManager().ignoreUser(userData.name); - break; - case RoomWidgetUserActionMessage.UNIGNORE_USER: - GetSessionDataManager().unignoreUser(userData.name); - break; - case RoomWidgetUserActionMessage.KICK_USER: - this.container.roomSession.sendKickMessage((message as RoomWidgetUserActionMessage).userId); - break; - case RoomWidgetUserActionMessage.BAN_USER_DAY: - case RoomWidgetUserActionMessage.BAN_USER_HOUR: - case RoomWidgetUserActionMessage.BAN_USER_PERM: - this.container.roomSession.sendBanMessage((message as RoomWidgetUserActionMessage).userId, message.type); - break; - case RoomWidgetUserActionMessage.MUTE_USER_2MIN: - this.container.roomSession.sendMuteMessage((message as RoomWidgetUserActionMessage).userId, 2); - break; - case RoomWidgetUserActionMessage.MUTE_USER_5MIN: - this.container.roomSession.sendMuteMessage((message as RoomWidgetUserActionMessage).userId, 5); - break; - case RoomWidgetUserActionMessage.MUTE_USER_10MIN: - this.container.roomSession.sendMuteMessage((message as RoomWidgetUserActionMessage).userId, 10); - break; - case RoomWidgetUserActionMessage.GIVE_RIGHTS: - this.container.roomSession.sendGiveRightsMessage((message as RoomWidgetUserActionMessage).userId); - break; - case RoomWidgetUserActionMessage.TAKE_RIGHTS: - this.container.roomSession.sendTakeRightsMessage((message as RoomWidgetUserActionMessage).userId); - break; - case RoomWidgetUserActionMessage.START_TRADING: - SendMessageComposer(new TradingOpenComposer(userData.roomIndex)); - break; - // case RoomWidgetUserActionMessage.RWUAM_OPEN_HOME_PAGE: - // this._container.sessionDataManager._Str_21275((message as RoomWidgetUserActionMessage).userId, _local_3.name); - // break; - case RoomWidgetUserActionMessage.PICKUP_PET: - this.container.roomSession.pickupPet(userId); - break; - case RoomWidgetUserActionMessage.MOUNT_PET: - this.container.roomSession.mountPet(userId); - break; - case RoomWidgetUserActionMessage.TOGGLE_PET_RIDING_PERMISSION: - this.container.roomSession.togglePetRiding(userId); - break; - case RoomWidgetUserActionMessage.TOGGLE_PET_BREEDING_PERMISSION: - this.container.roomSession.togglePetBreeding(userId); - break; - case RoomWidgetUserActionMessage.DISMOUNT_PET: - this.container.roomSession.dismountPet(userId); - break; - case RoomWidgetUserActionMessage.SADDLE_OFF: - this.container.roomSession.removePetSaddle(userId); - break; - case RoomWidgetUserActionMessage.PASS_CARRY_ITEM: - SendMessageComposer(new RoomUnitGiveHandItemComposer(userId)); - break; - case RoomWidgetUserActionMessage.GIVE_CARRY_ITEM_TO_PET: - SendMessageComposer(new RoomUnitGiveHandItemPetComposer(userId)); - break; - case RoomWidgetUserActionMessage.GIVE_WATER_TO_PET: - SendMessageComposer(new PetSupplementComposer(userId, PetSupplementEnum.WATER)); - break; - case RoomWidgetUserActionMessage.GIVE_LIGHT_TO_PET: - SendMessageComposer(new PetSupplementComposer(userId, PetSupplementEnum.LIGHT)); - break; - case RoomWidgetUserActionMessage.TREAT_PET: - SendMessageComposer(new PetRespectComposer(userId)); - break; - case RoomWidgetUserActionMessage.DROP_CARRY_ITEM: - SendMessageComposer(new RoomUnitDropHandItemComposer()); - break; - case RoomWidgetUserActionMessage.REQUEST_PET_UPDATE: - this.container.roomSession.userDataManager.requestPetInfo(userId); - return; - case RoomWidgetUserActionMessage.REPORT: - return; - case RoomWidgetUserActionMessage.REPORT_CFH_OTHER: - DispatchUiEvent(new HelpReportUserEvent(userId)); - return; - case RoomWidgetUserActionMessage.AMBASSADOR_ALERT_USER: - this.container.roomSession.sendAmbassadorAlertMessage(userId); - return; - case RoomWidgetUserActionMessage.AMBASSADOR_KICK_USER: - this.container.roomSession.sendKickMessage(userId); - return; - case RoomWidgetUserActionMessage.AMBASSADOR_MUTE_USER_2MIN: - this.container.roomSession.sendMuteMessage(userId, 2); - return; - case RoomWidgetUserActionMessage.AMBASSADOR_MUTE_USER_10MIN: - this.container.roomSession.sendMuteMessage(userId, 10); - return; - case RoomWidgetUserActionMessage.AMBASSADOR_MUTE_USER_60MIN: - this.container.roomSession.sendMuteMessage(userId, 60); - return; - case RoomWidgetUserActionMessage.AMBASSADOR_MUTE_USER_18HOUR: - this.container.roomSession.sendMuteMessage(userId, 1080); - return; - case RoomWidgetFurniActionMessage.ROTATE: - GetRoomEngine().processRoomObjectOperation(objectId, category, RoomObjectOperationType.OBJECT_ROTATE_POSITIVE); - return; - case RoomWidgetFurniActionMessage.MOVE: - GetRoomEngine().processRoomObjectOperation(objectId, category, RoomObjectOperationType.OBJECT_MOVE); - return; - case RoomWidgetFurniActionMessage.PICKUP: - GetRoomEngine().processRoomObjectOperation(objectId, category, RoomObjectOperationType.OBJECT_PICKUP); - return; - case RoomWidgetFurniActionMessage.EJECT: - GetRoomEngine().processRoomObjectOperation(objectId, category, RoomObjectOperationType.OBJECT_EJECT); - return; - case RoomWidgetFurniActionMessage.USE: - GetRoomEngine().useRoomObject(objectId, category); - return; - case RoomWidgetFurniActionMessage.SAVE_STUFF_DATA: { - const furniMessage = (message as RoomWidgetFurniActionMessage); - - if(!furniMessage.objectData) return; - - const mapData = new Map(); - const dataParts = furniMessage.objectData.split('\t'); - - if(dataParts) - { - for(const part of dataParts) - { - const [ key, value ] = part.split('=', 2); - - mapData.set(key, value); - } - } - - GetRoomEngine().modifyRoomObjectDataWithMap(objectId, category, RoomObjectOperationType.OBJECT_SAVE_STUFF_DATA, mapData); - - return; - } - case RoomWidgetChangeMottoMessage.CHANGE_MOTTO: - this.container.roomSession.sendMottoMessage((message as RoomWidgetChangeMottoMessage).motto); - return; - } - - return null; - } - - private processObjectNameMessage(message: RoomWidgetRoomObjectMessage): RoomWidgetUpdateEvent - { - let id = -1; - let name: string = null; - let userType = 0; - - switch(message.category) - { - case RoomObjectCategory.FLOOR: - case RoomObjectCategory.WALL: { - const roomObject = GetRoomEngine().getRoomObject(this.container.roomSession.roomId, message.id, message.category); - - if(!roomObject) break; - - if(roomObject.type.indexOf('poster') === 0) - { - name = LocalizeText('${poster_' + parseInt(roomObject.type.replace('poster', '')) + '_name}'); - } - else - { - let furniData: IFurnitureData = null; - - const typeId = roomObject.model.getValue(RoomObjectVariable.FURNITURE_TYPE_ID); - - if(message.category === RoomObjectCategory.FLOOR) - { - furniData = GetSessionDataManager().getFloorItemData(typeId); - } - - else if(message.category === RoomObjectCategory.WALL) - { - furniData = GetSessionDataManager().getWallItemData(typeId); - } - - if(!furniData) break; - - id = furniData.id; - name = furniData.name; - } - break; - } - case RoomObjectCategory.UNIT: { - const userData = this.container.roomSession.userDataManager.getUserDataByIndex(message.id); - - if(!userData) break; - - id = userData.webID; - name = userData.name; - userType = userData.type; - break; - } - } - - if(name) this.container.eventDispatcher.dispatchEvent(new RoomWidgetObjectNameEvent(RoomWidgetObjectNameEvent.TYPE, message.id, message.category, id, name, userType)); - - return null; - } - - private processObjectInfoMessage(message: RoomWidgetRoomObjectMessage): RoomWidgetUpdateEvent - { - const roomId = this.container.roomSession.roomId; - - switch(message.category) - { - case RoomObjectCategory.FLOOR: - case RoomObjectCategory.WALL: - this.processFurniInfoMessage(message, roomId); - break; - case RoomObjectCategory.UNIT: { - const userData = this.container.roomSession.userDataManager.getUserDataByIndex(message.id); - - if(!userData) break; - - switch(userData.type) - { - case RoomObjectType.PET: - this.container.roomSession.userDataManager.requestPetInfo(userData.webID); - break; - case RoomObjectType.USER: - this.processUserInfoMessage(message, roomId, userData); - break; - case RoomObjectType.BOT: - this.processBotInfoMessage(message, roomId, userData); - break; - case RoomObjectType.RENTABLE_BOT: - this.processRentableBotInfoMessage(message, roomId, userData); - break; - } - } - - } - - return null; - } - - private processFurniInfoMessage(message: RoomWidgetRoomObjectMessage, roomId: number): void - { - const event = new RoomWidgetUpdateInfostandFurniEvent(RoomWidgetUpdateInfostandFurniEvent.FURNI); - - event.id = message.id; - event.category = message.category; - - const roomObject = GetRoomEngine().getRoomObject(roomId, message.id, message.category); - - if(!roomObject) return; - - const model = roomObject.model; - - if(model.getValue(RoomWidgetEnumItemExtradataParameter.INFOSTAND_EXTRA_PARAM)) - { - event.extraParam = model.getValue(RoomWidgetEnumItemExtradataParameter.INFOSTAND_EXTRA_PARAM); - } - - const dataFormat = model.getValue(RoomObjectVariable.FURNITURE_DATA_FORMAT); - const objectData = ObjectDataFactory.getData(dataFormat); - - objectData.initializeFromRoomObjectModel(model); - - event.stuffData = objectData; - - const objectType = roomObject.type; - - if(objectType.indexOf('poster') === 0) - { - const posterId = parseInt(objectType.replace('poster', '')); - - event.name = LocalizeText(('${poster_' + posterId) + '_name}'); - event.description = LocalizeText(('${poster_' + posterId) + '_desc}'); - } - else - { - const typeId = model.getValue(RoomObjectVariable.FURNITURE_TYPE_ID); - - let furnitureData: IFurnitureData = null; - - if(message.category === RoomObjectCategory.FLOOR) - { - furnitureData = GetSessionDataManager().getFloorItemData(typeId); - } - - else if(message.category === RoomObjectCategory.WALL) - { - furnitureData = GetSessionDataManager().getWallItemData(typeId); - } - - if(furnitureData) - { - event.name = furnitureData.name; - event.description = furnitureData.description; - event.purchaseOfferId = furnitureData.purchaseOfferId; - event.purchaseCouldBeUsedForBuyout = furnitureData.purchaseCouldBeUsedForBuyout; - event.rentOfferId = furnitureData.rentOfferId; - event.rentCouldBeUsedForBuyout = furnitureData.rentCouldBeUsedForBuyout; - event.availableForBuildersClub = furnitureData.availableForBuildersClub; - event.tileSizeX = furnitureData.tileSizeX; - event.tileSizeY = furnitureData.tileSizeY; - - DispatchUiEvent(new WiredSelectObjectEvent(event.id, event.category)); - } - } - - if(objectType.indexOf('post_it') > -1) event.isStickie = true; - - const expiryTime = model.getValue(RoomObjectVariable.FURNITURE_EXPIRY_TIME); - const expiryTimestamp = model.getValue(RoomObjectVariable.FURNITURE_EXPIRTY_TIMESTAMP); - - event.expiration = ((expiryTime < 0) ? expiryTime : Math.max(0, (expiryTime - ((GetNitroInstance().time - expiryTimestamp) / 1000)))); - - let roomObjectImage = GetRoomEngine().getRoomObjectImage(roomId, message.id, message.category, new Vector3d(180), 64, null); - - if(!roomObjectImage.data || (roomObjectImage.data.width > 140) || (roomObjectImage.data.height > 200)) - { - roomObjectImage = GetRoomEngine().getRoomObjectImage(roomId, message.id, message.category, new Vector3d(180), 1, null); - } - - event.image = roomObjectImage.getImage(); - event.isWallItem = (message.category === RoomObjectCategory.WALL); - event.isRoomOwner = this.container.roomSession.isRoomOwner; - event.roomControllerLevel = this.container.roomSession.controllerLevel; - event.isAnyRoomController = GetSessionDataManager().isModerator; - event.ownerId = model.getValue(RoomObjectVariable.FURNITURE_OWNER_ID); - event.ownerName = model.getValue(RoomObjectVariable.FURNITURE_OWNER_NAME); - event.usagePolicy = model.getValue(RoomObjectVariable.FURNITURE_USAGE_POLICY); - - const guildId = model.getValue(RoomObjectVariable.FURNITURE_GUILD_CUSTOMIZED_GUILD_ID); - - if(guildId !== 0) - { - event.groupId = guildId; - //this.container.connection.send(new _Str_2863(guildId, false)); - } - - if(IsOwnerOfFurniture(roomObject)) event.isOwner = true; - - this.container.eventDispatcher.dispatchEvent(event); - } - - private processUserInfoMessage(message: RoomWidgetRoomObjectMessage, roomId: number, userData: RoomUserData): void - { - let eventType = RoomWidgetUpdateInfostandUserEvent.OWN_USER; - - if(userData.webID !== GetSessionDataManager().userId) eventType = RoomWidgetUpdateInfostandUserEvent.PEER; - - const event = new RoomWidgetUpdateInfostandUserEvent(eventType); - - event.isSpectatorMode = this.container.roomSession.isSpectator; - event.name = userData.name; - event.motto = userData.custom; - event.achievementScore = userData.activityPoints; - event.webID = userData.webID; - event.roomIndex = userData.roomIndex; - event.userType = RoomObjectType.USER; - - const roomObject = GetRoomEngine().getRoomObject(roomId, userData.roomIndex, message.category); - - if(roomObject) event.carryItem = (roomObject.model.getValue(RoomObjectVariable.FIGURE_CARRY_OBJECT) || 0); - - if(eventType === RoomWidgetUpdateInfostandUserEvent.OWN_USER) event.allowNameChange = GetSessionDataManager().canChangeName; - - event.amIOwner = this.container.roomSession.isRoomOwner; - event.isGuildRoom = this.container.roomSession.isGuildRoom; - event.roomControllerLevel = this.container.roomSession.controllerLevel; - event.amIAnyRoomController = GetSessionDataManager().isModerator; - event.isAmbassador = GetSessionDataManager().isAmbassador; - - if(eventType === RoomWidgetUpdateInfostandUserEvent.PEER) - { - if(roomObject) - { - const flatControl = roomObject.model.getValue(RoomObjectVariable.FIGURE_FLAT_CONTROL); - - if(flatControl !== null) event.targetRoomControllerLevel = flatControl; - - event.canBeMuted = this.canBeMuted(event); - event.canBeKicked = this.canBeKicked(event); - event.canBeBanned = this.canBeBanned(event); - } - - event.isIgnored = GetSessionDataManager().isUserIgnored(userData.name); - event.respectLeft = GetSessionDataManager().respectsLeft; - - const isShuttingDown = GetSessionDataManager().isSystemShutdown; - const tradeMode = this.container.roomSession.tradeMode; - - if(isShuttingDown) - { - event.canTrade = false; - } - else - { - switch(tradeMode) - { - case RoomTradingLevelEnum.ROOM_CONTROLLER_REQUIRED: { - const roomController = ((event.roomControllerLevel !== RoomControllerLevel.NONE) && (event.roomControllerLevel !== RoomControllerLevel.GUILD_MEMBER)); - const targetController = ((event.targetRoomControllerLevel !== RoomControllerLevel.NONE) && (event.targetRoomControllerLevel !== RoomControllerLevel.GUILD_MEMBER)); - - event.canTrade = (roomController || targetController); - break; - } - case RoomTradingLevelEnum.NO_TRADING: - event.canTrade = true; - break; - default: - event.canTrade = false; - break; - } - } - - event.canTradeReason = RoomWidgetUpdateInfostandUserEvent.TRADE_REASON_OK; - - if(isShuttingDown) event.canTradeReason = RoomWidgetUpdateInfostandUserEvent.TRADE_REASON_SHUTDOWN; - - if(tradeMode !== RoomTradingLevelEnum.FREE_TRADING) event.canTradeReason = RoomWidgetUpdateInfostandUserEvent.TRADE_REASON_NO_TRADING; - - // const _local_12 = GetSessionDataManager().userId; - // _local_13 = GetSessionDataManager()._Str_18437(_local_12); - // this._Str_16287(_local_12, _local_13); - } - - event.groupId = userData.groupId; - event.groupBadgeId = GetSessionDataManager().getGroupBadge(event.groupId); - event.groupName = userData.groupName; - event.badges = this.container.roomSession.userDataManager.getUserBadges(userData.webID); - event.figure = userData.figure; - //var _local_8:Array = GetSessionDataManager()._Str_18437(userData.webID); - //this._Str_16287(userData._Str_2394, _local_8); - //this._container._Str_8097._Str_14387(userData.webID); - //this._container.connection.send(new _Str_8049(userData._Str_2394)); - - this.container.eventDispatcher.dispatchEvent(event); - } - - private processBotInfoMessage(message: RoomWidgetRoomObjectMessage, roomId: number, userData: RoomUserData): void - { - const event = new RoomWidgetUpdateInfostandUserEvent(RoomWidgetUpdateInfostandUserEvent.BOT); - - event.name = userData.name; - event.motto = userData.custom; - event.webID = userData.webID; - event.roomIndex = userData.roomIndex; - event.userType = userData.type; - - const roomObject = GetRoomEngine().getRoomObject(roomId, userData.roomIndex, message.category); - - if(roomObject) event.carryItem = (roomObject.model.getValue(RoomObjectVariable.FIGURE_CARRY_OBJECT) || 0); - - event.amIOwner = this.container.roomSession.isRoomOwner; - event.isGuildRoom = this.container.roomSession.isGuildRoom; - event.roomControllerLevel = this.container.roomSession.controllerLevel; - event.amIAnyRoomController = GetSessionDataManager().isModerator; - event.isAmbassador = GetSessionDataManager().isAmbassador; - event.badges = [ RoomWidgetUpdateInfostandUserEvent.DEFAULT_BOT_BADGE_ID ]; - event.figure = userData.figure; - - this.container.eventDispatcher.dispatchEvent(event); - } - - private processRentableBotInfoMessage(message: RoomWidgetRoomObjectMessage, roomId: number, userData: RoomUserData): void - { - const event = new RoomWidgetUpdateInfostandRentableBotEvent(RoomWidgetUpdateInfostandRentableBotEvent.RENTABLE_BOT); - - event.name = userData.name; - event.motto = userData.custom; - event.webID = userData.webID; - event.roomIndex = userData.roomIndex; - event.ownerId = userData.ownerId; - event.ownerName = userData.ownerName; - event.botSkills = userData.botSkills; - - const roomObject = GetRoomEngine().getRoomObject(roomId, userData.roomIndex, message.category); - - if(roomObject) event.carryItem = (roomObject.model.getValue(RoomObjectVariable.FIGURE_CARRY_OBJECT) || 0); - - event.amIOwner = this.container.roomSession.isRoomOwner; - event.roomControllerLevel = this.container.roomSession.controllerLevel; - event.amIAnyRoomController = GetSessionDataManager().isModerator; - event.badges = [ RoomWidgetUpdateInfostandUserEvent.DEFAULT_BOT_BADGE_ID ]; - event.figure = userData.figure; - - this.container.eventDispatcher.dispatchEvent(event); - } - - private processPetInfoEvent(event: RoomSessionPetInfoUpdateEvent): void - { - const petData = event.petInfo; - - if(!petData) return; - - const roomPetData = this.container.roomSession.userDataManager.getPetData(petData.id); - - if(!roomPetData) return; - - const figure = new PetFigureData(roomPetData.figure); - - let posture: string = null; - - if(figure.typeId === PetType.MONSTERPLANT) - { - if(petData.level >= petData.adultLevel) posture = 'std'; - else posture = ('grw' + petData.level); - } - - const isOwner = (petData.ownerId === GetSessionDataManager().userId); - const infostandEvent = new RoomWidgetUpdateInfostandPetEvent(RoomWidgetUpdateInfostandPetEvent.PET_INFO); - - infostandEvent.name = roomPetData.name; - infostandEvent.id = petData.id; - infostandEvent.ownerId = petData.ownerId; - infostandEvent.ownerName = petData.ownerName; - infostandEvent.rarityLevel = petData.rarityLevel; - infostandEvent.petType = figure.typeId; - infostandEvent.petBreed = figure.paletteId; - infostandEvent.petFigure = roomPetData.figure; - infostandEvent.posture = posture; - infostandEvent.isOwner = isOwner; - infostandEvent.roomIndex = roomPetData.roomIndex; - infostandEvent.level = petData.level; - infostandEvent.maximumLevel = petData.maximumLevel; - infostandEvent.experience = petData.experience; - infostandEvent.levelExperienceGoal = petData.levelExperienceGoal; - infostandEvent.energy = petData.energy; - infostandEvent.maximumEnergy = petData.maximumEnergy; - infostandEvent.happyness = petData.happyness; - infostandEvent.maximumHappyness = petData.maximumHappyness; - infostandEvent.respect = petData.respect; - infostandEvent.respectsPetLeft = GetSessionDataManager().respectsPetLeft; - infostandEvent.age = petData.age; - infostandEvent.saddle = petData.saddle; - infostandEvent.rider = petData.rider; - infostandEvent.breedable = petData.breedable; - infostandEvent.fullyGrown = petData.fullyGrown; - infostandEvent.dead = petData.dead; - infostandEvent.rarityLevel = petData.rarityLevel; - infostandEvent.skillTresholds = petData.skillTresholds; - infostandEvent.canRemovePet = false; - infostandEvent.publiclyRideable = petData.publiclyRideable; - infostandEvent.maximumTimeToLive = petData.maximumTimeToLive; - infostandEvent.remainingTimeToLive = petData.remainingTimeToLive; - infostandEvent.remainingGrowTime = petData.remainingGrowTime; - infostandEvent.publiclyBreedable = petData.publiclyBreedable; - - if(isOwner) - { - infostandEvent.canRemovePet = true; - } - else - { - if(this.container.roomSession.isRoomOwner || GetSessionDataManager().isModerator || (this.container.roomSession.controllerLevel >= RoomControllerLevel.GUEST)) infostandEvent.canRemovePet = true; - } - - this.container.eventDispatcher.dispatchEvent(infostandEvent); - } - - private checkGuildSetting(event: RoomWidgetUpdateInfostandUserEvent): boolean - { - if(event.isGuildRoom) return (event.roomControllerLevel >= RoomControllerLevel.GUILD_ADMIN); - - return (event.roomControllerLevel >= RoomControllerLevel.GUEST); - } - - private canBeMuted(event: RoomWidgetUpdateInfostandUserEvent): boolean - { - const checkSetting = (event: RoomWidgetUpdateInfostandUserEvent, moderation: RoomModerationSettings) => - { - switch(moderation.allowMute) - { - case RoomModerationSettings.MODERATION_LEVEL_USER_WITH_RIGHTS: - return this.checkGuildSetting(event); - default: - return (event.roomControllerLevel >= RoomControllerLevel.ROOM_OWNER); - } - } - - return this.isValidSetting(event, checkSetting); - } - - private canBeKicked(event: RoomWidgetUpdateInfostandUserEvent): boolean - { - const checkSetting = (event: RoomWidgetUpdateInfostandUserEvent, moderation: RoomModerationSettings) => - { - switch(moderation.allowKick) - { - case RoomModerationSettings.MODERATION_LEVEL_ALL: - return true; - case RoomModerationSettings.MODERATION_LEVEL_USER_WITH_RIGHTS: - return this.checkGuildSetting(event); - default: - return (event.roomControllerLevel >= RoomControllerLevel.ROOM_OWNER); - } - } - - return this.isValidSetting(event, checkSetting); - } - - private canBeBanned(event: RoomWidgetUpdateInfostandUserEvent): boolean - { - const checkSetting = (event: RoomWidgetUpdateInfostandUserEvent, moderation: RoomModerationSettings) => - { - switch(moderation.allowBan) - { - case RoomModerationSettings.MODERATION_LEVEL_USER_WITH_RIGHTS: - return this.checkGuildSetting(event); - default: - return (event.roomControllerLevel >= RoomControllerLevel.ROOM_OWNER); - } - } - - return this.isValidSetting(event, checkSetting); - } - - private isValidSetting(event: RoomWidgetUpdateInfostandUserEvent, checkSetting: (event: RoomWidgetUpdateInfostandUserEvent, moderation: RoomModerationSettings) => boolean): boolean - { - if(!this.container.roomSession._Str_7411) return false; - - const moderation = this.container.roomSession.moderationSettings; - - let flag = false; - - if(moderation) flag = checkSetting(event, moderation); - - return (flag && (event.targetRoomControllerLevel < RoomControllerLevel.ROOM_OWNER)); - } - - public get type(): string - { - return RoomWidgetEnum.INFOSTAND; - } - - public get eventTypes(): string[] - { - return [ - RoomSessionPetInfoUpdateEvent.PET_INFO, - RoomSessionUserBadgesEvent.RSUBE_BADGES, - RoomSessionUserFigureUpdateEvent.USER_FIGURE, - RoomSessionFavoriteGroupUpdateEvent.FAVOURITE_GROUP_UPDATE - ]; - } - - public get messageTypes(): string[] - { - return [ - RoomWidgetRoomObjectMessage.GET_OBJECT_INFO, - RoomWidgetRoomObjectMessage.GET_OBJECT_NAME, - RoomWidgetUserActionMessage.RESPECT_USER, - RoomWidgetUserActionMessage.WHISPER_USER, - RoomWidgetUserActionMessage.IGNORE_USER, - RoomWidgetUserActionMessage.UNIGNORE_USER, - RoomWidgetUserActionMessage.KICK_USER, - RoomWidgetUserActionMessage.BAN_USER_DAY, - RoomWidgetUserActionMessage.BAN_USER_HOUR, - RoomWidgetUserActionMessage.BAN_USER_PERM, - RoomWidgetUserActionMessage.MUTE_USER_2MIN, - RoomWidgetUserActionMessage.MUTE_USER_5MIN, - RoomWidgetUserActionMessage.MUTE_USER_10MIN, - RoomWidgetUserActionMessage.GIVE_RIGHTS, - RoomWidgetUserActionMessage.TAKE_RIGHTS, - RoomWidgetUserActionMessage.START_TRADING, - RoomWidgetUserActionMessage.OPEN_HOME_PAGE, - RoomWidgetUserActionMessage.PASS_CARRY_ITEM, - RoomWidgetUserActionMessage.GIVE_CARRY_ITEM_TO_PET, - RoomWidgetUserActionMessage.DROP_CARRY_ITEM, - RoomWidgetUserActionMessage.REPORT, - RoomWidgetUserActionMessage.PICKUP_PET, - RoomWidgetUserActionMessage.MOUNT_PET, - RoomWidgetUserActionMessage.TOGGLE_PET_RIDING_PERMISSION, - RoomWidgetUserActionMessage.TOGGLE_PET_BREEDING_PERMISSION, - RoomWidgetUserActionMessage.DISMOUNT_PET, - RoomWidgetUserActionMessage.SADDLE_OFF, - RoomWidgetUserActionMessage.TRAIN_PET, - RoomWidgetUserActionMessage.RESPECT_PET, - RoomWidgetUserActionMessage.REQUEST_PET_UPDATE, - RoomWidgetUserActionMessage.GIVE_LIGHT_TO_PET, - RoomWidgetUserActionMessage.GIVE_WATER_TO_PET, - RoomWidgetUserActionMessage.TREAT_PET, - RoomWidgetUserActionMessage.REPORT_CFH_OTHER, - RoomWidgetUserActionMessage.AMBASSADOR_ALERT_USER, - RoomWidgetUserActionMessage.AMBASSADOR_KICK_USER, - RoomWidgetUserActionMessage.AMBASSADOR_MUTE_USER_2MIN, - RoomWidgetUserActionMessage.AMBASSADOR_MUTE_USER_10MIN, - RoomWidgetUserActionMessage.AMBASSADOR_MUTE_USER_60MIN, - RoomWidgetUserActionMessage.AMBASSADOR_MUTE_USER_18HOUR, - RoomWidgetChangeMottoMessage.CHANGE_MOTTO, - RoomWidgetFurniActionMessage.MOVE, - RoomWidgetFurniActionMessage.ROTATE, - RoomWidgetFurniActionMessage.EJECT, - RoomWidgetFurniActionMessage.PICKUP, - RoomWidgetFurniActionMessage.USE, - RoomWidgetFurniActionMessage.SAVE_STUFF_DATA - ]; - } -} diff --git a/src/api/nitro/room/widgets/handlers/UserChooserWidgetHandler.ts b/src/api/nitro/room/widgets/handlers/UserChooserWidgetHandler.ts deleted file mode 100644 index 44b2141b..00000000 --- a/src/api/nitro/room/widgets/handlers/UserChooserWidgetHandler.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { NitroEvent, RoomObjectCategory, RoomWidgetEnum } from '@nitrots/nitro-renderer'; -import { RoomWidgetHandler } from '.'; -import { GetRoomEngine } from '../../../..'; -import { RoomObjectItem, RoomWidgetChooserContentEvent, RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetMessage, RoomWidgetRequestWidgetMessage, RoomWidgetRoomObjectMessage } from '../messages'; - -export class UserChooserWidgetHandler extends RoomWidgetHandler -{ - public processEvent(event: NitroEvent): void - { - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - if(!message) return null; - - switch(message.type) - { - case RoomWidgetRequestWidgetMessage.USER_CHOOSER: - this.processChooser(); - break; - case RoomWidgetRoomObjectMessage.SELECT_OBJECT: - this.selectRoomObject((message as RoomWidgetRoomObjectMessage)); - break; - } - - return null; - } - - private processChooser(): void - { - const roomId = this.container.roomSession.roomId; - const items: RoomObjectItem[] = []; - - const userItems = GetRoomEngine().getRoomObjects(roomId, RoomObjectCategory.UNIT); - - userItems.forEach(roomObject => - { - const userData = this.container.roomSession.userDataManager.getUserDataByIndex(roomObject.id); - - if(!userData) return; - - items.push(new RoomObjectItem(userData.roomIndex, RoomObjectCategory.UNIT, userData.name)); - }); - - items.sort((a, b) => - { - return (a.name < b.name) ? -1 : 1; - }); - - this.container.eventDispatcher.dispatchEvent(new RoomWidgetChooserContentEvent(RoomWidgetChooserContentEvent.USER_CHOOSER_CONTENT, items)); - } - - private selectRoomObject(message: RoomWidgetRoomObjectMessage): void - { - if(message.category !== RoomObjectCategory.UNIT) return; - - GetRoomEngine().selectRoomObject(this.container.roomSession.roomId, message.id, message.category); - } - - public get type(): string - { - return RoomWidgetEnum.USER_CHOOSER; - } - - public get eventTypes(): string[] - { - return []; - } - - public get messageTypes(): string[] - { - return [ - RoomWidgetRequestWidgetMessage.USER_CHOOSER, - RoomWidgetRoomObjectMessage.SELECT_OBJECT - ]; - } -} diff --git a/src/api/nitro/room/widgets/handlers/WordQuizWidgetHandler.ts b/src/api/nitro/room/widgets/handlers/WordQuizWidgetHandler.ts deleted file mode 100644 index d0ce01b0..00000000 --- a/src/api/nitro/room/widgets/handlers/WordQuizWidgetHandler.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { AvatarAction, NitroEvent, RoomSessionWordQuizEvent, RoomWidgetEnum } from '@nitrots/nitro-renderer'; -import { RoomWidgetHandler } from '.'; -import { GetRoomEngine } from '../../GetRoomEngine'; -import { RoomWidgetUpdateEvent } from '../events'; -import { RoomWidgetWordQuizUpdateEvent } from '../events/RoomWidgetWordQuizUpdateEvent'; -import { RoomWidgetMessage } from '../messages'; - -export class WordQuizWidgetHandler extends RoomWidgetHandler -{ - public processEvent(event: NitroEvent): void - { - const roomQuizEvent = (event as RoomSessionWordQuizEvent); - let widgetEvent: RoomWidgetWordQuizUpdateEvent; - switch(event.type) - { - case RoomSessionWordQuizEvent.ANSWERED: - const roomId = this.container.roomSession.roomId; - const userData = this.container.roomSession.userDataManager.getUserData(roomQuizEvent.userId); - if(!userData) return; - widgetEvent = new RoomWidgetWordQuizUpdateEvent(RoomWidgetWordQuizUpdateEvent.QUESTION_ANSWERED, roomQuizEvent.id); - widgetEvent.value = roomQuizEvent.value; - widgetEvent.userId = roomQuizEvent.userId; - widgetEvent.answerCounts = roomQuizEvent.answerCounts; - - if(widgetEvent.value === '0') - { - GetRoomEngine().updateRoomObjectUserGesture(roomId, userData.roomIndex, AvatarAction.getGestureId(AvatarAction.GESTURE_SAD)); - } - else - { - GetRoomEngine().updateRoomObjectUserGesture(roomId, userData.roomIndex, AvatarAction.getGestureId(AvatarAction.GESTURE_SMILE)); - } - break; - case RoomSessionWordQuizEvent.FINISHED: - widgetEvent = new RoomWidgetWordQuizUpdateEvent(RoomWidgetWordQuizUpdateEvent.QUESTION_FINISHED, roomQuizEvent.id); - widgetEvent.pollId = roomQuizEvent.pollId; - widgetEvent.questionId = roomQuizEvent.questionId; - widgetEvent.answerCounts = roomQuizEvent.answerCounts; - break; - case RoomSessionWordQuizEvent.QUESTION: - widgetEvent = new RoomWidgetWordQuizUpdateEvent(RoomWidgetWordQuizUpdateEvent.NEW_QUESTION, roomQuizEvent.id); - widgetEvent.question = roomQuizEvent.question; - widgetEvent.duration = roomQuizEvent.duration; - widgetEvent.pollType = roomQuizEvent.pollType; - widgetEvent.questionId = roomQuizEvent.questionId; - widgetEvent.pollId = roomQuizEvent.pollId; - break; - } - - if(!widgetEvent) return; - - this.container.eventDispatcher.dispatchEvent(widgetEvent); - } - - public processWidgetMessage(message: RoomWidgetMessage): RoomWidgetUpdateEvent - { - return null; - } - - public get type(): string - { - return RoomWidgetEnum.WORD_QUIZZ; - } - - public get eventTypes(): string[] - { - return [ RoomSessionWordQuizEvent.ANSWERED, RoomSessionWordQuizEvent.FINISHED, RoomSessionWordQuizEvent.QUESTION ]; - } - - public get messageTypes(): string[] - { - return []; - } -} diff --git a/src/api/nitro/room/widgets/handlers/index.ts b/src/api/nitro/room/widgets/handlers/index.ts deleted file mode 100644 index 67260528..00000000 --- a/src/api/nitro/room/widgets/handlers/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -export * from './FurniChooserWidgetHandler'; -export * from './FurnitureContextMenuWidgetHandler'; -export * from './FurnitureCreditWidgetHandler'; -export * from './FurnitureCustomStackHeightWidgetHandler'; -export * from './FurnitureDimmerWidgetHandler'; -export * from './FurnitureExternalImageWidgetHandler'; -export * from './FurnitureInternalLinkHandler'; -export * from './FurnitureMannequinWidgetHandler'; -export * from './FurniturePresentWidgetHandler'; -export * from './FurnitureRoomLinkHandler'; -export * from './FurnitureTrophyWidgetHandler'; -export * from './FurnitureYoutubeDisplayWidgetHandler'; -export * from './IRoomWidgetHandler'; -export * from './IRoomWidgetHandlerManager'; -export * from './PollWidgetHandler'; -export * from './RoomWidgetAvatarInfoHandler'; -export * from './RoomWidgetChatHandler'; -export * from './RoomWidgetChatInputHandler'; -export * from './RoomWidgetHandler'; -export * from './RoomWidgetHandlerManager'; -export * from './RoomWidgetInfostandHandler'; -export * from './UserChooserWidgetHandler'; -export * from './WordQuizWidgetHandler'; diff --git a/src/api/nitro/room/widgets/index.ts b/src/api/nitro/room/widgets/index.ts deleted file mode 100644 index fcfa1085..00000000 --- a/src/api/nitro/room/widgets/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './events'; -export * from './handlers'; -export * from './messages'; diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetAvatarExpressionMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetAvatarExpressionMessage.ts deleted file mode 100644 index f93352dd..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetAvatarExpressionMessage.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { AvatarExpressionEnum } from '@nitrots/nitro-renderer'; -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetAvatarExpressionMessage extends RoomWidgetMessage -{ - public static AVATAR_EXPRESSION: string = 'RWAEM_MESSAGE_AVATAR_EXPRESSION'; - - private _animation: AvatarExpressionEnum; - - constructor(animation: AvatarExpressionEnum) - { - super(RoomWidgetAvatarExpressionMessage.AVATAR_EXPRESSION); - - this._animation = animation; - } - - public get animation(): AvatarExpressionEnum - { - return this._animation; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetChangeMottoMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetChangeMottoMessage.ts deleted file mode 100644 index 2342da2a..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetChangeMottoMessage.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetChangeMottoMessage extends RoomWidgetMessage -{ - public static CHANGE_MOTTO: string = 'RWCMM_CHANGE_MOTTO'; - - private _motto: string; - - constructor(motto: string) - { - super(RoomWidgetChangeMottoMessage.CHANGE_MOTTO); - - this._motto = motto; - } - - public get motto(): string - { - return this._motto; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetChangePostureMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetChangePostureMessage.ts deleted file mode 100644 index 77daedfb..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetChangePostureMessage.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetChangePostureMessage extends RoomWidgetMessage -{ - public static CHANGE_POSTURE: string = 'RWCPM_MESSAGE_CHANGE_POSTURE'; - public static POSTURE_STAND: number = 0; - public static POSTURE_SIT: number = 1; - - private _posture: number; - - constructor(posture: number) - { - super(RoomWidgetChangePostureMessage.CHANGE_POSTURE); - - this._posture = posture; - } - - public get posture(): number - { - return this._posture; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetChatMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetChatMessage.ts deleted file mode 100644 index 59190a0d..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetChatMessage.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetChatMessage extends RoomWidgetMessage -{ - public static MESSAGE_CHAT: string = 'RWCM_MESSAGE_CHAT'; - public static CHAT_DEFAULT: number = 0; - public static CHAT_WHISPER: number = 1; - public static CHAT_SHOUT: number = 2; - - private _chatType: number; - private _text: string; - private _recipientName: string; - private _styleId: number; - - constructor(type: string, text: string, chatType: number, recipientName: string, styleId: number) - { - super(type); - - this._text = text; - this._chatType = chatType; - this._recipientName = recipientName; - this._styleId = styleId; - } - - public get text(): string - { - return this._text; - } - - public get chatType(): number - { - return this._chatType; - } - - public get recipientName(): string - { - return this._recipientName; - } - - public get styleId(): number - { - return this._styleId; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetChatSelectAvatarMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetChatSelectAvatarMessage.ts deleted file mode 100644 index 9abbbf90..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetChatSelectAvatarMessage.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetChatSelectAvatarMessage extends RoomWidgetMessage -{ - public static MESSAGE_SELECT_AVATAR: string = 'RWCSAM_MESSAGE_SELECT_AVATAR'; - - private _objectId: number; - private _userName: string; - private _roomId: number; - - constructor(type: string, objectId: number, userName: string, roomId: number) - { - super(type); - - this._objectId = objectId; - this._userName = userName; - this._roomId = roomId; - } - - public get objectId(): number - { - return this._objectId; - } - - public get userName(): string - { - return this._userName; - } - - public get roomId(): number - { - return this._roomId; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetChatTypingMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetChatTypingMessage.ts deleted file mode 100644 index b3b0aa06..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetChatTypingMessage.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetChatTypingMessage extends RoomWidgetMessage -{ - public static TYPING_STATUS: string = 'RWCTM_TYPING_STATUS'; - - private _isTyping: boolean; - - constructor(isTyping: boolean) - { - super(RoomWidgetChatTypingMessage.TYPING_STATUS); - - this._isTyping = isTyping; - } - - public get isTyping(): boolean - { - return this._isTyping; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetCreditFurniRedeemMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetCreditFurniRedeemMessage.ts deleted file mode 100644 index 7b77fdaa..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetCreditFurniRedeemMessage.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetCreditFurniRedeemMessage extends RoomWidgetMessage -{ - public static REDEEM: string = 'RWCFRM_REDEEM'; - - private _objectId: number; - - constructor(type: string, objectId: number) - { - super(type); - - this._objectId = objectId; - } - - public get objectId(): number - { - return this._objectId; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetDanceMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetDanceMessage.ts deleted file mode 100644 index 7ed703bb..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetDanceMessage.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetDanceMessage extends RoomWidgetMessage -{ - public static DANCE: string = 'RWDM_MESSAGE_DANCE'; - public static NORMAL_STYLE: number = 0; - public static CLUB_STYLE: number[] = [ 2, 3, 4 ]; - - private _style: number = 0; - - constructor(style: number) - { - super(RoomWidgetDanceMessage.DANCE); - - this._style = style; - } - - public get style(): number - { - return this._style; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetDimmerChangeStateMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetDimmerChangeStateMessage.ts deleted file mode 100644 index de83f498..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetDimmerChangeStateMessage.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetDimmerChangeStateMessage extends RoomWidgetMessage -{ - public static CHANGE_STATE: string = 'RWCDSM_CHANGE_STATE'; - - constructor() - { - super(RoomWidgetDimmerChangeStateMessage.CHANGE_STATE); - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetDimmerPreviewMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetDimmerPreviewMessage.ts deleted file mode 100644 index 39708872..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetDimmerPreviewMessage.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetDimmerPreviewMessage extends RoomWidgetMessage -{ - public static PREVIEW_DIMMER_PRESET: string = 'RWDPM_PREVIEW_DIMMER_PRESET'; - - private _color: number; - private _brightness: number; - private _bgOnly: boolean; - - constructor(color: number, brightness: number, bgOnly: boolean) - { - super(RoomWidgetDimmerPreviewMessage.PREVIEW_DIMMER_PRESET); - - this._color = color; - this._brightness = brightness; - this._bgOnly = bgOnly; - } - - public get color(): number - { - return this._color; - } - - public get brightness(): number - { - return this._brightness; - } - - public get bgOnly(): boolean - { - return this._bgOnly; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetDimmerSavePresetMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetDimmerSavePresetMessage.ts deleted file mode 100644 index 8e7bd831..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetDimmerSavePresetMessage.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetDimmerSavePresetMessage extends RoomWidgetMessage -{ - public static SAVE_PRESET: string = 'RWSDPM_SAVE_PRESET'; - - private _presetNumber: number; - private _effectTypeId: number; - private _color: number; - private _brightness: number; - private _apply: boolean; - - constructor(presetNumber: number, effectTypeId: number, color: number, brightness: number, apply: boolean) - { - super(RoomWidgetDimmerSavePresetMessage.SAVE_PRESET); - - this._presetNumber = presetNumber; - this._effectTypeId = effectTypeId; - this._color = color; - this._brightness = brightness; - this._apply = apply; - } - - public get presetNumber(): number - { - return this._presetNumber; - } - - public get effectTypeId(): number - { - return this._effectTypeId; - } - - public get color(): number - { - return this._color; - } - - public get brightness(): number - { - return this._brightness; - } - - public get apply(): boolean - { - return this._apply; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetFurniActionMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetFurniActionMessage.ts deleted file mode 100644 index 678f9e56..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetFurniActionMessage.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetFurniActionMessage extends RoomWidgetMessage -{ - public static ROTATE: string = 'RWFAM_ROTATE'; - public static MOVE: string = 'RWFAM_MOVE'; - public static PICKUP: string = 'RWFAM_PICKUP'; - public static EJECT: string = 'RWFAM_EJECT'; - public static USE: string = 'RWFAM_USE'; - public static OPEN_WELCOME_GIFT: string = 'RWFAM_OPEN_WELCOME_GIFT'; - public static SAVE_STUFF_DATA: string = 'RWFAM_SAVE_STUFF_DATA'; - - private _furniId: number; - private _furniCategory: number; - private _offerId: number; - private _objectData: string; - - constructor(type: string, id: number, category: number, offerId: number =- 1, objectData: string = null) - { - super(type); - - this._furniId = id; - this._furniCategory = category; - this._offerId = offerId; - this._objectData = objectData; - } - - public get furniId(): number - { - return this._furniId; - } - - public get furniCategory(): number - { - return this._furniCategory; - } - - public get objectData(): string - { - return this._objectData; - } - - public get offerId(): number - { - return this._offerId; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetFurniToWidgetMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetFurniToWidgetMessage.ts deleted file mode 100644 index 959d7f2b..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetFurniToWidgetMessage.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetFurniToWidgetMessage extends RoomWidgetMessage -{ - public static REQUEST_CREDITFURNI: string = 'RWFWM_MESSAGE_REQUEST_CREDITFURNI'; - public static REQUEST_STICKIE: string = 'RWFWM_MESSAGE_REQUEST_STICKIE'; - public static REQUEST_PRESENT: string = 'RWFWM_MESSAGE_REQUEST_PRESENT'; - public static REQUEST_TROPHY: string = 'RWFWM_MESSAGE_REQUEST_TROPHY'; - public static REQUEST_TEASER: string = 'RWFWM_MESSAGE_REQUEST_TEASER'; - public static REQUEST_ECOTRONBOX: string = 'RWFWM_MESSAGE_REQUEST_ECOTRONBOX'; - public static REQUEST_DIMMER: string = 'RWFWM_MESSAGE_REQUEST_DIMMER'; - public static REQUEST_PLACEHOLDER: string = 'RWFWM_MESSAGE_REQUEST_PLACEHOLDER'; - public static REQUEST_CLOTHING_CHANGE: string = 'RWFWM_MESSAGE_REQUEST_CLOTHING_CHANGE'; - public static REQUEST_PLAYLIST_EDITOR: string = 'RWFWM_MESSAGE_REQUEST_PLAYLIST_EDITOR'; - public static REQUEST_ACHIEVEMENT_RESOLUTION_ENGRAVING: string = 'RWFWM_WIDGET_MESSAGE_REQUEST_ACHIEVEMENT_RESOLUTION_ENGRAVING'; - public static REQUEST_ACHIEVEMENT_RESOLUTION_FAILED: string = 'RWFWM_WIDGET_MESSAGE_REQUEST_ACHIEVEMENT_RESOLUTION_FAILED'; - public static REQUEST_BADGE_DISPLAY_ENGRAVING: string = 'RWFWM_WIDGET_MESSAGE_REQUEST_BADGE_DISPLAY_ENGRAVING'; - - private _objectId: number; - private _category: number; - private _roomId: number; - - constructor(type: string, objectId: number, category: number, roomId: number) - { - super(type); - - this._objectId = objectId; - this._category = category; - this._roomId = roomId; - } - - public get objectId(): number - { - return this._objectId; - } - - public get category(): number - { - return this._category; - } - - public get roomId(): number - { - return this._roomId; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetMessage.ts deleted file mode 100644 index b57c4855..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetMessage.ts +++ /dev/null @@ -1,14 +0,0 @@ -export class RoomWidgetMessage -{ - private _type: string; - - constructor(type: string) - { - this._type = type; - } - - public get type(): string - { - return this._type; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetPollMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetPollMessage.ts deleted file mode 100644 index a74d97bf..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetPollMessage.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetPollMessage extends RoomWidgetMessage -{ - public static readonly START = 'RWPM_START'; - public static readonly REJECT = 'RWPM_REJECT'; - public static readonly ANSWER = 'RWPM_ANSWER'; - - private _id = -1; - private _questionId = 0; - private _answers: string[] = null; - - constructor(type: string, id: number) - { - super(type); - - this._id = id; - } - - public get id(): number - { - return this._id; - } - - public get questionId(): number - { - return this._questionId; - } - - public set questionId(k: number) - { - this._questionId = k; - } - - public get answers(): string[] - { - return this._answers; - } - - public set answers(k: string[]) - { - this._answers = k; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetPresentOpenMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetPresentOpenMessage.ts deleted file mode 100644 index 20f34f49..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetPresentOpenMessage.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetPresentOpenMessage extends RoomWidgetMessage -{ - public static OPEN_PRESENT: string = 'RWPOM_OPEN_PRESENT'; - - private _objectId: number; - - constructor(type: string, objectId: number) - { - super(type); - - this._objectId = objectId; - } - - public get objectId(): number - { - return this._objectId; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetRequestWidgetMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetRequestWidgetMessage.ts deleted file mode 100644 index 20d3f8b2..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetRequestWidgetMessage.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetRequestWidgetMessage extends RoomWidgetMessage -{ - public static USER_CHOOSER: string = 'RWRWM_USER_CHOOSER'; - public static FURNI_CHOOSER: string = 'RWRWM_FURNI_CHOOSER'; - public static ME_MENU: string = 'RWRWM_ME_MENU'; - public static EFFECTS: string = 'RWRWM_EFFECTS'; - public static FLOOR_EDITOR: string = 'RWRWM_FLOOR_EDITOR'; -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetRoomObjectMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetRoomObjectMessage.ts deleted file mode 100644 index 98ce28dd..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetRoomObjectMessage.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetRoomObjectMessage extends RoomWidgetMessage -{ - public static GET_OBJECT_INFO: string = 'RWROM_GET_OBJECT_INFO'; - public static GET_OBJECT_NAME: string = 'RWROM_GET_OBJECT_NAME'; - public static SELECT_OBJECT: string = 'RWROM_SELECT_OBJECT'; - public static GET_OWN_CHARACTER_INFO: string = 'RWROM_GET_OWN_CHARACTER_INFO'; - public static GET_AVATAR_LIST: string = 'RWROM_GET_AVATAR_LIST'; - - private _id: number; - private _category: number; - - constructor(type: string, id: number, category: number) - { - super(type); - - this._id = id; - this._category = category; - } - - public get id(): number - { - return this._id; - } - - public get category(): number - { - return this._category; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetUseProductMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetUseProductMessage.ts deleted file mode 100644 index deef093c..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetUseProductMessage.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetUseProductMessage extends RoomWidgetMessage -{ - public static PET_PRODUCT: string = 'RWUPM_PET_PRODUCT'; - public static MONSTERPLANT_SEED: string = 'RWUPM_MONSTERPLANT_SEED'; - - private _objectId: number; - public _petId: number; - - constructor(type: string, objectId: number, petId: number = -1) - { - super(type); - - this._objectId = objectId; - this._petId = petId; - } - - public get objectId(): number - { - return this._objectId; - } - - public get petId(): number - { - return this._petId; - } -} diff --git a/src/api/nitro/room/widgets/messages/RoomWidgetUserActionMessage.ts b/src/api/nitro/room/widgets/messages/RoomWidgetUserActionMessage.ts deleted file mode 100644 index 964572f3..00000000 --- a/src/api/nitro/room/widgets/messages/RoomWidgetUserActionMessage.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { RoomWidgetMessage } from './RoomWidgetMessage'; - -export class RoomWidgetUserActionMessage extends RoomWidgetMessage -{ - public static WHISPER_USER: string = 'RWUAM_WHISPER_USER'; - public static IGNORE_USER: string = 'RWUAM_IGNORE_USER'; - public static IGNORE_USER_BUBBLE: string = 'RWUAM_IGNORE_USER_BUBBLE'; - public static UNIGNORE_USER: string = 'RWUAM_UNIGNORE_USER'; - public static KICK_USER: string = 'RWUAM_KICK_USER'; - public static BAN_USER_HOUR: string = 'RWUAM_BAN_USER_HOUR'; - public static BAN_USER_DAY: string = 'RWUAM_BAN_USER_DAY'; - public static BAN_USER_PERM: string = 'RWUAM_BAN_USER_PERM'; - public static MUTE_USER_2MIN: string = 'RWUAM_MUTE_USER_2MIN'; - public static MUTE_USER_5MIN: string = 'RWUAM_MUTE_USER_5MIN'; - public static MUTE_USER_10MIN: string = 'RWUAM_MUTE_USER_10MIN'; - public static RESPECT_USER: string = 'RWUAM_RESPECT_USER'; - public static GIVE_RIGHTS: string = 'RWUAM_GIVE_RIGHTS'; - public static TAKE_RIGHTS: string = 'RWUAM_TAKE_RIGHTS'; - public static START_TRADING: string = 'RWUAM_START_TRADING'; - public static OPEN_HOME_PAGE: string = 'RWUAM_OPEN_HOME_PAGE'; - public static REPORT: string = 'RWUAM_REPORT'; - public static PICKUP_PET: string = 'RWUAM_PICKUP_PET'; - public static MOUNT_PET: string = 'RWUAM_MOUNT_PET'; - public static TOGGLE_PET_RIDING_PERMISSION: string = 'RWUAM_TOGGLE_PET_RIDING_PERMISSION'; - public static TOGGLE_PET_BREEDING_PERMISSION: string = 'RWUAM_TOGGLE_PET_BREEDING_PERMISSION'; - public static DISMOUNT_PET: string = 'RWUAM_DISMOUNT_PET'; - public static SADDLE_OFF: string = 'RWUAM_SADDLE_OFF'; - public static TRAIN_PET: string = 'RWUAM_TRAIN_PET'; - public static RESPECT_PET: string = ' RWUAM_RESPECT_PET'; - public static TREAT_PET: string = 'RWUAM_TREAT_PET'; - public static REQUEST_PET_UPDATE: string = 'RWUAM_REQUEST_PET_UPDATE'; - public static START_NAME_CHANGE: string = 'RWUAM_START_NAME_CHANGE'; - public static PASS_CARRY_ITEM: string = 'RWUAM_PASS_CARRY_ITEM'; - public static DROP_CARRY_ITEM: string = 'RWUAM_DROP_CARRY_ITEM'; - public static GIVE_CARRY_ITEM_TO_PET: string = 'RWUAM_GIVE_CARRY_ITEM_TO_PET'; - public static GIVE_WATER_TO_PET: string = 'RWUAM_GIVE_WATER_TO_PET'; - public static GIVE_LIGHT_TO_PET: string = 'RWUAM_GIVE_LIGHT_TO_PET'; - public static REQUEST_BREED_PET: string = 'RWUAM_REQUEST_BREED_PET'; - public static HARVEST_PET: string = 'RWUAM_HARVEST_PET'; - public static REVIVE_PET: string = 'RWUAM_REVIVE_PET'; - public static COMPOST_PLANT: string = 'RWUAM_COMPOST_PLANT'; - public static GET_BOT_INFO: string = 'RWUAM_GET_BOT_INFO'; - public static REPORT_CFH_OTHER: string = 'RWUAM_REPORT_CFH_OTHER'; - public static AMBASSADOR_ALERT_USER: string = 'RWUAM_AMBASSADOR_ALERT_USER'; - public static AMBASSADOR_KICK_USER: string = 'RWUAM_AMBASSADOR_KICK_USER'; - public static AMBASSADOR_MUTE_USER_2MIN: string = 'RWUAM_AMBASSADOR_MUTE_2MIN'; - public static AMBASSADOR_MUTE_USER_10MIN: string = 'RWUAM_AMBASSADOR_MUTE_10MIN'; - public static AMBASSADOR_MUTE_USER_60MIN: string = 'RWUAM_AMBASSADOR_MUTE_60MIN'; - public static AMBASSADOR_MUTE_USER_18HOUR: string = 'RWUAM_AMBASSADOR_MUTE_18HOUR'; - public static RELATIONSHIP_NONE: string = 'RWUAM_RELATIONSHIP_NONE'; - public static RELATIONSHIP_HEART: string = 'RWUAM_RELATIONSHIP_HEART'; - public static RELATIONSHIP_SMILE: string = 'RWUAM_RELATIONSHIP_SMILE'; - public static RELATIONSHIP_BOBBA: string = 'RWUAM_RELATIONSHIP_BOBBA'; - - - private _userId: number; - - constructor(type: string, userId: number) - { - super(type); - - this._userId = userId; - } - - public get userId(): number - { - return this._userId; - } -} diff --git a/src/api/nitro/room/widgets/messages/index.ts b/src/api/nitro/room/widgets/messages/index.ts deleted file mode 100644 index f7a371e6..00000000 --- a/src/api/nitro/room/widgets/messages/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -export * from './RoomWidgetAvatarExpressionMessage'; -export * from './RoomWidgetChangeMottoMessage'; -export * from './RoomWidgetChangePostureMessage'; -export * from './RoomWidgetChatMessage'; -export * from './RoomWidgetChatSelectAvatarMessage'; -export * from './RoomWidgetChatTypingMessage'; -export * from './RoomWidgetCreditFurniRedeemMessage'; -export * from './RoomWidgetDanceMessage'; -export * from './RoomWidgetDimmerChangeStateMessage'; -export * from './RoomWidgetDimmerPreviewMessage'; -export * from './RoomWidgetDimmerSavePresetMessage'; -export * from './RoomWidgetFurniActionMessage'; -export * from './RoomWidgetFurniToWidgetMessage'; -export * from './RoomWidgetMessage'; -export * from './RoomWidgetPollMessage'; -export * from './RoomWidgetPresentOpenMessage'; -export * from './RoomWidgetRequestWidgetMessage'; -export * from './RoomWidgetRoomObjectMessage'; -export * from './RoomWidgetUseProductMessage'; -export * from './RoomWidgetUserActionMessage'; diff --git a/src/api/nitro/session/CanManipulateFurniture.ts b/src/api/nitro/session/CanManipulateFurniture.ts index 0141f23a..8655292c 100644 --- a/src/api/nitro/session/CanManipulateFurniture.ts +++ b/src/api/nitro/session/CanManipulateFurniture.ts @@ -7,5 +7,5 @@ export function CanManipulateFurniture(roomSession: IRoomSession, objectId: numb { if(!roomSession) return false; - return ((roomSession.controllerLevel >= RoomControllerLevel.GUEST) || GetSessionDataManager().isModerator || IsOwnerOfFurniture(GetRoomEngine().getRoomObject(roomSession.roomId, objectId, category))); + return (roomSession.isRoomOwner || (roomSession.controllerLevel >= RoomControllerLevel.GUEST) || GetSessionDataManager().isModerator || IsOwnerOfFurniture(GetRoomEngine().getRoomObject(roomSession.roomId, objectId, category))); } diff --git a/src/api/notification/NotificationUtilities.ts b/src/api/notification/NotificationUtilities.ts deleted file mode 100644 index 1c6c9fdd..00000000 --- a/src/api/notification/NotificationUtilities.ts +++ /dev/null @@ -1,212 +0,0 @@ -import { HabboWebTools, RoomEnterEffect } from '@nitrots/nitro-renderer'; -import { CreateLinkEvent, GetConfiguration, GetNitroInstance, LocalizeText, PlaySound } from '..'; -import { NotificationAlertEvent, NotificationConfirmEvent } from '../../events'; -import { NotificationBubbleEvent } from '../../events/notification-center/NotificationBubbleEvent'; -import { DispatchUiEvent } from '../../hooks'; -import { NotificationAlertType } from './NotificationAlertType'; -import { NotificationBubbleType } from './NotificationBubbleType'; - -export class NotificationUtilities -{ - private static MODERATION_DISCLAIMER_SHOWN: boolean = false; - private static MODERATION_DISCLAIMER_DELAY_MS: number = 5000; - private static MODERATION_DISCLAIMER_TIMEOUT: ReturnType = null; - - public static BUBBLES_DISABLED: boolean = false; - - private static cleanText(text: string): string - { - return text.replace(/\\r/g, '\r') - } - - private static getTimeZeroPadded(time: number): string - { - const text = ('0' + time); - - return text.substr((text.length - 2), text.length); - } - - private static getMainNotificationConfig(): { [key: string]: { delivery?: string, display?: string; title?: string; image?: string }} - { - return GetConfiguration<{ [key: string]: { delivery?: string, display?: string; title?: string; image?: string }}>('notification', {}); - } - - private static getNotificationConfig(key: string): { delivery?: string, display?: string; title?: string; image?: string } - { - const mainConfig = this.getMainNotificationConfig(); - - if(!mainConfig) return null; - - return mainConfig[key]; - } - - public static getNotificationPart(options: Map, type: string, key: string, localize: boolean): string - { - if(options.has(key)) return options.get(key); - - const localizeKey = [ 'notification', type, key ].join('.'); - - if(GetNitroInstance().localization.hasValue(localizeKey) || localize) - { - return LocalizeText(localizeKey, Array.from(options.keys()), Array.from(options.values())); - } - - return null; - } - - public static getNotificationImageUrl(options: Map, type: string): string - { - let imageUrl = options.get('image'); - - if(!imageUrl) imageUrl = GetConfiguration('image.library.notifications.url', '').replace('%image%', type.replace(/\./g, '_')); - - return LocalizeText(imageUrl); - } - - public static showNotification(type: string, options: Map = null): void - { - if(!options) options = new Map(); - - const configuration = this.getNotificationConfig(('notification.' + type)); - - if(configuration) for(const key in configuration) options.set(key, configuration[key]); - - const title = this.getNotificationPart(options, type, 'title', true); - const message = this.getNotificationPart(options, type, 'message', true).replace(/\\r/g, '\r'); - const linkTitle = this.getNotificationPart(options, type, 'linkTitle', false); - const linkUrl = this.getNotificationPart(options, type, 'linkUrl', false); - const image = this.getNotificationImageUrl(options, type); - - if(options.get('display') === 'BUBBLE') - { - this.showSingleBubble(LocalizeText(message), NotificationBubbleType.INFO, image, linkUrl); - } - else - { - this.simpleAlert(message, type, linkUrl, linkTitle, title, image); - } - - if(options.get('sound')) PlaySound(options.get('sound')); - } - - public static showSingleBubble(message: string, type: string, imageUrl: string = null, internalLink: string = null): void - { - if(this.BUBBLES_DISABLED) return; - - DispatchUiEvent(new NotificationBubbleEvent(message, type, imageUrl, internalLink)); - } - - public static showClubGiftNotification(numGifts: number): void - { - if(numGifts <= 0) return; - - this.showSingleBubble(numGifts.toString(), NotificationBubbleType.CLUBGIFT, null, ('catalog/open/' + GetConfiguration('catalog.links')['hc.hc_gifts'])); - } - - public static handleMOTD(messages: string[]): void - { - messages = messages.map(message => this.cleanText(message)); - - DispatchUiEvent(new NotificationAlertEvent(messages, NotificationAlertType.MOTD, null, null, LocalizeText('notifications.motd.title'))); - } - - public static confirm(message: string, onConfirm: Function, onCancel: Function, confirmText: string = null, cancelText: string = null, title: string = null, type: string = null): void - { - if(!confirmText || !confirmText.length) confirmText = LocalizeText('generic.confirm'); - - if(!cancelText || !cancelText.length) cancelText = LocalizeText('generic.cancel'); - - if(!title || !title.length) title = LocalizeText('notifications.broadcast.title'); - - DispatchUiEvent(new NotificationConfirmEvent(type, this.cleanText(message), onConfirm, onCancel, confirmText, cancelText, title)); - } - - public static simpleAlert(message: string, type: string = null, clickUrl: string = null, clickUrlText: string = null, title: string = null, imageUrl: string = null): void - { - if(!title || !title.length) title = LocalizeText('notifications.broadcast.title'); - - if(!type || !type.length) type = NotificationAlertType.DEFAULT; - - DispatchUiEvent(new NotificationAlertEvent([ this.cleanText(message) ], type, clickUrl, clickUrlText, title, imageUrl)); - } - - public static showNitroAlert(): void - { - DispatchUiEvent(new NotificationAlertEvent(null, NotificationAlertType.NITRO)); - } - - public static showModeratorMessage(message: string, url: string = null, showHabboWay: boolean = true): void - { - this.simpleAlert(message, NotificationAlertType.DEFAULT, url, LocalizeText('mod.alert.link'), LocalizeText('mod.alert.title')); - } - - public static handleModeratorCaution(message: string, url: string = null): void - { - this.showModeratorMessage(message, url); - } - - public static handleModeratorMessage(message: string, url: string = null): void - { - this.showModeratorMessage(message, url, false); - } - - public static handleUserBannedMessage(message: string): void - { - this.showModeratorMessage(message); - } - - public static handleHotelClosedMessage(open: number, minute: number, thrownOut: boolean): void - { - this.simpleAlert( LocalizeText(('opening.hours.' + (thrownOut ? 'disconnected' : 'closed')), [ 'h', 'm' ], [ this.getTimeZeroPadded(open), this.getTimeZeroPadded(minute) ]), NotificationAlertType.DEFAULT, null, null, LocalizeText('opening.hours.title')); - } - - public static handleHotelMaintenanceMessage(minutesUntilMaintenance: number, duration: number): void - { - this.simpleAlert(LocalizeText('maintenance.shutdown', [ 'm', 'd' ], [ minutesUntilMaintenance.toString(), duration.toString() ]), NotificationAlertType.DEFAULT, null, null, LocalizeText('opening.hours.title')); - } - - public static handleHotelClosingMessage(minutes: number): void - { - this.simpleAlert(LocalizeText('opening.hours.shutdown', [ 'm' ], [ minutes.toString() ]), NotificationAlertType.DEFAULT, null, null, LocalizeText('opening.hours.title')); - } - - public static handleLoginFailedHotelClosedMessage(openHour: number, openMinutes: number): void - { - this.simpleAlert(LocalizeText('opening.hours.disconnected', [ 'h', 'm' ], [ openHour.toString(), openMinutes.toString() ]), NotificationAlertType.DEFAULT, null, null, LocalizeText('opening.hours.title')); - } - - public static openUrl(url: string): void - { - if(!url || !url.length) return; - - if(url.startsWith('http')) - { - HabboWebTools.openWebPage(url); - } - else - { - CreateLinkEvent(url); - } - } - - public static showModerationDisclaimer(): void - { - if(RoomEnterEffect.isRunning()) - { - if(this.MODERATION_DISCLAIMER_TIMEOUT) return; - - this.MODERATION_DISCLAIMER_TIMEOUT = setTimeout(() => - { - this.showModerationDisclaimer(); - }, (RoomEnterEffect.totalRunningTime + this.MODERATION_DISCLAIMER_DELAY_MS)); - } - else - { - if(this.MODERATION_DISCLAIMER_SHOWN) return; - - this.showSingleBubble(LocalizeText('mod.chatdisclaimer'), NotificationBubbleType.INFO); - - this.MODERATION_DISCLAIMER_SHOWN = true; - } - } -} diff --git a/src/api/notification/index.ts b/src/api/notification/index.ts index 6489b87f..23476d35 100644 --- a/src/api/notification/index.ts +++ b/src/api/notification/index.ts @@ -4,4 +4,3 @@ export * from './NotificationBubbleItem'; export * from './NotificationBubbleType'; export * from './NotificationConfirmItem'; export * from './NotificationConfirmType'; -export * from './NotificationUtilities'; diff --git a/src/api/nitro/room/widgets/events/RoomWidgetPollUpdateEvent.ts b/src/api/room/events/RoomWidgetPollUpdateEvent.ts similarity index 100% rename from src/api/nitro/room/widgets/events/RoomWidgetPollUpdateEvent.ts rename to src/api/room/events/RoomWidgetPollUpdateEvent.ts diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateBackgroundColorPreviewEvent.ts b/src/api/room/events/RoomWidgetUpdateBackgroundColorPreviewEvent.ts similarity index 100% rename from src/api/nitro/room/widgets/events/RoomWidgetUpdateBackgroundColorPreviewEvent.ts rename to src/api/room/events/RoomWidgetUpdateBackgroundColorPreviewEvent.ts diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateChatInputContentEvent.ts b/src/api/room/events/RoomWidgetUpdateChatInputContentEvent.ts similarity index 100% rename from src/api/nitro/room/widgets/events/RoomWidgetUpdateChatInputContentEvent.ts rename to src/api/room/events/RoomWidgetUpdateChatInputContentEvent.ts diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateEvent.ts b/src/api/room/events/RoomWidgetUpdateEvent.ts similarity index 100% rename from src/api/nitro/room/widgets/events/RoomWidgetUpdateEvent.ts rename to src/api/room/events/RoomWidgetUpdateEvent.ts diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateRentableBotChatEvent.ts b/src/api/room/events/RoomWidgetUpdateRentableBotChatEvent.ts similarity index 100% rename from src/api/nitro/room/widgets/events/RoomWidgetUpdateRentableBotChatEvent.ts rename to src/api/room/events/RoomWidgetUpdateRentableBotChatEvent.ts diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateRoomObjectEvent.ts b/src/api/room/events/RoomWidgetUpdateRoomObjectEvent.ts similarity index 100% rename from src/api/nitro/room/widgets/events/RoomWidgetUpdateRoomObjectEvent.ts rename to src/api/room/events/RoomWidgetUpdateRoomObjectEvent.ts diff --git a/src/api/room/events/index.ts b/src/api/room/events/index.ts new file mode 100644 index 00000000..e5ed0d8c --- /dev/null +++ b/src/api/room/events/index.ts @@ -0,0 +1,6 @@ +export * from './RoomWidgetPollUpdateEvent'; +export * from './RoomWidgetUpdateBackgroundColorPreviewEvent'; +export * from './RoomWidgetUpdateChatInputContentEvent'; +export * from './RoomWidgetUpdateEvent'; +export * from './RoomWidgetUpdateRentableBotChatEvent'; +export * from './RoomWidgetUpdateRoomObjectEvent'; diff --git a/src/api/room/index.ts b/src/api/room/index.ts new file mode 100644 index 00000000..56aea79e --- /dev/null +++ b/src/api/room/index.ts @@ -0,0 +1,2 @@ +export * from './events'; +export * from './widgets'; diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateInfostandFurniEvent.ts b/src/api/room/widgets/AvatarInfoFurni.ts similarity index 83% rename from src/api/nitro/room/widgets/events/RoomWidgetUpdateInfostandFurniEvent.ts rename to src/api/room/widgets/AvatarInfoFurni.ts index 1df6fcdf..3380282a 100644 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateInfostandFurniEvent.ts +++ b/src/api/room/widgets/AvatarInfoFurni.ts @@ -1,9 +1,9 @@ import { IObjectData } from '@nitrots/nitro-renderer'; -import { RoomWidgetUpdateInfostandEvent } from './RoomWidgetUpdateInfostandEvent'; +import { IAvatarInfo } from './IAvatarInfo'; -export class RoomWidgetUpdateInfostandFurniEvent extends RoomWidgetUpdateInfostandEvent +export class AvatarInfoFurni implements IAvatarInfo { - public static FURNI: string = 'RWUIFE_FURNI'; + public static FURNI: string = 'IFI_FURNI'; public id: number = 0; public category: number = 0; @@ -32,4 +32,7 @@ export class RoomWidgetUpdateInfostandFurniEvent extends RoomWidgetUpdateInfosta public availableForBuildersClub: boolean = false; public tileSizeX: number = 1; public tileSizeY: number = 1; + + constructor(public readonly type: string) + {} } diff --git a/src/api/room/widgets/AvatarInfoName.ts b/src/api/room/widgets/AvatarInfoName.ts new file mode 100644 index 00000000..66a6a7e3 --- /dev/null +++ b/src/api/room/widgets/AvatarInfoName.ts @@ -0,0 +1,11 @@ +export class AvatarInfoName +{ + constructor( + public readonly roomIndex: number, + public readonly category: number, + public readonly id: number, + public readonly name: string, + public readonly userType: number, + public readonly isFriend: boolean = false) + {} +} diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateInfostandPetEvent.ts b/src/api/room/widgets/AvatarInfoPet.ts similarity index 85% rename from src/api/nitro/room/widgets/events/RoomWidgetUpdateInfostandPetEvent.ts rename to src/api/room/widgets/AvatarInfoPet.ts index be193d60..0c0435a9 100644 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateInfostandPetEvent.ts +++ b/src/api/room/widgets/AvatarInfoPet.ts @@ -1,8 +1,8 @@ -import { RoomWidgetUpdateInfostandEvent } from './RoomWidgetUpdateInfostandEvent'; +import { IAvatarInfo } from './IAvatarInfo'; -export class RoomWidgetUpdateInfostandPetEvent extends RoomWidgetUpdateInfostandEvent +export class AvatarInfoPet implements IAvatarInfo { - public static PET_INFO: string = 'RWUIPE_PET_INFO'; + public static PET_INFO: string = 'IPI_PET_INFO'; public level: number = 0; public maximumLevel: number = 0; @@ -40,4 +40,7 @@ export class RoomWidgetUpdateInfostandPetEvent extends RoomWidgetUpdateInfostand public remainingTimeToLive: number = 0; public remainingGrowTime: number = 0; public publiclyBreedable: boolean = false; + + constructor(public readonly type: string) + {} } diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateInfostandRentableBotEvent.ts b/src/api/room/widgets/AvatarInfoRentableBot.ts similarity index 66% rename from src/api/nitro/room/widgets/events/RoomWidgetUpdateInfostandRentableBotEvent.ts rename to src/api/room/widgets/AvatarInfoRentableBot.ts index a44f77f5..77fb10ca 100644 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateInfostandRentableBotEvent.ts +++ b/src/api/room/widgets/AvatarInfoRentableBot.ts @@ -1,8 +1,8 @@ -import { RoomWidgetUpdateInfostandEvent } from './RoomWidgetUpdateInfostandEvent'; +import { IAvatarInfo } from './IAvatarInfo'; -export class RoomWidgetUpdateInfostandRentableBotEvent extends RoomWidgetUpdateInfostandEvent +export class AvatarInfoRentableBot implements IAvatarInfo { - public static RENTABLE_BOT: string = 'RWUIRBE_RENTABLE_BOT'; + public static RENTABLE_BOT: string = 'IRBI_RENTABLE_BOT'; public name: string = ''; public motto: string = ''; @@ -17,4 +17,7 @@ export class RoomWidgetUpdateInfostandRentableBotEvent extends RoomWidgetUpdateI public ownerId: number = -1; public ownerName: string = ''; public botSkills: number[] = []; + + constructor(public readonly type: string) + {} } diff --git a/src/api/nitro/room/widgets/events/RoomWidgetUpdateInfostandUserEvent.ts b/src/api/room/widgets/AvatarInfoUser.ts similarity index 77% rename from src/api/nitro/room/widgets/events/RoomWidgetUpdateInfostandUserEvent.ts rename to src/api/room/widgets/AvatarInfoUser.ts index 32640c75..270bfbd4 100644 --- a/src/api/nitro/room/widgets/events/RoomWidgetUpdateInfostandUserEvent.ts +++ b/src/api/room/widgets/AvatarInfoUser.ts @@ -1,10 +1,10 @@ -import { RoomWidgetUpdateInfostandEvent } from './RoomWidgetUpdateInfostandEvent'; +import { IAvatarInfo } from './IAvatarInfo'; -export class RoomWidgetUpdateInfostandUserEvent extends RoomWidgetUpdateInfostandEvent +export class AvatarInfoUser implements IAvatarInfo { - public static OWN_USER: string = 'RWUIUE_OWN_USER'; - public static PEER: string = 'RWUIUE_PEER'; - public static BOT: string = 'RWUIUE_BOT'; + public static OWN_USER: string = 'IUI_OWN_USER'; + public static PEER: string = 'IUI_PEER'; + public static BOT: string = 'IUI_BOT'; public static TRADE_REASON_OK: number = 0; public static TRADE_REASON_SHUTDOWN: number = 2; public static TRADE_REASON_NO_TRADING: number = 3; @@ -39,8 +39,11 @@ export class RoomWidgetUpdateInfostandUserEvent extends RoomWidgetUpdateInfostan public targetRoomControllerLevel: number = 0; public isAmbassador: boolean = false; + constructor(public readonly type: string) + {} + public get isOwnUser(): boolean { - return (this.type === RoomWidgetUpdateInfostandUserEvent.OWN_USER); + return (this.type === AvatarInfoUser.OWN_USER); } } diff --git a/src/api/room/widgets/AvatarInfoUtilities.ts b/src/api/room/widgets/AvatarInfoUtilities.ts new file mode 100644 index 00000000..134e604e --- /dev/null +++ b/src/api/room/widgets/AvatarInfoUtilities.ts @@ -0,0 +1,458 @@ +import { IFurnitureData, ObjectDataFactory, PetFigureData, PetType, RoomControllerLevel, RoomModerationSettings, RoomObjectCategory, RoomObjectType, RoomObjectVariable, RoomPetData, RoomTradingLevelEnum, RoomUserData, RoomWidgetEnumItemExtradataParameter, Vector3d } from '@nitrots/nitro-renderer'; +import { WiredSelectObjectEvent } from '../../../events'; +import { DispatchUiEvent } from '../../events'; +import { GetNitroInstance, GetRoomEngine, GetRoomSession, GetSessionDataManager, IsOwnerOfFurniture } from '../../nitro'; +import { LocalizeText } from '../../utils'; +import { AvatarInfoFurni } from './AvatarInfoFurni'; +import { AvatarInfoName } from './AvatarInfoName'; +import { AvatarInfoPet } from './AvatarInfoPet'; +import { AvatarInfoRentableBot } from './AvatarInfoRentableBot'; +import { AvatarInfoUser } from './AvatarInfoUser'; + +export class AvatarInfoUtilities +{ + public static getObjectName(objectId: number, category: number): AvatarInfoName + { + const roomSession = GetRoomSession(); + + let id = -1; + let name: string = null; + let userType = 0; + + switch(category) + { + case RoomObjectCategory.FLOOR: + case RoomObjectCategory.WALL: { + const roomObject = GetRoomEngine().getRoomObject(roomSession.roomId, objectId, category); + + if(!roomObject) break; + + if(roomObject.type.indexOf('poster') === 0) + { + name = LocalizeText('${poster_' + parseInt(roomObject.type.replace('poster', '')) + '_name}'); + } + else + { + let furniData: IFurnitureData = null; + + const typeId = roomObject.model.getValue(RoomObjectVariable.FURNITURE_TYPE_ID); + + if(category === RoomObjectCategory.FLOOR) + { + furniData = GetSessionDataManager().getFloorItemData(typeId); + } + + else if(category === RoomObjectCategory.WALL) + { + furniData = GetSessionDataManager().getWallItemData(typeId); + } + + if(!furniData) break; + + id = furniData.id; + name = furniData.name; + } + break; + } + case RoomObjectCategory.UNIT: { + const userData = roomSession.userDataManager.getUserDataByIndex(objectId); + + if(!userData) break; + + id = userData.webID; + name = userData.name; + userType = userData.type; + break; + } + } + + if(!name || !name.length) return null; + + return new AvatarInfoName(objectId, category, id, name, userType); + } + + public static getFurniInfo(objectId: number, category: number): AvatarInfoFurni + { + const roomSession = GetRoomSession(); + const furniInfo = new AvatarInfoFurni(AvatarInfoFurni.FURNI); + + furniInfo.id = objectId; + furniInfo.category = category; + + const roomObject = GetRoomEngine().getRoomObject(roomSession.roomId, objectId, category); + + if(!roomObject) return; + + const model = roomObject.model; + + if(model.getValue(RoomWidgetEnumItemExtradataParameter.INFOSTAND_EXTRA_PARAM)) + { + furniInfo.extraParam = model.getValue(RoomWidgetEnumItemExtradataParameter.INFOSTAND_EXTRA_PARAM); + } + + const dataFormat = model.getValue(RoomObjectVariable.FURNITURE_DATA_FORMAT); + const objectData = ObjectDataFactory.getData(dataFormat); + + objectData.initializeFromRoomObjectModel(model); + + furniInfo.stuffData = objectData; + + const objectType = roomObject.type; + + if(objectType.indexOf('poster') === 0) + { + const posterId = parseInt(objectType.replace('poster', '')); + + furniInfo.name = LocalizeText(('${poster_' + posterId) + '_name}'); + furniInfo.description = LocalizeText(('${poster_' + posterId) + '_desc}'); + } + else + { + const typeId = model.getValue(RoomObjectVariable.FURNITURE_TYPE_ID); + + let furnitureData: IFurnitureData = null; + + if(category === RoomObjectCategory.FLOOR) + { + furnitureData = GetSessionDataManager().getFloorItemData(typeId); + } + + else if(category === RoomObjectCategory.WALL) + { + furnitureData = GetSessionDataManager().getWallItemData(typeId); + } + + if(furnitureData) + { + furniInfo.name = furnitureData.name; + furniInfo.description = furnitureData.description; + furniInfo.purchaseOfferId = furnitureData.purchaseOfferId; + furniInfo.purchaseCouldBeUsedForBuyout = furnitureData.purchaseCouldBeUsedForBuyout; + furniInfo.rentOfferId = furnitureData.rentOfferId; + furniInfo.rentCouldBeUsedForBuyout = furnitureData.rentCouldBeUsedForBuyout; + furniInfo.availableForBuildersClub = furnitureData.availableForBuildersClub; + furniInfo.tileSizeX = furnitureData.tileSizeX; + furniInfo.tileSizeY = furnitureData.tileSizeY; + + DispatchUiEvent(new WiredSelectObjectEvent(furniInfo.id, furniInfo.category)); + } + } + + if(objectType.indexOf('post_it') > -1) furniInfo.isStickie = true; + + const expiryTime = model.getValue(RoomObjectVariable.FURNITURE_EXPIRY_TIME); + const expiryTimestamp = model.getValue(RoomObjectVariable.FURNITURE_EXPIRTY_TIMESTAMP); + + furniInfo.expiration = ((expiryTime < 0) ? expiryTime : Math.max(0, (expiryTime - ((GetNitroInstance().time - expiryTimestamp) / 1000)))); + + let roomObjectImage = GetRoomEngine().getRoomObjectImage(roomSession.roomId, objectId, category, new Vector3d(180), 64, null); + + if(!roomObjectImage.data || (roomObjectImage.data.width > 140) || (roomObjectImage.data.height > 200)) + { + roomObjectImage = GetRoomEngine().getRoomObjectImage(roomSession.roomId, objectId, category, new Vector3d(180), 1, null); + } + + furniInfo.image = roomObjectImage.getImage(); + furniInfo.isWallItem = (category === RoomObjectCategory.WALL); + furniInfo.isRoomOwner = roomSession.isRoomOwner; + furniInfo.roomControllerLevel = roomSession.controllerLevel; + furniInfo.isAnyRoomController = GetSessionDataManager().isModerator; + furniInfo.ownerId = model.getValue(RoomObjectVariable.FURNITURE_OWNER_ID); + furniInfo.ownerName = model.getValue(RoomObjectVariable.FURNITURE_OWNER_NAME); + furniInfo.usagePolicy = model.getValue(RoomObjectVariable.FURNITURE_USAGE_POLICY); + + const guildId = model.getValue(RoomObjectVariable.FURNITURE_GUILD_CUSTOMIZED_GUILD_ID); + + if(guildId !== 0) + { + furniInfo.groupId = guildId; + //this.container.connection.send(new _Str_2863(guildId, false)); + } + + if(IsOwnerOfFurniture(roomObject)) furniInfo.isOwner = true; + + return furniInfo; + } + + public static getUserInfo(category: number, userData: RoomUserData): AvatarInfoUser + { + const roomSession = GetRoomSession(); + + let userInfoType = AvatarInfoUser.OWN_USER; + + if(userData.webID !== GetSessionDataManager().userId) userInfoType = AvatarInfoUser.PEER; + + const userInfo = new AvatarInfoUser(userInfoType); + + userInfo.isSpectatorMode = roomSession.isSpectator; + userInfo.name = userData.name; + userInfo.motto = userData.custom; + userInfo.achievementScore = userData.activityPoints; + userInfo.webID = userData.webID; + userInfo.roomIndex = userData.roomIndex; + userInfo.userType = RoomObjectType.USER; + + const roomObject = GetRoomEngine().getRoomObject(roomSession.roomId, userData.roomIndex, category); + + if(roomObject) userInfo.carryItem = (roomObject.model.getValue(RoomObjectVariable.FIGURE_CARRY_OBJECT) || 0); + + if(userInfoType === AvatarInfoUser.OWN_USER) userInfo.allowNameChange = GetSessionDataManager().canChangeName; + + userInfo.amIOwner = roomSession.isRoomOwner; + userInfo.isGuildRoom = roomSession.isGuildRoom; + userInfo.roomControllerLevel = roomSession.controllerLevel; + userInfo.amIAnyRoomController = GetSessionDataManager().isModerator; + userInfo.isAmbassador = GetSessionDataManager().isAmbassador; + + if(userInfoType === AvatarInfoUser.PEER) + { + if(roomObject) + { + const flatControl = roomObject.model.getValue(RoomObjectVariable.FIGURE_FLAT_CONTROL); + + if(flatControl !== null) userInfo.targetRoomControllerLevel = flatControl; + + userInfo.canBeMuted = this.canBeMuted(userInfo); + userInfo.canBeKicked = this.canBeKicked(userInfo); + userInfo.canBeBanned = this.canBeBanned(userInfo); + } + + userInfo.isIgnored = GetSessionDataManager().isUserIgnored(userData.name); + userInfo.respectLeft = GetSessionDataManager().respectsLeft; + + const isShuttingDown = GetSessionDataManager().isSystemShutdown; + const tradeMode = roomSession.tradeMode; + + if(isShuttingDown) + { + userInfo.canTrade = false; + } + else + { + switch(tradeMode) + { + case RoomTradingLevelEnum.ROOM_CONTROLLER_REQUIRED: { + const roomController = ((userInfo.roomControllerLevel !== RoomControllerLevel.NONE) && (userInfo.roomControllerLevel !== RoomControllerLevel.GUILD_MEMBER)); + const targetController = ((userInfo.targetRoomControllerLevel !== RoomControllerLevel.NONE) && (userInfo.targetRoomControllerLevel !== RoomControllerLevel.GUILD_MEMBER)); + + userInfo.canTrade = (roomController || targetController); + break; + } + case RoomTradingLevelEnum.NO_TRADING: + userInfo.canTrade = true; + break; + default: + userInfo.canTrade = false; + break; + } + } + + userInfo.canTradeReason = AvatarInfoUser.TRADE_REASON_OK; + + if(isShuttingDown) userInfo.canTradeReason = AvatarInfoUser.TRADE_REASON_SHUTDOWN; + + if(tradeMode !== RoomTradingLevelEnum.FREE_TRADING) userInfo.canTradeReason = AvatarInfoUser.TRADE_REASON_NO_TRADING; + + // const _local_12 = GetSessionDataManager().userId; + // _local_13 = GetSessionDataManager()._Str_18437(_local_12); + // this._Str_16287(_local_12, _local_13); + } + + userInfo.groupId = userData.groupId; + userInfo.groupBadgeId = GetSessionDataManager().getGroupBadge(userInfo.groupId); + userInfo.groupName = userData.groupName; + userInfo.badges = roomSession.userDataManager.getUserBadges(userData.webID); + userInfo.figure = userData.figure; + //var _local_8:Array = GetSessionDataManager()._Str_18437(userData.webID); + //this._Str_16287(userData._Str_2394, _local_8); + //this._container._Str_8097._Str_14387(userData.webID); + //this._container.connection.send(new _Str_8049(userData._Str_2394)); + + return userInfo; + } + + public static getBotInfo(category: number, userData: RoomUserData): AvatarInfoUser + { + const roomSession = GetRoomSession(); + const userInfo = new AvatarInfoUser(AvatarInfoUser.BOT); + + userInfo.name = userData.name; + userInfo.motto = userData.custom; + userInfo.webID = userData.webID; + userInfo.roomIndex = userData.roomIndex; + userInfo.userType = userData.type; + + const roomObject = GetRoomEngine().getRoomObject(roomSession.roomId, userData.roomIndex, category); + + if(roomObject) userInfo.carryItem = (roomObject.model.getValue(RoomObjectVariable.FIGURE_CARRY_OBJECT) || 0); + + userInfo.amIOwner = roomSession.isRoomOwner; + userInfo.isGuildRoom = roomSession.isGuildRoom; + userInfo.roomControllerLevel = roomSession.controllerLevel; + userInfo.amIAnyRoomController = GetSessionDataManager().isModerator; + userInfo.isAmbassador = GetSessionDataManager().isAmbassador; + userInfo.badges = [ AvatarInfoUser.DEFAULT_BOT_BADGE_ID ]; + userInfo.figure = userData.figure; + + return userInfo; + } + + public static getRentableBotInfo(category: number, userData: RoomUserData): AvatarInfoRentableBot + { + const roomSession = GetRoomSession(); + const botInfo = new AvatarInfoRentableBot(AvatarInfoRentableBot.RENTABLE_BOT); + + botInfo.name = userData.name; + botInfo.motto = userData.custom; + botInfo.webID = userData.webID; + botInfo.roomIndex = userData.roomIndex; + botInfo.ownerId = userData.ownerId; + botInfo.ownerName = userData.ownerName; + botInfo.botSkills = userData.botSkills; + + const roomObject = GetRoomEngine().getRoomObject(roomSession.roomId, userData.roomIndex, category); + + if(roomObject) botInfo.carryItem = (roomObject.model.getValue(RoomObjectVariable.FIGURE_CARRY_OBJECT) || 0); + + botInfo.amIOwner = roomSession.isRoomOwner; + botInfo.roomControllerLevel = roomSession.controllerLevel; + botInfo.amIAnyRoomController = GetSessionDataManager().isModerator; + botInfo.badges = [ AvatarInfoUser.DEFAULT_BOT_BADGE_ID ]; + botInfo.figure = userData.figure; + + return botInfo; + } + + public static getPetInfo(petData: RoomPetData): AvatarInfoPet + { + const roomSession = GetRoomSession(); + const userData = roomSession.userDataManager.getPetData(petData.id); + + if(!userData) return; + + const figure = new PetFigureData(userData.figure); + + let posture: string = null; + + if(figure.typeId === PetType.MONSTERPLANT) + { + if(petData.level >= petData.adultLevel) posture = 'std'; + else posture = ('grw' + petData.level); + } + + const isOwner = (petData.ownerId === GetSessionDataManager().userId); + const petInfo = new AvatarInfoPet(AvatarInfoPet.PET_INFO); + + petInfo.name = userData.name; + petInfo.id = petData.id; + petInfo.ownerId = petData.ownerId; + petInfo.ownerName = petData.ownerName; + petInfo.rarityLevel = petData.rarityLevel; + petInfo.petType = figure.typeId; + petInfo.petBreed = figure.paletteId; + petInfo.petFigure = userData.figure; + petInfo.posture = posture; + petInfo.isOwner = isOwner; + petInfo.roomIndex = userData.roomIndex; + petInfo.level = petData.level; + petInfo.maximumLevel = petData.maximumLevel; + petInfo.experience = petData.experience; + petInfo.levelExperienceGoal = petData.levelExperienceGoal; + petInfo.energy = petData.energy; + petInfo.maximumEnergy = petData.maximumEnergy; + petInfo.happyness = petData.happyness; + petInfo.maximumHappyness = petData.maximumHappyness; + petInfo.respect = petData.respect; + petInfo.respectsPetLeft = GetSessionDataManager().respectsPetLeft; + petInfo.age = petData.age; + petInfo.saddle = petData.saddle; + petInfo.rider = petData.rider; + petInfo.breedable = petData.breedable; + petInfo.fullyGrown = petData.fullyGrown; + petInfo.dead = petData.dead; + petInfo.rarityLevel = petData.rarityLevel; + petInfo.skillTresholds = petData.skillTresholds; + petInfo.canRemovePet = false; + petInfo.publiclyRideable = petData.publiclyRideable; + petInfo.maximumTimeToLive = petData.maximumTimeToLive; + petInfo.remainingTimeToLive = petData.remainingTimeToLive; + petInfo.remainingGrowTime = petData.remainingGrowTime; + petInfo.publiclyBreedable = petData.publiclyBreedable; + + if(isOwner || roomSession.isRoomOwner || GetSessionDataManager().isModerator || (roomSession.controllerLevel >= RoomControllerLevel.GUEST)) petInfo.canRemovePet = true; + + return petInfo; + } + + private static checkGuildSetting(userInfo: AvatarInfoUser): boolean + { + if(userInfo.isGuildRoom) return (userInfo.roomControllerLevel >= RoomControllerLevel.GUILD_ADMIN); + + return (userInfo.roomControllerLevel >= RoomControllerLevel.GUEST); + } + + private static isValidSetting(userInfo: AvatarInfoUser, checkSetting: (userInfo: AvatarInfoUser, moderation: RoomModerationSettings) => boolean): boolean + { + const roomSession = GetRoomSession(); + + if(!roomSession.isPrivateRoom) return false; + + const moderation = roomSession.moderationSettings; + + let flag = false; + + if(moderation) flag = checkSetting(userInfo, moderation); + + return (flag && (userInfo.targetRoomControllerLevel < RoomControllerLevel.ROOM_OWNER)); + } + + private static canBeMuted(userInfo: AvatarInfoUser): boolean + { + const checkSetting = (userInfo: AvatarInfoUser, moderation: RoomModerationSettings) => + { + switch(moderation.allowMute) + { + case RoomModerationSettings.MODERATION_LEVEL_USER_WITH_RIGHTS: + return this.checkGuildSetting(userInfo); + default: + return (userInfo.roomControllerLevel >= RoomControllerLevel.ROOM_OWNER); + } + } + + return this.isValidSetting(userInfo, checkSetting); + } + + private static canBeKicked(userInfo: AvatarInfoUser): boolean + { + const checkSetting = (userInfo: AvatarInfoUser, moderation: RoomModerationSettings) => + { + switch(moderation.allowKick) + { + case RoomModerationSettings.MODERATION_LEVEL_ALL: + return true; + case RoomModerationSettings.MODERATION_LEVEL_USER_WITH_RIGHTS: + return this.checkGuildSetting(userInfo); + default: + return (userInfo.roomControllerLevel >= RoomControllerLevel.ROOM_OWNER); + } + } + + return this.isValidSetting(userInfo, checkSetting); + } + + private static canBeBanned(userInfo: AvatarInfoUser): boolean + { + const checkSetting = (userInfo: AvatarInfoUser, moderation: RoomModerationSettings) => + { + switch(moderation.allowBan) + { + case RoomModerationSettings.MODERATION_LEVEL_USER_WITH_RIGHTS: + return this.checkGuildSetting(userInfo); + default: + return (userInfo.roomControllerLevel >= RoomControllerLevel.ROOM_OWNER); + } + } + + return this.isValidSetting(userInfo, checkSetting); + } +} diff --git a/src/components/room/widgets/avatar-info/common/BotSkillsEnum.ts b/src/api/room/widgets/BotSkillsEnum.ts similarity index 100% rename from src/components/room/widgets/avatar-info/common/BotSkillsEnum.ts rename to src/api/room/widgets/BotSkillsEnum.ts diff --git a/src/components/room/widgets/chat/common/ChatBubbleMessage.ts b/src/api/room/widgets/ChatBubbleMessage.ts similarity index 100% rename from src/components/room/widgets/chat/common/ChatBubbleMessage.ts rename to src/api/room/widgets/ChatBubbleMessage.ts diff --git a/src/api/room/widgets/ChatMessageTypeEnum.ts b/src/api/room/widgets/ChatMessageTypeEnum.ts new file mode 100644 index 00000000..1a5296b1 --- /dev/null +++ b/src/api/room/widgets/ChatMessageTypeEnum.ts @@ -0,0 +1,6 @@ +export class ChatMessageTypeEnum +{ + public static CHAT_DEFAULT: number = 0; + public static CHAT_WHISPER: number = 1; + public static CHAT_SHOUT: number = 2; +} diff --git a/src/components/room/widgets/furniture/dimmer/DimmerFurnitureWidgetPresetItem.ts b/src/api/room/widgets/DimmerFurnitureWidgetPresetItem.ts similarity index 100% rename from src/components/room/widgets/furniture/dimmer/DimmerFurnitureWidgetPresetItem.ts rename to src/api/room/widgets/DimmerFurnitureWidgetPresetItem.ts diff --git a/src/components/room/widgets/chat/common/DoChatsOverlap.ts b/src/api/room/widgets/DoChatsOverlap.ts similarity index 100% rename from src/components/room/widgets/chat/common/DoChatsOverlap.ts rename to src/api/room/widgets/DoChatsOverlap.ts diff --git a/src/api/room/widgets/FurnitureDimmerUtilities.ts b/src/api/room/widgets/FurnitureDimmerUtilities.ts new file mode 100644 index 00000000..9d252d10 --- /dev/null +++ b/src/api/room/widgets/FurnitureDimmerUtilities.ts @@ -0,0 +1,29 @@ +import { GetRoomEngine, GetRoomSession } from '../../nitro'; + +export class FurnitureDimmerUtilities +{ + public static AVAILABLE_COLORS: number[] = [ 7665141, 21495, 15161822, 15353138, 15923281, 8581961, 0 ]; + public static HTML_COLORS: string[] = [ '#74F5F5', '#0053F7', '#E759DE', '#EA4532', '#F2F851', '#82F349', '#000000' ]; + public static MIN_BRIGHTNESS: number = 76; + public static MAX_BRIGHTNESS: number = 255; + + public static savePreset(presetNumber: number, effectTypeId: number, color: number, brightness: number, apply: boolean): void + { + GetRoomSession().updateMoodlightData(presetNumber, effectTypeId, color, brightness, apply); + } + + public static changeState(): void + { + GetRoomSession().toggleMoodlightState(); + } + + public static previewDimmer(color: number, brightness: number, bgOnly: boolean): void + { + GetRoomEngine().updateObjectRoomColor(GetRoomSession().roomId, color, brightness, bgOnly); + } + + public static scaleBrightness(value: number): number + { + return ~~((((value - this.MIN_BRIGHTNESS) * (100 - 0)) / (this.MAX_BRIGHTNESS - this.MIN_BRIGHTNESS)) + 0); + } +} diff --git a/src/api/room/widgets/IAvatarInfo.ts b/src/api/room/widgets/IAvatarInfo.ts new file mode 100644 index 00000000..23fb47ba --- /dev/null +++ b/src/api/room/widgets/IAvatarInfo.ts @@ -0,0 +1,4 @@ +export interface IAvatarInfo +{ + type: string; +} diff --git a/src/api/nitro/room/widgets/events/IPhotoData.ts b/src/api/room/widgets/IPhotoData.ts similarity index 100% rename from src/api/nitro/room/widgets/events/IPhotoData.ts rename to src/api/room/widgets/IPhotoData.ts diff --git a/src/api/room/widgets/MannequinUtilities.ts b/src/api/room/widgets/MannequinUtilities.ts new file mode 100644 index 00000000..5e82b9af --- /dev/null +++ b/src/api/room/widgets/MannequinUtilities.ts @@ -0,0 +1,39 @@ +import { AvatarFigurePartType, IAvatarFigureContainer } from '@nitrots/nitro-renderer'; +import { GetAvatarRenderManager } from '../../nitro'; + +export class MannequinUtilities +{ + public static MANNEQUIN_FIGURE = [ 'hd', 99999, [ 99998 ] ]; + public static MANNEQUIN_CLOTHING_PART_TYPES = [ + AvatarFigurePartType.CHEST_ACCESSORY, + AvatarFigurePartType.COAT_CHEST, + AvatarFigurePartType.CHEST, + AvatarFigurePartType.LEGS, + AvatarFigurePartType.SHOES, + AvatarFigurePartType.WAIST_ACCESSORY + ]; + + public static getMergedMannequinFigureContainer(figure: string, targetFigure: string): IAvatarFigureContainer + { + const figureContainer = GetAvatarRenderManager().createFigureContainer(figure); + const targetFigureContainer = GetAvatarRenderManager().createFigureContainer(targetFigure); + + for(const part of this.MANNEQUIN_CLOTHING_PART_TYPES) figureContainer.removePart(part); + + for(const part of targetFigureContainer.getPartTypeIds()) figureContainer.updatePart(part, targetFigureContainer.getPartSetId(part), targetFigureContainer.getPartColorIds(part)); + + return figureContainer; + } + + public static transformAsMannequinFigure(figureContainer: IAvatarFigureContainer): void + { + for(const part of figureContainer.getPartTypeIds()) + { + if(this.MANNEQUIN_CLOTHING_PART_TYPES.indexOf(part) >= 0) continue; + + figureContainer.removePart(part); + } + + figureContainer.updatePart((this.MANNEQUIN_FIGURE[0] as string), (this.MANNEQUIN_FIGURE[1] as number), (this.MANNEQUIN_FIGURE[2] as number[])); + }; +} diff --git a/src/components/room/widgets/avatar-info/common/PetSupplementEnum.ts b/src/api/room/widgets/PetSupplementEnum.ts similarity index 100% rename from src/components/room/widgets/avatar-info/common/PetSupplementEnum.ts rename to src/api/room/widgets/PetSupplementEnum.ts diff --git a/src/api/room/widgets/PostureTypeEnum.ts b/src/api/room/widgets/PostureTypeEnum.ts new file mode 100644 index 00000000..21352d78 --- /dev/null +++ b/src/api/room/widgets/PostureTypeEnum.ts @@ -0,0 +1,5 @@ +export class PostureTypeEnum +{ + public static POSTURE_STAND: number = 0; + public static POSTURE_SIT: number = 1; +} diff --git a/src/api/nitro/room/widgets/events/RoomDimmerPreset.ts b/src/api/room/widgets/RoomDimmerPreset.ts similarity index 100% rename from src/api/nitro/room/widgets/events/RoomDimmerPreset.ts rename to src/api/room/widgets/RoomDimmerPreset.ts diff --git a/src/api/nitro/room/widgets/events/RoomObjectItem.ts b/src/api/room/widgets/RoomObjectItem.ts similarity index 100% rename from src/api/nitro/room/widgets/events/RoomObjectItem.ts rename to src/api/room/widgets/RoomObjectItem.ts diff --git a/src/api/room/widgets/UseProductItem.ts b/src/api/room/widgets/UseProductItem.ts new file mode 100644 index 00000000..d3e20889 --- /dev/null +++ b/src/api/room/widgets/UseProductItem.ts @@ -0,0 +1,12 @@ +export class UseProductItem +{ + constructor( + public readonly id: number, + public readonly category: number, + public readonly name: string, + public readonly requestRoomObjectId: number, + public readonly targetRoomObjectId: number, + public readonly requestInventoryStripId: number, + public readonly replace: boolean) + {} +} diff --git a/src/components/room/widgets/word-quiz/common/VoteValue.ts b/src/api/room/widgets/VoteValue.ts similarity index 100% rename from src/components/room/widgets/word-quiz/common/VoteValue.ts rename to src/api/room/widgets/VoteValue.ts diff --git a/src/components/room/widgets/furniture/youtube-tv/utils/YoutubeVideoPlaybackStateEnum.ts b/src/api/room/widgets/YoutubeVideoPlaybackStateEnum.ts similarity index 100% rename from src/components/room/widgets/furniture/youtube-tv/utils/YoutubeVideoPlaybackStateEnum.ts rename to src/api/room/widgets/YoutubeVideoPlaybackStateEnum.ts diff --git a/src/api/room/widgets/index.ts b/src/api/room/widgets/index.ts new file mode 100644 index 00000000..14e561c3 --- /dev/null +++ b/src/api/room/widgets/index.ts @@ -0,0 +1,22 @@ +export * from './AvatarInfoFurni'; +export * from './AvatarInfoName'; +export * from './AvatarInfoPet'; +export * from './AvatarInfoRentableBot'; +export * from './AvatarInfoUser'; +export * from './AvatarInfoUtilities'; +export * from './BotSkillsEnum'; +export * from './ChatBubbleMessage'; +export * from './ChatMessageTypeEnum'; +export * from './DimmerFurnitureWidgetPresetItem'; +export * from './DoChatsOverlap'; +export * from './FurnitureDimmerUtilities'; +export * from './IAvatarInfo'; +export * from './IPhotoData'; +export * from './MannequinUtilities'; +export * from './PetSupplementEnum'; +export * from './PostureTypeEnum'; +export * from './RoomDimmerPreset'; +export * from './RoomObjectItem'; +export * from './UseProductItem'; +export * from './VoteValue'; +export * from './YoutubeVideoPlaybackStateEnum'; diff --git a/src/api/utils/PlaySound.ts b/src/api/utils/PlaySound.ts index 94c50ee9..0f9a39d8 100644 --- a/src/api/utils/PlaySound.ts +++ b/src/api/utils/PlaySound.ts @@ -1,6 +1,5 @@ -import { MouseEventType } from '@nitrots/nitro-renderer'; -import { NitroSoundEvent } from '@nitrots/nitro-renderer/src/nitro/events/NitroSoundEvent'; -import { DispatchMainEvent } from '../../hooks'; +import { MouseEventType, NitroSoundEvent } from '@nitrots/nitro-renderer'; +import { DispatchMainEvent } from '../events'; let canPlaySound = false; diff --git a/src/api/wired/WiredActionLayoutCode.ts b/src/api/wired/WiredActionLayoutCode.ts index f15a527f..5282dc59 100644 --- a/src/api/wired/WiredActionLayoutCode.ts +++ b/src/api/wired/WiredActionLayoutCode.ts @@ -1,4 +1,4 @@ -export class WiredActionLayout +export class WiredActionLayoutCode { public static TOGGLE_FURNI_STATE: number = 0; public static RESET: number = 1; diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss index c909faf1..7427e6b4 100644 --- a/src/assets/styles/index.scss +++ b/src/assets/styles/index.scss @@ -7,7 +7,7 @@ @import './utils'; .btn-sm { - min-height: 28px; + min-height: 28px; } textarea { diff --git a/src/assets/styles/utils.scss b/src/assets/styles/utils.scss index c1a3be5b..f8710058 100644 --- a/src/assets/styles/utils.scss +++ b/src/assets/styles/utils.scss @@ -15,7 +15,7 @@ } .scale-1-50 { - transform: scale(1.50) translateZ(0); + transform: scale(1.5) translateZ(0); } .scale-2 { @@ -35,7 +35,6 @@ } ul { - &.columns-3 { display: block; columns: 3; @@ -92,7 +91,6 @@ ul { } .striped-children { - > :nth-child(1) { background-color: $table-striped-bg; } @@ -100,21 +98,25 @@ ul { @keyframes bounceIn { 0% { - opacity: 0; - transform: scale(.3); + opacity: 0; + transform: scale(0.3); } 50% { - opacity: 1; - transform: scale(1.1); + opacity: 1; + transform: scale(1.1); } 70% { - transform: scale(.9); + transform: scale(0.9); } 100% { - transform: scale(1); + transform: scale(1); } } .btn { pointer-events: all; } + +.no-resize { + resize: none !important; +} diff --git a/src/common/Base.tsx b/src/common/Base.tsx index 8ba38fc3..c77bd9c4 100644 --- a/src/common/Base.tsx +++ b/src/common/Base.tsx @@ -6,6 +6,7 @@ export interface BaseProps extends DetailedHTMLProps; display?: DisplayType; fit?: boolean; + fitV?: boolean; grow?: boolean; shrink?: boolean; fullWidth?: boolean; @@ -22,7 +23,7 @@ export interface BaseProps extends DetailedHTMLProps> = props => { - const { ref = null, innerRef = null, display = null, fit = false, grow = false, shrink = false, fullWidth = false, fullHeight = false, overflow = null, position = null, float = null, pointer = false, visible = null, textColor = null, classNames = [], className = '', style = {}, children = null, ...rest } = props; + const { ref = null, innerRef = null, display = null, fit = false, fitV = false, grow = false, shrink = false, fullWidth = false, fullHeight = false, overflow = null, position = null, float = null, pointer = false, visible = null, textColor = null, classNames = [], className = '', style = {}, children = null, ...rest } = props; const getClassNames = useMemo(() => { @@ -34,6 +35,8 @@ export const Base: FC> = props => if(fit || fullHeight) newClassNames.push('h-100'); + if(fitV) newClassNames.push('vw-100', 'vh-100'); + if(grow) newClassNames.push('flex-grow-1'); if(shrink) newClassNames.push('flex-shrink-0'); @@ -53,7 +56,7 @@ export const Base: FC> = props => if(classNames.length) newClassNames.push(...classNames); return newClassNames; - }, [ display, fit, grow, shrink, fullWidth, fullHeight, overflow, position, float, pointer, visible, textColor, classNames ]); + }, [ display, fit, fitV, grow, shrink, fullWidth, fullHeight, overflow, position, float, pointer, visible, textColor, classNames ]); const getClassName = useMemo(() => { diff --git a/src/common/layout/LayoutImage.tsx b/src/common/layout/LayoutImage.tsx index 76470592..e6c6228e 100644 --- a/src/common/layout/LayoutImage.tsx +++ b/src/common/layout/LayoutImage.tsx @@ -7,7 +7,7 @@ export interface LayoutImageProps extends DetailedHTMLProps = props => { - const { imageUrl = null, ...rest } = props; + const { imageUrl = null, className = '', ...rest } = props; - return ; + return ; } diff --git a/src/common/layout/LayoutMiniCameraView.tsx b/src/common/layout/LayoutMiniCameraView.tsx index 0a8fb07b..934e1cc8 100644 --- a/src/common/layout/LayoutMiniCameraView.tsx +++ b/src/common/layout/LayoutMiniCameraView.tsx @@ -1,7 +1,6 @@ import { NitroRectangle, NitroRenderTexture } from '@nitrots/nitro-renderer'; import { FC, useCallback, useRef } from 'react'; -import { GetRoomEngine, LocalizeText, SoundNames } from '../../api'; -import { PlaySound } from '../../api/utils/PlaySound'; +import { GetRoomEngine, LocalizeText, PlaySound, SoundNames } from '../../api'; import { DraggableWindow } from '../draggable-window'; interface LayoutMiniCameraViewProps diff --git a/src/components/achievements/AchievementsView.tsx b/src/components/achievements/AchievementsView.tsx index 4b2c38d6..b4979006 100644 --- a/src/components/achievements/AchievementsView.tsx +++ b/src/components/achievements/AchievementsView.tsx @@ -1,6 +1,6 @@ import { ILinkEventTracker } from '@nitrots/nitro-renderer'; import { FC, useEffect, useMemo, useState } from 'react'; -import { AddEventLinkTracker, GetAchievementCategoryImageUrl, LocalizeText, RemoveLinkEventTracker } from '../../api'; +import { AchievementUtilities, AddEventLinkTracker, LocalizeText, RemoveLinkEventTracker } from '../../api'; import { Base, Column, LayoutImage, LayoutProgressBar, NitroCardContentView, NitroCardHeaderView, NitroCardSubHeaderView, NitroCardView, Text } from '../../common'; import { useAchievements } from '../../hooks'; import { AchievementCategoryView } from './views/AchievementCategoryView'; @@ -60,7 +60,7 @@ export const AchievementsView: FC<{}> = props => { LocalizeText(`quests.${ selectedCategory.code }.name`) } { LocalizeText('achievements.details.categoryprogress', [ 'progress', 'limit' ], [ selectedCategory.getProgress().toString(), selectedCategory.getMaxProgress().toString() ]) } - + } { !selectedCategory && diff --git a/src/components/achievements/views/AchievementBadgeView.tsx b/src/components/achievements/views/AchievementBadgeView.tsx index ef79819a..5b0d4f93 100644 --- a/src/components/achievements/views/AchievementBadgeView.tsx +++ b/src/components/achievements/views/AchievementBadgeView.tsx @@ -1,6 +1,6 @@ import { AchievementData } from '@nitrots/nitro-renderer'; import { FC } from 'react'; -import { GetAchievementBadgeCode, GetAchievementHasStarted } from '../../../api'; +import { AchievementUtilities } from '../../../api'; import { BaseProps, LayoutBadgeImageView } from '../../../common'; interface AchievementBadgeViewProps extends BaseProps @@ -15,5 +15,5 @@ export const AchievementBadgeView: FC = props => if(!achievement) return null; - return ; + return ; } diff --git a/src/components/achievements/views/AchievementDetailsView.tsx b/src/components/achievements/views/AchievementDetailsView.tsx index 2503098e..6e978250 100644 --- a/src/components/achievements/views/AchievementDetailsView.tsx +++ b/src/components/achievements/views/AchievementDetailsView.tsx @@ -1,6 +1,6 @@ import { AchievementData } from '@nitrots/nitro-renderer'; import { FC, PropsWithChildren } from 'react'; -import { GetAchievementBadgeCode, GetAchievementLevel, LocalizeBadgeDescription, LocalizeBadgeName, LocalizeText } from '../../../api'; +import { AchievementUtilities, LocalizeBadgeDescription, LocalizeBadgeName, LocalizeText } from '../../../api'; import { Column, Flex, LayoutCurrencyIcon, LayoutProgressBar, Text } from '../../../common'; import { AchievementBadgeView } from './AchievementBadgeView'; @@ -20,16 +20,16 @@ export const AchievementDetailsView: FC - { LocalizeText('achievements.details.level', [ 'level', 'limit' ], [ GetAchievementLevel(achievement).toString(), achievement.levelCount.toString() ]) } + { LocalizeText('achievements.details.level', [ 'level', 'limit' ], [ AchievementUtilities.getAchievementLevel(achievement).toString(), achievement.levelCount.toString() ]) } - { LocalizeBadgeName(GetAchievementBadgeCode(achievement)) } + { LocalizeBadgeName(AchievementUtilities.getAchievementBadgeCode(achievement)) } - { LocalizeBadgeDescription(GetAchievementBadgeCode(achievement)) } + { LocalizeBadgeDescription(AchievementUtilities.getAchievementBadgeCode(achievement)) } { ((achievement.levelRewardPoints > 0) || (achievement.scoreLimit > 0)) && diff --git a/src/components/achievements/views/category-list/AchievementsCategoryListItemView.tsx b/src/components/achievements/views/category-list/AchievementsCategoryListItemView.tsx index 118b357f..2af18b96 100644 --- a/src/components/achievements/views/category-list/AchievementsCategoryListItemView.tsx +++ b/src/components/achievements/views/category-list/AchievementsCategoryListItemView.tsx @@ -1,5 +1,5 @@ import { Dispatch, FC, PropsWithChildren, SetStateAction } from 'react'; -import { GetAchievementCategoryImageUrl, GetAchievementCategoryMaxProgress, GetAchievementCategoryProgress, GetAchievementCategoryTotalUnseen, IAchievementCategory, LocalizeText } from '../../../../api'; +import { AchievementUtilities, IAchievementCategory, LocalizeText } from '../../../../api'; import { LayoutBackgroundImage, LayoutGridItem, Text } from '../../../../common'; interface AchievementCategoryListItemViewProps @@ -15,10 +15,10 @@ export const AchievementsCategoryListItemView: FC setSelectedCategoryCode(category.code) } { ...rest }> diff --git a/src/components/avatar-editor/AvatarEditorView.tsx b/src/components/avatar-editor/AvatarEditorView.tsx index 5ab1bd60..e757eab5 100644 --- a/src/components/avatar-editor/AvatarEditorView.tsx +++ b/src/components/avatar-editor/AvatarEditorView.tsx @@ -1,25 +1,12 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { AvatarEditorFigureCategory, FigureSetIdsMessageEvent, GetWardrobeMessageComposer, IAvatarFigureContainer, ILinkEventTracker, UserFigureComposer, UserWardrobePageEvent } from '@nitrots/nitro-renderer'; import { FC, useCallback, useEffect, useMemo, useState } from 'react'; -import { AddEventLinkTracker, GetAvatarRenderManager, GetClubMemberLevel, GetConfiguration, GetSessionDataManager, LocalizeText, RemoveLinkEventTracker, SendMessageComposer } from '../../api'; -import { NitroCardContentView, NitroCardHeaderView, NitroCardTabsItemView, NitroCardTabsView, NitroCardView } from '../../common'; -import { Button } from '../../common/Button'; -import { ButtonGroup } from '../../common/ButtonGroup'; -import { Column } from '../../common/Column'; -import { Grid } from '../../common/Grid'; -import { UseMessageEventHook } from '../../hooks'; -import { AvatarEditorAction } from './common/AvatarEditorAction'; -import { AvatarEditorUtilities } from './common/AvatarEditorUtilities'; -import { BodyModel } from './common/BodyModel'; -import { FigureData } from './common/FigureData'; -import { generateRandomFigure } from './common/FigureGenerator'; -import { HeadModel } from './common/HeadModel'; -import { IAvatarEditorCategoryModel } from './common/IAvatarEditorCategoryModel'; -import { LegModel } from './common/LegModel'; -import { TorsoModel } from './common/TorsoModel'; -import { AvatarEditorFigurePreviewView } from './views/figure-preview/AvatarEditorFigurePreviewView'; -import { AvatarEditorModelView } from './views/model/AvatarEditorModelView'; -import { AvatarEditorWardrobeView } from './views/wardrobe/AvatarEditorWardrobeView'; +import { AddEventLinkTracker, AvatarEditorAction, AvatarEditorUtilities, BodyModel, FigureData, generateRandomFigure, GetAvatarRenderManager, GetClubMemberLevel, GetConfiguration, GetSessionDataManager, HeadModel, IAvatarEditorCategoryModel, LegModel, LocalizeText, RemoveLinkEventTracker, SendMessageComposer, TorsoModel } from '../../api'; +import { Button, ButtonGroup, Column, Grid, NitroCardContentView, NitroCardHeaderView, NitroCardTabsItemView, NitroCardTabsView, NitroCardView } from '../../common'; +import { useMessageEvent } from '../../hooks'; +import { AvatarEditorFigurePreviewView } from './views/AvatarEditorFigurePreviewView'; +import { AvatarEditorModelView } from './views/AvatarEditorModelView'; +import { AvatarEditorWardrobeView } from './views/AvatarEditorWardrobeView'; const DEFAULT_MALE_FIGURE: string = 'hr-100.hd-180-7.ch-215-66.lg-270-79.sh-305-62.ha-1002-70.wa-2007'; const DEFAULT_FEMALE_FIGURE: string = 'hr-515-33.hd-600-1.ch-635-70.lg-716-66-62.sh-735-68'; @@ -42,17 +29,15 @@ export const AvatarEditorView: FC<{}> = props => const maxWardrobeSlots = useMemo(() => GetConfiguration('avatar.wardrobe.max.slots', 10), []); - const onFigureSetIdsMessageEvent = useCallback((event: FigureSetIdsMessageEvent) => + useMessageEvent(FigureSetIdsMessageEvent, event => { const parser = event.getParser(); setFigureSetIds(parser.figureSetIds); setBoundFurnitureNames(parser.boundsFurnitureNames); - }, []); + }); - UseMessageEventHook(FigureSetIdsMessageEvent, onFigureSetIdsMessageEvent); - - const onUserWardrobePageEvent = useCallback((event: UserWardrobePageEvent) => + useMessageEvent(UserWardrobePageEvent, event => { const parser = event.getParser(); const savedFigures: [ IAvatarFigureContainer, string ][] = []; @@ -73,10 +58,8 @@ export const AvatarEditorView: FC<{}> = props => savedFigures[(index - 1)] = [ container, gender ]; } - setSavedFigures(savedFigures) - }, [ maxWardrobeSlots ]); - - UseMessageEventHook(UserWardrobePageEvent, onUserWardrobePageEvent); + setSavedFigures(savedFigures); + }); const selectCategory = useCallback((name: string) => { diff --git a/src/components/avatar-editor/views/figure-preview/AvatarEditorFigurePreviewView.tsx b/src/components/avatar-editor/views/AvatarEditorFigurePreviewView.tsx similarity index 91% rename from src/components/avatar-editor/views/figure-preview/AvatarEditorFigurePreviewView.tsx rename to src/components/avatar-editor/views/AvatarEditorFigurePreviewView.tsx index abe2866f..0c6afbf8 100644 --- a/src/components/avatar-editor/views/figure-preview/AvatarEditorFigurePreviewView.tsx +++ b/src/components/avatar-editor/views/AvatarEditorFigurePreviewView.tsx @@ -1,8 +1,8 @@ import { AvatarDirectionAngle } from '@nitrots/nitro-renderer'; import { FC, useCallback, useEffect, useState } from 'react'; -import { Base, Column, LayoutAvatarImageView } from '../../../../common'; -import { FigureData } from '../../common/FigureData'; -import { AvatarEditorIcon } from '../AvatarEditorIcon'; +import { FigureData } from '../../../api'; +import { Base, Column, LayoutAvatarImageView } from '../../../common'; +import { AvatarEditorIcon } from './AvatarEditorIcon'; export interface AvatarEditorFigurePreviewViewProps { diff --git a/src/components/avatar-editor/views/AvatarEditorIcon.tsx b/src/components/avatar-editor/views/AvatarEditorIcon.tsx index b74ef3c9..a05baa1d 100644 --- a/src/components/avatar-editor/views/AvatarEditorIcon.tsx +++ b/src/components/avatar-editor/views/AvatarEditorIcon.tsx @@ -1,5 +1,5 @@ import { FC, useMemo } from 'react'; -import { Base, BaseProps } from '../../../common/Base'; +import { Base, BaseProps } from '../../../common'; type AvatarIconType = 'male' | 'female' | 'clear' | 'sellable' | string; diff --git a/src/components/avatar-editor/views/model/AvatarEditorModelView.tsx b/src/components/avatar-editor/views/AvatarEditorModelView.tsx similarity index 84% rename from src/components/avatar-editor/views/model/AvatarEditorModelView.tsx rename to src/components/avatar-editor/views/AvatarEditorModelView.tsx index ea9cbda7..6eb8fe3e 100644 --- a/src/components/avatar-editor/views/model/AvatarEditorModelView.tsx +++ b/src/components/avatar-editor/views/AvatarEditorModelView.tsx @@ -1,13 +1,9 @@ import { Dispatch, FC, SetStateAction, useCallback, useEffect, useState } from 'react'; -import { Column } from '../../../../common/Column'; -import { Flex } from '../../../../common/Flex'; -import { Grid } from '../../../../common/Grid'; -import { CategoryData } from '../../common/CategoryData'; -import { FigureData } from '../../common/FigureData'; -import { IAvatarEditorCategoryModel } from '../../common/IAvatarEditorCategoryModel'; -import { AvatarEditorIcon } from '../AvatarEditorIcon'; -import { AvatarEditorFigureSetView } from '../figure-set/AvatarEditorFigureSetView'; -import { AvatarEditorPaletteSetView } from '../palette-set/AvatarEditorPaletteSetView'; +import { CategoryData, FigureData, IAvatarEditorCategoryModel } from '../../../api'; +import { Column, Flex, Grid } from '../../../common'; +import { AvatarEditorIcon } from './AvatarEditorIcon'; +import { AvatarEditorFigureSetView } from './figure-set/AvatarEditorFigureSetView'; +import { AvatarEditorPaletteSetView } from './palette-set/AvatarEditorPaletteSetView'; export interface AvatarEditorModelViewProps { model: IAvatarEditorCategoryModel; diff --git a/src/components/avatar-editor/views/wardrobe/AvatarEditorWardrobeView.tsx b/src/components/avatar-editor/views/AvatarEditorWardrobeView.tsx similarity index 93% rename from src/components/avatar-editor/views/wardrobe/AvatarEditorWardrobeView.tsx rename to src/components/avatar-editor/views/AvatarEditorWardrobeView.tsx index 6efea5ed..9811ab88 100644 --- a/src/components/avatar-editor/views/wardrobe/AvatarEditorWardrobeView.tsx +++ b/src/components/avatar-editor/views/AvatarEditorWardrobeView.tsx @@ -1,8 +1,7 @@ import { IAvatarFigureContainer, SaveWardrobeOutfitMessageComposer } from '@nitrots/nitro-renderer'; import { Dispatch, FC, SetStateAction, useCallback, useMemo } from 'react'; -import { GetAvatarRenderManager, GetClubMemberLevel, GetConfiguration, LocalizeText, SendMessageComposer } from '../../../../api'; -import { AutoGrid, Base, Button, Flex, LayoutAvatarImageView, LayoutCurrencyIcon, LayoutGridItem } from '../../../../common'; -import { FigureData } from '../../common/FigureData'; +import { FigureData, GetAvatarRenderManager, GetClubMemberLevel, GetConfiguration, LocalizeText, SendMessageComposer } from '../../../api'; +import { AutoGrid, Base, Button, Flex, LayoutAvatarImageView, LayoutCurrencyIcon, LayoutGridItem } from '../../../common'; export interface AvatarEditorWardrobeViewProps { diff --git a/src/components/avatar-editor/views/figure-set/AvatarEditorFigureSetItemView.tsx b/src/components/avatar-editor/views/figure-set/AvatarEditorFigureSetItemView.tsx index 9bc42217..8df5b95d 100644 --- a/src/components/avatar-editor/views/figure-set/AvatarEditorFigureSetItemView.tsx +++ b/src/components/avatar-editor/views/figure-set/AvatarEditorFigureSetItemView.tsx @@ -1,7 +1,6 @@ import { FC, useCallback, useEffect, useState } from 'react'; -import { GetConfiguration } from '../../../../api'; +import { AvatarEditorGridPartItem, GetConfiguration } from '../../../../api'; import { LayoutCurrencyIcon, LayoutGridItem, LayoutGridItemProps } from '../../../../common'; -import { AvatarEditorGridPartItem } from '../../common/AvatarEditorGridPartItem'; import { AvatarEditorIcon } from '../AvatarEditorIcon'; export interface AvatarEditorFigureSetItemViewProps extends LayoutGridItemProps diff --git a/src/components/avatar-editor/views/figure-set/AvatarEditorFigureSetView.tsx b/src/components/avatar-editor/views/figure-set/AvatarEditorFigureSetView.tsx index e99502f1..8a813a03 100644 --- a/src/components/avatar-editor/views/figure-set/AvatarEditorFigureSetView.tsx +++ b/src/components/avatar-editor/views/figure-set/AvatarEditorFigureSetView.tsx @@ -1,8 +1,6 @@ import { Dispatch, FC, SetStateAction, useCallback } from 'react'; -import { AutoGrid } from '../../../../common/AutoGrid'; -import { AvatarEditorGridPartItem } from '../../common/AvatarEditorGridPartItem'; -import { CategoryData } from '../../common/CategoryData'; -import { IAvatarEditorCategoryModel } from '../../common/IAvatarEditorCategoryModel'; +import { AvatarEditorGridPartItem, CategoryData, IAvatarEditorCategoryModel } from '../../../../api'; +import { AutoGrid } from '../../../../common'; import { AvatarEditorFigureSetItemView } from './AvatarEditorFigureSetItemView'; export interface AvatarEditorFigureSetViewProps diff --git a/src/components/avatar-editor/views/palette-set/AvatarEditorPaletteSetItemView.tsx b/src/components/avatar-editor/views/palette-set/AvatarEditorPaletteSetItemView.tsx index 2933c244..8138e951 100644 --- a/src/components/avatar-editor/views/palette-set/AvatarEditorPaletteSetItemView.tsx +++ b/src/components/avatar-editor/views/palette-set/AvatarEditorPaletteSetItemView.tsx @@ -1,7 +1,6 @@ import { FC, useCallback, useEffect, useState } from 'react'; -import { GetConfiguration } from '../../../../api'; +import { AvatarEditorGridColorItem, GetConfiguration } from '../../../../api'; import { LayoutCurrencyIcon, LayoutGridItem, LayoutGridItemProps } from '../../../../common'; -import { AvatarEditorGridColorItem } from '../../common/AvatarEditorGridColorItem'; export interface AvatarEditorPaletteSetItemProps extends LayoutGridItemProps { diff --git a/src/components/avatar-editor/views/palette-set/AvatarEditorPaletteSetView.tsx b/src/components/avatar-editor/views/palette-set/AvatarEditorPaletteSetView.tsx index 6b715127..4ed984be 100644 --- a/src/components/avatar-editor/views/palette-set/AvatarEditorPaletteSetView.tsx +++ b/src/components/avatar-editor/views/palette-set/AvatarEditorPaletteSetView.tsx @@ -1,8 +1,6 @@ import { FC, useCallback } from 'react'; -import { AutoGrid } from '../../../../common/AutoGrid'; -import { AvatarEditorGridColorItem } from '../../common/AvatarEditorGridColorItem'; -import { CategoryData } from '../../common/CategoryData'; -import { IAvatarEditorCategoryModel } from '../../common/IAvatarEditorCategoryModel'; +import { AvatarEditorGridColorItem, CategoryData, IAvatarEditorCategoryModel } from '../../../../api'; +import { AutoGrid } from '../../../../common'; import { AvatarEditorPaletteSetItem } from './AvatarEditorPaletteSetItemView'; export interface AvatarEditorPaletteSetViewProps diff --git a/src/components/camera/CameraWidgetContext.tsx b/src/components/camera/CameraWidgetContext.tsx deleted file mode 100644 index 5f574029..00000000 --- a/src/components/camera/CameraWidgetContext.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { createContext, Dispatch, FC, ProviderProps, SetStateAction, useContext } from 'react'; -import { CameraPicture } from './common/CameraPicture'; - -export interface ICameraWidgetContext -{ - cameraRoll: CameraPicture[], - setCameraRoll: Dispatch>; - selectedPictureIndex: number, - setSelectedPictureIndex: Dispatch>; -} - -const CameraWidgetContext = createContext({ - cameraRoll: null, - setCameraRoll: null, - selectedPictureIndex: null, - setSelectedPictureIndex: null -}); - -export const CameraWidgetContextProvider: FC> = props => -{ - return { props.children } -} - -export const useCameraWidgetContext = () => useContext(CameraWidgetContext); diff --git a/src/components/camera/CameraWidgetView.tsx b/src/components/camera/CameraWidgetView.tsx index 89118329..db168554 100644 --- a/src/components/camera/CameraWidgetView.tsx +++ b/src/components/camera/CameraWidgetView.tsx @@ -1,11 +1,9 @@ -import { ILinkEventTracker, InitCameraMessageEvent, IRoomCameraWidgetEffect, RequestCameraConfigurationComposer, RoomCameraWidgetManagerEvent, RoomSessionEvent } from '@nitrots/nitro-renderer'; +import { ILinkEventTracker, RoomSessionEvent } from '@nitrots/nitro-renderer'; import { FC, useCallback, useEffect, useState } from 'react'; -import { AddEventLinkTracker, GetRoomCameraWidgetManager, RemoveLinkEventTracker, SendMessageComposer } from '../../api'; -import { UseCameraEvent, UseMessageEventHook, UseRoomSessionManagerEvent } from '../../hooks'; -import { CameraWidgetContextProvider } from './CameraWidgetContext'; -import { CameraPicture } from './common/CameraPicture'; -import { CameraWidgetCaptureView } from './views/capture/CameraWidgetCaptureView'; -import { CameraWidgetCheckoutView } from './views/checkout/CameraWidgetCheckoutView'; +import { AddEventLinkTracker, RemoveLinkEventTracker } from '../../api'; +import { useCamera, useRoomSessionManagerEvent } from '../../hooks'; +import { CameraWidgetCaptureView } from './views/CameraWidgetCaptureView'; +import { CameraWidgetCheckoutView } from './views/CameraWidgetCheckoutView'; import { CameraWidgetEditorView } from './views/editor/CameraWidgetEditorView'; const MODE_NONE: number = 0; @@ -16,49 +14,10 @@ const MODE_CHECKOUT: number = 3; export const CameraWidgetView: FC<{}> = props => { const [ mode, setMode ] = useState(MODE_NONE); - const [ availableEffects, setAvailableEffects ] = useState([]); - const [ cameraRoll, setCameraRoll ] = useState([]); - const [ selectedPictureIndex, setSelectedPictureIndex ] = useState(-1); - const [ myLevel, setMyLevel ] = useState(10); const [ base64Url, setSavedPictureUrl ] = useState(null); - const [ price, setPrice ] = useState<{ credits: number, duckets: number, publishDucketPrice: number }>(null); + const { availableEffects = [], selectedPictureIndex = -1, cameraRoll = [], setCameraRoll = null, myLevel = 0, price = { credits: 0, duckets: 0, publishDucketPrice: 0 }} = useCamera(); - const onRoomCameraWidgetManagerEvent = useCallback((event: RoomCameraWidgetManagerEvent) => - { - setAvailableEffects(Array.from(GetRoomCameraWidgetManager().effects.values())) - }, []); - - UseCameraEvent(RoomCameraWidgetManagerEvent.INITIALIZED, onRoomCameraWidgetManagerEvent); - - const onCameraConfigurationEvent = useCallback((event: InitCameraMessageEvent) => - { - const parser = event.getParser(); - - setPrice({ credits: parser.creditPrice, duckets: parser.ducketPrice, publishDucketPrice: parser.publishDucketPrice }); - }, []); - - UseMessageEventHook(InitCameraMessageEvent, onCameraConfigurationEvent); - - const onRoomSessionEvent = useCallback((event: RoomSessionEvent) => - { - setMode(MODE_NONE); - }, []); - - UseRoomSessionManagerEvent(RoomSessionEvent.ENDED, onRoomSessionEvent); - - useEffect(() => - { - if(!GetRoomCameraWidgetManager().isLoaded) - { - GetRoomCameraWidgetManager().init(); - - SendMessageComposer(new RequestCameraConfigurationComposer()); - - return; - } - }, []); - - const processAction = useCallback((type: string) => + const processAction = (type: string) => { switch(type) { @@ -82,7 +41,7 @@ export const CameraWidgetView: FC<{}> = props => setMode(MODE_CAPTURE); return; } - }, [ selectedPictureIndex ]); + } const checkoutPictureUrl = useCallback((pictureUrl: string) => { @@ -90,49 +49,49 @@ export const CameraWidgetView: FC<{}> = props => setMode(MODE_CHECKOUT); }, []); - const linkReceived = useCallback((url: string) => - { - const parts = url.split('/'); - - if(parts.length < 2) return; - - switch(parts[1]) - { - case 'show': - setMode(MODE_CAPTURE); - return; - case 'hide': - setMode(MODE_NONE); - return; - case 'toggle': - setMode(prevValue => - { - if(!prevValue) return MODE_CAPTURE; - else return MODE_NONE; - }); - return; - } - }, []); + useRoomSessionManagerEvent(RoomSessionEvent.ENDED, event => setMode(MODE_NONE)); useEffect(() => { const linkTracker: ILinkEventTracker = { - linkReceived, + linkReceived: (url: string) => + { + const parts = url.split('/'); + + if(parts.length < 2) return; + + switch(parts[1]) + { + case 'show': + setMode(MODE_CAPTURE); + return; + case 'hide': + setMode(MODE_NONE); + return; + case 'toggle': + setMode(prevValue => + { + if(!prevValue) return MODE_CAPTURE; + else return MODE_NONE; + }); + return; + } + }, eventUrlPrefix: 'camera/' }; AddEventLinkTracker(linkTracker); return () => RemoveLinkEventTracker(linkTracker); - }, [ linkReceived ]); + }, []); if(mode === MODE_NONE) return null; return ( - + <> { (mode === MODE_CAPTURE) && processAction('close') } onEdit={ () => processAction('edit') } onDelete={ () => processAction('delete') } /> } { (mode === MODE_EDITOR) && processAction('close') } onCancel={ () => processAction('editor_cancel') } onCheckout={ checkoutPictureUrl } availableEffects={ availableEffects } /> } { (mode === MODE_CHECKOUT) && processAction('close') } onCancelClick={ () => processAction('editor_cancel') } price={ price }> } - + ); } diff --git a/src/components/camera/views/capture/CameraWidgetCaptureView.tsx b/src/components/camera/views/CameraWidgetCaptureView.tsx similarity index 87% rename from src/components/camera/views/capture/CameraWidgetCaptureView.tsx rename to src/components/camera/views/CameraWidgetCaptureView.tsx index 07a3ded1..e6c6a3fa 100644 --- a/src/components/camera/views/capture/CameraWidgetCaptureView.tsx +++ b/src/components/camera/views/CameraWidgetCaptureView.tsx @@ -1,10 +1,9 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { NitroRectangle, TextureUtils } from '@nitrots/nitro-renderer'; import { FC, useCallback, useRef } from 'react'; -import { GetRoomEngine, GetRoomSession, LocalizeText, NotificationUtilities, PlaySound, SoundNames } from '../../../../api'; -import { Column, DraggableWindow, Flex } from '../../../../common'; -import { useCameraWidgetContext } from '../../CameraWidgetContext'; -import { CameraPicture } from '../../common/CameraPicture'; +import { CameraPicture, GetRoomEngine, GetRoomSession, LocalizeText, PlaySound, SoundNames } from '../../../api'; +import { Column, DraggableWindow, Flex } from '../../../common'; +import { useCamera, useNotification } from '../../../hooks'; export interface CameraWidgetCaptureViewProps { @@ -18,7 +17,8 @@ const CAMERA_ROLL_LIMIT: number = 5; export const CameraWidgetCaptureView: FC = props => { const { onClose = null, onEdit = null, onDelete = null } = props; - const { cameraRoll = null, setCameraRoll = null, selectedPictureIndex = -1, setSelectedPictureIndex = null } = useCameraWidgetContext(); + const { cameraRoll = null, setCameraRoll = null, selectedPictureIndex = -1, setSelectedPictureIndex = null } = useCamera(); + const { simpleAlert = null } = useNotification(); const elementRef = useRef(); const selectedPicture = ((selectedPictureIndex > -1) ? cameraRoll[selectedPictureIndex] : null); @@ -46,7 +46,7 @@ export const CameraWidgetCaptureView: FC = props = if(clone.length >= CAMERA_ROLL_LIMIT) { - NotificationUtilities.simpleAlert(LocalizeText('camera.full.body')); + simpleAlert(LocalizeText('camera.full.body')); clone.pop(); } @@ -55,7 +55,7 @@ export const CameraWidgetCaptureView: FC = props = clone.push(new CameraPicture(texture, TextureUtils.generateImageUrl(texture))); setCameraRoll(clone); - }, [ cameraRoll, selectedPictureIndex, getCameraBounds, setCameraRoll, setSelectedPictureIndex ]); + }, [ cameraRoll, selectedPictureIndex, getCameraBounds, setCameraRoll, setSelectedPictureIndex, simpleAlert ]); return ( diff --git a/src/components/camera/views/checkout/CameraWidgetCheckoutView.tsx b/src/components/camera/views/CameraWidgetCheckoutView.tsx similarity index 95% rename from src/components/camera/views/checkout/CameraWidgetCheckoutView.tsx rename to src/components/camera/views/CameraWidgetCheckoutView.tsx index cd10dcd3..cba04320 100644 --- a/src/components/camera/views/checkout/CameraWidgetCheckoutView.tsx +++ b/src/components/camera/views/CameraWidgetCheckoutView.tsx @@ -1,8 +1,8 @@ import { CameraPublishStatusMessageEvent, CameraPurchaseOKMessageEvent, CameraStorageUrlMessageEvent, PublishPhotoMessageComposer, PurchasePhotoMessageComposer } from '@nitrots/nitro-renderer'; import { FC, useCallback, useEffect, useMemo, useState } from 'react'; -import { CreateLinkEvent, GetConfiguration, GetRoomEngine, LocalizeText, SendMessageComposer } from '../../../../api'; -import { Button, Column, Flex, LayoutCurrencyIcon, LayoutImage, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../../common'; -import { UseMessageEventHook } from '../../../../hooks'; +import { CreateLinkEvent, GetConfiguration, GetRoomEngine, LocalizeText, SendMessageComposer } from '../../../api'; +import { Button, Column, Flex, LayoutCurrencyIcon, LayoutImage, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../common'; +import { useMessageEvent } from '../../../hooks'; export interface CameraWidgetCheckoutViewProps { @@ -30,7 +30,7 @@ export const CameraWidgetCheckoutView: FC = props setIsWaiting(false); }, []); - UseMessageEventHook(CameraPurchaseOKMessageEvent, onCameraPurchaseOKMessageEvent); + useMessageEvent(CameraPurchaseOKMessageEvent, onCameraPurchaseOKMessageEvent); const onCameraPublishStatusMessageEvent = useCallback((event: CameraPublishStatusMessageEvent) => { @@ -42,7 +42,7 @@ export const CameraWidgetCheckoutView: FC = props setIsWaiting(false); }, []); - UseMessageEventHook(CameraPublishStatusMessageEvent, onCameraPublishStatusMessageEvent); + useMessageEvent(CameraPublishStatusMessageEvent, onCameraPublishStatusMessageEvent); const onCameraStorageUrlMessageEvent = useCallback((event: CameraStorageUrlMessageEvent) => { @@ -51,7 +51,7 @@ export const CameraWidgetCheckoutView: FC = props setPictureUrl(GetConfiguration('camera.url') + '/' + parser.url); }, []); - UseMessageEventHook(CameraStorageUrlMessageEvent, onCameraStorageUrlMessageEvent); + useMessageEvent(CameraStorageUrlMessageEvent, onCameraStorageUrlMessageEvent); const processAction = (type: string, value: string | number = null) => { diff --git a/src/components/camera/views/editor/CameraWidgetEditorView.tsx b/src/components/camera/views/editor/CameraWidgetEditorView.tsx index 18f1da98..0c059b82 100644 --- a/src/components/camera/views/editor/CameraWidgetEditorView.tsx +++ b/src/components/camera/views/editor/CameraWidgetEditorView.tsx @@ -2,11 +2,8 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { IRoomCameraWidgetEffect, IRoomCameraWidgetSelectedEffect, RoomCameraWidgetSelectedEffect } from '@nitrots/nitro-renderer'; import { FC, useCallback, useEffect, useMemo, useState } from 'react'; import ReactSlider from 'react-slider'; -import { GetRoomCameraWidgetManager, LocalizeText } from '../../../../api'; +import { CameraEditorTabs, CameraPicture, CameraPictureThumbnail, GetRoomCameraWidgetManager, LocalizeText } from '../../../../api'; import { Button, ButtonGroup, Column, Flex, Grid, LayoutImage, NitroCardContentView, NitroCardHeaderView, NitroCardTabsItemView, NitroCardTabsView, NitroCardView, Text } from '../../../../common'; -import { CameraEditorTabs } from '../../common/CameraEditorTabs'; -import { CameraPicture } from '../../common/CameraPicture'; -import { CameraPictureThumbnail } from '../../common/CameraPictureThumbnail'; import { CameraWidgetEffectListView } from './effect-list/CameraWidgetEffectListView'; export interface CameraWidgetEditorViewProps diff --git a/src/components/camera/views/editor/effect-list/CameraWidgetEffectListItemView.tsx b/src/components/camera/views/editor/effect-list/CameraWidgetEffectListItemView.tsx index 7451ab75..79971457 100644 --- a/src/components/camera/views/editor/effect-list/CameraWidgetEffectListItemView.tsx +++ b/src/components/camera/views/editor/effect-list/CameraWidgetEffectListItemView.tsx @@ -2,9 +2,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { IRoomCameraWidgetEffect } from '@nitrots/nitro-renderer'; import { FC } from 'react'; import { LocalizeText } from '../../../../../api'; -import { Button } from '../../../../../common/Button'; -import { LayoutGridItem } from '../../../../../common/layout/LayoutGridItem'; -import { Text } from '../../../../../common/Text'; +import { Button, LayoutGridItem, Text } from '../../../../../common'; export interface CameraWidgetEffectListItemViewProps { diff --git a/src/components/camera/views/editor/effect-list/CameraWidgetEffectListView.tsx b/src/components/camera/views/editor/effect-list/CameraWidgetEffectListView.tsx index faf8cea6..3f67cea7 100644 --- a/src/components/camera/views/editor/effect-list/CameraWidgetEffectListView.tsx +++ b/src/components/camera/views/editor/effect-list/CameraWidgetEffectListView.tsx @@ -1,7 +1,7 @@ import { IRoomCameraWidgetEffect, IRoomCameraWidgetSelectedEffect } from '@nitrots/nitro-renderer'; import { FC } from 'react'; +import { CameraPictureThumbnail } from '../../../../../api'; import { Grid } from '../../../../../common'; -import { CameraPictureThumbnail } from '../../../common/CameraPictureThumbnail'; import { CameraWidgetEffectListItemView } from './CameraWidgetEffectListItemView'; export interface CameraWidgetEffectListViewProps diff --git a/src/components/campaign/CalendarItemView.tsx b/src/components/campaign/CalendarItemView.tsx index 7a745c18..816fa75b 100644 --- a/src/components/campaign/CalendarItemView.tsx +++ b/src/components/campaign/CalendarItemView.tsx @@ -1,6 +1,5 @@ import { FC } from 'react'; -import { CalendarItemState, GetConfiguration, GetRoomEngine, GetSessionDataManager } from '../../api'; -import { ICalendarItem } from '../../api/campaign/ICalendarItem'; +import { CalendarItemState, GetConfiguration, GetRoomEngine, GetSessionDataManager, ICalendarItem } from '../../api'; import { Base, Column, Flex, LayoutImage } from '../../common'; interface CalendarItemViewProps diff --git a/src/components/campaign/CampaignView.tsx b/src/components/campaign/CampaignView.tsx index 3a8964a7..6692beeb 100644 --- a/src/components/campaign/CampaignView.tsx +++ b/src/components/campaign/CampaignView.tsx @@ -1,7 +1,7 @@ import { CampaignCalendarData, CampaignCalendarDataMessageEvent, CampaignCalendarDoorOpenedMessageEvent, OpenCampaignCalendarDoorAsStaffComposer, OpenCampaignCalendarDoorComposer } from '@nitrots/nitro-renderer'; import { FC, useCallback, useEffect, useState } from 'react'; import { AddEventLinkTracker, CalendarItem, RemoveLinkEventTracker, SendMessageComposer } from '../../api'; -import { UseMessageEventHook } from '../../hooks'; +import { useMessageEvent } from '../../hooks'; import { CalendarView } from './CalendarView'; export const CampaignView: FC<{}> = props => @@ -19,7 +19,7 @@ export const CampaignView: FC<{}> = props => setCalendarData(parser.calendarData); }, []); - UseMessageEventHook(CampaignCalendarDataMessageEvent, onCampaignCalendarDataMessageEvent); + useMessageEvent(CampaignCalendarDataMessageEvent, onCampaignCalendarDataMessageEvent); const onCampaignCalendarDoorOpenedMessageEvent = useCallback((event: CampaignCalendarDoorOpenedMessageEvent) => { @@ -51,7 +51,7 @@ export const CampaignView: FC<{}> = props => setLastOpenAttempt(-1); }, [ lastOpenAttempt ]); - UseMessageEventHook(CampaignCalendarDoorOpenedMessageEvent, onCampaignCalendarDoorOpenedMessageEvent); + useMessageEvent(CampaignCalendarDoorOpenedMessageEvent, onCampaignCalendarDoorOpenedMessageEvent); const openPackage = useCallback((id: number, asStaff = false) => { diff --git a/src/components/catalog/views/catalog-room-previewer/CatalogRoomPreviewerView.tsx b/src/components/catalog/views/catalog-room-previewer/CatalogRoomPreviewerView.tsx index 24f2f073..e364b281 100644 --- a/src/components/catalog/views/catalog-room-previewer/CatalogRoomPreviewerView.tsx +++ b/src/components/catalog/views/catalog-room-previewer/CatalogRoomPreviewerView.tsx @@ -3,7 +3,7 @@ import { FC, useCallback, useRef } from 'react'; import { GetRoomEngine } from '../../../../api'; import { LayoutRoomPreviewerView, LayoutRoomPreviewerViewProps } from '../../../../common'; import { CatalogPurchasedEvent } from '../../../../events'; -import { UseUiEvent } from '../../../../hooks'; +import { useUiEvent } from '../../../../hooks'; export const CatalogRoomPreviewerView: FC = props => { @@ -39,7 +39,7 @@ export const CatalogRoomPreviewerView: FC = props animatePurchase(); }, [ animatePurchase ]); - UseUiEvent(CatalogPurchasedEvent.PURCHASE_SUCCESS, onCatalogPurchasedEvent); + useUiEvent(CatalogPurchasedEvent.PURCHASE_SUCCESS, onCatalogPurchasedEvent); return (
diff --git a/src/components/catalog/views/gift/CatalogGiftView.tsx b/src/components/catalog/views/gift/CatalogGiftView.tsx index 74cb4a84..8034ef03 100644 --- a/src/components/catalog/views/gift/CatalogGiftView.tsx +++ b/src/components/catalog/views/gift/CatalogGiftView.tsx @@ -5,7 +5,7 @@ import { FC, useCallback, useEffect, useMemo, useState } from 'react'; import { GetSessionDataManager, LocalizeText, ProductTypeEnum, SendMessageComposer } from '../../../../api'; import { Base, Button, ButtonGroup, Column, Flex, FormGroup, LayoutCurrencyIcon, LayoutFurniImageView, LayoutGiftTagView, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../../common'; import { CatalogEvent, CatalogInitGiftEvent, CatalogPurchasedEvent } from '../../../../events'; -import { useCatalog, UseMessageEventHook, UseUiEvent } from '../../../../hooks'; +import { useCatalog, useMessageEvent, useUiEvent } from '../../../../hooks'; export const CatalogGiftView: FC<{}> = props => { @@ -61,8 +61,8 @@ export const CatalogGiftView: FC<{}> = props => } }, [ close ]); - UseUiEvent(CatalogPurchasedEvent.PURCHASE_SUCCESS, onCatalogEvent); - UseUiEvent(CatalogEvent.INIT_GIFT, onCatalogEvent); + useUiEvent(CatalogPurchasedEvent.PURCHASE_SUCCESS, onCatalogEvent); + useUiEvent(CatalogEvent.INIT_GIFT, onCatalogEvent); const isBoxDefault = useMemo(() => { @@ -118,7 +118,7 @@ export const CatalogGiftView: FC<{}> = props => setReceiverNotFound(true); }, []); - UseMessageEventHook(GiftReceiverNotFoundEvent, onGiftReceiverNotFoundEvent); + useMessageEvent(GiftReceiverNotFoundEvent, onGiftReceiverNotFoundEvent); useEffect(() => { diff --git a/src/components/catalog/views/page/common/CatalogRedeemVoucherView.tsx b/src/components/catalog/views/page/common/CatalogRedeemVoucherView.tsx index 3363141d..23fb9088 100644 --- a/src/components/catalog/views/page/common/CatalogRedeemVoucherView.tsx +++ b/src/components/catalog/views/page/common/CatalogRedeemVoucherView.tsx @@ -1,9 +1,9 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { RedeemVoucherMessageComposer, VoucherRedeemErrorMessageEvent, VoucherRedeemOkMessageEvent } from '@nitrots/nitro-renderer'; import { FC, useCallback, useState } from 'react'; -import { LocalizeText, NotificationUtilities, SendMessageComposer } from '../../../../../api'; +import { LocalizeText, SendMessageComposer } from '../../../../../api'; import { Button, Flex } from '../../../../../common'; -import { UseMessageEventHook } from '../../../../../hooks'; +import { useMessageEvent, useNotification } from '../../../../../hooks'; export interface CatalogRedeemVoucherViewProps { @@ -15,6 +15,7 @@ export const CatalogRedeemVoucherView: FC = props const { text = null } = props; const [ voucher, setVoucher ] = useState(''); const [ isWaiting, setIsWaiting ] = useState(false); + const { simpleAlert = null } = useNotification(); const redeemVoucher = () => { @@ -33,24 +34,24 @@ export const CatalogRedeemVoucherView: FC = props if(parser.productName) message = LocalizeText('catalog.alert.voucherredeem.ok.description.furni', [ 'productName', 'productDescription' ], [ parser.productName, parser.productDescription ]); - NotificationUtilities.simpleAlert(message, null, null, null, LocalizeText('catalog.alert.voucherredeem.ok.title')); + simpleAlert(message, null, null, null, LocalizeText('catalog.alert.voucherredeem.ok.title')); setIsWaiting(false); setVoucher(''); - }, []); + }, [ simpleAlert ]); - UseMessageEventHook(VoucherRedeemOkMessageEvent, onVoucherRedeemOkMessageEvent); + useMessageEvent(VoucherRedeemOkMessageEvent, onVoucherRedeemOkMessageEvent); const onVoucherRedeemErrorMessageEvent = useCallback((event: VoucherRedeemErrorMessageEvent) => { const parser = event.getParser(); - NotificationUtilities.simpleAlert(LocalizeText(`catalog.alert.voucherredeem.error.description.${ parser.errorCode }`), null, null, null, LocalizeText('catalog.alert.voucherredeem.error.title')); + simpleAlert(LocalizeText(`catalog.alert.voucherredeem.error.description.${ parser.errorCode }`), null, null, null, LocalizeText('catalog.alert.voucherredeem.error.title')); setIsWaiting(false); - }, []); + }, [ simpleAlert ]); - UseMessageEventHook(VoucherRedeemErrorMessageEvent, onVoucherRedeemErrorMessageEvent); + useMessageEvent(VoucherRedeemErrorMessageEvent, onVoucherRedeemErrorMessageEvent); return ( diff --git a/src/components/catalog/views/page/layout/CatalogLayoutColorGroupingView.tsx b/src/components/catalog/views/page/layout/CatalogLayoutColorGroupingView.tsx index d502f86a..80e2f627 100644 --- a/src/components/catalog/views/page/layout/CatalogLayoutColorGroupingView.tsx +++ b/src/components/catalog/views/page/layout/CatalogLayoutColorGroupingView.tsx @@ -1,4 +1,16 @@ -import { FC, useState } from 'react'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { ColorConverter } from '@nitrots/nitro-renderer'; +import { FC, useMemo, useState } from 'react'; +import { IPurchasableOffer } from '../../../../../api'; +import { AutoGrid, Base, Button, Column, Flex, Grid, LayoutGridItem, Text } from '../../../../../common'; +import { useCatalog } from '../../../../../hooks'; +import { CatalogGridOfferView } from '../common/CatalogGridOfferView'; +import { CatalogAddOnBadgeWidgetView } from '../widgets/CatalogAddOnBadgeWidgetView'; +import { CatalogLimitedItemWidgetView } from '../widgets/CatalogLimitedItemWidgetView'; +import { CatalogPurchaseWidgetView } from '../widgets/CatalogPurchaseWidgetView'; +import { CatalogSpinnerWidgetView } from '../widgets/CatalogSpinnerWidgetView'; +import { CatalogTotalPriceWidget } from '../widgets/CatalogTotalPriceWidget'; +import { CatalogViewProductWidgetView } from '../widgets/CatalogViewProductWidgetView'; import { CatalogLayoutProps } from './CatalogLayout.types'; export interface CatalogLayoutColorGroupViewProps extends CatalogLayoutProps @@ -10,79 +22,155 @@ export const CatalogLayoutColorGroupingView : FC>(new Map()); + const { currentOffer = null, setCurrentOffer = null } = useCatalog(); + const [ colorsShowing, setColorsShowing ] = useState(false); - // const offers = useMemo(() => - // { - // const offers: CatalogPageMessageOfferData[] = []; - // const addedColorableItems = new Map(); + const sortByColorIndex = (a: IPurchasableOffer, b: IPurchasableOffer) => + { + if (((!(a.product.furnitureData.colorIndex)) || (!(b.product.furnitureData.colorIndex)))) + { + return 1; + } + if (a.product.furnitureData.colorIndex > b.product.furnitureData.colorIndex) + { + return 1; + } + if (a == b) + { + return 0; + } + return -1; + } - // pageParser.offers.forEach(offer => - // { - // const product = offer.products[0]; - // if(!product) return; - - // let furniData: IFurnitureData = null; + const sortyByFurnitureClassName = (a: IPurchasableOffer, b: IPurchasableOffer) => + { + if (a.product.furnitureData.className > b.product.furnitureData.className) + { + return 1; + } + if (a == b) + { + return 0; + } + return -1; + } - // if(product.productType === ProductTypeEnum.FLOOR) - // { - // furniData = GetSessionDataManager().getFloorItemData(product.furniClassId); - // } - // else if(product.productType === ProductTypeEnum.WALL) - // { - // furniData = GetSessionDataManager().getWallItemData(product.furniClassId); - // } + const selectOffer = (offer: IPurchasableOffer) => + { + offer.activate(); + setCurrentOffer(offer); + } - // if(((!(furniData)) || ((furniData.fullName.indexOf('*') === -1)))) - // { - // offers.push(offer); - // } - // else - // { - // const name = furniData.fullName.split('*')[0]; - // const colorIndex = parseInt(furniData.fullName.split('*')[1]); + const selectColor = (colorIndex: number, productName: string) => + { + const fullName = `${ productName }*${ colorIndex }`; + const index = page.offers.findIndex(offer => offer.product.furnitureData.fullName === fullName); + if (index > -1) + { + selectOffer(page.offers[index]); + } + } - // if(!colorableItems[name]) - // { - // colorableItems[name] = []; - // } + const offers = useMemo(() => + { + const offers: IPurchasableOffer[] = []; + const addedColorableItems = new Map(); + const updatedColorableItems = new Map(); - // let selectedColor = 0; - // if(furniData.colors) - // { - // for(let color of furniData.colors) - // { - // if(color !== 0xFFFFFF) - // { - // selectedColor = color; - // } - // } - // if(colorableItems[name].indexOf(selectedColor) === -1) - // { - // colorableItems[name][colorIndex] = selectedColor; - // } - // } + page.offers.sort(sortByColorIndex); - // if(!addedColorableItems.has(name)) - // { - // offers.push(offer); - // addedColorableItems.set(name, true); - // } - // } - // }); - // console.log(colorableItems); - // return offers; - // }, [colorableItems, pageParser.offers]); + let selectedColor = 0; - return null; + page.offers.forEach(offer => + { + if(!offer.product) return; - // return ( - // - // - // - // - // - - // - // - // ); + const furniData = offer.product.furnitureData; + + if(((!(furniData)) || (!furniData.hasIndexedColor))) + { + offers.push(offer); + } + else + { + const name = furniData.className; + const colorIndex = furniData.colorIndex; + + if(!updatedColorableItems.has(name)) + { + updatedColorableItems.set(name, []); + } + + if(furniData.colors) + { + for(let color of furniData.colors) + { + if(color !== 0xFFFFFF) // for some reason we hate the color white + { + selectedColor = color; + } + } + + if(updatedColorableItems.get(name).indexOf(selectedColor) === -1) + { + updatedColorableItems.get(name)[colorIndex] = selectedColor; + } + + } + + if(!addedColorableItems.has(name)) + { + offers.push(offer); + addedColorableItems.set(name, true); + } + } + }); + offers.sort(sortyByFurnitureClassName); + setColorableItems(updatedColorableItems); + return offers; + }, [ page.offers ]); + + return ( + + + + { (!colorsShowing || !currentOffer || !colorableItems.has(currentOffer.product.furnitureData.className)) && + offers.map((offer, index) => ) + } + { (colorsShowing && currentOffer && colorableItems.has(currentOffer.product.furnitureData.className)) && + colorableItems.get(currentOffer.product.furnitureData.className).map((color, index) => selectColor(index, currentOffer.product.furnitureData.className) } />) + } + + + + { !currentOffer && + <> + { !!page.localization.getImage(1) && } + + } + { currentOffer && + <> + + + + + { currentOffer.product.furnitureData.hasIndexedColor && + } + + + { currentOffer.localizationName } + + + + + + + + + } + + + ); } diff --git a/src/components/catalog/views/page/layout/CatalogLayoutRoomAdsView.tsx b/src/components/catalog/views/page/layout/CatalogLayoutRoomAdsView.tsx new file mode 100644 index 00000000..ee2b056b --- /dev/null +++ b/src/components/catalog/views/page/layout/CatalogLayoutRoomAdsView.tsx @@ -0,0 +1,97 @@ +import { GetRoomAdPurchaseInfoComposer, GetUserEventCatsMessageComposer, PurchaseRoomAdMessageComposer, RoomAdPurchaseInfoEvent, RoomEntryData, UserEventCatsEvent } from '@nitrots/nitro-renderer'; +import { FC, useCallback, useEffect, useState } from 'react'; +import { LocalizeText, SendMessageComposer } from '../../../../../api'; +import { Base, Button, Column, Text } from '../../../../../common'; +import { useMessageEvent } from '../../../../../hooks'; +import { CatalogLayoutProps } from './CatalogLayout.types'; + +export const CatalogLayoutRoomAdsView: FC = props => +{ + const { page = null } = props; + const [ eventName, setEventName ] = useState(''); + const [ eventDesc, setEventDesc ] = useState(''); + const [ roomId, setRoomId ] = useState(-1); + const [ availableRooms, setAvailableRooms ] = useState([]); + const [ extended, setExtended ] = useState(false); + const [ categoryId, setCategoryId ] = useState(1); + const [ categories, setCategories ] = useState(null); + + const onRoomAdPurchaseInfoEvent = (event: RoomAdPurchaseInfoEvent) => + { + const parser = event.getParser(); + + if(!parser) return; + + setAvailableRooms(parser.rooms); + } + + useMessageEvent(RoomAdPurchaseInfoEvent, onRoomAdPurchaseInfoEvent); + + const purchaseAd = useCallback(() => + { + const pageId = page.pageId; + const offerId = page.offers.length >= 1 ? page.offers[0].offerId : -1; + const flatId = roomId; + const name = eventName; + const desc = eventDesc; + const catId = categoryId; + + SendMessageComposer(new PurchaseRoomAdMessageComposer(pageId, offerId, flatId, name, extended, desc, catId)) + }, [ categoryId, eventDesc, eventName, extended, page.offers, page.pageId, roomId ]); + + + const onUserEventCatsEvent = (event: UserEventCatsEvent) => + { + const parser = event.getParser(); + + setCategories(parser.categories); + } + + useMessageEvent(UserEventCatsEvent, onUserEventCatsEvent); + + useEffect(() => + { + SendMessageComposer(new GetRoomAdPurchaseInfoComposer()); + // TODO: someone needs to fix this for morningstar + SendMessageComposer(new GetUserEventCatsMessageComposer()); + }, []); + + return (<> + { LocalizeText('roomad.catalog_header') } + + { LocalizeText('roomad.catalog_text') } + + + + + + { LocalizeText('roomad.catalog_name') } + setEventName(event.target.value) } /> + + + < Text bold>{ LocalizeText('roomad.catalog_description') } + } +
+ +
+ ); +} diff --git a/src/components/room/widgets/furniture/FurnitureTrophyView.tsx b/src/components/room/widgets/furniture/FurnitureTrophyView.tsx new file mode 100644 index 00000000..1f6bf79e --- /dev/null +++ b/src/components/room/widgets/furniture/FurnitureTrophyView.tsx @@ -0,0 +1,12 @@ +import { FC } from 'react'; +import { LayoutTrophyView } from '../../../../common'; +import { useFurnitureTrophyWidget } from '../../../../hooks'; + +export const FurnitureTrophyView: FC<{}> = props => +{ + const { objectId = -1, color = '1', senderName = '', date = '', message = '', close = null } = useFurnitureTrophyWidget(); + + if(objectId === -1) return null; + + return ; +} diff --git a/src/components/room/widgets/furniture/FurnitureWidgets.scss b/src/components/room/widgets/furniture/FurnitureWidgets.scss index b6a09bcf..a129da04 100644 --- a/src/components/room/widgets/furniture/FurnitureWidgets.scss +++ b/src/components/room/widgets/furniture/FurnitureWidgets.scss @@ -17,13 +17,14 @@ .dimmer-banner { width: 56px; height: 79px; - background: url('../../../../assets/images/room-widgets/dimmer-widget/dimmer_banner.png') center no-repeat; + background: url("../../../../assets/images/room-widgets/dimmer-widget/dimmer_banner.png") + center no-repeat; } .color-swatch { height: 30px; border: 2px solid $white; - box-shadow: inset 3px 3px rgba(0, 0, 0, .2); + box-shadow: inset 3px 3px rgba(0, 0, 0, 0.2); &.active { box-shadow: none; @@ -36,14 +37,13 @@ height: $nitro-widget-exchange-credit-height; .exchange-image { - background-image: url('../../../../assets/images/room-widgets/exchange-credit/exchange-credit-image.png'); + background-image: url("../../../../assets/images/room-widgets/exchange-credit/exchange-credit-image.png"); width: 103px; height: 103px; } } .nitro-external-image-widget { - .picture-preview { width: 320px; height: 320px; @@ -51,24 +51,262 @@ } .nitro-gift-opening { - + width: 340px; + resize: none; } .nitro-mannequin { + width: 300px; + + .mannequin-preview { + display: flex; + justify-content: center; + align-items: center; + width: 83px; + height: 130px; + background-image: url("../../../../assets/images/room-widgets/mannequin-widget/mannequin-spritesheet.png"); + overflow: hidden; + + .avatar-image { + background-position: unset; + top: -8px; + } + } } -.mannequin-preview { - display: flex; - justify-content: center; - align-items: center; - width: 83px; - height: 130px; - background-image: url('../../../../assets/images/room-widgets/mannequin-widget/mannequin-spritesheet.png'); - overflow: hidden; +.nitro-stickie { + position: relative; + width: 185px; + height: 178px; + top: 25px; + left: 25px; + padding: 1px; + pointer-events: all; + + .stickie-header { + width: 183px; + height: 18px; + padding: 0 7px; + + .header-trash, + .header-close { + cursor: pointer; + } + + .stickie-color { + width: 10px; + height: 10px; + cursor: pointer; + } + } + + .stickie-context { + width: 183px; + height: 145px; + padding: 2px 7px; + font-size: 12px; + color: $black; + + .context-text { + width: 100%; + height: 100%; + padding: 0; + overflow-wrap: break-word; + white-space: break-spaces; + overflow-y: auto; + } + + textarea { + background: transparent; + border: 0; + outline: none; + box-shadow: none; + resize: none; + font-style: italic; + + &:active { + border: 0; + outline: none; + box-shadow: none; + } + } + } } -@import './friend-furni/FurnitureFriendFurniView'; -@import './manipulation-menu/FurnitureManipulationMenuView'; -@import './stickie/FurnitureStickieView'; -@import './high-score/FurnitureHighScoreView'; -@import './youtube-tv/FurnitureYoutubeDisplayView'; +.nitro-stickie-image { + background-image: url("../../../../assets/images/room-widgets/stickie-widget/stickie-spritesheet.png"); + + &.stickie-blue, + &.stickie-yellow, + &.stickie-green, + &.stickie-pink { + width: 185px; + height: 178px; + } + + &.stickie-blue { + background-position: -2px -2px; + } + + &.stickie-yellow { + background-image: url("../../../../assets/images/room-widgets/stickie-widget/stickie-yellow.png"); + //background-position: -191px -184px; + } + + &.stickie-green { + background-position: -191px -2px; + } + + &.stickie-pink { + background-position: -2px -184px; + } + + &.stickie-close { + width: 10px; + height: 10px; + background-position: -2px -366px; + } + + &.stickie-trash { + width: 9px; + height: 10px; + background-position: -16px -366px; + } +} + +.nitro-engraving-lock { + width: 300px; + + .engraving-lock-stage-1 { + width: 31px; + height: 39px; + background-position: -380px -43px; + background-image: url('../../../../assets/images/room-widgets/engraving-lock-widget/engraving-lock-spritesheet.png'); + } + + .engraving-lock-stage-2 { + width: 36px; + height: 43px; + background-position: -375px 0px; + background-image: url('../../../../assets/images/room-widgets/engraving-lock-widget/engraving-lock-spritesheet.png'); + } +} + +.nitro-engraving-lock-view { + width: 375px; + height: 210px; + background-position: 0px 0px; + background-image: url('../../../../assets/images/room-widgets/engraving-lock-widget/engraving-lock-spritesheet.png'); + + color: #622e54; + font-weight: bold; + font-size: 16px; + text-shadow: 0px 1px white; + + &.engraving-lock-3 { + background-position: 0px -210px; + color: #614110; + } + + &.engraving-lock-4 { + background-position: 0px -420px; + color: #f1dcc8; + text-shadow: 0px 2px rgba(0, 0, 0, .4); + + .engraving-lock-avatar { + margin-bottom: 10px; + } + } + + .engraving-lock-close { + position: absolute; + cursor: pointer; + width: 15px; + height: 15px; + top: 34px; + right: 27px; + } + + .engraving-lock-avatar { + width: 70px; + height: 120px; + + div { + position: absolute; + margin-top: -5px; + } + + &:nth-child(1) { + div { + margin-left: -10px; + } + } + + &:nth-child(2) { + div { + margin-left: -15px; + } + } + } +} + +.nitro-widget-high-score { + width: 250px; + max-width: 250px; + height: 200px; +} + +.youtube-tv-widget { + width: 600px; + height: 380px; + + .youtube-video-container { + //min-height: 366px; + + .empty-video { + background-color: black; + color: white; + width: 100%; + height: 100%; + text-align: center; + } + + .youtubeContainer { + position: relative; + width: 100%; + height: 100%; + //height: 0; + //padding-bottom: 56.25%; + overflow: hidden; + margin-bottom: 50px; + } + + .youtubeContainer iframe { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + } + } + + .playlist-container { + overflow-y: hidden; + margin-right: -10px; + color: black; + height: 100%; + + .playlist-controls { + width: 100%; + .icon { + margin-right: 10px; + margin-bottom: 10px; + } + } + + .playlist-grid { + height: 100%; + width: 100%; + } + } +} diff --git a/src/components/room/widgets/furniture/FurnitureWidgetsView.tsx b/src/components/room/widgets/furniture/FurnitureWidgetsView.tsx index 553965d6..7850e936 100644 --- a/src/components/room/widgets/furniture/FurnitureWidgetsView.tsx +++ b/src/components/room/widgets/furniture/FurnitureWidgetsView.tsx @@ -1,39 +1,42 @@ import { FC } from 'react'; -import { FurnitureBackgroundColorView } from './background-color/FurnitureBackgroundColorView'; -import { FurnitureBadgeDisplayView } from './badge-display/FurnitureBadgeDisplayView'; +import { Base } from '../../../../common'; import { FurnitureContextMenuView } from './context-menu/FurnitureContextMenuView'; -import { FurnitureCustomStackHeightView } from './custom-stack-height/FurnitureCustomStackHeightView'; -import { FurnitureDimmerView } from './dimmer/FurnitureDimmerView'; -import { FurnitureExchangeCreditView } from './exchange-credit/FurnitureExchangeCreditView'; -import { FurnitureExternalImageView } from './external-image/FurnitureExternalImageView'; -import { FurnitureFriendFurniView } from './friend-furni/FurnitureFriendFurniView'; -import { FurnitureGiftOpeningView } from './gift-opening/FurnitureGiftOpeningView'; -import { FurnitureHighScoreView } from './high-score/FurnitureHighScoreView'; -import { FurnitureManipulationMenuView } from './manipulation-menu/FurnitureManipulationMenuView'; -import { FurnitureMannequinView } from './mannequin/FurnitureMannequinView'; -import { FurnitureStickieView } from './stickie/FurnitureStickieView'; -import { FurnitureTrophyView } from './trophy/FurnitureTrophyView'; -import { FurnitureYoutubeDisplayView } from './youtube-tv/FurnitureYoutubeDisplayView'; +import { FurnitureBackgroundColorView } from './FurnitureBackgroundColorView'; +import { FurnitureBadgeDisplayView } from './FurnitureBadgeDisplayView'; +import { FurnitureDimmerView } from './FurnitureDimmerView'; +import { FurnitureExchangeCreditView } from './FurnitureExchangeCreditView'; +import { FurnitureExternalImageView } from './FurnitureExternalImageView'; +import { FurnitureFriendFurniView } from './FurnitureFriendFurniView'; +import { FurnitureGiftOpeningView } from './FurnitureGiftOpeningView'; +import { FurnitureHighScoreView } from './FurnitureHighScoreView'; +import { FurnitureInternalLinkView } from './FurnitureInternalLinkView'; +import { FurnitureMannequinView } from './FurnitureMannequinView'; +import { FurnitureRoomLinkView } from './FurnitureRoomLinkView'; +import { FurnitureStackHeightView } from './FurnitureStackHeightView'; +import { FurnitureStickieView } from './FurnitureStickieView'; +import { FurnitureTrophyView } from './FurnitureTrophyView'; +import { FurnitureYoutubeDisplayView } from './FurnitureYoutubeDisplayView'; export const FurnitureWidgetsView: FC<{}> = props => { return ( -
+ - - + + + + - - + + - - + -
+ ); } diff --git a/src/components/room/widgets/furniture/FurnitureYoutubeDisplayView.tsx b/src/components/room/widgets/furniture/FurnitureYoutubeDisplayView.tsx new file mode 100644 index 00000000..0f967981 --- /dev/null +++ b/src/components/room/widgets/furniture/FurnitureYoutubeDisplayView.tsx @@ -0,0 +1,104 @@ +import { FC, useCallback, useEffect, useState } from 'react'; +import YouTube, { Options } from 'react-youtube'; +import { YouTubePlayer } from 'youtube-player/dist/types'; +import { LocalizeText, YoutubeVideoPlaybackStateEnum } from '../../../../api'; +import { Grid, LayoutGridItem, NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../../../common'; +import { useFurnitureYoutubeWidget } from '../../../../hooks'; + +export const FurnitureYoutubeDisplayView: FC<{}> = props => +{ + const [ player, setPlayer ] = useState(null); + const { objectId = -1, videoId = null, videoStart = 0, videoEnd = 0, currentVideoState = null, selectedVideo = null, playlists = [], close = null, previous = null, next = null, pause = null, play = null, selectVideo = null } = useFurnitureYoutubeWidget(); + + const onStateChange = useCallback((event: { target: YouTubePlayer; data: number }) => + { + setPlayer(event.target); + + if(objectId === -1) return; + + switch(event.target.getPlayerState()) + { + case -1: + case 1: + if(currentVideoState === 2) + { + //event.target.pauseVideo(); + } + + if(currentVideoState !== 1) play(); + return; + case 2: + if(currentVideoState !== 2) pause(); + } + }, [ objectId, currentVideoState, play, pause ]); + + useEffect(() => + { + if((currentVideoState === null) || !player) return; + + if((currentVideoState === YoutubeVideoPlaybackStateEnum.PLAYING) && (player.getPlayerState() !== YoutubeVideoPlaybackStateEnum.PLAYING)) + { + player.playVideo(); + + return; + } + + if((currentVideoState === YoutubeVideoPlaybackStateEnum.PAUSED) && (player.getPlayerState() !== YoutubeVideoPlaybackStateEnum.PAUSED)) + { + player.pauseVideo(); + + return; + } + }, [ currentVideoState, player ]); + + if(objectId === -1) return null; + + const youtubeOptions: Options = { + height: '375', + width: '500', + playerVars: { + autoplay: 1, + disablekb: 1, + controls: 0, + origin: window.origin, + modestbranding: 1, + start: videoStart, + end: videoEnd + } + } + + return ( + + + +
+
+ { (videoId && videoId.length > 0) && + setPlayer(event.target) } onStateChange={ onStateChange } containerClassName={ 'youtubeContainer' } /> + } + { (!videoId || videoId.length === 0) && +
{ LocalizeText('widget.furni.video_viewer.no_videos') }
+ } +
+
+ + + + +
{ LocalizeText('widget.furni.video_viewer.playlists') }
+ + { playlists && playlists.map((entry, index) => + { + return ( + selectVideo(entry.video) } itemActive={ (entry.video === selectedVideo) }> + { entry.title } - { entry.description } + + ) + }) } + +
+
+
+
+ ) +} diff --git a/src/components/room/widgets/furniture/background-color/FurnitureBackgroundColorView.tsx b/src/components/room/widgets/furniture/background-color/FurnitureBackgroundColorView.tsx deleted file mode 100644 index 0d7bdc17..00000000 --- a/src/components/room/widgets/furniture/background-color/FurnitureBackgroundColorView.tsx +++ /dev/null @@ -1,130 +0,0 @@ -import { ApplyTonerComposer, RoomControllerLevel, RoomEngineObjectEvent, RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@nitrots/nitro-renderer'; -import { FC, useCallback, useEffect, useState } from 'react'; -import ReactSlider from 'react-slider'; -import { GetRoomEngine, GetSessionDataManager, LocalizeText, RoomWidgetUpdateBackgroundColorPreviewEvent, RoomWidgetUpdateRoomObjectEvent, SendMessageComposer } from '../../../../../api'; -import { Button, Column, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../../../common'; -import { UseEventDispatcherHook, UseRoomEngineEvent } from '../../../../../hooks'; -import { useRoomContext } from '../../../RoomContext'; - -export const FurnitureBackgroundColorView: FC<{}> = props => -{ - const [ objectId, setObjectId ] = useState(-1); - const [ hue, setHue ] = useState(0); - const [ saturation, setSaturation ] = useState(0); - const [ lightness, setLightness ] = useState(0); - const { roomSession = null, eventDispatcher = null } = useRoomContext(); - - const close = useCallback(() => - { - eventDispatcher.dispatchEvent(new RoomWidgetUpdateBackgroundColorPreviewEvent(RoomWidgetUpdateBackgroundColorPreviewEvent.CLEAR_PREVIEW)); - - setObjectId(-1); - }, [ eventDispatcher ]); - - const canOpenBackgroundToner = useCallback(() => - { - return (roomSession.isRoomOwner || (roomSession.controllerLevel >= RoomControllerLevel.GUEST) || GetSessionDataManager().isModerator); - }, [ roomSession ]); - - const onRoomEngineObjectEvent = useCallback((event: RoomEngineObjectEvent) => - { - switch(event.type) - { - case RoomEngineTriggerWidgetEvent.REQUEST_BACKGROUND_COLOR: { - if(!canOpenBackgroundToner()) return; - - const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); - const model = roomObject.model; - - setObjectId(roomObject.id); - setHue(parseInt(model.getValue(RoomObjectVariable.FURNITURE_ROOM_BACKGROUND_COLOR_HUE))); - setSaturation(parseInt(model.getValue(RoomObjectVariable.FURNITURE_ROOM_BACKGROUND_COLOR_SATURATION))); - setLightness(parseInt(model.getValue(RoomObjectVariable.FURNITURE_ROOM_BACKGROUND_COLOR_LIGHTNESS))); - - return; - } - case RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED: { - if(objectId !== event.objectId) return; - - close(); - return; - } - } - }, [ objectId, canOpenBackgroundToner, close ]); - - UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_BACKGROUND_COLOR, onRoomEngineObjectEvent); - UseEventDispatcherHook(RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED, eventDispatcher, onRoomEngineObjectEvent); - - const processAction = useCallback((name: string) => - { - switch(name) - { - case 'apply': - SendMessageComposer(new ApplyTonerComposer(objectId, hue, saturation, lightness)); - break; - case 'toggle': - roomSession.useMultistateItem(objectId); - break; - } - }, [ roomSession, objectId, hue, saturation, lightness ]); - - useEffect(() => - { - if(objectId === -1) return; - - eventDispatcher.dispatchEvent(new RoomWidgetUpdateBackgroundColorPreviewEvent(RoomWidgetUpdateBackgroundColorPreviewEvent.PREVIEW, hue, saturation, lightness)); - }, [ eventDispatcher, objectId, hue, saturation, lightness ]); - - if(objectId === -1) return null; - - return ( - - - - - - { LocalizeText('widget.backgroundcolor.hue') } - setHue(event) } - thumbClassName={ 'thumb degree' } - renderThumb={ (props, state) =>
{ state.valueNow }
} /> -
- - { LocalizeText('widget.backgroundcolor.saturation') } - setSaturation(event) } - thumbClassName={ 'thumb percent' } - renderThumb={ (props, state) =>
{ state.valueNow }
} /> -
- - { LocalizeText('widget.backgroundcolor.lightness') } - setLightness(event) } - thumbClassName={ 'thumb percent' } - renderThumb={ (props, state) =>
{ state.valueNow }
} /> -
-
- - - - -
-
- ); -} diff --git a/src/components/room/widgets/furniture/badge-display/FurnitureBadgeDisplayView.tsx b/src/components/room/widgets/furniture/badge-display/FurnitureBadgeDisplayView.tsx deleted file mode 100644 index 22a15b8a..00000000 --- a/src/components/room/widgets/furniture/badge-display/FurnitureBadgeDisplayView.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { NitroEvent, RoomEngineTriggerWidgetEvent, StringDataType } from '@nitrots/nitro-renderer'; -import { FC, useCallback, useState } from 'react'; -import { GetRoomEngine, LocalizeBadgeDescription, LocalizeBadgeName, RoomWidgetUpdateRoomObjectEvent } from '../../../../../api'; -import { LayoutTrophyView } from '../../../../../common'; -import { UseEventDispatcherHook, UseRoomEngineEvent } from '../../../../../hooks'; -import { useRoomContext } from '../../../RoomContext'; -import { FurnitureTrophyData } from '../trophy/FurnitureTrophyData'; - -export const FurnitureBadgeDisplayView: FC<{}> = props => -{ - const [ trophyData, setTrophyData ] = useState(null); - const { widgetHandler = null } = useRoomContext(); - - const onNitroEvent = useCallback((event: NitroEvent) => - { - switch(event.type) - { - case RoomEngineTriggerWidgetEvent.REQUEST_ACHIEVEMENT_RESOLUTION_ENGRAVING: - case RoomEngineTriggerWidgetEvent.REQUEST_BADGE_DISPLAY_ENGRAVING: { - const widgetEvent = (event as RoomEngineTriggerWidgetEvent); - - const roomObject = GetRoomEngine().getRoomObject(widgetEvent.roomId, widgetEvent.objectId, widgetEvent.category); - - if(!roomObject) return; - - const stringStuff = new StringDataType(); - - stringStuff.initializeFromRoomObjectModel(roomObject.model); - - const badgeName = LocalizeBadgeName(stringStuff.getValue(1)); - const badgeDesc = LocalizeBadgeDescription(stringStuff.getValue(1)); - const date = stringStuff.getValue(2); - const senderName = stringStuff.getValue(3); - - setTrophyData(new FurnitureTrophyData(widgetEvent.objectId, widgetEvent.category, '1', senderName, date, badgeDesc, badgeName)); - return; - } - case RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED: { - const widgetEvent = (event as RoomWidgetUpdateRoomObjectEvent); - - setTrophyData(prevState => - { - if(!prevState || (widgetEvent.id !== prevState.objectId) || (widgetEvent.category !== prevState.category)) return prevState; - - return null; - }); - return; - } - } - }, []); - - UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_BADGE_DISPLAY_ENGRAVING, onNitroEvent); - UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_ACHIEVEMENT_RESOLUTION_ENGRAVING, onNitroEvent); - UseEventDispatcherHook(RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED, widgetHandler.eventDispatcher, onNitroEvent); - - const processAction = useCallback((type: string, value: string = null) => - { - switch(type) - { - case 'close': - setTrophyData(null); - return; - } - }, []); - - if(!trophyData) return null; - - return processAction('close') } />; -} diff --git a/src/components/room/widgets/furniture/context-menu/EffectBoxConfirmView.tsx b/src/components/room/widgets/furniture/context-menu/EffectBoxConfirmView.tsx index 79662119..644ffd81 100644 --- a/src/components/room/widgets/furniture/context-menu/EffectBoxConfirmView.tsx +++ b/src/components/room/widgets/furniture/context-menu/EffectBoxConfirmView.tsx @@ -1,7 +1,7 @@ import { FC } from 'react'; import { LocalizeText } from '../../../../../api'; import { Button, Column, Flex, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../../../common'; -import { useRoomContext } from '../../../RoomContext'; +import { useRoom } from '../../../../../hooks'; interface EffectBoxConfirmViewProps { @@ -12,7 +12,7 @@ interface EffectBoxConfirmViewProps export const EffectBoxConfirmView: FC = props => { const { objectId = -1, close = null } = props; - const { roomSession = null } = useRoomContext(); + const { roomSession = null } = useRoom(); const useProduct = () => { diff --git a/src/components/room/widgets/furniture/context-menu/FurnitureContextMenuView.tsx b/src/components/room/widgets/furniture/context-menu/FurnitureContextMenuView.tsx index 6c44abc4..1c431643 100644 --- a/src/components/room/widgets/furniture/context-menu/FurnitureContextMenuView.tsx +++ b/src/components/room/widgets/furniture/context-menu/FurnitureContextMenuView.tsx @@ -1,8 +1,7 @@ -import { ContextMenuEnum, GroupFurniContextMenuInfoMessageEvent, GroupFurniContextMenuInfoMessageParser, RoomEngineTriggerWidgetEvent, RoomObjectCategory } from '@nitrots/nitro-renderer'; -import { FC, useCallback, useState } from 'react'; -import { GetGroupInformation, GetRoomEngine, IsOwnerOfFurniture, LocalizeText, RoomWidgetFurniActionMessage, TryJoinGroup, TryVisitRoom } from '../../../../../api'; -import { UseMessageEventHook, UseRoomEngineEvent } from '../../../../../hooks'; -import { useRoomContext } from '../../../RoomContext'; +import { ContextMenuEnum, RoomObjectCategory } from '@nitrots/nitro-renderer'; +import { FC } from 'react'; +import { GetGroupInformation, LocalizeText } from '../../../../../api'; +import { useFurnitureContextMenuWidget } from '../../../../../hooks'; import { ContextMenuHeaderView } from '../../context-menu/ContextMenuHeaderView'; import { ContextMenuListItemView } from '../../context-menu/ContextMenuListItemView'; import { ContextMenuView } from '../../context-menu/ContextMenuView'; @@ -17,145 +16,16 @@ const EFFECTBOX_OPEN: string = 'EFFECTBOX_OPEN'; export const FurnitureContextMenuView: FC<{}> = props => { - const [ objectId, setObjectId ] = useState(-1); - const [ mode, setMode ] = useState(null); - const [ confirmMode, setConfirmMode ] = useState(null); - const [ confirmingObjectId, setConfirmingObjectId ] = useState(-1); - const [ groupData, setGroupData ] = useState(null); - const [ isGroupMember, setIsGroupMember ] = useState(false); - const { roomSession = null, widgetHandler = null } = useRoomContext(); - - const close = useCallback(() => - { - setObjectId(-1); - setGroupData(null); - setIsGroupMember(false); - setMode(null); - }, []); - - const closeConfirm = () => - { - setConfirmMode(null); - setConfirmingObjectId(-1); - } - - const onRoomEngineTriggerWidgetEvent = useCallback((event: RoomEngineTriggerWidgetEvent) => - { - const object = GetRoomEngine().getRoomObject(roomSession.roomId, event.objectId, event.category); - - if(!object) return; - - switch(event.type) - { - case RoomEngineTriggerWidgetEvent.REQUEST_MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG: - if(!IsOwnerOfFurniture(object)) return; - - setConfirmingObjectId(object.id); - setConfirmMode(MONSTERPLANT_SEED_CONFIRMATION); - - close(); - return; - case RoomEngineTriggerWidgetEvent.REQUEST_EFFECTBOX_OPEN_DIALOG: - if(!IsOwnerOfFurniture(object)) return; - - setConfirmingObjectId(object.id); - setConfirmMode(EFFECTBOX_OPEN); - - close(); - return; - case RoomEngineTriggerWidgetEvent.REQUEST_PURCHASABLE_CLOTHING_CONFIRMATION_DIALOG: - if(!IsOwnerOfFurniture(object)) return; - - setConfirmingObjectId(object.id); - setConfirmMode(PURCHASABLE_CLOTHING_CONFIRMATION); - - close(); - return; - case RoomEngineTriggerWidgetEvent.OPEN_FURNI_CONTEXT_MENU: - - setObjectId(object.id); - - switch(event.contextMenu) - { - case ContextMenuEnum.FRIEND_FURNITURE: - setMode(ContextMenuEnum.FRIEND_FURNITURE); - return; - case ContextMenuEnum.MONSTERPLANT_SEED: - if(IsOwnerOfFurniture(object)) setMode(ContextMenuEnum.MONSTERPLANT_SEED); - return; - case ContextMenuEnum.MYSTERY_BOX: - return; - case ContextMenuEnum.RANDOM_TELEPORT: - setMode(ContextMenuEnum.RANDOM_TELEPORT); - return; - case ContextMenuEnum.PURCHASABLE_CLOTHING: - if(IsOwnerOfFurniture(object)) setMode(ContextMenuEnum.PURCHASABLE_CLOTHING); - return; - } - - return; - case RoomEngineTriggerWidgetEvent.CLOSE_FURNI_CONTEXT_MENU: - if(object.id === objectId) close(); - return; - } - }, [ roomSession, objectId, close ]); - - UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.OPEN_FURNI_CONTEXT_MENU, onRoomEngineTriggerWidgetEvent); - UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.CLOSE_FURNI_CONTEXT_MENU, onRoomEngineTriggerWidgetEvent); - UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG, onRoomEngineTriggerWidgetEvent); - UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_PURCHASABLE_CLOTHING_CONFIRMATION_DIALOG, onRoomEngineTriggerWidgetEvent); - UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_EFFECTBOX_OPEN_DIALOG, onRoomEngineTriggerWidgetEvent); - - const onGroupFurniContextMenuInfoMessageEvent = useCallback((event: GroupFurniContextMenuInfoMessageEvent) => - { - const parser = event.getParser(); - - setObjectId(parser.objectId); - setGroupData(parser); - setIsGroupMember(parser.userIsMember); - setMode(GROUP_FURNITURE); - }, []); - - UseMessageEventHook(GroupFurniContextMenuInfoMessageEvent, onGroupFurniContextMenuInfoMessageEvent); - - const processAction = (name: string) => - { - if(name) - { - switch(name) - { - case 'use_friend_furni': - roomSession.useMultistateItem(objectId); - break; - case 'use_monsterplant_seed': - setConfirmMode(MONSTERPLANT_SEED_CONFIRMATION); - setConfirmingObjectId(objectId); - break; - case 'use_random_teleport': - widgetHandler.processWidgetMessage(new RoomWidgetFurniActionMessage(RoomWidgetFurniActionMessage.USE, objectId, RoomObjectCategory.FLOOR)); - break; - case 'use_purchaseable_clothing': - setConfirmMode(PURCHASABLE_CLOTHING_CONFIRMATION); - setConfirmingObjectId(objectId); - break; - case 'join_group': - TryJoinGroup(groupData.guildId); - setIsGroupMember(true); - return; - case 'go_to_group_homeroom': - if(groupData) TryVisitRoom(groupData.guildHomeRoomId); - break; - } - } - - close(); - } + const { closeConfirm = null, processAction = null, objectId = -1, mode = null, confirmMode = null, confirmingObjectId = -1, groupData = null, isGroupMember = false } = useFurnitureContextMenuWidget(); return ( <> - { (confirmMode === MONSTERPLANT_SEED_CONFIRMATION) && } - { (confirmMode === PURCHASABLE_CLOTHING_CONFIRMATION) && } - { (confirmMode === EFFECTBOX_OPEN) && } + { (confirmMode === MONSTERPLANT_SEED_CONFIRMATION) && + } + { (confirmMode === PURCHASABLE_CLOTHING_CONFIRMATION) && + } + { (confirmMode === EFFECTBOX_OPEN) && + } { (objectId >= 0) && mode && { (mode === ContextMenuEnum.FRIEND_FURNITURE) && @@ -199,15 +69,17 @@ export const FurnitureContextMenuView: FC<{}> = props => GetGroupInformation(groupData.guildId) }> { groupData.guildName } - { !isGroupMember && processAction('join_group') }> - { LocalizeText('widget.furniture.button.join.group') } - } + { !isGroupMember && + processAction('join_group') }> + { LocalizeText('widget.furniture.button.join.group') } + } processAction('go_to_group_homeroom') }> { LocalizeText('widget.furniture.button.go.to.group.home.room') } - { groupData.guildHasReadableForum && processAction('open_forum') }> - { LocalizeText('widget.furniture.button.open_group_forum') } - } + { groupData.guildHasReadableForum && + processAction('open_forum') }> + { LocalizeText('widget.furniture.button.open_group_forum') } + } } } diff --git a/src/components/room/widgets/furniture/context-menu/MonsterPlantSeedConfirmView.tsx b/src/components/room/widgets/furniture/context-menu/MonsterPlantSeedConfirmView.tsx index f0c2234b..619b719c 100644 --- a/src/components/room/widgets/furniture/context-menu/MonsterPlantSeedConfirmView.tsx +++ b/src/components/room/widgets/furniture/context-menu/MonsterPlantSeedConfirmView.tsx @@ -1,8 +1,8 @@ import { IFurnitureData, RoomObjectCategory } from '@nitrots/nitro-renderer'; import { FC, useEffect, useState } from 'react'; -import { FurniCategory, GetFurnitureDataForRoomObject, LocalizeText, RoomWidgetUseProductMessage } from '../../../../../api'; +import { FurniCategory, GetFurnitureDataForRoomObject, LocalizeText } from '../../../../../api'; import { Base, Button, Column, Flex, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../../../common'; -import { useRoomContext } from '../../../RoomContext'; +import { useRoom } from '../../../../../hooks'; interface MonsterPlantSeedConfirmViewProps { @@ -18,11 +18,11 @@ export const MonsterPlantSeedConfirmView: FC = const { objectId = -1, close = null } = props; const [ furniData, setFurniData ] = useState(null); const [ mode, setMode ] = useState(MODE_DEFAULT); - const { roomSession = null, widgetHandler = null } = useRoomContext(); + const { roomSession = null } = useRoom(); const useProduct = () => { - widgetHandler.processWidgetMessage(new RoomWidgetUseProductMessage(RoomWidgetUseProductMessage.MONSTERPLANT_SEED, objectId)); + roomSession.useMultistateItem(objectId); close(); } diff --git a/src/components/room/widgets/furniture/context-menu/PurchasableClothingConfirmView.tsx b/src/components/room/widgets/furniture/context-menu/PurchasableClothingConfirmView.tsx index b7c1c90d..60bbb2f9 100644 --- a/src/components/room/widgets/furniture/context-menu/PurchasableClothingConfirmView.tsx +++ b/src/components/room/widgets/furniture/context-menu/PurchasableClothingConfirmView.tsx @@ -1,9 +1,8 @@ import { RedeemItemClothingComposer, RoomObjectCategory, UserFigureComposer } from '@nitrots/nitro-renderer'; import { FC, useEffect, useState } from 'react'; -import { FurniCategory, GetAvatarRenderManager, GetConnection, GetFurnitureDataForRoomObject, GetSessionDataManager, LocalizeText } from '../../../../../api'; +import { FigureData, FurniCategory, GetAvatarRenderManager, GetConnection, GetFurnitureDataForRoomObject, GetSessionDataManager, LocalizeText } from '../../../../../api'; import { Base, Button, Column, Flex, LayoutAvatarImageView, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../../../common'; -import { FigureData } from '../../../../avatar-editor/common/FigureData'; -import { useRoomContext } from '../../../RoomContext'; +import { useRoom } from '../../../../../hooks'; interface PurchasableClothingConfirmViewProps { @@ -20,7 +19,7 @@ export const PurchasableClothingConfirmView: FC(FigureData.MALE); const [ newFigure, setNewFigure ] = useState(null); - const { roomSession = null } = useRoomContext(); + const { roomSession = null } = useRoom(); const useProduct = () => { diff --git a/src/components/room/widgets/furniture/custom-stack-height/FurnitureCustomStackHeightView.tsx b/src/components/room/widgets/furniture/custom-stack-height/FurnitureCustomStackHeightView.tsx deleted file mode 100644 index 694a9c4a..00000000 --- a/src/components/room/widgets/furniture/custom-stack-height/FurnitureCustomStackHeightView.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import { FurnitureStackHeightComposer, FurnitureStackHeightEvent } from '@nitrots/nitro-renderer'; -import { FC, useCallback, useEffect, useState } from 'react'; -import ReactSlider from 'react-slider'; -import { LocalizeText, RoomWidgetUpdateCustomStackHeightEvent, SendMessageComposer } from '../../../../../api'; -import { Button, Column, Flex, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../../../common'; -import { UseEventDispatcherHook, UseMessageEventHook } from '../../../../../hooks'; -import { useRoomContext } from '../../../RoomContext'; - -const MAX_HEIGHT: number = 40; - -export const FurnitureCustomStackHeightView: FC<{}> = props => -{ - const [ objectId, setObjectId ] = useState(-1); - const [ height, setHeight ] = useState(0); - const [ pendingHeight, setPendingHeight ] = useState(-1); - const { eventDispatcher = null } = useRoomContext(); - - const close = () => - { - setObjectId(-1); - setHeight(0); - } - - const updateHeight = useCallback((height: number, fromServer: boolean = false) => - { - if(!height) height = 0; - - height = Math.abs(height); - - if(!fromServer) ((height > MAX_HEIGHT) && (height = MAX_HEIGHT)); - - setHeight(parseFloat(height.toFixed(2))); - - if(!fromServer) setPendingHeight(height * 100); - }, []); - - const onRoomWidgetUpdateCustomStackHeightEvent = useCallback((event: RoomWidgetUpdateCustomStackHeightEvent) => - { - switch(event.type) - { - case RoomWidgetUpdateCustomStackHeightEvent.UPDATE_CUSTOM_STACK_HEIGHT: { - setObjectId(event.objectId); - updateHeight(event.height, true); - } - } - }, [ updateHeight ]); - - UseEventDispatcherHook(RoomWidgetUpdateCustomStackHeightEvent.UPDATE_CUSTOM_STACK_HEIGHT, eventDispatcher, onRoomWidgetUpdateCustomStackHeightEvent); - - const onFurnitureStackHeightEvent = useCallback((event: FurnitureStackHeightEvent) => - { - const parser = event.getParser(); - - if(objectId !== parser.furniId) return; - - updateHeight(parser.height, true); - }, [ objectId, updateHeight ]); - - UseMessageEventHook(FurnitureStackHeightEvent, onFurnitureStackHeightEvent); - - const sendUpdate = useCallback((height: number) => - { - SendMessageComposer(new FurnitureStackHeightComposer(objectId, ~~(height))); - }, [ objectId ]); - - useEffect(() => - { - if((objectId === -1) || (pendingHeight === -1)) return; - - const timeout = setTimeout(() => sendUpdate(~~(pendingHeight)), 10); - - return () => clearTimeout(timeout); - }, [ objectId, pendingHeight, sendUpdate ]); - - if(objectId === -1) return null; - - return ( - - - - { LocalizeText('widget.custom.stack.height.text') } - - updateHeight(event) } - renderThumb={ (props, state) =>
{ state.valueNow }
} /> - updateHeight(parseFloat(event.target.value)) } /> -
- - - - -
-
- ); -} diff --git a/src/components/room/widgets/furniture/dimmer/FurnitureDimmerView.tsx b/src/components/room/widgets/furniture/dimmer/FurnitureDimmerView.tsx deleted file mode 100644 index 544c1f35..00000000 --- a/src/components/room/widgets/furniture/dimmer/FurnitureDimmerView.tsx +++ /dev/null @@ -1,191 +0,0 @@ -import { NitroEvent } from '@nitrots/nitro-renderer'; -import classNames from 'classnames'; -import { FC, useCallback, useEffect, useMemo, useState } from 'react'; -import ReactSlider from 'react-slider'; -import { ColorUtils, GetConfiguration, LocalizeText, RoomWidgetDimmerChangeStateMessage, RoomWidgetDimmerPreviewMessage, RoomWidgetDimmerSavePresetMessage, RoomWidgetUpdateDimmerEvent, RoomWidgetUpdateDimmerStateEvent } from '../../../../../api'; -import { Base, Button, Column, Flex, Grid, NitroCardContentView, NitroCardHeaderView, NitroCardTabsItemView, NitroCardTabsView, NitroCardView, Text } from '../../../../../common'; -import { UseEventDispatcherHook } from '../../../../../hooks'; -import { useRoomContext } from '../../../RoomContext'; -import { DimmerFurnitureWidgetPresetItem } from './DimmerFurnitureWidgetPresetItem'; - -const AVAILABLE_COLORS: number[] = [ 7665141, 21495, 15161822, 15353138, 15923281, 8581961, 0 ]; -const HTML_COLORS: string[] = [ '#74F5F5', '#0053F7', '#E759DE', '#EA4532', '#F2F851', '#82F349', '#000000' ]; -const MIN_BRIGHTNESS: number = 76; -const MAX_BRIGHTNESS: number = 255; - -export const FurnitureDimmerView: FC<{}> = props => -{ - const [ isVisible, setIsVisible ] = useState(false); - const [ presets, setPresets ] = useState([]); - const [ selectedPresetId, setSelectedPresetId ] = useState(0); - const [ dimmerState, setDimmerState ] = useState(0); - const [ lastDimmerState, setLastDimmerState ] = useState(0); - const [ effectId, setEffectId ] = useState(0); - const [ color, setColor ] = useState(0xFFFFFF); - const [ brightness, setBrightness ] = useState(0xFF); - const [ selectedEffectId, setSelectedEffectId ] = useState(0); - const [ selectedColor, setSelectedColor ] = useState(0); - const [ selectedBrightness, setSelectedBrightness ] = useState(0); - const { eventDispatcher = null, widgetHandler = null } = useRoomContext(); - - const onNitroEvent = useCallback((event: NitroEvent) => - { - switch(event.type) - { - case RoomWidgetUpdateDimmerEvent.PRESETS: { - const widgetEvent = (event as RoomWidgetUpdateDimmerEvent); - - const presets: DimmerFurnitureWidgetPresetItem[] = []; - - for(const preset of widgetEvent.presets) presets.push(new DimmerFurnitureWidgetPresetItem(preset.id, preset.type, preset.color, preset.brightness)); - - setPresets(presets); - setSelectedPresetId(widgetEvent.selectedPresetId); - setIsVisible(true); - return; - } - case RoomWidgetUpdateDimmerEvent.HIDE: { - setIsVisible(false); - - return; - } - case RoomWidgetUpdateDimmerStateEvent.DIMMER_STATE: { - const widgetEvent = (event as RoomWidgetUpdateDimmerStateEvent); - - setLastDimmerState(dimmerState); - setDimmerState(widgetEvent.state); - setSelectedPresetId(widgetEvent.presetId); - setEffectId(widgetEvent.effectId); - setSelectedEffectId(widgetEvent.effectId); - setColor(widgetEvent.color); - setSelectedColor(widgetEvent.color); - setBrightness(widgetEvent.brightness); - setSelectedBrightness(widgetEvent.brightness); - - return; - } - } - }, [ dimmerState ]); - - UseEventDispatcherHook(RoomWidgetUpdateDimmerEvent.PRESETS, eventDispatcher, onNitroEvent); - UseEventDispatcherHook(RoomWidgetUpdateDimmerEvent.HIDE, eventDispatcher, onNitroEvent); - UseEventDispatcherHook(RoomWidgetUpdateDimmerStateEvent.DIMMER_STATE, eventDispatcher, onNitroEvent); - - const selectPresetId = useCallback((id: number) => - { - const preset = presets[(id - 1)]; - - if(!preset) return; - - setSelectedPresetId(preset.id); - setSelectedEffectId(preset.type); - setSelectedColor(preset.color); - setSelectedBrightness(preset.light); - }, [ presets ]); - - const close = useCallback(() => - { - widgetHandler.processWidgetMessage(new RoomWidgetDimmerPreviewMessage(color, brightness, (effectId === 2))); - - setIsVisible(false); - }, [ widgetHandler, color, brightness, effectId ]); - - const toggleState = useCallback(() => - { - widgetHandler.processWidgetMessage(new RoomWidgetDimmerChangeStateMessage()); - }, [ widgetHandler ]); - - const applyChanges = useCallback(() => - { - if(dimmerState === 0) return; - - const selectedPresetIndex = (selectedPresetId - 1); - - if((selectedPresetId < 1) || (selectedPresetId > presets.length)) return; - - const preset = presets[selectedPresetIndex]; - - if(!preset || ((selectedEffectId === preset.type) && (selectedColor === preset.color) && (selectedBrightness === preset.light))) return; - - setPresets(prevValue => - { - const newValue = [ ...prevValue ]; - - newValue[selectedPresetIndex] = new DimmerFurnitureWidgetPresetItem(preset.id, selectedEffectId, selectedColor, selectedBrightness); - - return newValue; - }); - - widgetHandler.processWidgetMessage(new RoomWidgetDimmerSavePresetMessage(preset.id, selectedEffectId, selectedColor, selectedBrightness, true)); - }, [ widgetHandler, dimmerState, selectedPresetId, presets, selectedEffectId, selectedColor, selectedBrightness ]); - - const scaledBrightness = useCallback((value: number) => - { - return ~~((((value - MIN_BRIGHTNESS) * (100 - 0)) / (MAX_BRIGHTNESS - MIN_BRIGHTNESS)) + 0); - }, []); - - const isFreeColorMode = useMemo(() => GetConfiguration('widget.dimmer.colorwheel', false), []); - - useEffect(() => - { - if((dimmerState === 0) && (lastDimmerState === 0)) return; - - widgetHandler.processWidgetMessage(new RoomWidgetDimmerPreviewMessage(selectedColor, selectedBrightness, (selectedEffectId === 2))); - }, [ widgetHandler, dimmerState, lastDimmerState, selectedColor, selectedBrightness, selectedEffectId ]); - - if(!isVisible) return null; - - return ( - - - { (dimmerState === 1) && - - { presets.map(preset => selectPresetId(preset.id) }>{ LocalizeText(`widget.dimmer.tab.${ preset.id }`) }) } - } - - { (dimmerState === 0) && - - - { LocalizeText('widget.dimmer.info.off') } - - } - { (dimmerState === 1) && - <> - - { LocalizeText('widget.backgroundcolor.hue') } - { isFreeColorMode && - setSelectedColor(ColorUtils.convertFromHex(event.target.value)) } /> } - { !isFreeColorMode && - - { AVAILABLE_COLORS.map((color, index) => - { - return ( - setSelectedColor(color) } style={ { backgroundColor: HTML_COLORS[index] } } /> - ); - }) } - } - - - { LocalizeText('widget.backgroundcolor.lightness') } - setSelectedBrightness(value) } - thumbClassName={ 'thumb percent' } - renderThumb={ (props, state) =>
{ scaledBrightness(state.valueNow) }
} /> -
- - setSelectedEffectId(event.target.checked ? 2 : 1) } /> - { LocalizeText('widget.dimmer.type.checkbox') } - - - - - - } -
-
- ); -} diff --git a/src/components/room/widgets/furniture/external-image/FurnitureExternalImageView.tsx b/src/components/room/widgets/furniture/external-image/FurnitureExternalImageView.tsx deleted file mode 100644 index f7e197cb..00000000 --- a/src/components/room/widgets/furniture/external-image/FurnitureExternalImageView.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { FC, useCallback, useState } from 'react'; -import { IPhotoData, LocalizeText, RoomWidgetUpdateExternalImageEvent } from '../../../../../api'; -import { Flex, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../../../common'; -import { UseEventDispatcherHook } from '../../../../../hooks'; -import { useRoomContext } from '../../../RoomContext'; - -export const FurnitureExternalImageView: FC<{}> = props => -{ - const [ objectId, setObjectId ] = useState(-1); - const [ photoData, setPhotoData ] = useState(null); - const { eventDispatcher = null } = useRoomContext(); - - const close = () => - { - setObjectId(-1); - setPhotoData(null) - } - - const onRoomWidgetUpdateExternalImageEvent = useCallback((event: RoomWidgetUpdateExternalImageEvent) => - { - switch(event.type) - { - case RoomWidgetUpdateExternalImageEvent.UPDATE_EXTERNAL_IMAGE: - setObjectId(event.objectId); - setPhotoData(event.photoData); - return; - } - }, []); - - UseEventDispatcherHook(RoomWidgetUpdateExternalImageEvent.UPDATE_EXTERNAL_IMAGE, eventDispatcher, onRoomWidgetUpdateExternalImageEvent); - - if((objectId === -1) || !photoData) return null; - - return ( - - - - - { !photoData.w && - { LocalizeText('camera.loading') } } - - { photoData.m && photoData.m.length && - { photoData.m } } - - { (photoData.n || '') } - { new Date(photoData.t * 1000).toLocaleDateString() } - - - - ); -} diff --git a/src/components/room/widgets/furniture/friend-furni/FriendFurniLockData.ts b/src/components/room/widgets/furniture/friend-furni/FriendFurniLockData.ts deleted file mode 100644 index da7e349e..00000000 --- a/src/components/room/widgets/furniture/friend-furni/FriendFurniLockData.ts +++ /dev/null @@ -1,11 +0,0 @@ -export class FurnitureEngravingLockData -{ - constructor( - public objectId: number, - public category: number = 0, - public type: number = 0, - public usernames: string[] = [], - public figures: string[] = [], - public date: string = null) - {} -} diff --git a/src/components/room/widgets/furniture/friend-furni/FurnitureFriendFurniView.scss b/src/components/room/widgets/furniture/friend-furni/FurnitureFriendFurniView.scss deleted file mode 100644 index eb6d8987..00000000 --- a/src/components/room/widgets/furniture/friend-furni/FurnitureFriendFurniView.scss +++ /dev/null @@ -1,76 +0,0 @@ -.nitro-engraving-lock { - width: 300px; - - .engraving-lock-stage-1 { - width: 31px; - height: 39px; - background-position: -380px -43px; - background-image: url('../../../../../assets/images/room-widgets/engraving-lock-widget/engraving-lock-spritesheet.png'); - } - - .engraving-lock-stage-2 { - width: 36px; - height: 43px; - background-position: -375px 0px; - background-image: url('../../../../../assets/images/room-widgets/engraving-lock-widget/engraving-lock-spritesheet.png'); - } -} - -.nitro-engraving-lock-view { - width: 375px; - height: 210px; - background-position: 0px 0px; - background-image: url('../../../../../assets/images/room-widgets/engraving-lock-widget/engraving-lock-spritesheet.png'); - - color: #622e54; - font-weight: bold; - font-size: 16px; - text-shadow: 0px 1px white; - - &.engraving-lock-3 { - background-position: 0px -210px; - color: #614110; - } - - &.engraving-lock-4 { - background-position: 0px -420px; - color: #f1dcc8; - text-shadow: 0px 2px rgba(0, 0, 0, .4); - - .engraving-lock-avatar { - margin-bottom: 10px; - } - } - - .engraving-lock-close { - position: absolute; - cursor: pointer; - width: 15px; - height: 15px; - top: 34px; - right: 27px; - } - - .engraving-lock-avatar { - width: 70px; - height: 120px; - - div { - position: absolute; - margin-top: -5px; - } - - &:nth-child(1) { - div { - margin-left: -10px; - } - } - - &:nth-child(2) { - div { - margin-left: -15px; - } - } - } - -} diff --git a/src/components/room/widgets/furniture/friend-furni/FurnitureFriendFurniView.tsx b/src/components/room/widgets/furniture/friend-furni/FurnitureFriendFurniView.tsx deleted file mode 100644 index c476b59d..00000000 --- a/src/components/room/widgets/furniture/friend-furni/FurnitureFriendFurniView.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import { FriendFurniConfirmLockMessageComposer, LoveLockFurniFinishedEvent, LoveLockFurniFriendConfirmedEvent, LoveLockFurniStartEvent, NitroEvent, RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@nitrots/nitro-renderer'; -import { FC, useCallback, useState } from 'react'; -import { GetRoomEngine, GetRoomSession, LocalizeText, RoomWidgetUpdateRoomObjectEvent } from '../../../../../api'; -import { DraggableWindow, LayoutAvatarImageView, NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../../../../common'; -import { UseEventDispatcherHook, UseMessageEventHook, UseRoomEngineEvent } from '../../../../../hooks'; -import { useRoomContext } from '../../../RoomContext'; -import { FurnitureEngravingLockData } from './FriendFurniLockData'; - -export const FurnitureFriendFurniView: FC<{}> = props => -{ - const { eventDispatcher = null, widgetHandler = null } = useRoomContext(); - const [ engravingLockData, setEngravingLockData ] = useState(null); - const [ engravingStage, setEngravingStage ] = useState(0); - - const onNitroEvent = (event: NitroEvent) => - { - switch(event.type) - { - case RoomEngineTriggerWidgetEvent.REQUEST_FRIEND_FURNITURE_ENGRAVING: { - const widgetEvent = (event as RoomEngineTriggerWidgetEvent); - - const roomObject = GetRoomEngine().getRoomObject(widgetEvent.roomId, widgetEvent.objectId, widgetEvent.category); - - if(!roomObject) return; - - const data = roomObject.model.getValue(RoomObjectVariable.FURNITURE_DATA); - const type = roomObject.model.getValue(RoomObjectVariable.FURNITURE_FRIENDFURNI_ENGRAVING); - - if(data[0] === '1') - { - if(data.length !== 6) return; - - setEngravingLockData(new FurnitureEngravingLockData(widgetEvent.objectId, widgetEvent.category, type, [ data[1], data[2] ], [ data[3], data[4] ], data[5])); - setEngravingStage(0); - } - return; - } - case RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED: { - const widgetEvent = (event as RoomWidgetUpdateRoomObjectEvent); - - setEngravingLockData(prevState => - { - if(!prevState || (widgetEvent.id !== prevState.objectId) || (widgetEvent.category !== prevState.category)) return prevState; - - return null; - }); - return; - } - } - }; - - UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_FRIEND_FURNITURE_ENGRAVING, onNitroEvent); - UseEventDispatcherHook(RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED, eventDispatcher, onNitroEvent); - - const onLoveLockFurniStartEvent = useCallback((event: LoveLockFurniStartEvent) => - { - const parser = event.getParser(); - - setEngravingLockData(new FurnitureEngravingLockData(parser.furniId)); - setEngravingStage(parser.start ? 1 : 2); - }, []); - - UseMessageEventHook(LoveLockFurniStartEvent, onLoveLockFurniStartEvent); - - const processAction = useCallback((type: string, value: string = null) => - { - switch(type) - { - case 'close_view': - setEngravingLockData(null); - return; - case 'accept_request': - GetRoomSession().connection.send(new FriendFurniConfirmLockMessageComposer(engravingLockData.objectId, true)); - processAction('close_request'); - return; - case 'reject_request': - GetRoomSession().connection.send(new FriendFurniConfirmLockMessageComposer(engravingLockData.objectId, false)); - processAction('close_request'); - return; - case 'close_request': - setEngravingStage(0); - setEngravingLockData(null); - return; - } - }, [ engravingLockData ]); - - const onLoveLockDoneEvent = useCallback((event: LoveLockFurniFinishedEvent | LoveLockFurniFriendConfirmedEvent) => - { - processAction('close_request'); - }, [ processAction ]); - - UseMessageEventHook(LoveLockFurniFinishedEvent, onLoveLockDoneEvent); - UseMessageEventHook(LoveLockFurniFriendConfirmedEvent, onLoveLockDoneEvent); - - return ( - <> - { (engravingStage > 0) && - processAction('close_request') } /> - -
- { LocalizeText('friend.furniture.confirm.lock.subtitle') } -
-
-
-
- { engravingStage === 2 &&
{ LocalizeText('friend.furniture.confirm.lock.other.locked') }
} -
- - -
-
-
} - { engravingLockData && engravingLockData.usernames.length > 0 && -
-
processAction('close_view') }>
-
-
- -
-
- -
-
-
-
- { engravingLockData.type === 0 && LocalizeText('lovelock.engraving.caption') } - { engravingLockData.type === 3 && LocalizeText('wildwest.engraving.caption') } -
-
{ engravingLockData.date }
-
-
{ engravingLockData.usernames[0] }
-
{ engravingLockData.usernames[1] }
-
-
-
-
} - - ); -} diff --git a/src/components/room/widgets/furniture/gift-opening/FurnitureGiftOpeningView.tsx b/src/components/room/widgets/furniture/gift-opening/FurnitureGiftOpeningView.tsx deleted file mode 100644 index 8d30018d..00000000 --- a/src/components/room/widgets/furniture/gift-opening/FurnitureGiftOpeningView.tsx +++ /dev/null @@ -1,241 +0,0 @@ -import { RoomObjectCategory, RoomObjectOperationType } from '@nitrots/nitro-renderer'; -import { FC, useCallback, useMemo, useState } from 'react'; -import { CreateLinkEvent, GetRoomEngine, GetSessionDataManager, LocalizeText, ProductTypeEnum, RoomWidgetPresentOpenMessage, RoomWidgetUpdatePresentDataEvent, RoomWidgetUpdateRoomObjectEvent } from '../../../../../api'; -import { Button, Column, Flex, LayoutGiftTagView, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../../../common'; -import { UseEventDispatcherHook } from '../../../../../hooks/events/UseEventDispatcherHook'; -import { useRoomContext } from '../../../RoomContext'; - -const FLOOR: string = 'floor'; -const WALLPAPER: string = 'wallpaper'; -const LANDSCAPE: string = 'landscape'; - -const ACTION_GIVE_GIFT = 0; -const ACTION_OPEN = 1; -const ACTION_PLACE = 2; -const ACTION_INVENTORY = 3; - -export const FurnitureGiftOpeningView: FC<{}> = props => -{ - const [ objectId, setObjectId ] = useState(-1); - const [ classId, setClassId ] = useState(-1); - const [ itemType, setItemType ] = useState(null); - const [ text, setText ] = useState(null); - const [ isOwnerOfFurniture, setIsOwnerOfFurniture ] = useState(false); - const [ senderName, setSenderName ] = useState(null); - const [ senderFigure, setSenderFigure ] = useState(null); - const [ placedItemId, setPlacedItemId ] = useState(-1); - const [ placedItemType, setPlacedItemType ] = useState(null); - const [ placedInRoom, setPlacedInRoom ] = useState(false); - const [ imageUrl, setImageUrl ] = useState(null); - const [ openRequested, setOpenRequested ] = useState(false); - const { roomSession = null, eventDispatcher = null, widgetHandler = null } = useRoomContext(); - - const clearGift = useCallback(() => - { - if(!openRequested) setObjectId(-1); - - setText(null); - setIsOwnerOfFurniture(false); - }, [ openRequested ]); - - const getGiftImageUrl = useCallback((name: string) => - { - return ''; - }, []); - - const onRoomWidgetUpdatePresentDataEvent = useCallback((event: RoomWidgetUpdatePresentDataEvent) => - { - switch(event.type) - { - case RoomWidgetUpdatePresentDataEvent.PACKAGEINFO: { - setOpenRequested(false); - setObjectId(event.objectId); - setText(event.giftMessage); - setIsOwnerOfFurniture(event.isController); - setSenderName(event.purchaserName); - setSenderFigure(event.purchaserFigure); - setImageUrl(event.imageUrl); - return; - } - case RoomWidgetUpdatePresentDataEvent.CONTENTS_FLOOR: - case RoomWidgetUpdatePresentDataEvent.CONTENTS_LANDSCAPE: - case RoomWidgetUpdatePresentDataEvent.CONTENTS_WALLPAPER: { - let imageType: string = null; - - if(event.type === RoomWidgetUpdatePresentDataEvent.CONTENTS_FLOOR) imageType = 'packagecard_icon_floor'; - else if(event.type === RoomWidgetUpdatePresentDataEvent.CONTENTS_LANDSCAPE) imageType = 'packagecard_icon_landscape'; - else if(event.type === RoomWidgetUpdatePresentDataEvent.CONTENTS_WALLPAPER) imageType = 'packagecard_icon_wallpaper'; - - setObjectId(event.objectId); - setClassId(event.classId); - setItemType(event.itemType); - setText(event.giftMessage); - setIsOwnerOfFurniture(event.isController); - setPlacedItemId(event.placedItemId); - setPlacedItemType(event.placedItemType); - setPlacedInRoom(event.placedInRoom); - setImageUrl(getGiftImageUrl(imageType)); - return; - } - case RoomWidgetUpdatePresentDataEvent.CONTENTS_CLUB: { - setObjectId(event.objectId); - setClassId(event.classId); - setItemType(event.itemType); - setText(event.giftMessage); - setIsOwnerOfFurniture(event.isController); - setImageUrl(getGiftImageUrl('packagecard_icon_hc')); - return; - } - case RoomWidgetUpdatePresentDataEvent.CONTENTS: { - if(!openRequested) return; - - setObjectId(event.objectId); - setClassId(event.classId); - setItemType(event.itemType); - setText(event.giftMessage); - setIsOwnerOfFurniture(event.isController); - setPlacedItemId(event.placedItemId); - setPlacedItemType(event.placedItemType); - setPlacedInRoom(event.placedInRoom); - setImageUrl(event.imageUrl); - return; - } - case RoomWidgetUpdatePresentDataEvent.CONTENTS_IMAGE: { - if(!openRequested) return; - - setImageUrl(event.imageUrl); - } - } - }, [ openRequested, getGiftImageUrl ]); - - UseEventDispatcherHook(RoomWidgetUpdatePresentDataEvent.PACKAGEINFO, eventDispatcher, onRoomWidgetUpdatePresentDataEvent); - UseEventDispatcherHook(RoomWidgetUpdatePresentDataEvent.CONTENTS, eventDispatcher, onRoomWidgetUpdatePresentDataEvent); - UseEventDispatcherHook(RoomWidgetUpdatePresentDataEvent.CONTENTS_FLOOR, eventDispatcher, onRoomWidgetUpdatePresentDataEvent); - UseEventDispatcherHook(RoomWidgetUpdatePresentDataEvent.CONTENTS_LANDSCAPE, eventDispatcher, onRoomWidgetUpdatePresentDataEvent); - UseEventDispatcherHook(RoomWidgetUpdatePresentDataEvent.CONTENTS_WALLPAPER, eventDispatcher, onRoomWidgetUpdatePresentDataEvent); - UseEventDispatcherHook(RoomWidgetUpdatePresentDataEvent.CONTENTS_CLUB, eventDispatcher, onRoomWidgetUpdatePresentDataEvent); - UseEventDispatcherHook(RoomWidgetUpdatePresentDataEvent.CONTENTS_IMAGE, eventDispatcher, onRoomWidgetUpdatePresentDataEvent); - - const onRoomWidgetRoomObjectUpdateEvent = useCallback((event: RoomWidgetUpdateRoomObjectEvent) => - { - if(event.id === objectId) clearGift(); - - if(event.id === placedItemId) - { - if(placedInRoom) setPlacedInRoom(false); - } - }, [ objectId, placedItemId, placedInRoom, clearGift ]); - - UseEventDispatcherHook(RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED, eventDispatcher, onRoomWidgetRoomObjectUpdateEvent); - - const close = useCallback(() => - { - setObjectId(-1); - setOpenRequested(false); - setPlacedItemId(-1); - setPlacedInRoom(false); - setText(null); - setIsOwnerOfFurniture(false); - }, []); - - const isSpaces = useMemo(() => - { - if(itemType !== ProductTypeEnum.WALL) return false; - - const furniData = GetSessionDataManager().getWallItemData(classId); - - if(!furniData) return false; - - const className = furniData.className; - - return (className === FLOOR || className === LANDSCAPE || className === WALLPAPER); - }, [ classId, itemType ]); - - const productName = useMemo(() => - { - if(objectId === -1) return ''; - - if(isSpaces) return 'widget.furni.present.spaces.message_opened'; - - return 'widget.furni.present.message_opened'; - }, [ objectId, isSpaces ]); - - const handleAction = useCallback((action: number) => - { - switch(action) - { - case ACTION_GIVE_GIFT: - CreateLinkEvent('catalog/open'); - return; - case ACTION_OPEN: - setOpenRequested(true); - widgetHandler.processWidgetMessage(new RoomWidgetPresentOpenMessage(RoomWidgetPresentOpenMessage.OPEN_PRESENT, objectId)); - return; - case ACTION_PLACE: - return; - case ACTION_INVENTORY: - if((placedItemId > 0) && placedInRoom) - { - if(placedItemType === ProductTypeEnum.PET) - { - roomSession.pickupPet(placedItemId); - } - else - { - const roomObject = GetRoomEngine().getRoomObject(roomSession.roomId, placedItemId, RoomObjectCategory.FLOOR); - - if(roomObject) GetRoomEngine().processRoomObjectOperation(roomObject.id, RoomObjectCategory.FLOOR, RoomObjectOperationType.OBJECT_PICKUP); - } - } - - close(); - return; - } - }, [ roomSession, widgetHandler, objectId, placedInRoom, placedItemId, placedItemType, close ]); - - if(objectId === -1) return null; - - return ( - - - - { (placedItemId === -1) && - - - - - - { senderName && - } - - - } - { (placedItemId > -1) && - - - - { LocalizeText(productName, [ 'product' ], [ text ]) } - - - - - - - { (senderName && senderName.length) && - } - - } - - - ); -} diff --git a/src/components/room/widgets/furniture/high-score/FurnitureHighScoreView.scss b/src/components/room/widgets/furniture/high-score/FurnitureHighScoreView.scss deleted file mode 100644 index a02f8b69..00000000 --- a/src/components/room/widgets/furniture/high-score/FurnitureHighScoreView.scss +++ /dev/null @@ -1,6 +0,0 @@ -.nitro-widget-high-score -{ - width: 250px; - max-width: 250px; - height: 200px; -} diff --git a/src/components/room/widgets/furniture/high-score/FurnitureHighScoreView.tsx b/src/components/room/widgets/furniture/high-score/FurnitureHighScoreView.tsx deleted file mode 100644 index 77c70570..00000000 --- a/src/components/room/widgets/furniture/high-score/FurnitureHighScoreView.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import { HighScoreDataType, ObjectDataFactory, RoomEngineTriggerWidgetEvent, RoomObjectCategory, RoomObjectVariable } from '@nitrots/nitro-renderer'; -import { FC, useCallback, useState } from 'react'; -import { GetRoomEngine, LocalizeText } from '../../../../../api'; -import { Column, Flex, Text } from '../../../../../common'; -import { UseRoomEngineEvent } from '../../../../../hooks'; -import { useRoomContext } from '../../../RoomContext'; -import { ContextMenuHeaderView } from '../../context-menu/ContextMenuHeaderView'; -import { ContextMenuListView } from '../../context-menu/ContextMenuListView'; -import { ObjectLocationView } from '../../object-location/ObjectLocationView'; - -const SCORE_TYPES = [ 'perteam', 'mostwins', 'classic' ]; -const CLEAR_TYPES = [ 'alltime', 'daily', 'weekly', 'monthly' ]; - -export const FurnitureHighScoreView: FC<{}> = props => -{ - const [ stuffDatas, setStuffDatas ] = useState>(new Map()); - const { roomSession = null } = useRoomContext(); - - const onRoomEngineTriggerWidgetEvent = useCallback((event: RoomEngineTriggerWidgetEvent) => - { - switch(event.type) - { - case RoomEngineTriggerWidgetEvent.REQUEST_HIGH_SCORE_DISPLAY: { - const object = GetRoomEngine().getRoomObject(roomSession.roomId, event.objectId, event.category); - - if(!object) return; - - const formatKey = object.model.getValue(RoomObjectVariable.FURNITURE_DATA_FORMAT); - const stuffData = (ObjectDataFactory.getData(formatKey) as HighScoreDataType); - - stuffData.initializeFromRoomObjectModel(object.model); - - setStuffDatas(prevValue => - { - const newValue = new Map(prevValue); - - newValue.set(object.id, stuffData); - - return newValue; - }); - return; - } - case RoomEngineTriggerWidgetEvent.REQUEST_HIDE_HIGH_SCORE_DISPLAY: - if(event.roomId !== roomSession.roomId) return; - - setStuffDatas(prevValue => - { - const newValue = new Map(prevValue); - - newValue.delete(event.objectId); - - return newValue; - }); - return; - } - }, [ roomSession ]); - - UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_HIGH_SCORE_DISPLAY, onRoomEngineTriggerWidgetEvent); - UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_HIDE_HIGH_SCORE_DISPLAY, onRoomEngineTriggerWidgetEvent); - - if(!stuffDatas.size) return null; - - return ( - <> - { Array.from(stuffDatas.entries()).map(([ objectId, stuffData ], index) => - { - return ( - - - - { LocalizeText('high.score.display.caption', [ 'scoretype', 'cleartype' ], [ LocalizeText(`high.score.display.scoretype.${ SCORE_TYPES[stuffData.scoreType] }`), LocalizeText(`high.score.display.cleartype.${ CLEAR_TYPES[stuffData.clearType] }`) ]) } - - - - - - { LocalizeText('high.score.display.users.header') } - - - { LocalizeText('high.score.display.score.header') } - - -
-
- - { stuffData.entries.map((entry, index) => - { - return ( - - - { entry.users.join(', ') } - - - { entry.score } - - - ); - }) } - -
-
-
- ); - }) } - - ); -} diff --git a/src/components/room/widgets/furniture/manipulation-menu/FurnitureManipulationMenuView.scss b/src/components/room/widgets/furniture/manipulation-menu/FurnitureManipulationMenuView.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/src/components/room/widgets/furniture/manipulation-menu/FurnitureManipulationMenuView.tsx b/src/components/room/widgets/furniture/manipulation-menu/FurnitureManipulationMenuView.tsx deleted file mode 100644 index 7d7777e7..00000000 --- a/src/components/room/widgets/furniture/manipulation-menu/FurnitureManipulationMenuView.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { RoomObjectOperationType } from '@nitrots/nitro-renderer'; -import { FC, useCallback, useEffect, useState } from 'react'; -import { ProcessRoomObjectOperation, RoomWidgetUpdateDecorateModeEvent, RoomWidgetUpdateRoomObjectEvent } from '../../../../../api'; -import { UseEventDispatcherHook } from '../../../../../hooks'; -import { useRoomContext } from '../../../RoomContext'; -import { ObjectLocationView } from '../../object-location/ObjectLocationView'; - -export const FurnitureManipulationMenuView: FC<{}> = props => -{ - const [ isVisible, setIsVisible ] = useState(false); - const [ objectId, setObjectId ] = useState(-1); - const [ objectType, setObjectType ] = useState(-1); - const { roomSession = null, eventDispatcher = null, widgetHandler = null } = useRoomContext(); - - const rotateFurniture = useCallback(() => - { - ProcessRoomObjectOperation(objectId, objectType, RoomObjectOperationType.OBJECT_ROTATE_POSITIVE); - }, [ objectId, objectType ]); - - const moveFurniture = useCallback(() => - { - ProcessRoomObjectOperation(objectId, objectType, RoomObjectOperationType.OBJECT_MOVE); - }, [ objectId, objectType ]); - - const pickupFurniture = useCallback(() => - { - ProcessRoomObjectOperation(objectId, objectType, RoomObjectOperationType.OBJECT_PICKUP); - }, [ objectId, objectType ]); - - const onRoomWidgetRoomObjectUpdateEvent = useCallback((event: RoomWidgetUpdateRoomObjectEvent) => - { - switch(event.type) - { - case RoomWidgetUpdateRoomObjectEvent.OBJECT_REQUEST_MANIPULATION: { - setIsVisible(true); - setObjectId(event.id); - setObjectType(event.category); - return; - } - case RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED: { - if(event.id === objectId) - { - setIsVisible(false); - setObjectId(-1); - setObjectType(-1); - } - return; - } - case RoomWidgetUpdateRoomObjectEvent.OBJECT_DESELECTED: { - setIsVisible(false); - setObjectId(-1); - setObjectType(-1); - return; - } - } - }, [ objectId ]); - - UseEventDispatcherHook(RoomWidgetUpdateRoomObjectEvent.OBJECT_REQUEST_MANIPULATION, eventDispatcher, onRoomWidgetRoomObjectUpdateEvent); - UseEventDispatcherHook(RoomWidgetUpdateRoomObjectEvent.OBJECT_DESELECTED, eventDispatcher, onRoomWidgetRoomObjectUpdateEvent); - - const onRoomWidgetUpdateDecorateModeEvent = useCallback((event: RoomWidgetUpdateDecorateModeEvent) => - { - if(event.isDecorating) return; - - moveFurniture(); - - setIsVisible(false); - setObjectId(-1); - setObjectType(-1); - }, [ moveFurniture ]); - - UseEventDispatcherHook(RoomWidgetUpdateDecorateModeEvent.UPDATE_DECORATE, eventDispatcher, onRoomWidgetUpdateDecorateModeEvent); - - useEffect(() => - { - if(!isVisible) - { - eventDispatcher.dispatchEvent(new RoomWidgetUpdateDecorateModeEvent(false)); - - return; - } - - eventDispatcher.dispatchEvent(new RoomWidgetUpdateDecorateModeEvent(true)); - - moveFurniture(); - }, [ eventDispatcher, isVisible, moveFurniture ]); - - if(!isVisible) return null; - - return ( - -
- - -
-
- ); -} diff --git a/src/components/room/widgets/furniture/mannequin/FurnitureMannequinData.ts b/src/components/room/widgets/furniture/mannequin/FurnitureMannequinData.ts deleted file mode 100644 index 1cf1160d..00000000 --- a/src/components/room/widgets/furniture/mannequin/FurnitureMannequinData.ts +++ /dev/null @@ -1,12 +0,0 @@ -export class FurnitureMannequinData -{ - constructor( - public objectId: number, - public category: number, - public name: string, - public figure: string, - public gender: string, - public clubLevel: number, - public renderedFigure: string = null) - {} -} diff --git a/src/components/room/widgets/furniture/mannequin/FurnitureMannequinPreviewView.tsx b/src/components/room/widgets/furniture/mannequin/FurnitureMannequinPreviewView.tsx deleted file mode 100644 index 4b5732db..00000000 --- a/src/components/room/widgets/furniture/mannequin/FurnitureMannequinPreviewView.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { FC } from 'react'; -import { Base, LayoutAvatarImageView, LayoutCurrencyIcon } from '../../../../../common'; - -interface FurnitureMannequinPreviewViewProps -{ - figure: string; - clubLevel: number; -} - -export const FurnitureMannequinPreviewView: FC = props => -{ - const { figure = null, clubLevel = 0 } = props; - - return ( - - - { (clubLevel > 0) && - } - - ); -} diff --git a/src/components/room/widgets/furniture/mannequin/FurnitureMannequinView.tsx b/src/components/room/widgets/furniture/mannequin/FurnitureMannequinView.tsx deleted file mode 100644 index fa7f32e7..00000000 --- a/src/components/room/widgets/furniture/mannequin/FurnitureMannequinView.tsx +++ /dev/null @@ -1,221 +0,0 @@ -import { AvatarFigurePartType, FurnitureMannequinSaveLookComposer, FurnitureMannequinSaveNameComposer, FurnitureMultiStateComposer, HabboClubLevelEnum, IAvatarFigureContainer, RoomControllerLevel } from '@nitrots/nitro-renderer'; -import { FC, KeyboardEvent, useCallback, useEffect, useState } from 'react'; -import { GetAvatarRenderManager, GetClubMemberLevel, GetSessionDataManager, LocalizeText, RoomWidgetUpdateMannequinEvent, SendMessageComposer } from '../../../../../api'; -import { Base, Button, Column, Flex, LayoutAvatarImageView, LayoutCurrencyIcon, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../../../common'; -import { UseEventDispatcherHook } from '../../../../../hooks'; -import { useRoomContext } from '../../../RoomContext'; - -const MODE_NONE: number = -1; -const MODE_CONTROLLER: number = 0; -const MODE_UPDATE: number = 1; -const MODE_PEER: number = 2; -const MODE_NO_CLUB: number = 3; -const MODE_WRONG_GENDER: number = 4; - -const ACTION_SET_NAME: number = 1; -const ACTION_WEAR: number = 2; -const ACTION_SAVE: number = 3; - -const MANNEQUIN_FIGURE = [ 'hd', 99999, [ 99998 ] ]; -const MANNEQUIN_CLOTHING_PART_TYPES = [ - AvatarFigurePartType.CHEST_ACCESSORY, - AvatarFigurePartType.COAT_CHEST, - AvatarFigurePartType.CHEST, - AvatarFigurePartType.LEGS, - AvatarFigurePartType.SHOES, - AvatarFigurePartType.WAIST_ACCESSORY -]; - -export const FurnitureMannequinView: FC<{}> = props => -{ - const [ objectId, setObjectId ] = useState(-1); - const [ figure, setFigure ] = useState(null); - const [ gender, setGender ] = useState(null); - const [ name, setName ] = useState(null); - const [ clubLevel, setClubLevel ] = useState(HabboClubLevelEnum.NO_CLUB); - const [ renderedFigure, setRenderedFigure ] = useState(null); - const [ renderedClubLevel, setRenderedClubLevel ] = useState(HabboClubLevelEnum.NO_CLUB); - const [ mode, setMode ] = useState(MODE_NONE); - const { roomSession = null, eventDispatcher = null } = useRoomContext(); - - const onRoomWidgetUpdateMannequinEvent = useCallback((event: RoomWidgetUpdateMannequinEvent) => - { - const figureContainer = GetAvatarRenderManager().createFigureContainer(event.figure); - const figureClubLevel = GetAvatarRenderManager().getFigureClubLevel(figureContainer, event.gender, MANNEQUIN_CLOTHING_PART_TYPES); - - setObjectId(event.objectId); - setFigure(event.figure); - setGender(event.gender); - setName(event.name); - setClubLevel(figureClubLevel); - - if(roomSession.isRoomOwner || (roomSession.controllerLevel >= RoomControllerLevel.GUEST) || GetSessionDataManager().isModerator) - { - setMode(MODE_CONTROLLER); - } - - else if(GetSessionDataManager().gender.toLowerCase() !== event.gender.toLowerCase()) - { - setMode(MODE_WRONG_GENDER); - } - - else if(GetClubMemberLevel() < figureClubLevel) - { - setMode(MODE_NO_CLUB); - } - else - { - setMode(MODE_PEER); - } - }, [ roomSession ]); - - UseEventDispatcherHook(RoomWidgetUpdateMannequinEvent.MANNEQUIN_UPDATE, eventDispatcher, onRoomWidgetUpdateMannequinEvent); - - const getMergedFigureContainer = (figure: string, targetFigure: string) => - { - const figureContainer = GetAvatarRenderManager().createFigureContainer(figure); - const targetFigureContainer = GetAvatarRenderManager().createFigureContainer(targetFigure); - - for(const part of MANNEQUIN_CLOTHING_PART_TYPES) figureContainer.removePart(part); - - for(const part of targetFigureContainer.getPartTypeIds()) - { - figureContainer.updatePart(part, targetFigureContainer.getPartSetId(part), targetFigureContainer.getPartColorIds(part)); - } - - return figureContainer; - } - - const transformAsMannequinFigure = (figureContainer: IAvatarFigureContainer) => - { - for(const part of figureContainer.getPartTypeIds()) - { - if(MANNEQUIN_CLOTHING_PART_TYPES.indexOf(part) >= 0) continue; - - figureContainer.removePart(part); - } - - figureContainer.updatePart((MANNEQUIN_FIGURE[0] as string), (MANNEQUIN_FIGURE[1] as number), (MANNEQUIN_FIGURE[2] as number[])); - }; - - const processAction = useCallback((action: number, value: string = null) => - { - switch(action) - { - case ACTION_SAVE: - SendMessageComposer(new FurnitureMannequinSaveLookComposer(objectId)); - break; - case ACTION_WEAR: - SendMessageComposer(new FurnitureMultiStateComposer(objectId)); - break; - case ACTION_SET_NAME: - SendMessageComposer(new FurnitureMannequinSaveNameComposer(objectId, name)); - return; - } - - setMode(MODE_NONE); - }, [ objectId, name ]); - - const handleKeyDown = (event: KeyboardEvent) => - { - if(event.key !== 'Enter') return; - - processAction(ACTION_SET_NAME); - }; - - useEffect(() => - { - switch(mode) - { - case MODE_CONTROLLER: - case MODE_WRONG_GENDER: { - const figureContainer = GetAvatarRenderManager().createFigureContainer(figure); - - transformAsMannequinFigure(figureContainer); - - setRenderedFigure(figureContainer.getFigureString()); - setRenderedClubLevel(clubLevel); - break; - } - case MODE_UPDATE: { - const figureContainer = GetAvatarRenderManager().createFigureContainer(GetSessionDataManager().figure); - - transformAsMannequinFigure(figureContainer); - - setRenderedFigure(figureContainer.getFigureString()); - setRenderedClubLevel(GetAvatarRenderManager().getFigureClubLevel(figureContainer, GetSessionDataManager().gender, MANNEQUIN_CLOTHING_PART_TYPES)); - break; - } - case MODE_PEER: - case MODE_NO_CLUB: { - const figureContainer = getMergedFigureContainer(GetSessionDataManager().figure, figure); - - setRenderedFigure(figureContainer.getFigureString()); - setRenderedClubLevel(clubLevel); - break; - } - } - }, [ mode, figure, clubLevel ]); - - if(mode === MODE_NONE) return null; - - return ( - - setMode(MODE_NONE) } /> - - - - - - { (clubLevel > 0) && - } - - - - { (mode === MODE_CONTROLLER) && - <> - setName(event.target.value) } onKeyDown={ event => handleKeyDown(event) } /> - - - - - } - { (mode === MODE_UPDATE) && - <> - - { name } - { LocalizeText('mannequin.widget.savetext') } - - - setMode(MODE_CONTROLLER) }> - { LocalizeText('mannequin.widget.back') } - - - - } - { (mode === MODE_PEER) && - <> - - { name } - { LocalizeText('mannequin.widget.weartext') } - - - } - { (mode === MODE_NO_CLUB) && - { LocalizeText('mannequin.widget.clubnotification') } } - { (mode === MODE_WRONG_GENDER) && - { LocalizeText('mannequin.widget.wronggender') } } - - - - - ); -} diff --git a/src/components/room/widgets/furniture/stickie/FurnitureStickieData.ts b/src/components/room/widgets/furniture/stickie/FurnitureStickieData.ts deleted file mode 100644 index 7ab1b184..00000000 --- a/src/components/room/widgets/furniture/stickie/FurnitureStickieData.ts +++ /dev/null @@ -1,11 +0,0 @@ -export class FurnitureStickieData -{ - constructor( - public objectId: number, - public category: number, - public color: string, - public text: string, - public canModify: boolean = false, - public isEditing: boolean = false) - {} -} diff --git a/src/components/room/widgets/furniture/stickie/FurnitureStickieUtils.ts b/src/components/room/widgets/furniture/stickie/FurnitureStickieUtils.ts deleted file mode 100644 index 2894294d..00000000 --- a/src/components/room/widgets/furniture/stickie/FurnitureStickieUtils.ts +++ /dev/null @@ -1,11 +0,0 @@ -export const STICKIE_COLORS = [ '9CCEFF','FF9CFF', '9CFF9C','FFFF33' ]; -export const STICKIE_COLOR_NAMES = [ 'blue', 'pink', 'green', 'yellow' ]; - -export function getStickieColorName(color: string): string -{ - let index = STICKIE_COLORS.indexOf(color); - - if(index === -1) index = 0; - - return STICKIE_COLOR_NAMES[index]; -} diff --git a/src/components/room/widgets/furniture/stickie/FurnitureStickieView.scss b/src/components/room/widgets/furniture/stickie/FurnitureStickieView.scss deleted file mode 100644 index 95c8aecd..00000000 --- a/src/components/room/widgets/furniture/stickie/FurnitureStickieView.scss +++ /dev/null @@ -1,99 +0,0 @@ -.nitro-stickie { - position: relative; - width: 185px; - height: 178px; - top: 25px; - left: 25px; - padding: 1px; - pointer-events: all; - - .stickie-header { - width: 183px; - height: 18px; - padding: 0 7px; - - .header-trash, - .header-close { - cursor: pointer; - } - - .stickie-color { - width: 10px; - height: 10px; - cursor: pointer; - } - } - - .stickie-context { - width: 183px; - height: 145px; - padding: 2px 7px; - font-size: 12px; - color: $black; - - .context-text { - width: 100%; - height: 100%; - padding: 0; - overflow-wrap: break-word; - white-space: break-spaces; - overflow-y: auto; - } - - textarea { - background: transparent; - border: 0; - outline: none; - box-shadow: none; - resize: none; - font-style: italic; - - &:active { - border: 0; - outline: none; - box-shadow: none; - } - } - } -} - -.nitro-stickie-image { - background-image: url('../../../../../assets/images/room-widgets/stickie-widget/stickie-spritesheet.png'); - - &.stickie-blue, - &.stickie-yellow, - &.stickie-green, - &.stickie-pink { - width: 185px; - height: 178px; - } - - &.stickie-blue { - background-position: -2px -2px; - } - - &.stickie-yellow { - background-image: url('../../../../../assets/images/room-widgets/stickie-widget/stickie-yellow.png'); - //background-position: -191px -184px; - } - - &.stickie-green { - background-position: -191px -2px; - } - - &.stickie-pink { - background-position: -2px -184px; - } - - &.stickie-close { - width: 10px; - height: 10px; - background-position: -2px -366px; - } - - &.stickie-trash { - width: 9px; - height: 10px; - background-position: -16px -366px; - } -} diff --git a/src/components/room/widgets/furniture/stickie/FurnitureStickieView.tsx b/src/components/room/widgets/furniture/stickie/FurnitureStickieView.tsx deleted file mode 100644 index 6e28f260..00000000 --- a/src/components/room/widgets/furniture/stickie/FurnitureStickieView.tsx +++ /dev/null @@ -1,135 +0,0 @@ -import { NitroEvent, RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@nitrots/nitro-renderer'; -import { FC, useCallback, useState } from 'react'; -import { ColorUtils, GetRoomEngine, GetRoomSession, GetSessionDataManager, RoomWidgetUpdateRoomObjectEvent } from '../../../../../api'; -import { DraggableWindow, DraggableWindowPosition } from '../../../../../common'; -import { UseEventDispatcherHook, UseRoomEngineEvent } from '../../../../../hooks'; -import { useRoomContext } from '../../../RoomContext'; -import { FurnitureStickieData } from './FurnitureStickieData'; -import { getStickieColorName, STICKIE_COLORS } from './FurnitureStickieUtils'; - -export const FurnitureStickieView: FC<{}> = props => -{ - const { eventDispatcher = null, widgetHandler = null } = useRoomContext(); - const [ stickieData, setStickieData ] = useState(null); - - const onNitroEvent = useCallback((event: NitroEvent) => - { - switch(event.type) - { - case RoomEngineTriggerWidgetEvent.REQUEST_STICKIE: { - const widgetEvent = (event as RoomEngineTriggerWidgetEvent); - - const roomObject = GetRoomEngine().getRoomObject(widgetEvent.roomId, widgetEvent.objectId, widgetEvent.category); - - if(!roomObject) return; - - const data = roomObject.model.getValue(RoomObjectVariable.FURNITURE_ITEMDATA); - - if(data.length < 6) return; - - let color: string = null; - let text: string = null; - - if(data.indexOf(' ') > 0) - { - color = data.slice(0, data.indexOf(' ')); - text = data.slice((data.indexOf(' ') + 1), data.length); - } - else - { - color = data; - } - - setStickieData(new FurnitureStickieData(widgetEvent.objectId, widgetEvent.category, color, text, (GetRoomSession().isRoomOwner || GetSessionDataManager().isModerator), false)); - return; - } - case RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED: { - const widgetEvent = (event as RoomWidgetUpdateRoomObjectEvent); - - setStickieData(prevState => - { - if(!prevState || (widgetEvent.id !== prevState.objectId) || (widgetEvent.category !== prevState.category)) return prevState; - - return null; - }); - return; - } - } - }, []); - - UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_STICKIE, onNitroEvent); - UseEventDispatcherHook(RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED, eventDispatcher, onNitroEvent); - - const processAction = useCallback((type: string, value: string = null) => - { - switch(type) - { - case 'close': - setStickieData(null); - return; - case 'trash': - setStickieData(prevState => - { - if(!prevState) return null; - - GetRoomEngine().deleteRoomObject(prevState.objectId, prevState.category); - - return null; - }); - return; - case 'changeColor': - setStickieData(prevState => - { - const newStickieData = new FurnitureStickieData(prevState.objectId, prevState.category, value, prevState.text, prevState.canModify); - - GetRoomEngine().modifyRoomObjectData(newStickieData.objectId, newStickieData.category, newStickieData.color, newStickieData.text); - - return newStickieData; - }); - return; - case 'changeText': - setStickieData(prevState => - { - const newStickieData = new FurnitureStickieData(prevState.objectId, prevState.category, prevState.color, value, prevState.canModify); - - GetRoomEngine().modifyRoomObjectData(newStickieData.objectId, newStickieData.category, newStickieData.color, newStickieData.text); - - return newStickieData; - }); - return; - case 'editMode': - setStickieData(prevValue => - { - if(!prevValue.canModify) return prevValue; - - return new FurnitureStickieData(prevValue.objectId, prevValue.category, prevValue.color, prevValue.text, prevValue.canModify, true); - }); - return; - } - }, []); - - if(!stickieData) return null; - - return ( - -
-
-
- { stickieData.canModify && - <> -
processAction('trash') }>
- { STICKIE_COLORS.map(color => - { - return
processAction('changeColor', color) } style={ { backgroundColor: ColorUtils.makeColorHex(color) } } /> - }) } - } -
-
processAction('close') }>
-
-
- { !stickieData.isEditing ?
processAction('editMode') }>{ stickieData.text }
: } -
-
- - ); -} diff --git a/src/components/room/widgets/furniture/trophy/FurnitureTrophyData.ts b/src/components/room/widgets/furniture/trophy/FurnitureTrophyData.ts deleted file mode 100644 index 66b50e61..00000000 --- a/src/components/room/widgets/furniture/trophy/FurnitureTrophyData.ts +++ /dev/null @@ -1,12 +0,0 @@ -export class FurnitureTrophyData -{ - constructor( - public objectId: number, - public category: number, - public color: string, - public ownerName: string, - public date: string, - public message: string, - public customTitle?: string) - {} -} diff --git a/src/components/room/widgets/furniture/trophy/FurnitureTrophyView.tsx b/src/components/room/widgets/furniture/trophy/FurnitureTrophyView.tsx deleted file mode 100644 index 721061df..00000000 --- a/src/components/room/widgets/furniture/trophy/FurnitureTrophyView.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import { NitroEvent, RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@nitrots/nitro-renderer'; -import { FC, useCallback, useState } from 'react'; -import { GetRoomEngine, RoomWidgetUpdateRoomObjectEvent } from '../../../../../api'; -import { LayoutTrophyView } from '../../../../../common'; -import { UseEventDispatcherHook, UseRoomEngineEvent } from '../../../../../hooks'; -import { useRoomContext } from '../../../RoomContext'; -import { FurnitureTrophyData } from './FurnitureTrophyData'; - -export const FurnitureTrophyView: FC<{}> = props => -{ - - const { eventDispatcher = null, widgetHandler = null } = useRoomContext(); - const [ trophyData, setTrophyData ] = useState(null); - - const onNitroEvent = useCallback((event: NitroEvent) => - { - switch(event.type) - { - case RoomEngineTriggerWidgetEvent.REQUEST_TROPHY: { - const widgetEvent = (event as RoomEngineTriggerWidgetEvent); - - const roomObject = GetRoomEngine().getRoomObject(widgetEvent.roomId, widgetEvent.objectId, widgetEvent.category); - - if(!roomObject) return; - - let data = roomObject.model.getValue(RoomObjectVariable.FURNITURE_DATA); - let extra = roomObject.model.getValue(RoomObjectVariable.FURNITURE_EXTRAS); - - if(!extra) extra = '0'; - - const color = roomObject.model.getValue(RoomObjectVariable.FURNITURE_COLOR); - const ownerName = data.substring(0, data.indexOf('\t')); - - data = data.substring((ownerName.length + 1), data.length); - - const trophyDate = data.substring(0, data.indexOf('\t')); - const trophyText = data.substr((trophyDate.length + 1), data.length); - - setTrophyData(new FurnitureTrophyData(widgetEvent.objectId, widgetEvent.category, color, ownerName, trophyDate, trophyText)); - return; - } - case RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED: { - const widgetEvent = (event as RoomWidgetUpdateRoomObjectEvent); - - setTrophyData(prevState => - { - if(!prevState || (widgetEvent.id !== prevState.objectId) || (widgetEvent.category !== prevState.category)) return prevState; - - return null; - }); - return; - } - } - }, []); - - UseRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_TROPHY, onNitroEvent); - UseEventDispatcherHook(RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED, widgetHandler.eventDispatcher, onNitroEvent); - - const processAction = useCallback((type: string, value: string = null) => - { - switch(type) - { - case 'close': - setTrophyData(null); - return; - } - }, []); - - if(!trophyData) return null; - - return processAction('close') } />; -} diff --git a/src/components/room/widgets/furniture/youtube-tv/FurnitureYoutubeDisplayView.scss b/src/components/room/widgets/furniture/youtube-tv/FurnitureYoutubeDisplayView.scss deleted file mode 100644 index c782b781..00000000 --- a/src/components/room/widgets/furniture/youtube-tv/FurnitureYoutubeDisplayView.scss +++ /dev/null @@ -1,54 +0,0 @@ -.youtube-tv-widget { - width: 600px; - height: 380px; - - .youtube-video-container { - //min-height: 366px; - - .empty-video { - background-color: black; - color: white; - width: 100%; - height: 100%; - text-align: center; - } - - .youtubeContainer { - position: relative; - width: 100%; - height: 100%; - //height: 0; - //padding-bottom: 56.25%; - overflow: hidden; - margin-bottom: 50px; - } - - .youtubeContainer iframe { - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - } - } - - .playlist-container { - overflow-y: hidden; - margin-right: -10px; - color: black; - height: 100%; - - .playlist-controls { - width: 100%; - .icon { - margin-right: 10px; - margin-bottom: 10px; - } - } - - .playlist-grid { - height: 100%; - width: 100%; - } - } -} diff --git a/src/components/room/widgets/furniture/youtube-tv/FurnitureYoutubeDisplayView.tsx b/src/components/room/widgets/furniture/youtube-tv/FurnitureYoutubeDisplayView.tsx deleted file mode 100644 index 2a005287..00000000 --- a/src/components/room/widgets/furniture/youtube-tv/FurnitureYoutubeDisplayView.tsx +++ /dev/null @@ -1,239 +0,0 @@ -import { ControlYoutubeDisplayPlaybackMessageComposer, SetYoutubeDisplayPlaylistMessageComposer, YoutubeControlVideoMessageEvent, YoutubeDisplayPlaylist, YoutubeDisplayPlaylistsEvent, YoutubeDisplayVideoMessageEvent } from '@nitrots/nitro-renderer'; -import { FC, useCallback, useMemo, useState } from 'react'; -import YouTube, { Options } from 'react-youtube'; -import { FurnitureYoutubeDisplayWidgetHandler, LocalizeText, RoomWidgetUpdateYoutubeDisplayEvent, SendMessageComposer } from '../../../../../api'; -import { Grid, LayoutGridItem, NitroCardContentView, NitroCardHeaderView, NitroCardView } from '../../../../../common'; -import { UseEventDispatcherHook, UseMessageEventHook } from '../../../../../hooks'; -import { useRoomContext } from '../../../RoomContext'; -import { YoutubeVideoPlaybackStateEnum } from './utils/YoutubeVideoPlaybackStateEnum'; - -export const FurnitureYoutubeDisplayView: FC<{}> = props => -{ - const [ objectId, setObjectId ] = useState(-1); - const [ videoId, setVideoId ] = useState(null); - const [ videoStart, setVideoStart ] = useState(null); - const [ videoEnd, setVideoEnd ] = useState(null); - const [ currentVideoState, setCurrentVideoState ] = useState(-1); - const [ selectedItem, setSelectedItem ] = useState(null); - const [ playlists, setPlaylists ] = useState(null); - const [ hasControl, setHasControl ] = useState(false); - const [ player, setPlayer ] = useState(null); - const { eventDispatcher = null } = useRoomContext(); - - const onRoomWidgetUpdateYoutubeDisplayEvent = useCallback((event: RoomWidgetUpdateYoutubeDisplayEvent) => - { - switch(event.type) - { - case RoomWidgetUpdateYoutubeDisplayEvent.UPDATE_YOUTUBE_DISPLAY: { - setObjectId(event.objectId); - setHasControl(event.hasControl); - } - } - }, []); - - const close = useCallback(() => - { - setObjectId(-1); - setSelectedItem(null); - setPlaylists(null); - setHasControl(false); - setVideoId(null); - setVideoEnd(null); - setVideoStart(null); - setCurrentVideoState(-1); - }, []); - - UseEventDispatcherHook(RoomWidgetUpdateYoutubeDisplayEvent.UPDATE_YOUTUBE_DISPLAY, eventDispatcher, onRoomWidgetUpdateYoutubeDisplayEvent); - - const onVideo = useCallback((event: YoutubeDisplayVideoMessageEvent) => - { - if(objectId === -1) return; - - const parser = event.getParser(); - - if(objectId !== parser.furniId) return; - - setVideoId(parser.videoId); - setVideoStart(parser.startAtSeconds); - setVideoEnd(parser.endAtSeconds); - setCurrentVideoState(parser.state); - }, [ objectId ]); - - const onPlaylists = useCallback((event: YoutubeDisplayPlaylistsEvent) => - { - if(objectId === -1) return; - - const parser = event.getParser(); - - if(objectId !== parser.furniId) return; - - setPlaylists(parser.playlists); - setSelectedItem(parser.selectedPlaylistId); - setVideoId(null); - setCurrentVideoState(-1); - setVideoEnd(null); - setVideoStart(null); - }, [ objectId ]); - - const onControlVideo = useCallback((event: YoutubeControlVideoMessageEvent) => - { - if(objectId === -1) return; - - const parser = event.getParser(); - - if(objectId !== parser.furniId) return; - - switch(parser.commandId) - { - case 1: - setCurrentVideoState(YoutubeVideoPlaybackStateEnum.PLAYING); - if(player.getPlayerState() !== YoutubeVideoPlaybackStateEnum.PLAYING) - player.playVideo(); - break; - case 2: - setCurrentVideoState(YoutubeVideoPlaybackStateEnum.PAUSED); - if(player.getPlayerState() !== YoutubeVideoPlaybackStateEnum.PAUSED) - player.pauseVideo(); - break; - } - }, [ objectId, player ]); - - UseMessageEventHook(YoutubeDisplayVideoMessageEvent, onVideo); - UseMessageEventHook(YoutubeDisplayPlaylistsEvent, onPlaylists); - UseMessageEventHook(YoutubeControlVideoMessageEvent, onControlVideo); - - const processAction = useCallback((action: string) => - { - switch(action) - { - case 'playlist_prev': - SendMessageComposer(new ControlYoutubeDisplayPlaybackMessageComposer(objectId, FurnitureYoutubeDisplayWidgetHandler.CONTROL_COMMAND_PREVIOUS_VIDEO)); - break; - case 'playlist_next': - SendMessageComposer(new ControlYoutubeDisplayPlaybackMessageComposer(objectId, FurnitureYoutubeDisplayWidgetHandler.CONTROL_COMMAND_NEXT_VIDEO)); - break; - case 'video_pause': - if(hasControl && videoId && videoId.length) - { - SendMessageComposer(new ControlYoutubeDisplayPlaybackMessageComposer(objectId, FurnitureYoutubeDisplayWidgetHandler.CONTROL_COMMAND_PAUSE_VIDEO)); - } - break; - case 'video_play': - if(hasControl && videoId && videoId.length) - { - SendMessageComposer(new ControlYoutubeDisplayPlaybackMessageComposer(objectId, FurnitureYoutubeDisplayWidgetHandler.CONTROL_COMMAND_CONTINUE_VIDEO)); - } - break; - default: - if(selectedItem === action) - { - setSelectedItem(null); - SendMessageComposer(new SetYoutubeDisplayPlaylistMessageComposer(objectId, '')); - return; - } - SendMessageComposer(new SetYoutubeDisplayPlaylistMessageComposer(objectId, action)); - setSelectedItem(action); - } - }, [ hasControl, objectId, selectedItem, videoId ]); - - const onReady = useCallback((event: any) => - { - setPlayer(event.target); - }, []); - - const onStateChange = useCallback((event: any) => - { - setPlayer(event.target); - if(objectId) - { - switch(event.target.getPlayerState()) - { - case -1: - case 1: - if(currentVideoState === 2) - { - //event.target.pauseVideo(); - } - if(currentVideoState !== 1) - { - processAction('video_play'); - } - return; - case 2: - if(currentVideoState !== 2) - { - processAction('video_pause'); - } - } - } - }, [ currentVideoState, objectId, processAction ]); - - const getYoutubeOpts = useMemo( () => - { - if(!videoStart && !videoEnd) - { - return { - height: '375', - width: '500', - playerVars: { - autoplay: 1, - disablekb: 1, - controls: 0, - origin: window.origin, - modestbranding: 1 - } - } - } - - return { - height: '375', - width: '500', - playerVars: { - autoplay: 1, - disablekb: 1, - controls: 0, - origin: window.origin, - modestbranding: 1, - start: videoStart, - end: videoEnd - } - } - }, [ videoEnd, videoStart ]); - - if((objectId === -1)) return null; - - return ( - - - -
-
- { (videoId && videoId.length > 0) && - - } - { (!videoId || videoId.length === 0) && -
{ LocalizeText('widget.furni.video_viewer.no_videos') }
- } -
-
- - processAction('playlist_prev') } /> - processAction('playlist_next') } /> - -
{ LocalizeText('widget.furni.video_viewer.playlists') }
- - { playlists && playlists.map((entry, index) => - { - return ( - processAction(entry.video) } itemActive={ entry.video === selectedItem }> - { entry.title } - { entry.description } - - ) - }) } - -
-
-
-
- ) -} diff --git a/src/components/room/widgets/infostand/InfoStandWidgetView.scss b/src/components/room/widgets/infostand/InfoStandWidgetView.scss deleted file mode 100644 index 2e57c0c0..00000000 --- a/src/components/room/widgets/infostand/InfoStandWidgetView.scss +++ /dev/null @@ -1,83 +0,0 @@ -.nitro-infostand-container { - position: absolute; - right: 10px; - bottom: $toolbar-height + 10px; - pointer-events: none; - z-index: $infostand-zindex; - color: $white; - - .nitro-infostand { - position: relative; - min-width: 190px; - max-width: 190px; - z-index: $infostand-zindex; - pointer-events: auto; - background: rgba($dark,.95); - box-shadow: inset 0px 5px lighten(rgba($dark,.6),2.5), inset 0 -4px darken(rgba($dark,.6),4); - - .form-control-sm { - height: 25px; - min-height: 25px; - padding: 0.1rem 0.25rem; - } - - .body-image { - display: flex; - align-items: center; - justify-content: center; - background-color: rgba($light-dark, 1); - width: 100%; - max-width: 68px; - border-radius: $border-radius; - - &.pet { - max-width: 75px; - } - - &.bot { - background-image: url('../../../../assets/images/infostand/bot_background.png'); - background-repeat: no-repeat; - background-position: center; - } - - &.furni { - background-color: transparent; - margin-right: 0; - } - } - - .badge-image { - width: 45px; - height: 45px; - } - - .motto-content { - min-height: 18px; - } - - .motto-input { - width: 100%; - height: 100%; - font-size: 12px; - padding: 0; - outline: 0; - border: 0; - color: rgba($white, 1); - position: relative; - background: transparent; - resize: none; - - &:focus { - font-style: italic; - } - } - } - - .button-container { - pointer-events: auto; - } - - .pet-stats { - height: 18px; - } -} diff --git a/src/components/room/widgets/infostand/InfoStandWidgetView.tsx b/src/components/room/widgets/infostand/InfoStandWidgetView.tsx deleted file mode 100644 index fcafad92..00000000 --- a/src/components/room/widgets/infostand/InfoStandWidgetView.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import { FC, useCallback, useState } from 'react'; -import { RoomWidgetRoomObjectMessage, RoomWidgetUpdateEvent, RoomWidgetUpdateInfostandEvent, RoomWidgetUpdateInfostandFurniEvent, RoomWidgetUpdateInfostandPetEvent, RoomWidgetUpdateInfostandRentableBotEvent, RoomWidgetUpdateInfostandUserEvent, RoomWidgetUpdateRoomObjectEvent } from '../../../../api'; -import { Column } from '../../../../common'; -import { UseEventDispatcherHook } from '../../../../hooks'; -import { useRoomContext } from '../../RoomContext'; -import { InfoStandWidgetBotView } from './InfoStandWidgetBotView'; -import { InfoStandWidgetFurniView } from './InfoStandWidgetFurniView'; -import { InfoStandWidgetPetView } from './InfoStandWidgetPetView'; -import { InfoStandWidgetRentableBotView } from './InfoStandWidgetRentableBotView'; -import { InfoStandWidgetUserView } from './InfoStandWidgetUserView'; - -export const InfoStandWidgetView: FC<{}> = props => -{ - const { eventDispatcher = null, widgetHandler = null } = useRoomContext(); - const [ infoStandEvent, setInfoStandEvent ] = useState(null); - - const closeInfostand = useCallback(() => - { - setInfoStandEvent(null); - }, []); - - const onRoomWidgetUpdateEvent = useCallback((event: RoomWidgetUpdateEvent) => - { - switch(event.type) - { - case RoomWidgetUpdateRoomObjectEvent.OBJECT_SELECTED: { - const roomObjectEvent = (event as RoomWidgetUpdateRoomObjectEvent); - - widgetHandler.processWidgetMessage(new RoomWidgetRoomObjectMessage(RoomWidgetRoomObjectMessage.GET_OBJECT_INFO, roomObjectEvent.id, roomObjectEvent.category)); - return; - } - case RoomWidgetUpdateRoomObjectEvent.OBJECT_DESELECTED: { - const roomObjectEvent = (event as RoomWidgetUpdateRoomObjectEvent); - - closeInfostand(); - return; - } - case RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED: - case RoomWidgetUpdateRoomObjectEvent.USER_REMOVED: { - const roomObjectEvent = (event as RoomWidgetUpdateRoomObjectEvent); - - setInfoStandEvent(prevValue => - { - switch(event.type) - { - case RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED: - if(prevValue instanceof RoomWidgetUpdateInfostandFurniEvent) - { - if(prevValue.id === roomObjectEvent.id) return null; - } - break; - case RoomWidgetUpdateRoomObjectEvent.USER_REMOVED: - if(prevValue instanceof RoomWidgetUpdateInfostandUserEvent || prevValue instanceof RoomWidgetUpdateInfostandRentableBotEvent) - { - if(prevValue.roomIndex === roomObjectEvent.id) return null; - } - - else if(prevValue instanceof RoomWidgetUpdateInfostandPetEvent) - { - if(prevValue.roomIndex === roomObjectEvent.id) return null; - } - break; - } - - return prevValue; - }); - return; - } - case RoomWidgetUpdateInfostandFurniEvent.FURNI: - case RoomWidgetUpdateInfostandUserEvent.OWN_USER: - case RoomWidgetUpdateInfostandUserEvent.PEER: - case RoomWidgetUpdateInfostandUserEvent.BOT: - case RoomWidgetUpdateInfostandRentableBotEvent.RENTABLE_BOT: - case RoomWidgetUpdateInfostandPetEvent.PET_INFO: { - setInfoStandEvent((event as RoomWidgetUpdateInfostandEvent)); - return; - } - default: - console.log(event); - return; - } - }, [ widgetHandler, closeInfostand ]); - - UseEventDispatcherHook(RoomWidgetUpdateRoomObjectEvent.OBJECT_SELECTED, eventDispatcher, onRoomWidgetUpdateEvent); - UseEventDispatcherHook(RoomWidgetUpdateRoomObjectEvent.OBJECT_DESELECTED, eventDispatcher, onRoomWidgetUpdateEvent); - UseEventDispatcherHook(RoomWidgetUpdateRoomObjectEvent.USER_REMOVED, eventDispatcher, onRoomWidgetUpdateEvent); - UseEventDispatcherHook(RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED, eventDispatcher, onRoomWidgetUpdateEvent); - UseEventDispatcherHook(RoomWidgetUpdateInfostandFurniEvent.FURNI, eventDispatcher, onRoomWidgetUpdateEvent); - UseEventDispatcherHook(RoomWidgetUpdateInfostandUserEvent.OWN_USER, eventDispatcher, onRoomWidgetUpdateEvent); - UseEventDispatcherHook(RoomWidgetUpdateInfostandUserEvent.PEER, eventDispatcher, onRoomWidgetUpdateEvent); - UseEventDispatcherHook(RoomWidgetUpdateInfostandUserEvent.BOT, eventDispatcher, onRoomWidgetUpdateEvent); - UseEventDispatcherHook(RoomWidgetUpdateInfostandRentableBotEvent.RENTABLE_BOT, eventDispatcher, onRoomWidgetUpdateEvent); - UseEventDispatcherHook(RoomWidgetUpdateInfostandPetEvent.PET_INFO, eventDispatcher, onRoomWidgetUpdateEvent); - UseEventDispatcherHook(RoomWidgetUpdateInfostandPetEvent.PET_INFO, eventDispatcher, onRoomWidgetUpdateEvent); - - const getInfostandView = useCallback(() => - { - if(!infoStandEvent) return null; - - switch(infoStandEvent.type) - { - case RoomWidgetUpdateInfostandFurniEvent.FURNI: - return ; - case RoomWidgetUpdateInfostandUserEvent.OWN_USER: - case RoomWidgetUpdateInfostandUserEvent.PEER: - return ; - case RoomWidgetUpdateInfostandUserEvent.BOT: - return ; - case RoomWidgetUpdateInfostandRentableBotEvent.RENTABLE_BOT: - return ; - case RoomWidgetUpdateInfostandPetEvent.PET_INFO: - return - } - - return null; - }, [ infoStandEvent, closeInfostand ]); - - if(!infoStandEvent) return null; - - return ( - - { getInfostandView() } - - ); -} diff --git a/src/components/room/widgets/object-location/ObjectLocationView.tsx b/src/components/room/widgets/object-location/ObjectLocationView.tsx index b4dd23ca..acd21fb1 100644 --- a/src/components/room/widgets/object-location/ObjectLocationView.tsx +++ b/src/components/room/widgets/object-location/ObjectLocationView.tsx @@ -1,4 +1,4 @@ -import { FC, useCallback, useEffect, useRef, useState } from 'react'; +import { FC, useEffect, useRef, useState } from 'react'; import { GetNitroInstance, GetRoomObjectBounds, GetRoomSession } from '../../../../api'; import { Base, BaseProps } from '../../../../common'; @@ -15,30 +15,30 @@ export const ObjectLocationView: FC = props => const [ pos, setPos ] = useState<{ x: number, y: number }>({ x: -1, y: -1 }); const elementRef = useRef(); - const getObjectLocation = useCallback(() => - { - const roomSession = GetRoomSession(); - const objectBounds = GetRoomObjectBounds(roomSession.roomId, objectId, category, 1); - - return objectBounds; - }, [ objectId, category ]); - - const updatePosition = useCallback(() => - { - const bounds = getObjectLocation(); - - if(!bounds || !elementRef.current) return; - - setPos({ - x: Math.round(((bounds.left + (bounds.width / 2)) - (elementRef.current.offsetWidth / 2))), - y: Math.round((bounds.top - elementRef.current.offsetHeight) + 10) - }); - }, [ getObjectLocation ]); - useEffect(() => { let remove = false; + const getObjectLocation = () => + { + const roomSession = GetRoomSession(); + const objectBounds = GetRoomObjectBounds(roomSession.roomId, objectId, category, 1); + + return objectBounds; + } + + const updatePosition = () => + { + const bounds = getObjectLocation(); + + if(!bounds || !elementRef.current) return; + + setPos({ + x: Math.round(((bounds.left + (bounds.width / 2)) - (elementRef.current.offsetWidth / 2))), + y: Math.round((bounds.top - elementRef.current.offsetHeight) + 10) + }); + } + if(noFollow) { updatePosition(); @@ -54,7 +54,7 @@ export const ObjectLocationView: FC = props => { if(remove) GetNitroInstance().ticker.remove(updatePosition); } - }, [ updatePosition, noFollow ]); + }, [ objectId, category, noFollow ]); return -1 } className="object-location" style={ { left: pos.x, top: pos.y } } { ...rest } />; } diff --git a/src/components/room/widgets/room-thumbnail/RoomThumbnailWidgetView.tsx b/src/components/room/widgets/room-thumbnail/RoomThumbnailWidgetView.tsx index c7b4b253..20fc171c 100644 --- a/src/components/room/widgets/room-thumbnail/RoomThumbnailWidgetView.tsx +++ b/src/components/room/widgets/room-thumbnail/RoomThumbnailWidgetView.tsx @@ -3,13 +3,12 @@ import { FC, useCallback, useState } from 'react'; import { GetRoomEngine } from '../../../../api'; import { LayoutMiniCameraView } from '../../../../common'; import { RoomWidgetThumbnailEvent } from '../../../../events'; -import { UseUiEvent } from '../../../../hooks'; -import { useRoomContext } from '../../RoomContext'; +import { useRoom, useUiEvent } from '../../../../hooks'; export const RoomThumbnailWidgetView: FC<{}> = props => { const [ isVisible, setIsVisible ] = useState(false); - const { roomSession = null } = useRoomContext(); + const { roomSession = null } = useRoom(); const onNitroEvent = useCallback((event: RoomWidgetThumbnailEvent) => { @@ -27,9 +26,9 @@ export const RoomThumbnailWidgetView: FC<{}> = props => } }, []); - UseUiEvent(RoomWidgetThumbnailEvent.SHOW_THUMBNAIL, onNitroEvent); - UseUiEvent(RoomWidgetThumbnailEvent.HIDE_THUMBNAIL, onNitroEvent); - UseUiEvent(RoomWidgetThumbnailEvent.TOGGLE_THUMBNAIL, onNitroEvent); + useUiEvent(RoomWidgetThumbnailEvent.SHOW_THUMBNAIL, onNitroEvent); + useUiEvent(RoomWidgetThumbnailEvent.HIDE_THUMBNAIL, onNitroEvent); + useUiEvent(RoomWidgetThumbnailEvent.TOGGLE_THUMBNAIL, onNitroEvent); const receiveTexture = useCallback((texture: NitroRenderTexture) => { diff --git a/src/components/room/widgets/room-tools/RoomToolsWidgetView.tsx b/src/components/room/widgets/room-tools/RoomToolsWidgetView.tsx index b635dedf..588b9523 100644 --- a/src/components/room/widgets/room-tools/RoomToolsWidgetView.tsx +++ b/src/components/room/widgets/room-tools/RoomToolsWidgetView.tsx @@ -1,10 +1,9 @@ -import { GetGuestRoomResultEvent, RoomLikeRoomComposer } from '@nitrots/nitro-renderer'; +import { GetGuestRoomResultEvent, RateFlatMessageComposer } from '@nitrots/nitro-renderer'; import classNames from 'classnames'; -import { FC, useCallback, useEffect, useState } from 'react'; +import { FC, useEffect, useState } from 'react'; import { CreateLinkEvent, GetRoomEngine, LocalizeText, SendMessageComposer } from '../../../../api'; import { Base, Column, Flex, Text, TransitionAnimation, TransitionAnimationTypes } from '../../../../common'; -import { UseMessageEventHook, useSharedNavigatorData } from '../../../../hooks'; -import { useRoomContext } from '../../RoomContext'; +import { useMessageEvent, useRoom, useSharedNavigatorData } from '../../../../hooks'; export const RoomToolsWidgetView: FC<{}> = props => { @@ -12,10 +11,9 @@ export const RoomToolsWidgetView: FC<{}> = props => const [ roomName, setRoomName ] = useState(null); const [ roomOwner, setRoomOwner ] = useState(null); const [ roomTags, setRoomTags ] = useState(null); - const [ roomInfoDisplay, setRoomInfoDisplay ] = useState(false); const [ isOpen, setIsOpen ] = useState(false); const [ navigatorData, setNavigatorData ] = useSharedNavigatorData(); - const { roomSession = null, widgetHandler = null } = useRoomContext(); + const { roomSession = null } = useRoom(); const handleToolClick = (action: string) => { @@ -41,7 +39,7 @@ export const RoomToolsWidgetView: FC<{}> = props => CreateLinkEvent('chat-history/toggle'); return; case 'like_room': - SendMessageComposer(new RoomLikeRoomComposer(1)); + SendMessageComposer(new RateFlatMessageComposer(1)); return; case 'toggle_room_link': CreateLinkEvent('navigator/toggle-room-link'); @@ -49,18 +47,16 @@ export const RoomToolsWidgetView: FC<{}> = props => } } - const onGetGuestRoomResultEvent = useCallback((event: GetGuestRoomResultEvent) => + useMessageEvent(GetGuestRoomResultEvent, event => { const parser = event.getParser(); - if(!parser.roomEnter) return; + if(!parser.roomEnter || (parser.data.roomId !== roomSession.roomId)) return; if(roomName !== parser.data.roomName) setRoomName(parser.data.roomName); if(roomOwner !== parser.data.ownerName) setRoomOwner(parser.data.ownerName); if(roomTags !== parser.data.tags) setRoomTags(parser.data.tags); - }, [ roomName, roomOwner, roomTags ]); - - UseMessageEventHook(GetGuestRoomResultEvent, onGetGuestRoomResultEvent); + }); useEffect(() => { diff --git a/src/components/room/widgets/user-location/UserLocationView.tsx b/src/components/room/widgets/user-location/UserLocationView.tsx index d750f26a..ca281ec9 100644 --- a/src/components/room/widgets/user-location/UserLocationView.tsx +++ b/src/components/room/widgets/user-location/UserLocationView.tsx @@ -1,7 +1,7 @@ import { RoomObjectCategory } from '@nitrots/nitro-renderer'; import { FC } from 'react'; import { BaseProps } from '../../../../common'; -import { useRoomContext } from '../../RoomContext'; +import { useRoom } from '../../../../hooks'; import { ObjectLocationView } from '../object-location/ObjectLocationView'; interface UserLocationViewProps extends BaseProps @@ -12,7 +12,7 @@ interface UserLocationViewProps extends BaseProps export const UserLocationView: FC = props => { const { userId = -1, ...rest } = props; - const { roomSession = null } = useRoomContext(); + const { roomSession = null } = useRoom(); if((userId === -1) || !roomSession) return null; diff --git a/src/components/room/widgets/word-quiz/WordQuizQuestionView.tsx b/src/components/room/widgets/word-quiz/WordQuizQuestionView.tsx index 83421ea1..3b4d051e 100644 --- a/src/components/room/widgets/word-quiz/WordQuizQuestionView.tsx +++ b/src/components/room/widgets/word-quiz/WordQuizQuestionView.tsx @@ -1,6 +1,6 @@ import { FC } from 'react'; +import { VALUE_KEY_DISLIKE, VALUE_KEY_LIKE } from '../../../../api'; import { Base, Column, Flex, Text } from '../../../../common'; -import { VALUE_KEY_DISLIKE, VALUE_KEY_LIKE } from './common/VoteValue'; interface WordQuizQuestionViewProps { diff --git a/src/components/room/widgets/word-quiz/WordQuizVoteView.tsx b/src/components/room/widgets/word-quiz/WordQuizVoteView.tsx index 5511b284..8437d763 100644 --- a/src/components/room/widgets/word-quiz/WordQuizVoteView.tsx +++ b/src/components/room/widgets/word-quiz/WordQuizVoteView.tsx @@ -1,8 +1,8 @@ -import { RoomObjectCategory } from '@nitrots/nitro-renderer/src'; +import { RoomObjectCategory } from '@nitrots/nitro-renderer'; import { FC } from 'react'; +import { VALUE_KEY_DISLIKE } from '../../../../api'; import { Base, BaseProps, Flex } from '../../../../common'; import { ObjectLocationView } from '../object-location/ObjectLocationView'; -import { VALUE_KEY_DISLIKE } from './common/VoteValue'; interface WordQuizVoteViewProps extends BaseProps { diff --git a/src/components/room/widgets/word-quiz/WordQuizWidgetView.tsx b/src/components/room/widgets/word-quiz/WordQuizWidgetView.tsx index d3a1c57a..a04cfd8a 100644 --- a/src/components/room/widgets/word-quiz/WordQuizWidgetView.tsx +++ b/src/components/room/widgets/word-quiz/WordQuizWidgetView.tsx @@ -1,157 +1,12 @@ -import { IQuestion } from '@nitrots/nitro-renderer'; -import { FC, useCallback, useEffect, useState } from 'react'; -import { RoomWidgetPollMessage, RoomWidgetWordQuizUpdateEvent } from '../../../../api'; -import { UseEventDispatcherHook } from '../../../../hooks'; -import { useRoomContext } from '../../RoomContext'; -import { VALUE_KEY_DISLIKE, VALUE_KEY_LIKE, VoteValue } from './common/VoteValue'; +import { FC } from 'react'; +import { VALUE_KEY_DISLIKE, VALUE_KEY_LIKE } from '../../../../api'; +import { useWordQuizWidget } from '../../../../hooks'; import { WordQuizQuestionView } from './WordQuizQuestionView'; import { WordQuizVoteView } from './WordQuizVoteView'; -const DEFAULT_DISPLAY_DELAY = 4000; -const SIGN_FADE_DELAY = 3; - export const WordQuizWidgetView: FC<{}> = props => { - const [ pollId, setPollId ] = useState(-1); - const [ question, setQuestion ] = useState(null); - const [ answerSent, setAnswerSent ] = useState(false); - const [ questionClearTimeout, setQuestionClearTimeout ] = useState(null); - const [ answerCounts, setAnswerCounts ] = useState>(new Map()); - const [ userAnswers, setUserAnswers ] = useState>(new Map()); - const { eventDispatcher = null, widgetHandler = null, roomSession = null } = useRoomContext(); - - const clearQuestion = useCallback(() => - { - setPollId(-1); - setQuestion(null); - }, []); - - const onRoomWidgetWordQuizUpdateEvent = useCallback((event: RoomWidgetWordQuizUpdateEvent) => - { - switch(event.type) - { - case RoomWidgetWordQuizUpdateEvent.NEW_QUESTION: - setPollId(event.id); - setQuestion(event.question); - setAnswerSent(false); - setAnswerCounts(new Map()); - setUserAnswers(new Map()); - - setQuestionClearTimeout(prevValue => - { - if(prevValue) clearTimeout(prevValue); - - if(event.duration > 0) - { - const delay = event.duration < 1000 ? DEFAULT_DISPLAY_DELAY : event.duration; - - return setTimeout(() => clearQuestion(), delay) as unknown as number; - } - - return null; - }); - break; - case RoomWidgetWordQuizUpdateEvent.QUESTION_ANSWERED: { - const userData = roomSession.userDataManager.getUserData(event.userId); - - if(!userData) return; - - setAnswerCounts(event.answerCounts); - - setUserAnswers(prevValue => - { - if(!prevValue.has(userData.roomIndex)) - { - const newValue = new Map(userAnswers); - - newValue.set(userData.roomIndex, { value: event.value, secondsLeft: SIGN_FADE_DELAY }); - - return newValue; - } - - return prevValue; - }); - break; - } - case RoomWidgetWordQuizUpdateEvent.QUESTION_FINISHED: - if(question && question.id === event.questionId) - { - setAnswerCounts(event.answerCounts); - setAnswerSent(true); - - setQuestionClearTimeout(prevValue => - { - if(prevValue) clearTimeout(prevValue); - - return setTimeout(() => clearQuestion(), DEFAULT_DISPLAY_DELAY) as unknown as number; - }); - } - - setUserAnswers(new Map()); - break; - } - }, [ question, roomSession.userDataManager, userAnswers, clearQuestion ]); - - UseEventDispatcherHook(RoomWidgetWordQuizUpdateEvent.NEW_QUESTION, eventDispatcher, onRoomWidgetWordQuizUpdateEvent); - UseEventDispatcherHook(RoomWidgetWordQuizUpdateEvent.QUESTION_ANSWERED, eventDispatcher, onRoomWidgetWordQuizUpdateEvent); - UseEventDispatcherHook(RoomWidgetWordQuizUpdateEvent.QUESTION_FINISHED, eventDispatcher, onRoomWidgetWordQuizUpdateEvent); - - const vote = useCallback((vote: string) => - { - if(answerSent || !question) return; - - const updateMessage = new RoomWidgetPollMessage(RoomWidgetPollMessage.ANSWER, pollId); - - updateMessage.questionId = question.id; - updateMessage.answers = [ vote ]; - - widgetHandler.processWidgetMessage(updateMessage); - - setAnswerSent(true); - }, [ answerSent, pollId, question, widgetHandler ]); - - const checkSignFade = useCallback(() => - { - setUserAnswers(prevValue => - { - const keysToRemove: number[] = []; - - prevValue.forEach((value, key) => - { - value.secondsLeft--; - - if(value.secondsLeft <= 0) keysToRemove.push(key); - }); - - if(keysToRemove.length === 0) return prevValue; - - const copy = new Map(prevValue); - - keysToRemove.forEach(key => copy.delete(key)); - - return copy; - }); - }, []); - - useEffect(() => - { - const interval = setInterval(() => checkSignFade(), 1000); - - return () => clearInterval(interval); - }, [ checkSignFade ]); - - useEffect(() => - { - return () => - { - setQuestionClearTimeout(prev => - { - if(prev) clearTimeout(prev); - - return null; - }); - } - }, []); + const { question = null, answerSent = false, answerCounts = null, userAnswers = null, vote = null } = useWordQuizWidget(); return ( <> diff --git a/src/components/toolbar/ToolbarMeView.tsx b/src/components/toolbar/ToolbarMeView.tsx index aec2c46d..eea60bf2 100644 --- a/src/components/toolbar/ToolbarMeView.tsx +++ b/src/components/toolbar/ToolbarMeView.tsx @@ -1,9 +1,8 @@ import { MouseEventType, RoomObjectCategory } from '@nitrots/nitro-renderer'; import { Dispatch, FC, PropsWithChildren, SetStateAction, useEffect, useRef } from 'react'; -import { CreateLinkEvent, GetRoomEngine, GetRoomSession, GetSessionDataManager, GetUserProfile } from '../../api'; +import { CreateLinkEvent, DispatchUiEvent, GetRoomEngine, GetRoomSession, GetSessionDataManager, GetUserProfile } from '../../api'; import { Base, Flex, LayoutItemCountView } from '../../common'; import { GuideToolEvent } from '../../events'; -import { DispatchUiEvent } from '../../hooks'; interface ToolbarMeViewProps { diff --git a/src/components/toolbar/ToolbarView.tsx b/src/components/toolbar/ToolbarView.tsx index 1598029b..ba231b9c 100644 --- a/src/components/toolbar/ToolbarView.tsx +++ b/src/components/toolbar/ToolbarView.tsx @@ -1,9 +1,9 @@ import { Dispose, DropBounce, EaseOut, JumpBy, Motions, NitroToolbarAnimateIconEvent, PerkAllowancesMessageEvent, PerkEnum, Queue, Wait } from '@nitrots/nitro-renderer'; import { FC, useCallback, useState } from 'react'; -import { CreateLinkEvent, GetSessionDataManager, MessengerIconState, OpenMessengerChat, VisitDesktop } from '../../api'; +import { CreateLinkEvent, DispatchUiEvent, GetSessionDataManager, MessengerIconState, OpenMessengerChat, VisitDesktop } from '../../api'; import { Base, Flex, LayoutAvatarImageView, LayoutItemCountView, TransitionAnimation, TransitionAnimationTypes } from '../../common'; import { ModToolsEvent } from '../../events'; -import { DispatchUiEvent, useAchievements, useFriends, useInventoryUnseenTracker, UseMessageEventHook, useMessenger, UseRoomEngineEvent, useSessionInfo } from '../../hooks'; +import { useAchievements, useFriends, useInventoryUnseenTracker, useMessageEvent, useMessenger, useRoomEngineEvent, useSessionInfo } from '../../hooks'; import { ToolbarMeView } from './ToolbarMeView'; export const ToolbarView: FC<{ isInRoom: boolean }> = props => @@ -26,7 +26,7 @@ export const ToolbarView: FC<{ isInRoom: boolean }> = props => setUseGuideTool(parser.isAllowed(PerkEnum.USE_GUIDE_TOOL)); }, [ setUseGuideTool ]); - UseMessageEventHook(PerkAllowancesMessageEvent, onPerkAllowancesMessageEvent); + useMessageEvent(PerkAllowancesMessageEvent, onPerkAllowancesMessageEvent); const animationIconToToolbar = useCallback((iconName: string, image: HTMLImageElement, x: number, y: number) => { @@ -67,7 +67,7 @@ export const ToolbarView: FC<{ isInRoom: boolean }> = props => animationIconToToolbar('icon-inventory', event.image, event.x, event.y); }, [ animationIconToToolbar ]); - UseRoomEngineEvent(NitroToolbarAnimateIconEvent.ANIMATE_ICON, onNitroToolbarAnimateIconEvent); + useRoomEngineEvent(NitroToolbarAnimateIconEvent.ANIMATE_ICON, onNitroToolbarAnimateIconEvent); return ( <> diff --git a/src/components/user-profile/UserProfileView.tsx b/src/components/user-profile/UserProfileView.tsx index d744a7c0..72f21a2e 100644 --- a/src/components/user-profile/UserProfileView.tsx +++ b/src/components/user-profile/UserProfileView.tsx @@ -2,7 +2,7 @@ import { RelationshipStatusInfoEvent, RelationshipStatusInfoMessageParser, RoomE import { FC, useCallback, useState } from 'react'; import { CreateLinkEvent, GetRoomSession, GetSessionDataManager, GetUserProfile, LocalizeText, SendMessageComposer } from '../../api'; import { Column, Flex, Grid, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../common'; -import { UseMessageEventHook, UseRoomEngineEvent } from '../../hooks'; +import { useMessageEvent, useRoomEngineEvent } from '../../hooks'; import { BadgesContainerView } from './views/BadgesContainerView'; import { FriendsContainerView } from './views/FriendsContainerView'; import { GroupsContainerView } from './views/GroupsContainerView'; @@ -37,7 +37,7 @@ export const UserProfileView: FC<{}> = props => setUserBadges(parser.badges); }, [ userProfile ]); - UseMessageEventHook(UserCurrentBadgesEvent, onUserCurrentBadgesEvent); + useMessageEvent(UserCurrentBadgesEvent, onUserCurrentBadgesEvent); const onUserRelationshipsEvent = useCallback((event: RelationshipStatusInfoEvent) => { @@ -48,7 +48,7 @@ export const UserProfileView: FC<{}> = props => setUserRelationships(parser); }, [ userProfile ]); - UseMessageEventHook(RelationshipStatusInfoEvent, onUserRelationshipsEvent); + useMessageEvent(RelationshipStatusInfoEvent, onUserRelationshipsEvent); const onUserProfileEvent = useCallback((event: UserProfileEvent) => { @@ -73,7 +73,7 @@ export const UserProfileView: FC<{}> = props => SendMessageComposer(new UserRelationshipsComposer(parser.id)); }, []); - UseMessageEventHook(UserProfileEvent, onUserProfileEvent); + useMessageEvent(UserProfileEvent, onUserProfileEvent); const onRoomEngineObjectEvent = useCallback((event: RoomEngineObjectEvent) => { @@ -88,7 +88,7 @@ export const UserProfileView: FC<{}> = props => GetUserProfile(userData.webID); }, [ userProfile ]); - UseRoomEngineEvent(RoomEngineObjectEvent.SELECTED, onRoomEngineObjectEvent); + useRoomEngineEvent(RoomEngineObjectEvent.SELECTED, onRoomEngineObjectEvent); if(!userProfile) return null; diff --git a/src/components/user-profile/views/GroupsContainerView.tsx b/src/components/user-profile/views/GroupsContainerView.tsx index 5e05aaa8..94012593 100644 --- a/src/components/user-profile/views/GroupsContainerView.tsx +++ b/src/components/user-profile/views/GroupsContainerView.tsx @@ -2,7 +2,7 @@ import { GroupInformationComposer, GroupInformationEvent, GroupInformationParser import { FC, useCallback, useEffect, useState } from 'react'; import { SendMessageComposer, ToggleFavoriteGroup } from '../../../api'; import { AutoGrid, Base, Column, Flex, Grid, GridProps, LayoutBadgeImageView, LayoutGridItem } from '../../../common'; -import { UseMessageEventHook } from '../../../hooks'; +import { useMessageEvent } from '../../../hooks'; import { GroupInformationView } from '../../groups/views/GroupInformationView'; interface GroupsContainerViewProps extends GridProps @@ -27,7 +27,7 @@ export const GroupsContainerView: FC = props => setGroupInformation(parser); }, [ selectedGroupId ]); - UseMessageEventHook(GroupInformationEvent, onGroupInformationEvent); + useMessageEvent(GroupInformationEvent, onGroupInformationEvent); useEffect(() => { diff --git a/src/components/user-settings/UserSettingsView.tsx b/src/components/user-settings/UserSettingsView.tsx index 3564203b..d8f4efa2 100644 --- a/src/components/user-settings/UserSettingsView.tsx +++ b/src/components/user-settings/UserSettingsView.tsx @@ -1,9 +1,9 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { ILinkEventTracker, NitroSettingsEvent, UserSettingsCameraFollowComposer, UserSettingsEvent, UserSettingsOldChatComposer, UserSettingsRoomInvitesComposer, UserSettingsSoundComposer } from '@nitrots/nitro-renderer'; import { FC, useCallback, useEffect, useState } from 'react'; -import { AddEventLinkTracker, LocalizeText, RemoveLinkEventTracker, SendMessageComposer } from '../../api'; +import { AddEventLinkTracker, DispatchMainEvent, DispatchUiEvent, LocalizeText, RemoveLinkEventTracker, SendMessageComposer } from '../../api'; import { Column, Flex, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../common'; -import { DispatchMainEvent, DispatchUiEvent, useCatalogPlaceMultipleItems, useCatalogSkipPurchaseConfirmation, UseMessageEventHook } from '../../hooks'; +import { useCatalogPlaceMultipleItems, useCatalogSkipPurchaseConfirmation, useMessageEvent } from '../../hooks'; export const UserSettingsView: FC<{}> = props => { @@ -12,26 +12,6 @@ export const UserSettingsView: FC<{}> = props => const [ catalogPlaceMultipleObjects, setCatalogPlaceMultipleObjects ] = useCatalogPlaceMultipleItems(); const [ catalogSkipPurchaseConfirmation, setCatalogSkipPurchaseConfirmation ] = useCatalogSkipPurchaseConfirmation(); - const onUserSettingsEvent = useCallback((event: UserSettingsEvent) => - { - const parser = event.getParser(); - const settingsEvent = new NitroSettingsEvent(); - - settingsEvent.volumeSystem = parser.volumeSystem; - settingsEvent.volumeFurni = parser.volumeFurni; - settingsEvent.volumeTrax = parser.volumeTrax; - settingsEvent.oldChat = parser.oldChat; - settingsEvent.roomInvites = parser.roomInvites; - settingsEvent.cameraFollow = parser.cameraFollow; - settingsEvent.flags = parser.flags; - settingsEvent.chatType = parser.chatType; - - setUserSettings(settingsEvent); - DispatchMainEvent(settingsEvent); - }, []); - - UseMessageEventHook(UserSettingsEvent, onUserSettingsEvent); - const processAction = useCallback((type: string, value?: boolean | number | string) => { let doUpdate = true; @@ -74,6 +54,7 @@ export const UserSettingsView: FC<{}> = props => } if(doUpdate) setUserSettings(clone); + DispatchMainEvent(clone) }, [ userSettings ]); @@ -87,6 +68,24 @@ export const UserSettingsView: FC<{}> = props => } }, [ userSettings ]); + useMessageEvent(UserSettingsEvent, event => + { + const parser = event.getParser(); + const settingsEvent = new NitroSettingsEvent(); + + settingsEvent.volumeSystem = parser.volumeSystem; + settingsEvent.volumeFurni = parser.volumeFurni; + settingsEvent.volumeTrax = parser.volumeTrax; + settingsEvent.oldChat = parser.oldChat; + settingsEvent.roomInvites = parser.roomInvites; + settingsEvent.cameraFollow = parser.cameraFollow; + settingsEvent.flags = parser.flags; + settingsEvent.chatType = parser.chatType; + + setUserSettings(settingsEvent); + DispatchMainEvent(settingsEvent); + }); + useEffect(() => { const linkTracker: ILinkEventTracker = { @@ -124,7 +123,7 @@ export const UserSettingsView: FC<{}> = props => DispatchUiEvent(userSettings); }, [ userSettings ]); - if(!isVisible) return null; + if(!isVisible || !userSettings) return null; return ( diff --git a/src/components/wired/WiredContext.tsx b/src/components/wired/WiredContext.tsx deleted file mode 100644 index f0e3bc45..00000000 --- a/src/components/wired/WiredContext.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { Triggerable } from '@nitrots/nitro-renderer'; -import { createContext, Dispatch, FC, ProviderProps, SetStateAction, useContext } from 'react'; - -export interface IWiredContext -{ - trigger: Triggerable; - setTrigger: Dispatch>; - intParams: number[], - setIntParams: Dispatch>; - stringParam: string; - setStringParam: Dispatch>; - furniIds: number[]; - setFurniIds: Dispatch>; - actionDelay: number; - setActionDelay: Dispatch>; - saveWired: () => void; -} - -const WiredContext = createContext({ - trigger: null, - setTrigger: null, - intParams: null, - setIntParams: null, - stringParam: null, - setStringParam: null, - furniIds: null, - setFurniIds: null, - actionDelay: null, - setActionDelay: null, - saveWired: null -}); - -export const WiredContextProvider: FC> = props => -{ - return { props.children } -} - -export const useWiredContext = () => useContext(WiredContext); diff --git a/src/components/wired/WiredMessageHandler.tsx b/src/components/wired/WiredMessageHandler.tsx deleted file mode 100644 index de5371d1..00000000 --- a/src/components/wired/WiredMessageHandler.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import { WiredFurniActionEvent, WiredFurniConditionEvent, WiredFurniTriggerEvent, WiredOpenEvent, WiredRewardResultMessageEvent, WiredSaveSuccessEvent, WiredValidationErrorEvent } from '@nitrots/nitro-renderer'; -import { FC, useCallback } from 'react'; -import { LocalizeText, NotificationAlertType, NotificationUtilities } from '../../api'; -import { UseMessageEventHook } from '../../hooks/messages'; -import { useWiredContext } from './WiredContext'; - -export const WiredMessageHandler: FC<{}> = props => -{ - const { setTrigger = null } = useWiredContext(); - - const onWiredFurniActionEvent = useCallback((event: WiredFurniActionEvent) => - { - const parser = event.getParser(); - - setTrigger(parser.definition); - }, [ setTrigger ]); - - const onWiredFurniConditionEvent = useCallback((event: WiredFurniConditionEvent) => - { - const parser = event.getParser(); - - setTrigger(parser.definition); - }, [ setTrigger ]); - - const onWiredFurniTriggerEvent = useCallback((event: WiredFurniTriggerEvent) => - { - const parser = event.getParser(); - - setTrigger(parser.definition); - }, [ setTrigger ]); - - const onWiredOpenEvent = useCallback((event: WiredOpenEvent) => - { - const parser = event.getParser(); - - console.log(parser); - }, []); - - const onWiredRewardResultMessageEvent = useCallback((event: WiredRewardResultMessageEvent) => - { - const parser = event.getParser(); - - console.log(parser); - }, []); - - const onWiredSaveSuccessEvent = useCallback((event: WiredSaveSuccessEvent) => - { - setTrigger(null); - }, [ setTrigger ]); - - const onWiredValidationErrorEvent = useCallback((event: WiredValidationErrorEvent) => - { - const parser = event.getParser(); - - NotificationUtilities.simpleAlert(parser.info, NotificationAlertType.DEFAULT, null, null, LocalizeText('error.title')); - console.log(parser); - }, []); - - UseMessageEventHook(WiredFurniActionEvent, onWiredFurniActionEvent); - UseMessageEventHook(WiredFurniConditionEvent, onWiredFurniConditionEvent); - UseMessageEventHook(WiredFurniTriggerEvent, onWiredFurniTriggerEvent); - UseMessageEventHook(WiredOpenEvent, onWiredOpenEvent); - UseMessageEventHook(WiredRewardResultMessageEvent, onWiredRewardResultMessageEvent); - UseMessageEventHook(WiredSaveSuccessEvent, onWiredSaveSuccessEvent); - UseMessageEventHook(WiredValidationErrorEvent, onWiredValidationErrorEvent); - - return null; -}; diff --git a/src/components/wired/WiredView.tsx b/src/components/wired/WiredView.tsx index 971aec0a..cb3b4baf 100644 --- a/src/components/wired/WiredView.tsx +++ b/src/components/wired/WiredView.tsx @@ -1,58 +1,21 @@ -import { ConditionDefinition, Triggerable, TriggerDefinition, UpdateActionMessageComposer, UpdateConditionMessageComposer, UpdateTriggerMessageComposer, WiredActionDefinition } from '@nitrots/nitro-renderer'; -import { FC, useState } from 'react'; -import { IsOwnerOfFloorFurniture, LocalizeText, NotificationUtilities, SendMessageComposer } from '../../api'; -import { GetWiredLayout } from './common/GetWiredLayout'; -import { WiredContextProvider } from './WiredContext'; -import { WiredMessageHandler } from './WiredMessageHandler'; +import { ConditionDefinition, TriggerDefinition, WiredActionDefinition } from '@nitrots/nitro-renderer'; +import { FC } from 'react'; +import { useWired } from '../../hooks'; +import { WiredActionLayoutView } from './views/actions/WiredActionLayoutView'; +import { WiredConditionLayoutView } from './views/conditions/WiredConditionLayoutView'; +import { WiredTriggerLayoutView } from './views/triggers/WiredTriggerLayoutView'; export const WiredView: FC<{}> = props => { - const [ trigger, setTrigger ] = useState(null); - const [ intParams, setIntParams ] = useState([]); - const [ stringParam, setStringParam ] = useState(''); - const [ furniIds, setFurniIds ] = useState([]); - const [ actionDelay, setActionDelay ] = useState(0); + const { trigger = null } = useWired(); - const saveWired = () => - { - const save = (trigger: Triggerable) => - { - if(!trigger) return; + if(!trigger) return null; - if(trigger instanceof WiredActionDefinition) - { - SendMessageComposer(new UpdateActionMessageComposer(trigger.id, intParams, stringParam, furniIds, actionDelay, trigger.stuffTypeSelectionCode)); - } + if(trigger instanceof WiredActionDefinition) return WiredActionLayoutView(trigger.code); - else if(trigger instanceof TriggerDefinition) - { - SendMessageComposer(new UpdateTriggerMessageComposer(trigger.id, intParams, stringParam, furniIds, trigger.stuffTypeSelectionCode)); - } - - else if(trigger instanceof ConditionDefinition) - { - SendMessageComposer(new UpdateConditionMessageComposer(trigger.id, intParams, stringParam, furniIds, trigger.stuffTypeSelectionCode)); - } - } - - if(!IsOwnerOfFloorFurniture(trigger.id)) - { - NotificationUtilities.confirm(LocalizeText('wiredfurni.nonowner.change.confirm.body'), () => - { - save(trigger) - }, null, null, null, LocalizeText('wiredfurni.nonowner.change.confirm.title')); - } - else - { - save(trigger); - } - } - - return ( - - - { (trigger !== null) && - GetWiredLayout(trigger) } - - ); + if(trigger instanceof TriggerDefinition) return WiredTriggerLayoutView(trigger.code); + + if(trigger instanceof ConditionDefinition) return WiredConditionLayoutView(trigger.code); + + return null; }; diff --git a/src/components/wired/common/GetWiredActionLayout.tsx b/src/components/wired/common/GetWiredActionLayout.tsx deleted file mode 100644 index a5fc49e9..00000000 --- a/src/components/wired/common/GetWiredActionLayout.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import { WiredActionLayout } from '../../../api'; -import { WiredActionBotChangeFigureView } from '../views/actions/WiredActionBotChangeFigureView'; -import { WiredActionBotFollowAvatarView } from '../views/actions/WiredActionBotFollowAvatarView'; -import { WiredActionBotGiveHandItemView } from '../views/actions/WiredActionBotGiveHandItemView'; -import { WiredActionBotMoveView } from '../views/actions/WiredActionBotMoveView'; -import { WiredActionBotTalkToAvatarView } from '../views/actions/WiredActionBotTalkToAvatarView'; -import { WiredActionBotTalkView } from '../views/actions/WiredActionBotTalkView'; -import { WiredActionBotTeleportView } from '../views/actions/WiredActionBotTeleportView'; -import { WiredActionCallAnotherStackView } from '../views/actions/WiredActionCallAnotherStackView'; -import { WiredActionChaseView } from '../views/actions/WiredActionChaseView'; -import { WiredActionChatView } from '../views/actions/WiredActionChatView'; -import { WiredActionFleeView } from '../views/actions/WiredActionFleeView'; -import { WiredActionGiveRewardView } from '../views/actions/WiredActionGiveRewardView'; -import { WiredActionGiveScoreToPredefinedTeamView } from '../views/actions/WiredActionGiveScoreToPredefinedTeamView'; -import { WiredActionGiveScoreView } from '../views/actions/WiredActionGiveScoreView'; -import { WiredActionJoinTeamView } from '../views/actions/WiredActionJoinTeamView'; -import { WiredActionKickFromRoomView } from '../views/actions/WiredActionKickFromRoomView'; -import { WiredActionLeaveTeamView } from '../views/actions/WiredActionLeaveTeamView'; -import { WiredActionMoveAndRotateFurniView } from '../views/actions/WiredActionMoveAndRotateFurniView'; -import { WiredActionMoveFurniToView } from '../views/actions/WiredActionMoveFurniToView'; -import { WiredActionMoveFurniView } from '../views/actions/WiredActionMoveFurniView'; -import { WiredActionMuteUserView } from '../views/actions/WiredActionMuteUserView'; -import { WiredActionResetView } from '../views/actions/WiredActionResetView'; -import { WiredActionSetFurniStateToView } from '../views/actions/WiredActionSetFurniStateToView'; -import { WiredActionTeleportView } from '../views/actions/WiredActionTeleportView'; -import { WiredActionToggleFurniStateView } from '../views/actions/WiredActionToggleFurniStateView'; - -export const GetWiredActionLayout = (code: number) => -{ - switch(code) - { - case WiredActionLayout.BOT_CHANGE_FIGURE: - return ; - case WiredActionLayout.BOT_FOLLOW_AVATAR: - return ; - case WiredActionLayout.BOT_GIVE_HAND_ITEM: - return ; - case WiredActionLayout.BOT_MOVE: - return ; - case WiredActionLayout.BOT_TALK: - return ; - case WiredActionLayout.BOT_TALK_DIRECT_TO_AVTR: - return ; - case WiredActionLayout.BOT_TELEPORT: - return ; - case WiredActionLayout.CALL_ANOTHER_STACK: - return ; - case WiredActionLayout.CHASE: - return ; - case WiredActionLayout.CHAT: - return ; - case WiredActionLayout.FLEE: - return ; - case WiredActionLayout.GIVE_REWARD: - return ; - case WiredActionLayout.GIVE_SCORE: - return ; - case WiredActionLayout.GIVE_SCORE_TO_PREDEFINED_TEAM: - return ; - case WiredActionLayout.JOIN_TEAM: - return ; - case WiredActionLayout.KICK_FROM_ROOM: - return ; - case WiredActionLayout.LEAVE_TEAM: - return ; - case WiredActionLayout.MOVE_FURNI: - return ; - case WiredActionLayout.MOVE_AND_ROTATE_FURNI: - return ; - case WiredActionLayout.MOVE_FURNI_TO: - return ; - case WiredActionLayout.MUTE_USER: - return ; - case WiredActionLayout.RESET: - return ; - case WiredActionLayout.SET_FURNI_STATE: - return ; - case WiredActionLayout.TELEPORT: - return ; - case WiredActionLayout.TOGGLE_FURNI_STATE: - return ; - } - - return null; -} diff --git a/src/components/wired/common/GetWiredLayout.tsx b/src/components/wired/common/GetWiredLayout.tsx deleted file mode 100644 index 5b5a6bed..00000000 --- a/src/components/wired/common/GetWiredLayout.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { ConditionDefinition, Triggerable, TriggerDefinition, WiredActionDefinition } from '@nitrots/nitro-renderer'; -import { GetWiredActionLayout } from './GetWiredActionLayout'; -import { GetWiredConditionLayout } from './GetWiredConditionLayout'; -import { GetWiredTriggerLayout } from './GetWiredTriggerLayout'; - -export const GetWiredLayout = (trigger: Triggerable) => -{ - if(trigger instanceof WiredActionDefinition) return GetWiredActionLayout(trigger.code); - - if(trigger instanceof TriggerDefinition) return GetWiredTriggerLayout(trigger.code); - - if(trigger instanceof ConditionDefinition) return GetWiredConditionLayout(trigger.code); - - return null; -} diff --git a/src/components/wired/views/WiredBaseView.tsx b/src/components/wired/views/WiredBaseView.tsx index 7836ce39..05ec25bf 100644 --- a/src/components/wired/views/WiredBaseView.tsx +++ b/src/components/wired/views/WiredBaseView.tsx @@ -1,7 +1,7 @@ import { FC, PropsWithChildren, useEffect, useState } from 'react'; import { GetSessionDataManager, LocalizeText, WiredFurniType, WiredSelectionVisualizer } from '../../../api'; import { Button, Column, Flex, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../common'; -import { useWiredContext } from '../WiredContext'; +import { useWired } from '../../../hooks'; import { WiredFurniSelectorView } from './WiredFurniSelectorView'; export interface WiredBaseViewProps @@ -19,7 +19,7 @@ export const WiredBaseView: FC> = props => const [ wiredName, setWiredName ] = useState(null); const [ wiredDescription, setWiredDescription ] = useState(null); const [ needsSave, setNeedsSave ] = useState(false); - const { trigger = null, setTrigger = null, setIntParams = null, setStringParam = null, setFurniIds = null, saveWired = null } = useWiredContext(); + const { trigger = null, setTrigger = null, setIntParams = null, setStringParam = null, setFurniIds = null, saveWired = null } = useWired(); const close = () => setTrigger(null); diff --git a/src/components/wired/views/WiredFurniSelectorView.tsx b/src/components/wired/views/WiredFurniSelectorView.tsx index 38bf5b16..9b38f972 100644 --- a/src/components/wired/views/WiredFurniSelectorView.tsx +++ b/src/components/wired/views/WiredFurniSelectorView.tsx @@ -1,45 +1,11 @@ -import { FC, useCallback } from 'react'; -import { LocalizeText, WiredSelectionVisualizer } from '../../../api'; +import { FC } from 'react'; +import { LocalizeText } from '../../../api'; import { Column, Text } from '../../../common'; -import { WiredSelectObjectEvent } from '../../../events'; -import { UseUiEvent } from '../../../hooks'; -import { useWiredContext } from '../WiredContext'; +import { useWired } from '../../../hooks'; export const WiredFurniSelectorView: FC<{}> = props => { - const { trigger = null, furniIds = [], setFurniIds = null } = useWiredContext(); - - const onWiredSelectObjectEvent = useCallback((event: WiredSelectObjectEvent) => - { - const furniId = event.objectId; - - if(furniId <= 0) return; - - setFurniIds(prevValue => - { - const newFurniIds = [ ...prevValue ]; - - const index = prevValue.indexOf(furniId); - - if(index >= 0) - { - newFurniIds.splice(index, 1); - - WiredSelectionVisualizer.hide(furniId); - } - - else if(newFurniIds.length < trigger.maximumItemSelectionCount) - { - newFurniIds.push(furniId); - - WiredSelectionVisualizer.show(furniId); - } - - return newFurniIds; - }); - }, [ trigger, setFurniIds ]); - - UseUiEvent(WiredSelectObjectEvent.SELECT_OBJECT, onWiredSelectObjectEvent); + const { trigger = null, furniIds = [] } = useWired(); return ( diff --git a/src/components/wired/views/actions/WiredActionBaseView.tsx b/src/components/wired/views/actions/WiredActionBaseView.tsx index 71e187a0..6c7a86eb 100644 --- a/src/components/wired/views/actions/WiredActionBaseView.tsx +++ b/src/components/wired/views/actions/WiredActionBaseView.tsx @@ -3,7 +3,7 @@ import { FC, PropsWithChildren, useEffect } from 'react'; import ReactSlider from 'react-slider'; import { GetWiredTimeLocale, LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredBaseView } from '../WiredBaseView'; export interface WiredActionBaseViewProps @@ -16,7 +16,7 @@ export interface WiredActionBaseViewProps export const WiredActionBaseView: FC> = props => { const { requiresFurni = WiredFurniType.STUFF_SELECTION_OPTION_NONE, save = null, hasSpecialInput = false, children = null } = props; - const { trigger = null, actionDelay = 0, setActionDelay = null } = useWiredContext(); + const { trigger = null, actionDelay = 0, setActionDelay = null } = useWired(); useEffect(() => { diff --git a/src/components/wired/views/actions/WiredActionBotChangeFigureView.tsx b/src/components/wired/views/actions/WiredActionBotChangeFigureView.tsx index 48ca80e9..4289f951 100644 --- a/src/components/wired/views/actions/WiredActionBotChangeFigureView.tsx +++ b/src/components/wired/views/actions/WiredActionBotChangeFigureView.tsx @@ -1,7 +1,7 @@ import { FC, useEffect, useState } from 'react'; import { GetSessionDataManager, LocalizeText, WiredFurniType, WIRED_STRING_DELIMETER } from '../../../../api'; import { Button, Column, Flex, LayoutAvatarImageView, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; const DEFAULT_FIGURE: string = 'hd-180-1.ch-210-66.lg-270-82.sh-290-81'; @@ -10,7 +10,7 @@ export const WiredActionBotChangeFigureView: FC<{}> = props => { const [ botName, setBotName ] = useState(''); const [ figure, setFigure ] = useState(''); - const { trigger = null, setStringParam = null } = useWiredContext(); + const { trigger = null, setStringParam = null } = useWired(); const save = () => setStringParam((botName + WIRED_STRING_DELIMETER + figure)); diff --git a/src/components/wired/views/actions/WiredActionBotFollowAvatarView.tsx b/src/components/wired/views/actions/WiredActionBotFollowAvatarView.tsx index 0a609506..2acb5cc1 100644 --- a/src/components/wired/views/actions/WiredActionBotFollowAvatarView.tsx +++ b/src/components/wired/views/actions/WiredActionBotFollowAvatarView.tsx @@ -1,14 +1,14 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Flex, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; export const WiredActionBotFollowAvatarView: FC<{}> = props => { const [ botName, setBotName ] = useState(''); const [ followMode, setFollowMode ] = useState(-1); - const { trigger = null, setStringParam = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setStringParam = null, setIntParams = null } = useWired(); const save = () => { diff --git a/src/components/wired/views/actions/WiredActionBotGiveHandItemView.tsx b/src/components/wired/views/actions/WiredActionBotGiveHandItemView.tsx index b3e7d6b2..c93d0de3 100644 --- a/src/components/wired/views/actions/WiredActionBotGiveHandItemView.tsx +++ b/src/components/wired/views/actions/WiredActionBotGiveHandItemView.tsx @@ -1,7 +1,7 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; const ALLOWED_HAND_ITEM_IDS: number[] = [ 2, 5, 7, 8, 9, 10, 27 ]; @@ -10,7 +10,7 @@ export const WiredActionBotGiveHandItemView: FC<{}> = props => { const [ botName, setBotName ] = useState(''); const [ handItemId, setHandItemId ] = useState(-1); - const { trigger = null, setStringParam = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setStringParam = null, setIntParams = null } = useWired(); const save = () => { diff --git a/src/components/wired/views/actions/WiredActionBotMoveView.tsx b/src/components/wired/views/actions/WiredActionBotMoveView.tsx index 414047c2..d09a359a 100644 --- a/src/components/wired/views/actions/WiredActionBotMoveView.tsx +++ b/src/components/wired/views/actions/WiredActionBotMoveView.tsx @@ -1,13 +1,13 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; export const WiredActionBotMoveView: FC<{}> = props => { const [ botName, setBotName ] = useState(''); - const { trigger = null, setStringParam = null } = useWiredContext(); + const { trigger = null, setStringParam = null } = useWired(); const save = () => setStringParam(botName); diff --git a/src/components/wired/views/actions/WiredActionBotTalkToAvatarView.tsx b/src/components/wired/views/actions/WiredActionBotTalkToAvatarView.tsx index 2aa05687..f2866e05 100644 --- a/src/components/wired/views/actions/WiredActionBotTalkToAvatarView.tsx +++ b/src/components/wired/views/actions/WiredActionBotTalkToAvatarView.tsx @@ -1,7 +1,7 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType, WIRED_STRING_DELIMETER } from '../../../../api'; import { Column, Flex, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; export const WiredActionBotTalkToAvatarView: FC<{}> = props => @@ -9,7 +9,7 @@ export const WiredActionBotTalkToAvatarView: FC<{}> = props => const [ botName, setBotName ] = useState(''); const [ message, setMessage ] = useState(''); const [ talkMode, setTalkMode ] = useState(-1); - const { trigger = null, setStringParam = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setStringParam = null, setIntParams = null } = useWired(); const save = () => { diff --git a/src/components/wired/views/actions/WiredActionBotTalkView.tsx b/src/components/wired/views/actions/WiredActionBotTalkView.tsx index df1070b3..b457c431 100644 --- a/src/components/wired/views/actions/WiredActionBotTalkView.tsx +++ b/src/components/wired/views/actions/WiredActionBotTalkView.tsx @@ -1,7 +1,7 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType, WIRED_STRING_DELIMETER } from '../../../../api'; import { Column, Flex, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; export const WiredActionBotTalkView: FC<{}> = props => @@ -9,7 +9,7 @@ export const WiredActionBotTalkView: FC<{}> = props => const [ botName, setBotName ] = useState(''); const [ message, setMessage ] = useState(''); const [ talkMode, setTalkMode ] = useState(-1); - const { trigger = null, setStringParam = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setStringParam = null, setIntParams = null } = useWired(); const save = () => { diff --git a/src/components/wired/views/actions/WiredActionBotTeleportView.tsx b/src/components/wired/views/actions/WiredActionBotTeleportView.tsx index a77c514f..5d767b1c 100644 --- a/src/components/wired/views/actions/WiredActionBotTeleportView.tsx +++ b/src/components/wired/views/actions/WiredActionBotTeleportView.tsx @@ -1,13 +1,13 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; export const WiredActionBotTeleportView: FC<{}> = props => { const [ botName, setBotName ] = useState(''); - const { trigger = null, setStringParam = null } = useWiredContext(); + const { trigger = null, setStringParam = null } = useWired(); const save = () => setStringParam(botName); diff --git a/src/components/wired/views/actions/WiredActionChatView.tsx b/src/components/wired/views/actions/WiredActionChatView.tsx index cea1c02a..b570af7f 100644 --- a/src/components/wired/views/actions/WiredActionChatView.tsx +++ b/src/components/wired/views/actions/WiredActionChatView.tsx @@ -1,14 +1,13 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; -import { Column } from '../../../../common/Column'; -import { Text } from '../../../../common/Text'; -import { useWiredContext } from '../../WiredContext'; +import { Column, Text } from '../../../../common'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; export const WiredActionChatView: FC<{}> = props => { const [ message, setMessage ] = useState(''); - const { trigger = null, setStringParam = null } = useWiredContext(); + const { trigger = null, setStringParam = null } = useWired(); const save = () => setStringParam(message); diff --git a/src/components/wired/views/actions/WiredActionGiveRewardView.tsx b/src/components/wired/views/actions/WiredActionGiveRewardView.tsx index 43a8f943..937a175d 100644 --- a/src/components/wired/views/actions/WiredActionGiveRewardView.tsx +++ b/src/components/wired/views/actions/WiredActionGiveRewardView.tsx @@ -2,11 +2,8 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { FC, useCallback, useEffect, useState } from 'react'; import ReactSlider from 'react-slider'; import { LocalizeText, WiredFurniType } from '../../../../api'; -import { Button } from '../../../../common/Button'; -import { Column } from '../../../../common/Column'; -import { Flex } from '../../../../common/Flex'; -import { Text } from '../../../../common/Text'; -import { useWiredContext } from '../../WiredContext'; +import { Button, Column, Flex, Text } from '../../../../common'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; export const WiredActionGiveRewardView: FC<{}> = props => @@ -17,7 +14,7 @@ export const WiredActionGiveRewardView: FC<{}> = props => const [ rewardsLimit, setRewardsLimit ] = useState(1); const [ limitationInterval, setLimitationInterval ] = useState(1); const [ rewards, setRewards ] = useState<{ isBadge: boolean, itemCode: string, probability: number }[]>([]); - const { trigger = null, setIntParams = null, setStringParam = null } = useWiredContext(); + const { trigger = null, setIntParams = null, setStringParam = null } = useWired(); const addReward = useCallback(() => { diff --git a/src/components/wired/views/actions/WiredActionGiveScoreToPredefinedTeamView.tsx b/src/components/wired/views/actions/WiredActionGiveScoreToPredefinedTeamView.tsx index 0e74317d..43ab240a 100644 --- a/src/components/wired/views/actions/WiredActionGiveScoreToPredefinedTeamView.tsx +++ b/src/components/wired/views/actions/WiredActionGiveScoreToPredefinedTeamView.tsx @@ -2,7 +2,7 @@ import { FC, useEffect, useState } from 'react'; import ReactSlider from 'react-slider'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Flex, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; export const WiredActionGiveScoreToPredefinedTeamView: FC<{}> = props => @@ -10,7 +10,7 @@ export const WiredActionGiveScoreToPredefinedTeamView: FC<{}> = props => const [ points, setPoints ] = useState(1); const [ time, setTime ] = useState(1); const [ selectedTeam, setSelectedTeam ] = useState(1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ points, time, selectedTeam ]); diff --git a/src/components/wired/views/actions/WiredActionGiveScoreView.tsx b/src/components/wired/views/actions/WiredActionGiveScoreView.tsx index 9110795f..28bfb0b2 100644 --- a/src/components/wired/views/actions/WiredActionGiveScoreView.tsx +++ b/src/components/wired/views/actions/WiredActionGiveScoreView.tsx @@ -2,14 +2,14 @@ import { FC, useEffect, useState } from 'react'; import ReactSlider from 'react-slider'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; export const WiredActionGiveScoreView: FC<{}> = props => { const [ points, setPoints ] = useState(1); const [ time, setTime ] = useState(1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ points, time ]); diff --git a/src/components/wired/views/actions/WiredActionJoinTeamView.tsx b/src/components/wired/views/actions/WiredActionJoinTeamView.tsx index 9684ec23..7580564e 100644 --- a/src/components/wired/views/actions/WiredActionJoinTeamView.tsx +++ b/src/components/wired/views/actions/WiredActionJoinTeamView.tsx @@ -1,13 +1,13 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Flex, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; export const WiredActionJoinTeamView: FC<{}> = props => { const [ selectedTeam, setSelectedTeam ] = useState(-1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ selectedTeam ]); diff --git a/src/components/wired/views/actions/WiredActionKickFromRoomView.tsx b/src/components/wired/views/actions/WiredActionKickFromRoomView.tsx index 81d03160..e16b6684 100644 --- a/src/components/wired/views/actions/WiredActionKickFromRoomView.tsx +++ b/src/components/wired/views/actions/WiredActionKickFromRoomView.tsx @@ -1,13 +1,13 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; export const WiredActionKickFromRoomView: FC<{}> = props => { const [ message, setMessage ] = useState(''); - const { trigger = null, setStringParam = null } = useWiredContext(); + const { trigger = null, setStringParam = null } = useWired(); const save = () => setStringParam(message); diff --git a/src/components/wired/views/actions/WiredActionLayoutView.tsx b/src/components/wired/views/actions/WiredActionLayoutView.tsx new file mode 100644 index 00000000..f43666ab --- /dev/null +++ b/src/components/wired/views/actions/WiredActionLayoutView.tsx @@ -0,0 +1,85 @@ +import { WiredActionLayoutCode } from '../../../../api'; +import { WiredActionBotChangeFigureView } from './WiredActionBotChangeFigureView'; +import { WiredActionBotFollowAvatarView } from './WiredActionBotFollowAvatarView'; +import { WiredActionBotGiveHandItemView } from './WiredActionBotGiveHandItemView'; +import { WiredActionBotMoveView } from './WiredActionBotMoveView'; +import { WiredActionBotTalkToAvatarView } from './WiredActionBotTalkToAvatarView'; +import { WiredActionBotTalkView } from './WiredActionBotTalkView'; +import { WiredActionBotTeleportView } from './WiredActionBotTeleportView'; +import { WiredActionCallAnotherStackView } from './WiredActionCallAnotherStackView'; +import { WiredActionChaseView } from './WiredActionChaseView'; +import { WiredActionChatView } from './WiredActionChatView'; +import { WiredActionFleeView } from './WiredActionFleeView'; +import { WiredActionGiveRewardView } from './WiredActionGiveRewardView'; +import { WiredActionGiveScoreToPredefinedTeamView } from './WiredActionGiveScoreToPredefinedTeamView'; +import { WiredActionGiveScoreView } from './WiredActionGiveScoreView'; +import { WiredActionJoinTeamView } from './WiredActionJoinTeamView'; +import { WiredActionKickFromRoomView } from './WiredActionKickFromRoomView'; +import { WiredActionLeaveTeamView } from './WiredActionLeaveTeamView'; +import { WiredActionMoveAndRotateFurniView } from './WiredActionMoveAndRotateFurniView'; +import { WiredActionMoveFurniToView } from './WiredActionMoveFurniToView'; +import { WiredActionMoveFurniView } from './WiredActionMoveFurniView'; +import { WiredActionMuteUserView } from './WiredActionMuteUserView'; +import { WiredActionResetView } from './WiredActionResetView'; +import { WiredActionSetFurniStateToView } from './WiredActionSetFurniStateToView'; +import { WiredActionTeleportView } from './WiredActionTeleportView'; +import { WiredActionToggleFurniStateView } from './WiredActionToggleFurniStateView'; + +export const WiredActionLayoutView = (code: number) => +{ + switch(code) + { + case WiredActionLayoutCode.BOT_CHANGE_FIGURE: + return ; + case WiredActionLayoutCode.BOT_FOLLOW_AVATAR: + return ; + case WiredActionLayoutCode.BOT_GIVE_HAND_ITEM: + return ; + case WiredActionLayoutCode.BOT_MOVE: + return ; + case WiredActionLayoutCode.BOT_TALK: + return ; + case WiredActionLayoutCode.BOT_TALK_DIRECT_TO_AVTR: + return ; + case WiredActionLayoutCode.BOT_TELEPORT: + return ; + case WiredActionLayoutCode.CALL_ANOTHER_STACK: + return ; + case WiredActionLayoutCode.CHASE: + return ; + case WiredActionLayoutCode.CHAT: + return ; + case WiredActionLayoutCode.FLEE: + return ; + case WiredActionLayoutCode.GIVE_REWARD: + return ; + case WiredActionLayoutCode.GIVE_SCORE: + return ; + case WiredActionLayoutCode.GIVE_SCORE_TO_PREDEFINED_TEAM: + return ; + case WiredActionLayoutCode.JOIN_TEAM: + return ; + case WiredActionLayoutCode.KICK_FROM_ROOM: + return ; + case WiredActionLayoutCode.LEAVE_TEAM: + return ; + case WiredActionLayoutCode.MOVE_FURNI: + return ; + case WiredActionLayoutCode.MOVE_AND_ROTATE_FURNI: + return ; + case WiredActionLayoutCode.MOVE_FURNI_TO: + return ; + case WiredActionLayoutCode.MUTE_USER: + return ; + case WiredActionLayoutCode.RESET: + return ; + case WiredActionLayoutCode.SET_FURNI_STATE: + return ; + case WiredActionLayoutCode.TELEPORT: + return ; + case WiredActionLayoutCode.TOGGLE_FURNI_STATE: + return ; + } + + return null; +} diff --git a/src/components/wired/views/actions/WiredActionMoveAndRotateFurniView.tsx b/src/components/wired/views/actions/WiredActionMoveAndRotateFurniView.tsx index dd57422a..62801af8 100644 --- a/src/components/wired/views/actions/WiredActionMoveAndRotateFurniView.tsx +++ b/src/components/wired/views/actions/WiredActionMoveAndRotateFurniView.tsx @@ -1,7 +1,7 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Flex, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; const directionOptions: { value: number, icon: string }[] = [ @@ -29,7 +29,7 @@ export const WiredActionMoveAndRotateFurniView: FC<{}> = props => { const [ movement, setMovement ] = useState(-1); const [ rotation, setRotation ] = useState(-1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ movement, rotation ]); diff --git a/src/components/wired/views/actions/WiredActionMoveFurniToView.tsx b/src/components/wired/views/actions/WiredActionMoveFurniToView.tsx index 834313de..56bdb6b4 100644 --- a/src/components/wired/views/actions/WiredActionMoveFurniToView.tsx +++ b/src/components/wired/views/actions/WiredActionMoveFurniToView.tsx @@ -2,7 +2,7 @@ import { FC, useEffect, useState } from 'react'; import ReactSlider from 'react-slider'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Flex, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; const directionOptions: { value: number, icon: string }[] = [ @@ -28,7 +28,7 @@ export const WiredActionMoveFurniToView: FC<{}> = props => { const [ spacing, setSpacing ] = useState(-1); const [ movement, setMovement ] = useState(-1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ movement, spacing ]); diff --git a/src/components/wired/views/actions/WiredActionMoveFurniView.tsx b/src/components/wired/views/actions/WiredActionMoveFurniView.tsx index f97c975d..b5a08887 100644 --- a/src/components/wired/views/actions/WiredActionMoveFurniView.tsx +++ b/src/components/wired/views/actions/WiredActionMoveFurniView.tsx @@ -1,7 +1,7 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Flex, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; const directionOptions: { value: number, icon: string }[] = [ @@ -41,7 +41,7 @@ export const WiredActionMoveFurniView: FC<{}> = props => { const [ movement, setMovement ] = useState(-1); const [ rotation, setRotation ] = useState(-1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ movement, rotation ]); diff --git a/src/components/wired/views/actions/WiredActionMuteUserView.tsx b/src/components/wired/views/actions/WiredActionMuteUserView.tsx index 09b396eb..e34bd60a 100644 --- a/src/components/wired/views/actions/WiredActionMuteUserView.tsx +++ b/src/components/wired/views/actions/WiredActionMuteUserView.tsx @@ -2,14 +2,14 @@ import { FC, useEffect, useState } from 'react'; import ReactSlider from 'react-slider'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; export const WiredActionMuteUserView: FC<{}> = props => { const [ time, setTime ] = useState(-1); const [ message, setMessage ] = useState(''); - const { trigger = null, setIntParams = null, setStringParam = null } = useWiredContext(); + const { trigger = null, setIntParams = null, setStringParam = null } = useWired(); const save = () => { diff --git a/src/components/wired/views/actions/WiredActionSetFurniStateToView.tsx b/src/components/wired/views/actions/WiredActionSetFurniStateToView.tsx index 5f2ca70a..587254c8 100644 --- a/src/components/wired/views/actions/WiredActionSetFurniStateToView.tsx +++ b/src/components/wired/views/actions/WiredActionSetFurniStateToView.tsx @@ -1,7 +1,7 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Flex, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredActionBaseView } from './WiredActionBaseView'; export const WiredActionSetFurniStateToView: FC<{}> = props => @@ -9,7 +9,7 @@ export const WiredActionSetFurniStateToView: FC<{}> = props => const [ stateFlag, setStateFlag ] = useState(0); const [ directionFlag, setDirectionFlag ] = useState(0); const [ positionFlag, setPositionFlag ] = useState(0); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ stateFlag, directionFlag, positionFlag ]); diff --git a/src/components/wired/views/conditions/WiredConditionActorHasHandItem.tsx b/src/components/wired/views/conditions/WiredConditionActorHasHandItem.tsx index fb50fd1b..24e89ed1 100644 --- a/src/components/wired/views/conditions/WiredConditionActorHasHandItem.tsx +++ b/src/components/wired/views/conditions/WiredConditionActorHasHandItem.tsx @@ -1,7 +1,7 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredConditionBaseView } from './WiredConditionBaseView'; const ALLOWED_HAND_ITEM_IDS: number[] = [ 2, 5, 7, 8, 9, 10, 27 ]; @@ -9,7 +9,7 @@ const ALLOWED_HAND_ITEM_IDS: number[] = [ 2, 5, 7, 8, 9, 10, 27 ]; export const WiredConditionActorHasHandItemView: FC<{}> = props => { const [ handItemId, setHandItemId ] = useState(-1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ handItemId ]); diff --git a/src/components/wired/views/conditions/WiredConditionActorIsTeamMemberView.tsx b/src/components/wired/views/conditions/WiredConditionActorIsTeamMemberView.tsx index 31bad9d9..20db3ac3 100644 --- a/src/components/wired/views/conditions/WiredConditionActorIsTeamMemberView.tsx +++ b/src/components/wired/views/conditions/WiredConditionActorIsTeamMemberView.tsx @@ -1,7 +1,7 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Flex, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredConditionBaseView } from './WiredConditionBaseView'; const teamIds: number[] = [ 1, 2, 3, 4 ]; @@ -9,7 +9,7 @@ const teamIds: number[] = [ 1, 2, 3, 4 ]; export const WiredConditionActorIsTeamMemberView: FC<{}> = props => { const [ selectedTeam, setSelectedTeam ] = useState(-1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ selectedTeam ]); diff --git a/src/components/wired/views/conditions/WiredConditionActorIsWearingBadgeView.tsx b/src/components/wired/views/conditions/WiredConditionActorIsWearingBadgeView.tsx index f06175d7..01e6d3b1 100644 --- a/src/components/wired/views/conditions/WiredConditionActorIsWearingBadgeView.tsx +++ b/src/components/wired/views/conditions/WiredConditionActorIsWearingBadgeView.tsx @@ -1,13 +1,13 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredConditionBaseView } from './WiredConditionBaseView'; export const WiredConditionActorIsWearingBadgeView: FC<{}> = props => { const [ badge, setBadge ] = useState(''); - const { trigger = null, setStringParam = null } = useWiredContext(); + const { trigger = null, setStringParam = null } = useWired(); const save = () => setStringParam(badge); diff --git a/src/components/wired/views/conditions/WiredConditionActorIsWearingEffectView.tsx b/src/components/wired/views/conditions/WiredConditionActorIsWearingEffectView.tsx index f715d3cc..0909018e 100644 --- a/src/components/wired/views/conditions/WiredConditionActorIsWearingEffectView.tsx +++ b/src/components/wired/views/conditions/WiredConditionActorIsWearingEffectView.tsx @@ -1,13 +1,13 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredConditionBaseView } from './WiredConditionBaseView'; export const WiredConditionActorIsWearingEffectView: FC<{}> = props => { const [ effect, setEffect ] = useState(-1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ effect ]); diff --git a/src/components/wired/views/conditions/WiredConditionDateRangeView.tsx b/src/components/wired/views/conditions/WiredConditionDateRangeView.tsx index c0d9b14c..36832e11 100644 --- a/src/components/wired/views/conditions/WiredConditionDateRangeView.tsx +++ b/src/components/wired/views/conditions/WiredConditionDateRangeView.tsx @@ -1,14 +1,14 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredDateToString, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredConditionBaseView } from './WiredConditionBaseView'; export const WiredConditionDateRangeView: FC<{}> = props => { const [ startDate, setStartDate ] = useState(''); const [ endDate, setEndDate ] = useState(''); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => { diff --git a/src/components/wired/views/conditions/WiredConditionFurniHasFurniOnView.tsx b/src/components/wired/views/conditions/WiredConditionFurniHasFurniOnView.tsx index 33a450a8..1a9d0ef6 100644 --- a/src/components/wired/views/conditions/WiredConditionFurniHasFurniOnView.tsx +++ b/src/components/wired/views/conditions/WiredConditionFurniHasFurniOnView.tsx @@ -1,13 +1,13 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Flex, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredConditionBaseView } from './WiredConditionBaseView'; export const WiredConditionFurniHasFurniOnView: FC<{}> = props => { const [ requireAll, setRequireAll ] = useState(-1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ requireAll ]); diff --git a/src/components/wired/views/conditions/WiredConditionFurniHasNotFurniOnView.tsx b/src/components/wired/views/conditions/WiredConditionFurniHasNotFurniOnView.tsx index 9852542f..031ec08f 100644 --- a/src/components/wired/views/conditions/WiredConditionFurniHasNotFurniOnView.tsx +++ b/src/components/wired/views/conditions/WiredConditionFurniHasNotFurniOnView.tsx @@ -1,13 +1,13 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Flex, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredConditionBaseView } from './WiredConditionBaseView'; export const WiredConditionFurniHasNotFurniOnView: FC<{}> = props => { const [ requireAll, setRequireAll ] = useState(-1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ requireAll ]); diff --git a/src/components/wired/views/conditions/WiredConditionFurniMatchesSnapshotView.tsx b/src/components/wired/views/conditions/WiredConditionFurniMatchesSnapshotView.tsx index 8fceb690..47a555e5 100644 --- a/src/components/wired/views/conditions/WiredConditionFurniMatchesSnapshotView.tsx +++ b/src/components/wired/views/conditions/WiredConditionFurniMatchesSnapshotView.tsx @@ -1,7 +1,7 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Flex, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredConditionBaseView } from './WiredConditionBaseView'; export const WiredConditionFurniMatchesSnapshotView: FC<{}> = props => @@ -9,7 +9,7 @@ export const WiredConditionFurniMatchesSnapshotView: FC<{}> = props => const [ stateFlag, setStateFlag ] = useState(0); const [ directionFlag, setDirectionFlag ] = useState(0); const [ positionFlag, setPositionFlag ] = useState(0); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ stateFlag, directionFlag, positionFlag ]); diff --git a/src/components/wired/common/GetWiredConditionLayout.tsx b/src/components/wired/views/conditions/WiredConditionLayoutView.tsx similarity index 56% rename from src/components/wired/common/GetWiredConditionLayout.tsx rename to src/components/wired/views/conditions/WiredConditionLayoutView.tsx index 4ea22f77..c7c49b2a 100644 --- a/src/components/wired/common/GetWiredConditionLayout.tsx +++ b/src/components/wired/views/conditions/WiredConditionLayoutView.tsx @@ -1,21 +1,21 @@ -import { WiredConditionlayout } from '../../../api'; -import { WiredConditionActorHasHandItemView } from '../views/conditions/WiredConditionActorHasHandItem'; -import { WiredConditionActorIsGroupMemberView } from '../views/conditions/WiredConditionActorIsGroupMemberView'; -import { WiredConditionActorIsOnFurniView } from '../views/conditions/WiredConditionActorIsOnFurniView'; -import { WiredConditionActorIsTeamMemberView } from '../views/conditions/WiredConditionActorIsTeamMemberView'; -import { WiredConditionActorIsWearingBadgeView } from '../views/conditions/WiredConditionActorIsWearingBadgeView'; -import { WiredConditionActorIsWearingEffectView } from '../views/conditions/WiredConditionActorIsWearingEffectView'; -import { WiredConditionDateRangeView } from '../views/conditions/WiredConditionDateRangeView'; -import { WiredConditionFurniHasAvatarOnView } from '../views/conditions/WiredConditionFurniHasAvatarOnView'; -import { WiredConditionFurniHasFurniOnView } from '../views/conditions/WiredConditionFurniHasFurniOnView'; -import { WiredConditionFurniHasNotFurniOnView } from '../views/conditions/WiredConditionFurniHasNotFurniOnView'; -import { WiredConditionFurniIsOfTypeView } from '../views/conditions/WiredConditionFurniIsOfTypeView'; -import { WiredConditionFurniMatchesSnapshotView } from '../views/conditions/WiredConditionFurniMatchesSnapshotView'; -import { WiredConditionTimeElapsedLessView } from '../views/conditions/WiredConditionTimeElapsedLessView'; -import { WiredConditionTimeElapsedMoreView } from '../views/conditions/WiredConditionTimeElapsedMoreView'; -import { WiredConditionUserCountInRoomView } from '../views/conditions/WiredConditionUserCountInRoomView'; +import { WiredConditionlayout } from '../../../../api'; +import { WiredConditionActorHasHandItemView } from './WiredConditionActorHasHandItem'; +import { WiredConditionActorIsGroupMemberView } from './WiredConditionActorIsGroupMemberView'; +import { WiredConditionActorIsOnFurniView } from './WiredConditionActorIsOnFurniView'; +import { WiredConditionActorIsTeamMemberView } from './WiredConditionActorIsTeamMemberView'; +import { WiredConditionActorIsWearingBadgeView } from './WiredConditionActorIsWearingBadgeView'; +import { WiredConditionActorIsWearingEffectView } from './WiredConditionActorIsWearingEffectView'; +import { WiredConditionDateRangeView } from './WiredConditionDateRangeView'; +import { WiredConditionFurniHasAvatarOnView } from './WiredConditionFurniHasAvatarOnView'; +import { WiredConditionFurniHasFurniOnView } from './WiredConditionFurniHasFurniOnView'; +import { WiredConditionFurniHasNotFurniOnView } from './WiredConditionFurniHasNotFurniOnView'; +import { WiredConditionFurniIsOfTypeView } from './WiredConditionFurniIsOfTypeView'; +import { WiredConditionFurniMatchesSnapshotView } from './WiredConditionFurniMatchesSnapshotView'; +import { WiredConditionTimeElapsedLessView } from './WiredConditionTimeElapsedLessView'; +import { WiredConditionTimeElapsedMoreView } from './WiredConditionTimeElapsedMoreView'; +import { WiredConditionUserCountInRoomView } from './WiredConditionUserCountInRoomView'; -export const GetWiredConditionLayout = (code: number) => +export const WiredConditionLayoutView = (code: number) => { switch(code) { diff --git a/src/components/wired/views/conditions/WiredConditionTimeElapsedLessView.tsx b/src/components/wired/views/conditions/WiredConditionTimeElapsedLessView.tsx index ab180b79..31d6d79c 100644 --- a/src/components/wired/views/conditions/WiredConditionTimeElapsedLessView.tsx +++ b/src/components/wired/views/conditions/WiredConditionTimeElapsedLessView.tsx @@ -2,13 +2,13 @@ import { FC, useEffect, useState } from 'react'; import ReactSlider from 'react-slider'; import { GetWiredTimeLocale, LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredConditionBaseView } from './WiredConditionBaseView'; export const WiredConditionTimeElapsedLessView: FC<{}> = props => { const [ time, setTime ] = useState(-1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ time ]); diff --git a/src/components/wired/views/conditions/WiredConditionTimeElapsedMoreView.tsx b/src/components/wired/views/conditions/WiredConditionTimeElapsedMoreView.tsx index 43e5559e..cb158e68 100644 --- a/src/components/wired/views/conditions/WiredConditionTimeElapsedMoreView.tsx +++ b/src/components/wired/views/conditions/WiredConditionTimeElapsedMoreView.tsx @@ -2,13 +2,13 @@ import { FC, useEffect, useState } from 'react'; import ReactSlider from 'react-slider'; import { GetWiredTimeLocale, LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredConditionBaseView } from './WiredConditionBaseView'; export const WiredConditionTimeElapsedMoreView: FC<{}> = props => { const [ time, setTime ] = useState(-1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ time ]); diff --git a/src/components/wired/views/conditions/WiredConditionUserCountInRoomView.tsx b/src/components/wired/views/conditions/WiredConditionUserCountInRoomView.tsx index 3bcab89e..824d7ae8 100644 --- a/src/components/wired/views/conditions/WiredConditionUserCountInRoomView.tsx +++ b/src/components/wired/views/conditions/WiredConditionUserCountInRoomView.tsx @@ -2,14 +2,14 @@ import { FC, useEffect, useState } from 'react'; import ReactSlider from 'react-slider'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredConditionBaseView } from './WiredConditionBaseView'; export const WiredConditionUserCountInRoomView: FC<{}> = props => { const [ min, setMin ] = useState(1); const [ max, setMax ] = useState(1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ min, max ]); diff --git a/src/components/wired/views/triggers/WiredTriggerAvatarEnterRoomView.tsx b/src/components/wired/views/triggers/WiredTriggerAvatarEnterRoomView.tsx index 5129b610..b14eafb6 100644 --- a/src/components/wired/views/triggers/WiredTriggerAvatarEnterRoomView.tsx +++ b/src/components/wired/views/triggers/WiredTriggerAvatarEnterRoomView.tsx @@ -1,14 +1,14 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Flex, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredTriggerBaseView } from './WiredTriggerBaseView'; export const WiredTriggerAvatarEnterRoomView: FC<{}> = props => { const [ username, setUsername ] = useState(''); const [ avatarMode, setAvatarMode ] = useState(0); - const { trigger = null, setStringParam = null } = useWiredContext(); + const { trigger = null, setStringParam = null } = useWired(); const save = () => setStringParam((avatarMode === 1) ? username : ''); diff --git a/src/components/wired/views/triggers/WiredTriggerAvatarSaysSomethingView.tsx b/src/components/wired/views/triggers/WiredTriggerAvatarSaysSomethingView.tsx index f8e2cd12..d8bc6210 100644 --- a/src/components/wired/views/triggers/WiredTriggerAvatarSaysSomethingView.tsx +++ b/src/components/wired/views/triggers/WiredTriggerAvatarSaysSomethingView.tsx @@ -1,14 +1,14 @@ import { FC, useEffect, useState } from 'react'; import { GetSessionDataManager, LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Flex, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredTriggerBaseView } from './WiredTriggerBaseView'; export const WiredTriggerAvatarSaysSomethingView: FC<{}> = props => { const [ message, setMessage ] = useState(''); const [ triggererAvatar, setTriggererAvatar ] = useState(-1); - const { trigger = null, setStringParam = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setStringParam = null, setIntParams = null } = useWired(); const save = () => { diff --git a/src/components/wired/views/triggers/WiredTriggerBotReachedAvatarView.tsx b/src/components/wired/views/triggers/WiredTriggerBotReachedAvatarView.tsx index c3d4c3e0..6984dc6d 100644 --- a/src/components/wired/views/triggers/WiredTriggerBotReachedAvatarView.tsx +++ b/src/components/wired/views/triggers/WiredTriggerBotReachedAvatarView.tsx @@ -1,13 +1,13 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredTriggerBaseView } from './WiredTriggerBaseView'; export const WiredTriggerBotReachedAvatarView: FC<{}> = props => { const [ botName, setBotName ] = useState(''); - const { trigger = null, setStringParam = null } = useWiredContext(); + const { trigger = null, setStringParam = null } = useWired(); const save = () => setStringParam(botName); diff --git a/src/components/wired/views/triggers/WiredTriggerBotReachedStuffView.tsx b/src/components/wired/views/triggers/WiredTriggerBotReachedStuffView.tsx index d09ccb2d..9cde1737 100644 --- a/src/components/wired/views/triggers/WiredTriggerBotReachedStuffView.tsx +++ b/src/components/wired/views/triggers/WiredTriggerBotReachedStuffView.tsx @@ -1,13 +1,13 @@ import { FC, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredTriggerBaseView } from './WiredTriggerBaseView'; export const WiredTriggerBotReachedStuffView: FC<{}> = props => { const [ botName, setBotName ] = useState(''); - const { trigger = null, setStringParam = null } = useWiredContext(); + const { trigger = null, setStringParam = null } = useWired(); const save = () => setStringParam(botName); @@ -17,7 +17,7 @@ export const WiredTriggerBotReachedStuffView: FC<{}> = props => }, [ trigger ]); return ( - + { LocalizeText('wiredfurni.params.bot.name') } setBotName(event.target.value) } /> diff --git a/src/components/wired/views/triggers/WiredTriggerExecuteOnceView.tsx b/src/components/wired/views/triggers/WiredTriggerExecuteOnceView.tsx index 6b465261..ea3d61bf 100644 --- a/src/components/wired/views/triggers/WiredTriggerExecuteOnceView.tsx +++ b/src/components/wired/views/triggers/WiredTriggerExecuteOnceView.tsx @@ -2,13 +2,13 @@ import { FC, useEffect, useState } from 'react'; import ReactSlider from 'react-slider'; import { GetWiredTimeLocale, LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredTriggerBaseView } from './WiredTriggerBaseView'; export const WiredTriggeExecuteOnceView: FC<{}> = props => { const [ time, setTime ] = useState(1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ time ]); diff --git a/src/components/wired/views/triggers/WiredTriggerExecutePeriodicallyLongView.tsx b/src/components/wired/views/triggers/WiredTriggerExecutePeriodicallyLongView.tsx index e13241dc..d9bc6bc4 100644 --- a/src/components/wired/views/triggers/WiredTriggerExecutePeriodicallyLongView.tsx +++ b/src/components/wired/views/triggers/WiredTriggerExecutePeriodicallyLongView.tsx @@ -3,13 +3,13 @@ import { FC, useEffect, useState } from 'react'; import ReactSlider from 'react-slider'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredTriggerBaseView } from './WiredTriggerBaseView'; export const WiredTriggeExecutePeriodicallyLongView: FC<{}> = props => { const [ time, setTime ] = useState(1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ time ]); diff --git a/src/components/wired/views/triggers/WiredTriggerExecutePeriodicallyView.tsx b/src/components/wired/views/triggers/WiredTriggerExecutePeriodicallyView.tsx index 64540a98..b77e642f 100644 --- a/src/components/wired/views/triggers/WiredTriggerExecutePeriodicallyView.tsx +++ b/src/components/wired/views/triggers/WiredTriggerExecutePeriodicallyView.tsx @@ -2,13 +2,13 @@ import { FC, useEffect, useState } from 'react'; import ReactSlider from 'react-slider'; import { GetWiredTimeLocale, LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredTriggerBaseView } from './WiredTriggerBaseView'; export const WiredTriggeExecutePeriodicallyView: FC<{}> = props => { const [ time, setTime ] = useState(1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ time ]); diff --git a/src/components/wired/common/GetWiredTriggerLayout.tsx b/src/components/wired/views/triggers/WiredTriggerLayoutView.tsx similarity index 50% rename from src/components/wired/common/GetWiredTriggerLayout.tsx rename to src/components/wired/views/triggers/WiredTriggerLayoutView.tsx index 4e6d2fa2..e45b2eac 100644 --- a/src/components/wired/common/GetWiredTriggerLayout.tsx +++ b/src/components/wired/views/triggers/WiredTriggerLayoutView.tsx @@ -1,20 +1,20 @@ -import { WiredTriggerLayout } from '../../../api'; -import { WiredTriggerAvatarEnterRoomView } from '../views/triggers/WiredTriggerAvatarEnterRoomView'; -import { WiredTriggerAvatarSaysSomethingView } from '../views/triggers/WiredTriggerAvatarSaysSomethingView'; -import { WiredTriggerAvatarWalksOffFurniView } from '../views/triggers/WiredTriggerAvatarWalksOffFurniView'; -import { WiredTriggerAvatarWalksOnFurniView } from '../views/triggers/WiredTriggerAvatarWalksOnFurni'; -import { WiredTriggerBotReachedAvatarView } from '../views/triggers/WiredTriggerBotReachedAvatarView'; -import { WiredTriggerBotReachedStuffView } from '../views/triggers/WiredTriggerBotReachedStuffView'; -import { WiredTriggerCollisionView } from '../views/triggers/WiredTriggerCollisionView'; -import { WiredTriggeExecuteOnceView } from '../views/triggers/WiredTriggerExecuteOnceView'; -import { WiredTriggeExecutePeriodicallyLongView } from '../views/triggers/WiredTriggerExecutePeriodicallyLongView'; -import { WiredTriggeExecutePeriodicallyView } from '../views/triggers/WiredTriggerExecutePeriodicallyView'; -import { WiredTriggerGameEndsView } from '../views/triggers/WiredTriggerGameEndsView'; -import { WiredTriggerGameStartsView } from '../views/triggers/WiredTriggerGameStartsView'; -import { WiredTriggeScoreAchievedView } from '../views/triggers/WiredTriggerScoreAchievedView'; -import { WiredTriggerToggleFurniView } from '../views/triggers/WiredTriggerToggleFurniView'; +import { WiredTriggerLayout } from '../../../../api'; +import { WiredTriggerAvatarEnterRoomView } from './WiredTriggerAvatarEnterRoomView'; +import { WiredTriggerAvatarSaysSomethingView } from './WiredTriggerAvatarSaysSomethingView'; +import { WiredTriggerAvatarWalksOffFurniView } from './WiredTriggerAvatarWalksOffFurniView'; +import { WiredTriggerAvatarWalksOnFurniView } from './WiredTriggerAvatarWalksOnFurni'; +import { WiredTriggerBotReachedAvatarView } from './WiredTriggerBotReachedAvatarView'; +import { WiredTriggerBotReachedStuffView } from './WiredTriggerBotReachedStuffView'; +import { WiredTriggerCollisionView } from './WiredTriggerCollisionView'; +import { WiredTriggeExecuteOnceView } from './WiredTriggerExecuteOnceView'; +import { WiredTriggeExecutePeriodicallyLongView } from './WiredTriggerExecutePeriodicallyLongView'; +import { WiredTriggeExecutePeriodicallyView } from './WiredTriggerExecutePeriodicallyView'; +import { WiredTriggerGameEndsView } from './WiredTriggerGameEndsView'; +import { WiredTriggerGameStartsView } from './WiredTriggerGameStartsView'; +import { WiredTriggeScoreAchievedView } from './WiredTriggerScoreAchievedView'; +import { WiredTriggerToggleFurniView } from './WiredTriggerToggleFurniView'; -export const GetWiredTriggerLayout = (code: number) => +export const WiredTriggerLayoutView = (code: number) => { switch(code) { diff --git a/src/components/wired/views/triggers/WiredTriggerScoreAchievedView.tsx b/src/components/wired/views/triggers/WiredTriggerScoreAchievedView.tsx index 473641bc..883503b8 100644 --- a/src/components/wired/views/triggers/WiredTriggerScoreAchievedView.tsx +++ b/src/components/wired/views/triggers/WiredTriggerScoreAchievedView.tsx @@ -2,13 +2,13 @@ import { FC, useEffect, useState } from 'react'; import ReactSlider from 'react-slider'; import { LocalizeText, WiredFurniType } from '../../../../api'; import { Column, Text } from '../../../../common'; -import { useWiredContext } from '../../WiredContext'; +import { useWired } from '../../../../hooks'; import { WiredTriggerBaseView } from './WiredTriggerBaseView'; export const WiredTriggeScoreAchievedView: FC<{}> = props => { const [ points, setPoints ] = useState(1); - const { trigger = null, setIntParams = null } = useWiredContext(); + const { trigger = null, setIntParams = null } = useWired(); const save = () => setIntParams([ points ]); diff --git a/src/events/help/HelpNameChangeEvent.ts b/src/events/help/HelpNameChangeEvent.ts index 076f5b51..44597d0e 100644 --- a/src/events/help/HelpNameChangeEvent.ts +++ b/src/events/help/HelpNameChangeEvent.ts @@ -1,4 +1,4 @@ -import { NitroEvent } from '@nitrots/nitro-renderer/src/core/events/NitroEvent'; +import { NitroEvent } from '@nitrots/nitro-renderer'; export class HelpNameChangeEvent extends NitroEvent { diff --git a/src/hooks/achievements/useAchievements.ts b/src/hooks/achievements/useAchievements.ts index 7b06bd4c..8c3dceee 100644 --- a/src/hooks/achievements/useAchievements.ts +++ b/src/hooks/achievements/useAchievements.ts @@ -1,7 +1,7 @@ import { AchievementData, AchievementEvent, AchievementsEvent, AchievementsScoreEvent, RequestAchievementsMessageComposer } from '@nitrots/nitro-renderer'; -import { useCallback, useEffect, useMemo, useState } from 'react'; -import { AchievementCategory, CloneObject, GetAchievementCategoryTotalUnseen, GetAchievementIsIgnored, SendMessageComposer } from '../../api'; -import { UseMessageEventHook } from '../messages'; +import { useEffect, useMemo, useState } from 'react'; +import { AchievementCategory, AchievementUtilities, CloneObject, SendMessageComposer } from '../../api'; +import { useMessageEvent } from '../events'; const useAchievementsState = () => { @@ -15,7 +15,7 @@ const useAchievementsState = () => { let unseen = 0; - achievementCategories.forEach(category => unseen += GetAchievementCategoryTotalUnseen(category)); + achievementCategories.forEach(category => unseen += AchievementUtilities.getAchievementCategoryTotalUnseen(category)); return unseen; }, [ achievementCategories ]); @@ -43,7 +43,7 @@ const useAchievementsState = () => return ~~((((getProgress - 0) * (100 - 0)) / (getMaxProgress - 0)) + 0); }, [ getProgress, getMaxProgress ]); - const setAchievementSeen = useCallback((categoryCode: string, achievementId: number) => + const setAchievementSeen = (categoryCode: string, achievementId: number) => { setAchievementCategories(prevValue => { @@ -63,9 +63,9 @@ const useAchievementsState = () => return newValue; }); - }, []); + } - const onAchievementEvent = useCallback((event: AchievementEvent) => + useMessageEvent(AchievementEvent, event => { const parser = event.getParser(); const achievement = parser.achievement; @@ -101,7 +101,7 @@ const useAchievementsState = () => newAchievements[achievementIndex] = achievement; } - if(!GetAchievementIsIgnored(achievement)) + if(!AchievementUtilities.getAchievementIsIgnored(achievement)) { achievement.unseen++; @@ -115,11 +115,9 @@ const useAchievementsState = () => return newValue; }); - }, []); + }); - UseMessageEventHook(AchievementEvent, onAchievementEvent); - - const onAchievementsEvent = useCallback((event: AchievementsEvent) => + useMessageEvent(AchievementsEvent, event => { const parser = event.getParser(); const categories: AchievementCategory[] = []; @@ -141,18 +139,14 @@ const useAchievementsState = () => } setAchievementCategories(categories); - }, []); + }); - UseMessageEventHook(AchievementsEvent, onAchievementsEvent); - - const onAchievementsScoreEvent = useCallback((event: AchievementsScoreEvent) => + useMessageEvent(AchievementsScoreEvent, event => { const parser = event.getParser(); setAchievementScore(parser.score); - }, []); - - UseMessageEventHook(AchievementsScoreEvent, onAchievementsScoreEvent); + }); useEffect(() => { diff --git a/src/hooks/camera/index.ts b/src/hooks/camera/index.ts new file mode 100644 index 00000000..20bea9c8 --- /dev/null +++ b/src/hooks/camera/index.ts @@ -0,0 +1 @@ +export * from './useCamera'; diff --git a/src/hooks/camera/useCamera.ts b/src/hooks/camera/useCamera.ts new file mode 100644 index 00000000..e2449c80 --- /dev/null +++ b/src/hooks/camera/useCamera.ts @@ -0,0 +1,42 @@ +import { InitCameraMessageEvent, IRoomCameraWidgetEffect, RequestCameraConfigurationComposer, RoomCameraWidgetManagerEvent } from '@nitrots/nitro-renderer'; +import { useEffect, useState } from 'react'; +import { useBetween } from 'use-between'; +import { CameraPicture, GetRoomCameraWidgetManager, SendMessageComposer } from '../../api'; +import { useCameraEvent, useMessageEvent } from '../events'; + +const useCameraState = () => +{ + const [ availableEffects, setAvailableEffects ] = useState([]); + const [ cameraRoll, setCameraRoll ] = useState([]); + const [ selectedPictureIndex, setSelectedPictureIndex ] = useState(-1); + const [ myLevel, setMyLevel ] = useState(10); + const [ price, setPrice ] = useState<{ credits: number, duckets: number, publishDucketPrice: number }>(null); + + useCameraEvent(RoomCameraWidgetManagerEvent.INITIALIZED, event => + { + setAvailableEffects(Array.from(GetRoomCameraWidgetManager().effects.values())); + }); + + useMessageEvent(InitCameraMessageEvent, event => + { + const parser = event.getParser(); + + setPrice({ credits: parser.creditPrice, duckets: parser.ducketPrice, publishDucketPrice: parser.publishDucketPrice }); + }); + + useEffect(() => + { + if(!GetRoomCameraWidgetManager().isLoaded) + { + GetRoomCameraWidgetManager().init(); + + SendMessageComposer(new RequestCameraConfigurationComposer()); + + return; + } + }, []); + + return { availableEffects, cameraRoll, setCameraRoll, selectedPictureIndex, setSelectedPictureIndex, myLevel, price }; +} + +export const useCamera = () => useBetween(useCameraState); diff --git a/src/hooks/catalog/useCatalog.ts b/src/hooks/catalog/useCatalog.ts index be0e0df7..49e549c1 100644 --- a/src/hooks/catalog/useCatalog.ts +++ b/src/hooks/catalog/useCatalog.ts @@ -1,10 +1,10 @@ import { BuildersClubFurniCountMessageEvent, BuildersClubPlaceRoomItemMessageComposer, BuildersClubPlaceWallItemMessageComposer, BuildersClubQueryFurniCountMessageComposer, BuildersClubSubscriptionStatusMessageEvent, CatalogPageMessageEvent, CatalogPagesListEvent, CatalogPublishedMessageEvent, ClubGiftInfoEvent, FrontPageItem, FurniturePlaceComposer, FurniturePlacePaintComposer, GetCatalogIndexComposer, GetCatalogPageComposer, GetClubGiftInfo, GetGiftWrappingConfigurationComposer, GiftWrappingConfigurationEvent, GuildMembershipsMessageEvent, HabboClubOffersMessageEvent, LegacyDataType, LimitedEditionSoldOutEvent, MarketplaceMakeOfferResult, NodeData, ProductOfferEvent, PurchaseErrorMessageEvent, PurchaseFromCatalogComposer, PurchaseNotAllowedMessageEvent, PurchaseOKMessageEvent, RoomControllerLevel, RoomEngineObjectPlacedEvent, RoomObjectCategory, RoomObjectPlacementSource, RoomObjectType, RoomObjectVariable, RoomPreviewer, SellablePetPalettesMessageEvent, Vector3d } from '@nitrots/nitro-renderer'; import { useCallback, useEffect, useRef, useState } from 'react'; import { useBetween } from 'use-between'; -import { BuilderFurniPlaceableStatus, CatalogNode, CatalogPage, CatalogPetPalette, CatalogType, CreateLinkEvent, FurniCategory, GetFurnitureData, GetNitroInstance, GetProductDataForLocalization, GetRoomEngine, GetRoomSession, GiftWrappingConfiguration, ICatalogNode, ICatalogOptions, ICatalogPage, IPageLocalization, IProduct, IPurchasableOffer, IPurchaseOptions, LocalizeText, NotificationAlertType, NotificationUtilities, Offer, PageLocalization, PlacedObjectPurchaseData, PlaySound, Product, ProductTypeEnum, RequestedPage, SearchResult, SendMessageComposer, SoundNames } from '../../api'; +import { BuilderFurniPlaceableStatus, CatalogNode, CatalogPage, CatalogPetPalette, CatalogType, CreateLinkEvent, DispatchUiEvent, FurniCategory, GetFurnitureData, GetNitroInstance, GetProductDataForLocalization, GetRoomEngine, GetRoomSession, GiftWrappingConfiguration, ICatalogNode, ICatalogOptions, ICatalogPage, IPageLocalization, IProduct, IPurchasableOffer, IPurchaseOptions, LocalizeText, NotificationAlertType, Offer, PageLocalization, PlacedObjectPurchaseData, PlaySound, Product, ProductTypeEnum, RequestedPage, SearchResult, SendMessageComposer, SoundNames } from '../../api'; import { CatalogPurchasedEvent, CatalogPurchaseFailureEvent, CatalogPurchaseNotAllowedEvent, CatalogPurchaseSoldOutEvent, InventoryFurniAddedEvent } from '../../events'; -import { DispatchUiEvent, UseRoomEngineEvent, UseUiEvent } from '../events'; -import { UseMessageEventHook } from '../messages'; +import { useMessageEvent, useRoomEngineEvent, useUiEvent } from '../events'; +import { useNotification } from '../notification'; import { useCatalogPlaceMultipleItems } from './useCatalogPlaceMultipleItems'; import { useCatalogSkipPurchaseConfirmation } from './useCatalogSkipPurchaseConfirmation'; @@ -40,6 +40,7 @@ const useCatalogState = () => const [ secondsLeft, setSecondsLeft ] = useState(0); const [ updateTime, setUpdateTime ] = useState(0); const [ secondsLeftWithGrace, setSecondsLeftWithGrace ] = useState(0); + const { simpleAlert = null } = useNotification(); const requestedPage = useRef(new RequestedPage()); const resetState = useCallback(() => @@ -441,7 +442,7 @@ const useCatalogState = () => setOffersToNodes(offers); }, [ setRootNode, setOffersToNodes ]); - UseMessageEventHook(CatalogPagesListEvent, onCatalogPagesListEvent); + useMessageEvent(CatalogPagesListEvent, onCatalogPagesListEvent); const onCatalogPageMessageEvent = useCallback((event: CatalogPageMessageEvent) => { @@ -480,7 +481,7 @@ const useCatalogState = () => } }, [ currentType, pageId, setFrontPageItems, setIsBusy, showCatalogPage ]); - UseMessageEventHook(CatalogPageMessageEvent, onCatalogPageMessageEvent); + useMessageEvent(CatalogPageMessageEvent, onCatalogPageMessageEvent); const onPurchaseOKMessageEvent = useCallback((event: PurchaseOKMessageEvent) => { @@ -489,7 +490,7 @@ const useCatalogState = () => DispatchUiEvent(new CatalogPurchasedEvent(parser.offer)); }, []); - UseMessageEventHook(PurchaseOKMessageEvent, onPurchaseOKMessageEvent); + useMessageEvent(PurchaseOKMessageEvent, onPurchaseOKMessageEvent); const onPurchaseErrorMessageEvent = useCallback((event: PurchaseErrorMessageEvent) => { @@ -498,7 +499,7 @@ const useCatalogState = () => DispatchUiEvent(new CatalogPurchaseFailureEvent(parser.code)); }, []); - UseMessageEventHook(PurchaseErrorMessageEvent, onPurchaseErrorMessageEvent); + useMessageEvent(PurchaseErrorMessageEvent, onPurchaseErrorMessageEvent); const onPurchaseNotAllowedMessageEvent = useCallback((event: PurchaseNotAllowedMessageEvent) => { @@ -507,7 +508,7 @@ const useCatalogState = () => DispatchUiEvent(new CatalogPurchaseNotAllowedEvent(parser.code)); }, []); - UseMessageEventHook(PurchaseNotAllowedMessageEvent, onPurchaseNotAllowedMessageEvent); + useMessageEvent(PurchaseNotAllowedMessageEvent, onPurchaseNotAllowedMessageEvent); const onLimitedEditionSoldOutEvent = useCallback((event: LimitedEditionSoldOutEvent) => { @@ -516,7 +517,7 @@ const useCatalogState = () => DispatchUiEvent(new CatalogPurchaseSoldOutEvent()); }, []); - UseMessageEventHook(LimitedEditionSoldOutEvent, onLimitedEditionSoldOutEvent); + useMessageEvent(LimitedEditionSoldOutEvent, onLimitedEditionSoldOutEvent); const onProductOfferEvent = useCallback((event: ProductOfferEvent) => { @@ -565,7 +566,7 @@ const useCatalogState = () => // (this._isObjectMoverRequested) && (this._purchasableOffer) }, [ currentType, currentPage, setCurrentOffer, setPurchaseOptions ]); - UseMessageEventHook(ProductOfferEvent, onProductOfferEvent); + useMessageEvent(ProductOfferEvent, onProductOfferEvent); const onSellablePetPalettesMessageEvent = useCallback((event: SellablePetPalettesMessageEvent) => { @@ -596,7 +597,7 @@ const useCatalogState = () => }); }, [ setCatalogOptions ]); - UseMessageEventHook(SellablePetPalettesMessageEvent, onSellablePetPalettesMessageEvent); + useMessageEvent(SellablePetPalettesMessageEvent, onSellablePetPalettesMessageEvent); const onHabboClubOffersMessageEvent = useCallback((event: HabboClubOffersMessageEvent) => { @@ -610,7 +611,7 @@ const useCatalogState = () => }); }, [ setCatalogOptions ]); - UseMessageEventHook(HabboClubOffersMessageEvent, onHabboClubOffersMessageEvent); + useMessageEvent(HabboClubOffersMessageEvent, onHabboClubOffersMessageEvent); const onGuildMembershipsMessageEvent = useCallback((event: GuildMembershipsMessageEvent) => { @@ -624,7 +625,7 @@ const useCatalogState = () => }); }, [ setCatalogOptions ]); - UseMessageEventHook(GuildMembershipsMessageEvent, onGuildMembershipsMessageEvent); + useMessageEvent(GuildMembershipsMessageEvent, onGuildMembershipsMessageEvent); const onGiftWrappingConfigurationEvent = useCallback((event: GiftWrappingConfigurationEvent) => { @@ -638,7 +639,7 @@ const useCatalogState = () => }); }, [ setCatalogOptions ]); - UseMessageEventHook(GiftWrappingConfigurationEvent, onGiftWrappingConfigurationEvent); + useMessageEvent(GiftWrappingConfigurationEvent, onGiftWrappingConfigurationEvent); const onMarketplaceMakeOfferResult = useCallback((event: MarketplaceMakeOfferResult) => { @@ -658,10 +659,10 @@ const useCatalogState = () => const message = LocalizeText(`inventory.marketplace.result.${ parser.result }`); - NotificationUtilities.simpleAlert(message, NotificationAlertType.DEFAULT, null, null, title); - }, []); + simpleAlert(message, NotificationAlertType.DEFAULT, null, null, title); + }, [ simpleAlert ]); - UseMessageEventHook(MarketplaceMakeOfferResult, onMarketplaceMakeOfferResult); + useMessageEvent(MarketplaceMakeOfferResult, onMarketplaceMakeOfferResult); const onClubGiftInfoEvent = useCallback((event: ClubGiftInfoEvent) => { @@ -675,7 +676,7 @@ const useCatalogState = () => }); }, [ setCatalogOptions ]); - UseMessageEventHook(ClubGiftInfoEvent, onClubGiftInfoEvent); + useMessageEvent(ClubGiftInfoEvent, onClubGiftInfoEvent); const onCatalogPublishedMessageEvent = useCallback((event: CatalogPublishedMessageEvent) => { @@ -683,10 +684,10 @@ const useCatalogState = () => resetState(); - if(wasVisible) NotificationUtilities.simpleAlert(LocalizeText('catalog.alert.published.description'), NotificationAlertType.ALERT, null, null, LocalizeText('catalog.alert.published.title')); - }, [ isVisible, resetState ]); + if(wasVisible) simpleAlert(LocalizeText('catalog.alert.published.description'), NotificationAlertType.ALERT, null, null, LocalizeText('catalog.alert.published.title')); + }, [ isVisible, resetState, simpleAlert ]); - UseMessageEventHook(CatalogPublishedMessageEvent, onCatalogPublishedMessageEvent); + useMessageEvent(CatalogPublishedMessageEvent, onCatalogPublishedMessageEvent); const onBuildersClubFurniCountMessageEvent = useCallback((event: BuildersClubFurniCountMessageEvent) => { @@ -697,7 +698,7 @@ const useCatalogState = () => refreshBuilderStatus(); }, [ refreshBuilderStatus ]); - UseMessageEventHook(BuildersClubFurniCountMessageEvent, onBuildersClubFurniCountMessageEvent); + useMessageEvent(BuildersClubFurniCountMessageEvent, onBuildersClubFurniCountMessageEvent); const onBuildersClubSubscriptionStatusMessageEvent = useCallback((event: BuildersClubSubscriptionStatusMessageEvent) => { @@ -712,14 +713,14 @@ const useCatalogState = () => refreshBuilderStatus(); }, [ refreshBuilderStatus ]); - UseMessageEventHook(BuildersClubSubscriptionStatusMessageEvent, onBuildersClubSubscriptionStatusMessageEvent); + useMessageEvent(BuildersClubSubscriptionStatusMessageEvent, onBuildersClubSubscriptionStatusMessageEvent); const onCatalogPurchasedEvent = useCallback((event: CatalogPurchasedEvent) => { PlaySound(SoundNames.CREDITS); }, []); - UseUiEvent(CatalogPurchasedEvent.PURCHASE_SUCCESS, onCatalogPurchasedEvent); + useUiEvent(CatalogPurchasedEvent.PURCHASE_SUCCESS, onCatalogPurchasedEvent); const onRoomEngineObjectPlacedEvent = useCallback((event: RoomEngineObjectPlacedEvent) => { @@ -831,7 +832,7 @@ const useCatalogState = () => } }, [ objectMoverRequested, purchasableOffer, catalogPlaceMultipleObjects, catalogSkipPurchaseConfirmation, currentType, pageId, resetPlacedOfferData, resetObjectMover, resetRoomPaint, requestOfferToMover ]); - UseRoomEngineEvent(RoomEngineObjectPlacedEvent.PLACED, onRoomEngineObjectPlacedEvent); + useRoomEngineEvent(RoomEngineObjectPlacedEvent.PLACED, onRoomEngineObjectPlacedEvent); const onInventoryFurniAddedEvent = useCallback((event: InventoryFurniAddedEvent) => { @@ -866,7 +867,7 @@ const useCatalogState = () => if(!catalogPlaceMultipleObjects) resetPlacedOfferData(); }, [ placedObjectPurchaseData, catalogPlaceMultipleObjects, resetPlacedOfferData ]); - UseUiEvent(InventoryFurniAddedEvent.FURNI_ADDED, onInventoryFurniAddedEvent); + useUiEvent(InventoryFurniAddedEvent.FURNI_ADDED, onInventoryFurniAddedEvent); useEffect(() => { diff --git a/src/hooks/chat-history/index.ts b/src/hooks/chat-history/index.ts new file mode 100644 index 00000000..970d90f2 --- /dev/null +++ b/src/hooks/chat-history/index.ts @@ -0,0 +1 @@ +export * from './useChatHistory'; diff --git a/src/hooks/chat-history/useChatHistory.ts b/src/hooks/chat-history/useChatHistory.ts new file mode 100644 index 00000000..7fcc529a --- /dev/null +++ b/src/hooks/chat-history/useChatHistory.ts @@ -0,0 +1,84 @@ +import { GetGuestRoomResultEvent, RoomSessionChatEvent, RoomSessionEvent } from '@nitrots/nitro-renderer'; +import { useState } from 'react'; +import { useBetween } from 'use-between'; +import { ChatEntryType, ChatHistoryCurrentDate, GetRoomSession, IChatEntry, IRoomHistoryEntry } from '../../api'; +import { useMessageEvent, useRoomSessionManagerEvent } from '../events'; + +const CHAT_HISTORY_MAX = 1000; +const ROOM_HISTORY_MAX = 10; + +let CHAT_HISTORY_COUNTER: number = 0; + +const useChatHistoryState = () => +{ + const [ chatHistory, setChatHistory ] = useState([]); + const [ roomHistory, setRoomHistory ] = useState([]); + const [ needsRoomInsert, setNeedsRoomInsert ] = useState(false); + + const addChatEntry = (entry: IChatEntry) => + { + entry.id = CHAT_HISTORY_COUNTER++; + + setChatHistory(prevValue => + { + const newValue = [ ...prevValue ]; + + newValue.push(entry); + + if(newValue.length > CHAT_HISTORY_MAX) newValue.shift(); + + return newValue; + }); + } + + const addRoomHistoryEntry = (entry: IRoomHistoryEntry) => + { + setRoomHistory(prevValue => + { + const newValue = [ ...prevValue ]; + + newValue.push(entry); + + if(newValue.length > ROOM_HISTORY_MAX) newValue.shift(); + + return newValue; + }); + } + + useRoomSessionManagerEvent(RoomSessionChatEvent.CHAT_EVENT, event => + { + const roomSession = GetRoomSession(); + + if(!roomSession) return; + + const userData = roomSession.userDataManager.getUserDataByIndex(event.objectId); + + if(!userData) return; + + addChatEntry({ id: -1, entityId: userData.webID, name: userData.name, look: userData.figure, entityType: userData.type, message: event.message, timestamp: ChatHistoryCurrentDate(), type: ChatEntryType.TYPE_CHAT, roomId: roomSession.roomId }); + }); + + useRoomSessionManagerEvent(RoomSessionEvent.STARTED, event => setNeedsRoomInsert(true)); + + useMessageEvent(GetGuestRoomResultEvent, event => + { + if(!needsRoomInsert) return; + + const parser = event.getParser(); + + if(roomHistory.length) + { + if(roomHistory[(roomHistory.length - 1)].id === parser.data.roomId) return; + } + + addChatEntry({ id: -1, entityId: parser.data.roomId, name: parser.data.roomName, timestamp: ChatHistoryCurrentDate(), type: ChatEntryType.TYPE_ROOM_INFO, roomId: parser.data.roomId }); + + addRoomHistoryEntry({ id: parser.data.roomId, name: parser.data.roomName }); + + setNeedsRoomInsert(false); + }); + + return { chatHistory, roomHistory }; +} + +export const useChatHistory = () => useBetween(useChatHistoryState); diff --git a/src/hooks/events/DispatchEventHook.ts b/src/hooks/events/DispatchEventHook.ts deleted file mode 100644 index 97d291fc..00000000 --- a/src/hooks/events/DispatchEventHook.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { IEventDispatcher, NitroEvent } from '@nitrots/nitro-renderer'; - -export const DispatchEventHook = (eventDispatcher: IEventDispatcher, event: NitroEvent) => eventDispatcher.dispatchEvent(event); diff --git a/src/hooks/events/UseEventDispatcherHook.tsx b/src/hooks/events/UseEventDispatcherHook.tsx deleted file mode 100644 index 36664c1c..00000000 --- a/src/hooks/events/UseEventDispatcherHook.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { IEventDispatcher, NitroEvent } from '@nitrots/nitro-renderer'; -import { useEffect } from 'react'; - -export const UseEventDispatcherHook = (type: string, eventDispatcher: IEventDispatcher, handler: (event: NitroEvent) => void) => -{ - useEffect(() => - { - eventDispatcher.addEventListener(type, handler); - - return () => eventDispatcher.removeEventListener(type, handler); - }, [ type, eventDispatcher, handler ]); -} diff --git a/src/hooks/events/core/UseCommunicationEvent.tsx b/src/hooks/events/core/UseCommunicationEvent.tsx deleted file mode 100644 index ee196afb..00000000 --- a/src/hooks/events/core/UseCommunicationEvent.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { NitroEvent } from '@nitrots/nitro-renderer'; -import { GetCommunication } from '../../../api'; -import { UseEventDispatcherHook } from '../UseEventDispatcherHook'; - -export const UseCommunicationEvent = (type: string, handler: (event: NitroEvent) => void) => UseEventDispatcherHook(type, GetCommunication().events, handler); diff --git a/src/hooks/events/core/UseConfigurationEvent.tsx b/src/hooks/events/core/UseConfigurationEvent.tsx deleted file mode 100644 index 2abbad07..00000000 --- a/src/hooks/events/core/UseConfigurationEvent.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { NitroEvent } from '@nitrots/nitro-renderer'; -import { GetConfigurationManager } from '../../../api'; -import { UseEventDispatcherHook } from '../UseEventDispatcherHook'; - -export const UseConfigurationEvent = (type: string, handler: (event: NitroEvent) => void) => UseEventDispatcherHook(type, GetConfigurationManager().events, handler); diff --git a/src/hooks/events/core/index.ts b/src/hooks/events/core/index.ts index eca8c2d4..b69a57e3 100644 --- a/src/hooks/events/core/index.ts +++ b/src/hooks/events/core/index.ts @@ -1,2 +1,2 @@ -export * from './UseCommunicationEvent'; -export * from './UseConfigurationEvent'; +export * from './useCommunicationEvent'; +export * from './useConfigurationEvent'; diff --git a/src/hooks/events/core/useCommunicationEvent.tsx b/src/hooks/events/core/useCommunicationEvent.tsx new file mode 100644 index 00000000..83d6ed5c --- /dev/null +++ b/src/hooks/events/core/useCommunicationEvent.tsx @@ -0,0 +1,5 @@ +import { NitroEvent } from '@nitrots/nitro-renderer'; +import { GetCommunication } from '../../../api'; +import { useEventDispatcher } from '../useEventDispatcher'; + +export const useCommunicationEvent = (type: string | string[], handler: (event: T) => void) => useEventDispatcher(type, GetCommunication().events, handler); diff --git a/src/hooks/events/core/useConfigurationEvent.tsx b/src/hooks/events/core/useConfigurationEvent.tsx new file mode 100644 index 00000000..617e9a23 --- /dev/null +++ b/src/hooks/events/core/useConfigurationEvent.tsx @@ -0,0 +1,5 @@ +import { NitroEvent } from '@nitrots/nitro-renderer'; +import { GetConfigurationManager } from '../../../api'; +import { useEventDispatcher } from '../useEventDispatcher'; + +export const useConfigurationEvent = (type: string | string[], handler: (event: T) => void) => useEventDispatcher(type, GetConfigurationManager().events, handler); diff --git a/src/hooks/events/index.ts b/src/hooks/events/index.ts index 2d7040fe..cafd7933 100644 --- a/src/hooks/events/index.ts +++ b/src/hooks/events/index.ts @@ -1,5 +1,5 @@ export * from './core'; -export * from './DispatchEventHook'; export * from './nitro'; -export * from './ui'; -export * from './UseEventDispatcherHook'; +export * from './useEventDispatcher'; +export * from './useMessageEvent'; +export * from './useUiEvent'; diff --git a/src/hooks/events/nitro/DispatchMainEvent.ts b/src/hooks/events/nitro/DispatchMainEvent.ts deleted file mode 100644 index d212c666..00000000 --- a/src/hooks/events/nitro/DispatchMainEvent.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { NitroEvent } from '@nitrots/nitro-renderer'; -import { GetNitroInstance } from '../../../api'; -import { DispatchEventHook } from '../DispatchEventHook'; - -export const DispatchMainEvent = (event: NitroEvent) => DispatchEventHook(GetNitroInstance().events, event); diff --git a/src/hooks/events/nitro/UseAvatarEvent.tsx b/src/hooks/events/nitro/UseAvatarEvent.tsx deleted file mode 100644 index a7eed8a0..00000000 --- a/src/hooks/events/nitro/UseAvatarEvent.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { NitroEvent } from '@nitrots/nitro-renderer'; -import { GetAvatarRenderManager } from '../../../api'; -import { UseEventDispatcherHook } from '../UseEventDispatcherHook'; - -export const UseAvatarEvent = (type: string, handler: (event: NitroEvent) => void) => UseEventDispatcherHook(type, GetAvatarRenderManager().events, handler); diff --git a/src/hooks/events/nitro/UseCameraEvent.tsx b/src/hooks/events/nitro/UseCameraEvent.tsx deleted file mode 100644 index 635b4879..00000000 --- a/src/hooks/events/nitro/UseCameraEvent.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { NitroEvent } from '@nitrots/nitro-renderer'; -import { GetNitroInstance } from '../../../api'; -import { UseEventDispatcherHook } from '../UseEventDispatcherHook'; - -export const UseCameraEvent = (type: string, handler: (event: NitroEvent) => void) => UseEventDispatcherHook(type, GetNitroInstance().cameraManager.events, handler); diff --git a/src/hooks/events/nitro/UseLocalizationEvent.tsx b/src/hooks/events/nitro/UseLocalizationEvent.tsx deleted file mode 100644 index 5bd91090..00000000 --- a/src/hooks/events/nitro/UseLocalizationEvent.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { NitroEvent } from '@nitrots/nitro-renderer'; -import { GetNitroInstance } from '../../../api'; -import { UseEventDispatcherHook } from '../UseEventDispatcherHook'; - -export const UseLocalizationEvent = (type: string, handler: (event: NitroEvent) => void) => UseEventDispatcherHook(type, GetNitroInstance().localization.events, handler); diff --git a/src/hooks/events/nitro/UseMainEvent.tsx b/src/hooks/events/nitro/UseMainEvent.tsx deleted file mode 100644 index 41f8203b..00000000 --- a/src/hooks/events/nitro/UseMainEvent.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { NitroEvent } from '@nitrots/nitro-renderer'; -import { GetNitroInstance } from '../../../api'; -import { UseEventDispatcherHook } from '../UseEventDispatcherHook'; - -export const UseMainEvent = (type: string, handler: (event: NitroEvent) => void) => UseEventDispatcherHook(type, GetNitroInstance().events, handler); diff --git a/src/hooks/events/nitro/UseRoomEngineEvent.tsx b/src/hooks/events/nitro/UseRoomEngineEvent.tsx deleted file mode 100644 index e0c4b547..00000000 --- a/src/hooks/events/nitro/UseRoomEngineEvent.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { NitroEvent } from '@nitrots/nitro-renderer'; -import { GetRoomEngine } from '../../../api'; -import { UseEventDispatcherHook } from '../UseEventDispatcherHook'; - -export const UseRoomEngineEvent = (type: string, handler: (event: NitroEvent) => void) => UseEventDispatcherHook(type, GetRoomEngine().events, handler); diff --git a/src/hooks/events/nitro/UseRoomSessionManagerEvent.tsx b/src/hooks/events/nitro/UseRoomSessionManagerEvent.tsx deleted file mode 100644 index 02d65be7..00000000 --- a/src/hooks/events/nitro/UseRoomSessionManagerEvent.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { NitroEvent } from '@nitrots/nitro-renderer'; -import { GetRoomSessionManager } from '../../../api'; -import { UseEventDispatcherHook } from '../UseEventDispatcherHook'; - -export const UseRoomSessionManagerEvent = (type: string, handler: (event: NitroEvent) => void) => UseEventDispatcherHook(type, GetRoomSessionManager().events, handler); diff --git a/src/hooks/events/nitro/UseSessionDataManagerEvent.tsx b/src/hooks/events/nitro/UseSessionDataManagerEvent.tsx deleted file mode 100644 index 79f4267d..00000000 --- a/src/hooks/events/nitro/UseSessionDataManagerEvent.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { NitroEvent } from '@nitrots/nitro-renderer'; -import { GetSessionDataManager } from '../../../api'; -import { UseEventDispatcherHook } from '../UseEventDispatcherHook'; - -export const UseSessionDataManagerEvent = (type: string, handler: (event: NitroEvent) => void) => UseEventDispatcherHook(type, GetSessionDataManager().events, handler); diff --git a/src/hooks/events/nitro/index.ts b/src/hooks/events/nitro/index.ts index 56862a78..82431221 100644 --- a/src/hooks/events/nitro/index.ts +++ b/src/hooks/events/nitro/index.ts @@ -1,8 +1,7 @@ -export * from './DispatchMainEvent'; -export * from './UseAvatarEvent'; -export * from './UseCameraEvent'; -export * from './UseLocalizationEvent'; -export * from './UseMainEvent'; -export * from './UseRoomEngineEvent'; -export * from './UseRoomSessionManagerEvent'; -export * from './UseSessionDataManagerEvent'; +export * from './useAvatarEvent'; +export * from './useCameraEvent'; +export * from './useLocalizationEvent'; +export * from './useMainEvent'; +export * from './useRoomEngineEvent'; +export * from './useRoomSessionManagerEvent'; +export * from './useSessionDataManagerEvent'; diff --git a/src/hooks/events/nitro/useAvatarEvent.tsx b/src/hooks/events/nitro/useAvatarEvent.tsx new file mode 100644 index 00000000..9212a688 --- /dev/null +++ b/src/hooks/events/nitro/useAvatarEvent.tsx @@ -0,0 +1,5 @@ +import { NitroEvent } from '@nitrots/nitro-renderer'; +import { GetAvatarRenderManager } from '../../../api'; +import { useEventDispatcher } from '../useEventDispatcher'; + +export const useAvatarEvent = (type: string | string[], handler: (event: T) => void) => useEventDispatcher(type, GetAvatarRenderManager().events, handler); diff --git a/src/hooks/events/nitro/useCameraEvent.tsx b/src/hooks/events/nitro/useCameraEvent.tsx new file mode 100644 index 00000000..42bee39e --- /dev/null +++ b/src/hooks/events/nitro/useCameraEvent.tsx @@ -0,0 +1,5 @@ +import { NitroEvent } from '@nitrots/nitro-renderer'; +import { GetNitroInstance } from '../../../api'; +import { useEventDispatcher } from '../useEventDispatcher'; + +export const useCameraEvent = (type: string | string[], handler: (event: T) => void) => useEventDispatcher(type, GetNitroInstance().cameraManager.events, handler); diff --git a/src/hooks/events/nitro/useLocalizationEvent.tsx b/src/hooks/events/nitro/useLocalizationEvent.tsx new file mode 100644 index 00000000..0dccbdc6 --- /dev/null +++ b/src/hooks/events/nitro/useLocalizationEvent.tsx @@ -0,0 +1,5 @@ +import { NitroEvent } from '@nitrots/nitro-renderer'; +import { GetNitroInstance } from '../../../api'; +import { useEventDispatcher } from '../useEventDispatcher'; + +export const useLocalizationEvent = (type: string | string[], handler: (event: T) => void) => useEventDispatcher(type, GetNitroInstance().localization.events, handler); diff --git a/src/hooks/events/nitro/useMainEvent.tsx b/src/hooks/events/nitro/useMainEvent.tsx new file mode 100644 index 00000000..8a2ad8b9 --- /dev/null +++ b/src/hooks/events/nitro/useMainEvent.tsx @@ -0,0 +1,5 @@ +import { NitroEvent } from '@nitrots/nitro-renderer'; +import { GetNitroInstance } from '../../../api'; +import { useEventDispatcher } from '../useEventDispatcher'; + +export const useMainEvent = (type: string | string[], handler: (event: T) => void) => useEventDispatcher(type, GetNitroInstance().events, handler); diff --git a/src/hooks/events/nitro/useRoomEngineEvent.tsx b/src/hooks/events/nitro/useRoomEngineEvent.tsx new file mode 100644 index 00000000..6d2d4199 --- /dev/null +++ b/src/hooks/events/nitro/useRoomEngineEvent.tsx @@ -0,0 +1,5 @@ +import { NitroEvent } from '@nitrots/nitro-renderer'; +import { GetRoomEngine } from '../../../api'; +import { useEventDispatcher } from '../useEventDispatcher'; + +export const useRoomEngineEvent = (type: string | string[], handler: (event: T) => void) => useEventDispatcher(type, GetRoomEngine().events, handler); diff --git a/src/hooks/events/nitro/useRoomSessionManagerEvent.tsx b/src/hooks/events/nitro/useRoomSessionManagerEvent.tsx new file mode 100644 index 00000000..5cccb98c --- /dev/null +++ b/src/hooks/events/nitro/useRoomSessionManagerEvent.tsx @@ -0,0 +1,5 @@ +import { NitroEvent } from '@nitrots/nitro-renderer'; +import { GetRoomSessionManager } from '../../../api'; +import { useEventDispatcher } from '../useEventDispatcher'; + +export const useRoomSessionManagerEvent = (type: string | string[], handler: (event: T) => void) => useEventDispatcher(type, GetRoomSessionManager().events, handler); diff --git a/src/hooks/events/nitro/useSessionDataManagerEvent.tsx b/src/hooks/events/nitro/useSessionDataManagerEvent.tsx new file mode 100644 index 00000000..fa49271a --- /dev/null +++ b/src/hooks/events/nitro/useSessionDataManagerEvent.tsx @@ -0,0 +1,5 @@ +import { NitroEvent } from '@nitrots/nitro-renderer'; +import { GetSessionDataManager } from '../../../api'; +import { useEventDispatcher } from '../useEventDispatcher'; + +export const useSessionDataManagerEvent = (type: string | string, handler: (event: T) => void) => useEventDispatcher(type, GetSessionDataManager().events, handler); diff --git a/src/hooks/events/ui/DispatchUiEvent.ts b/src/hooks/events/ui/DispatchUiEvent.ts deleted file mode 100644 index bd88e3ba..00000000 --- a/src/hooks/events/ui/DispatchUiEvent.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { NitroEvent } from '@nitrots/nitro-renderer'; -import { DispatchEventHook } from '../DispatchEventHook'; -import { UI_EVENT_DISPATCHER } from './UiEventDispatcher'; - -export const DispatchUiEvent = (event: NitroEvent) => DispatchEventHook(UI_EVENT_DISPATCHER, event); diff --git a/src/hooks/events/ui/UseUiEvent.tsx b/src/hooks/events/ui/UseUiEvent.tsx deleted file mode 100644 index 56797d8f..00000000 --- a/src/hooks/events/ui/UseUiEvent.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { NitroEvent } from '@nitrots/nitro-renderer'; -import { UseEventDispatcherHook } from '../UseEventDispatcherHook'; -import { UI_EVENT_DISPATCHER } from './UiEventDispatcher'; - -export const UseUiEvent = (type: string, handler: (event: NitroEvent) => void) => UseEventDispatcherHook(type, UI_EVENT_DISPATCHER, handler); diff --git a/src/hooks/events/ui/index.ts b/src/hooks/events/ui/index.ts deleted file mode 100644 index 5da2c747..00000000 --- a/src/hooks/events/ui/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './DispatchUiEvent'; -export * from './UiEventDispatcher'; -export * from './UseUiEvent'; diff --git a/src/hooks/events/useEventDispatcher.tsx b/src/hooks/events/useEventDispatcher.tsx new file mode 100644 index 00000000..60555f2e --- /dev/null +++ b/src/hooks/events/useEventDispatcher.tsx @@ -0,0 +1,31 @@ +import { IEventDispatcher, NitroEvent } from '@nitrots/nitro-renderer'; +import { useEffect } from 'react'; + +export const useEventDispatcher = (type: string | string[], eventDispatcher: IEventDispatcher, handler: (event: T) => void, enabled: boolean = true) => +{ + useEffect(() => + { + if(!enabled) return; + + if(Array.isArray(type)) + { + type.map(name => eventDispatcher.addEventListener(name, handler)); + } + else + { + eventDispatcher.addEventListener(type, handler); + } + + return () => + { + if(Array.isArray(type)) + { + type.map(name => eventDispatcher.removeEventListener(name, handler)); + } + else + { + eventDispatcher.removeEventListener(type, handler); + } + } + }, [ type, eventDispatcher, enabled, handler ]); +} diff --git a/src/hooks/messages/UseMessageEventHook.tsx b/src/hooks/events/useMessageEvent.tsx similarity index 77% rename from src/hooks/messages/UseMessageEventHook.tsx rename to src/hooks/events/useMessageEvent.tsx index cc785573..3a62ebe4 100644 --- a/src/hooks/messages/UseMessageEventHook.tsx +++ b/src/hooks/events/useMessageEvent.tsx @@ -2,7 +2,7 @@ import { IMessageEvent, MessageEvent } from '@nitrots/nitro-renderer'; import { useEffect } from 'react'; import { GetCommunication } from '../../api'; -export function UseMessageEventHook(eventType: typeof MessageEvent, handler: (event: IMessageEvent) => void): void +export const useMessageEvent = (eventType: typeof MessageEvent, handler: (event: T) => void) => { useEffect(() => { diff --git a/src/hooks/events/useUiEvent.tsx b/src/hooks/events/useUiEvent.tsx new file mode 100644 index 00000000..02c0aff4 --- /dev/null +++ b/src/hooks/events/useUiEvent.tsx @@ -0,0 +1,5 @@ +import { NitroEvent } from '@nitrots/nitro-renderer'; +import { UI_EVENT_DISPATCHER } from '../../api'; +import { useEventDispatcher } from './useEventDispatcher'; + +export const useUiEvent = (type: string | string[], handler: (event: T) => void, enabled: boolean = true) => useEventDispatcher(type, UI_EVENT_DISPATCHER, handler, enabled); diff --git a/src/hooks/friends/useFriends.ts b/src/hooks/friends/useFriends.ts index 3094c54b..35d72c5d 100644 --- a/src/hooks/friends/useFriends.ts +++ b/src/hooks/friends/useFriends.ts @@ -1,8 +1,8 @@ -import { AcceptFriendMessageComposer, DeclineFriendMessageComposer, FollowFriendMessageComposer, FriendListFragmentEvent, FriendListUpdateEvent, FriendParser, FriendRequestsEvent, GetFriendRequestsComposer, MessengerInitComposer, MessengerInitEvent, NewFriendRequestEvent, RequestFriendComposer, SetRelationshipStatusComposer } from '@nitrots/nitro-renderer'; -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { AcceptFriendMessageComposer, DeclineFriendMessageComposer, FollowFriendMessageComposer, FriendListFragmentEvent, FriendListUpdateComposer, FriendListUpdateEvent, FriendParser, FriendRequestsEvent, GetFriendRequestsComposer, MessengerInitComposer, MessengerInitEvent, NewFriendRequestEvent, RequestFriendComposer, SetRelationshipStatusComposer } from '@nitrots/nitro-renderer'; +import { useEffect, useMemo, useState } from 'react'; import { useBetween } from 'use-between'; import { CloneObject, MessengerFriend, MessengerRequest, MessengerSettings, SendMessageComposer } from '../../api'; -import { UseMessageEventHook } from '../messages'; +import { useMessageEvent } from '../events'; const useFriendsState = () => { @@ -43,10 +43,11 @@ const useFriendsState = () => return offlineFriends; }, [ friends ]); - const followFriend = useCallback((friend: MessengerFriend) => SendMessageComposer(new FollowFriendMessageComposer(friend.id)), []); - const updateRelationship = useCallback((friend: MessengerFriend, type: number) => ((type !== friend.relationshipStatus) && SendMessageComposer(new SetRelationshipStatusComposer(friend.id, type))), []); + const followFriend = (friend: MessengerFriend) => SendMessageComposer(new FollowFriendMessageComposer(friend.id)); - const getFriend = useCallback((userId: number) => + const updateRelationship = (friend: MessengerFriend, type: number) => ((type !== friend.relationshipStatus) && SendMessageComposer(new SetRelationshipStatusComposer(friend.id, type))); + + const getFriend = (userId: number) => { for(const friend of friends) { @@ -54,9 +55,9 @@ const useFriendsState = () => } return null; - }, [ friends ]); + } - const canRequestFriend = useCallback((userId: number) => + const canRequestFriend = (userId: number) => { if(getFriend(userId)) return false; @@ -65,9 +66,9 @@ const useFriendsState = () => if(sentRequests.indexOf(userId) >= 0) return false; return true; - }, [ requests, sentRequests, getFriend ]); + } - const requestFriend = useCallback((userId: number, userName: string) => + const requestFriend = (userId: number, userName: string) => { if(!canRequestFriend(userId)) return false; @@ -81,9 +82,9 @@ const useFriendsState = () => }); SendMessageComposer(new RequestFriendComposer(userName)); - }, [ canRequestFriend ]); + } - const requestResponse = useCallback((requestId: number, flag: boolean) => + const requestResponse = (requestId: number, flag: boolean) => { if(requestId === -1 && !flag) { @@ -114,9 +115,9 @@ const useFriendsState = () => return newRequests; }); } - }, []); + } - const onMessengerInitEvent = useCallback((event: MessengerInitEvent) => + useMessageEvent(MessengerInitEvent, event => { const parser = event.getParser(); @@ -127,11 +128,9 @@ const useFriendsState = () => parser.categories)); SendMessageComposer(new GetFriendRequestsComposer()); - }, []); + }); - UseMessageEventHook(MessengerInitEvent, onMessengerInitEvent); - - const onFriendsFragmentEvent = useCallback((event: FriendListFragmentEvent) => + useMessageEvent(FriendListFragmentEvent, event => { const parser = event.getParser(); @@ -151,11 +150,9 @@ const useFriendsState = () => return newValue; }); - }, []); + }); - UseMessageEventHook(FriendListFragmentEvent, onFriendsFragmentEvent); - - const onFriendsUpdateEvent = useCallback((event: FriendListUpdateEvent) => + useMessageEvent(FriendListUpdateEvent, event => { const parser = event.getParser(); @@ -193,11 +190,9 @@ const useFriendsState = () => return newValue; }); - }, []); + }); - UseMessageEventHook(FriendListUpdateEvent, onFriendsUpdateEvent); - - const onFriendRequestsEvent = useCallback((event: FriendRequestsEvent) => + useMessageEvent(FriendRequestsEvent, event => { const parser = event.getParser(); @@ -225,11 +220,9 @@ const useFriendsState = () => return newValue; }); - }, []); + }); - UseMessageEventHook(FriendRequestsEvent, onFriendRequestsEvent); - - const onNewFriendRequestEvent = useCallback((event: NewFriendRequestEvent) => + useMessageEvent(NewFriendRequestEvent, event => { const parser = event.getParser(); const request = parser.request; @@ -250,13 +243,18 @@ const useFriendsState = () => return newRequests; }); - }, []); - - UseMessageEventHook(NewFriendRequestEvent, onNewFriendRequestEvent); + }); useEffect(() => { SendMessageComposer(new MessengerInitComposer()); + + const interval = setInterval(() => SendMessageComposer(new FriendListUpdateComposer()), 120000); + + return () => + { + clearInterval(interval); + } }, []); return { friends, requests, sentRequests, settings, onlineFriends, offlineFriends, getFriend, canRequestFriend, requestFriend, requestResponse, followFriend, updateRelationship }; diff --git a/src/hooks/friends/useMessenger.ts b/src/hooks/friends/useMessenger.ts index 2076ad46..71a9675b 100644 --- a/src/hooks/friends/useMessenger.ts +++ b/src/hooks/friends/useMessenger.ts @@ -1,8 +1,9 @@ import { NewConsoleMessageEvent, RoomInviteErrorEvent, RoomInviteEvent, SendMessageComposer as SendMessageComposerPacket } from '@nitrots/nitro-renderer'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { useBetween } from 'use-between'; -import { CloneObject, GetSessionDataManager, LocalizeText, MessengerIconState, MessengerThread, MessengerThreadChat, NotificationAlertType, NotificationUtilities, PlaySound, SendMessageComposer, SoundNames } from '../../api'; -import { UseMessageEventHook } from '../messages'; +import { CloneObject, GetSessionDataManager, LocalizeText, MessengerIconState, MessengerThread, MessengerThreadChat, NotificationAlertType, PlaySound, SendMessageComposer, SoundNames } from '../../api'; +import { useMessageEvent } from '../events'; +import { useNotification } from '../notification'; import { useFriends } from './useFriends'; const useMessengerState = () => @@ -12,6 +13,7 @@ const useMessengerState = () => const [ hiddenThreadIds, setHiddenThreadIds ] = useState([]); const [ iconState, setIconState ] = useState(MessengerIconState.HIDDEN); const { getFriend = null } = useFriends(); + const { simpleAlert = null } = useNotification(); const visibleThreads = useMemo(() => messageThreads.filter(thread => (hiddenThreadIds.indexOf(thread.threadId) === -1)), [ messageThreads, hiddenThreadIds ]); const activeThread = useMemo(() => ((activeThreadId > 0) && visibleThreads.find(thread => (thread.threadId === activeThreadId) || null)), [ activeThreadId, visibleThreads ]); @@ -94,7 +96,7 @@ const useMessengerState = () => }); } - const onNewConsoleMessageEvent = useCallback((event: NewConsoleMessageEvent) => + useMessageEvent(NewConsoleMessageEvent, event => { const parser = event.getParser(); @@ -131,11 +133,9 @@ const useMessengerState = () => return newValue; }); - }, [ activeThreadId, getFriend ]); + }); - UseMessageEventHook(NewConsoleMessageEvent, onNewConsoleMessageEvent); - - const onRoomInviteEvent = useCallback((event: RoomInviteEvent) => + useMessageEvent(RoomInviteEvent, event => { const parser = event.getParser(); @@ -172,19 +172,15 @@ const useMessengerState = () => return newValue; }); - }, [ activeThreadId, getFriend ]); + }); - UseMessageEventHook(RoomInviteEvent, onRoomInviteEvent); - - const onRoomInviteErrorEvent = useCallback((event: RoomInviteErrorEvent) => + useMessageEvent(RoomInviteErrorEvent, event => { const parser = event.getParser(); const message = ((('Received room invite error: errorCode: ' + parser.errorCode) + ', recipients: ') + parser.failedRecipients); - NotificationUtilities.simpleAlert(message, NotificationAlertType.DEFAULT, null, null, LocalizeText('friendlist.alert.title')); - }, []); - - UseMessageEventHook(RoomInviteErrorEvent, onRoomInviteErrorEvent); + simpleAlert(message, NotificationAlertType.DEFAULT, null, null, LocalizeText('friendlist.alert.title')); + }); useEffect(() => { diff --git a/src/hooks/groups/index.ts b/src/hooks/groups/index.ts new file mode 100644 index 00000000..95ef7334 --- /dev/null +++ b/src/hooks/groups/index.ts @@ -0,0 +1 @@ +export * from './useGroup'; diff --git a/src/hooks/groups/useGroup.ts b/src/hooks/groups/useGroup.ts new file mode 100644 index 00000000..b9303fcf --- /dev/null +++ b/src/hooks/groups/useGroup.ts @@ -0,0 +1,55 @@ +import { GroupBadgePartsComposer, GroupBadgePartsEvent } from '@nitrots/nitro-renderer'; +import { useEffect, useState } from 'react'; +import { useBetween } from 'use-between'; +import { IGroupCustomize, SendMessageComposer } from '../../api'; +import { useMessageEvent } from '../events'; + +const CompareId = (a, b) => +{ + if(a.id < b.id) return -1; + + if(a.id > b.id) return 1; + + return 0; +} + +const useGroupState = () => +{ + const [ groupCustomize, setGroupCustomize ] = useState(null); + + useMessageEvent(GroupBadgePartsEvent, event => + { + const parser = event.getParser(); + + const customize: IGroupCustomize = { + badgeBases: [], + badgeSymbols: [], + badgePartColors: [], + groupColorsA: [], + groupColorsB: [] + }; + + parser.bases.forEach((images, id) => customize.badgeBases.push({ id, images })); + parser.symbols.forEach((images, id) => customize.badgeSymbols.push({ id, images })); + parser.partColors.forEach((color, id) => customize.badgePartColors.push({ id, color })); + parser.colorsA.forEach((color, id) => customize.groupColorsA.push({ id, color })); + parser.colorsB.forEach((color, id) => customize.groupColorsB.push({ id, color })); + + customize.badgeBases.sort(CompareId); + customize.badgeSymbols.sort(CompareId); + customize.badgePartColors.sort(CompareId); + customize.groupColorsA.sort(CompareId); + customize.groupColorsB.sort(CompareId); + + setGroupCustomize(customize); + }); + + useEffect(() => + { + SendMessageComposer(new GroupBadgePartsComposer()); + }, []); + + return { groupCustomize }; +} + +export const useGroup = () => useBetween(useGroupState); diff --git a/src/hooks/index.ts b/src/hooks/index.ts index 44d7ec57..e2289c33 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -1,16 +1,19 @@ export * from './achievements'; +export * from './camera'; export * from './catalog'; +export * from './chat-history'; export * from './events'; export * from './events/core'; export * from './events/nitro'; -export * from './events/ui'; export * from './friends'; +export * from './groups'; export * from './inventory'; -export * from './messages'; export * from './navigator'; +export * from './notification'; export * from './purse'; export * from './rooms'; export * from './session'; export * from './useLocalStorage'; export * from './UseMountEffect'; export * from './useSharedVisibility'; +export * from './wired'; diff --git a/src/hooks/inventory/useInventoryBadges.ts b/src/hooks/inventory/useInventoryBadges.ts index 6a349c5c..e5d46620 100644 --- a/src/hooks/inventory/useInventoryBadges.ts +++ b/src/hooks/inventory/useInventoryBadges.ts @@ -1,8 +1,8 @@ import { BadgeReceivedEvent, BadgesEvent, RequestBadgesComposer, SetActivatedBadgesComposer } from '@nitrots/nitro-renderer'; -import { useCallback, useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { useBetween } from 'use-between'; -import { UseMessageEventHook } from '..'; import { GetConfiguration, SendMessageComposer, UnseenItemCategory } from '../../api'; +import { useMessageEvent } from '../events'; import { useSharedVisibility } from '../useSharedVisibility'; import { useInventoryUnseenTracker } from './useInventoryUnseenTracker'; @@ -58,7 +58,7 @@ const useInventoryBadgesState = () => return (badgeIds[index] || 0); } - const onBadgesEvent = useCallback((event: BadgesEvent) => + useMessageEvent(BadgesEvent, event => { const parser = event.getParser(); const newBadgeCodes = parser.getAllBadgeCodes(); @@ -69,11 +69,9 @@ const useInventoryBadgesState = () => setBadgeCodes(newBadgeCodes); setBadgeIds(newBadgeIds); setActiveBadgeCodes(parser.getActiveBadgeCodes()); - }, []); + }); - UseMessageEventHook(BadgesEvent, onBadgesEvent); - - const onBadgeReceivedEvent = useCallback((event: BadgeReceivedEvent) => + useMessageEvent(BadgeReceivedEvent, event => { const parser = event.getParser(); const unseen = isUnseen(UnseenItemCategory.BADGE, parser.badgeId); @@ -97,9 +95,7 @@ const useInventoryBadgesState = () => return newValue; }); - }, [ isUnseen ]); - - UseMessageEventHook(BadgeReceivedEvent, onBadgeReceivedEvent); + }); useEffect(() => { diff --git a/src/hooks/inventory/useInventoryBots.ts b/src/hooks/inventory/useInventoryBots.ts index 86d299e2..aba5d396 100644 --- a/src/hooks/inventory/useInventoryBots.ts +++ b/src/hooks/inventory/useInventoryBots.ts @@ -1,10 +1,10 @@ import { BotAddedToInventoryEvent, BotData, BotInventoryMessageEvent, BotRemovedFromInventoryEvent, GetBotInventoryComposer } from '@nitrots/nitro-renderer'; -import { useCallback, useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { useBetween } from 'use-between'; -import { useInventoryUnseenTracker } from '.'; -import { UseMessageEventHook } from '..'; import { cancelRoomObjectPlacement, CreateLinkEvent, getPlacingItemId, IBotItem, SendMessageComposer, UnseenItemCategory } from '../../api'; +import { useMessageEvent } from '../events'; import { useSharedVisibility } from '../useSharedVisibility'; +import { useInventoryUnseenTracker } from './useInventoryUnseenTracker'; const useInventoryBotsState = () => { @@ -14,7 +14,7 @@ const useInventoryBotsState = () => const { isVisible = false, activate = null, deactivate = null } = useSharedVisibility(); const { isUnseen = null, resetCategory = null } = useInventoryUnseenTracker(); - const onBotInventoryMessageEvent = useCallback((event: BotInventoryMessageEvent) => + useMessageEvent(BotInventoryMessageEvent, event => { const parser = event.getParser(); @@ -68,11 +68,9 @@ const useInventoryBotsState = () => return newValue; }); - }, [ isUnseen ]); + }); - UseMessageEventHook(BotInventoryMessageEvent, onBotInventoryMessageEvent); - - const onBotAddedToInventoryEvent = useCallback((event: BotAddedToInventoryEvent) => + useMessageEvent(BotAddedToInventoryEvent, event => { const parser = event.getParser(); @@ -92,11 +90,9 @@ const useInventoryBotsState = () => return newValue; }); - }, [ isUnseen ]); + }); - UseMessageEventHook(BotAddedToInventoryEvent, onBotAddedToInventoryEvent); - - const onBotRemovedFromInventoryEvent = useCallback((event: BotRemovedFromInventoryEvent) => + useMessageEvent(BotRemovedFromInventoryEvent, event => { const parser = event.getParser(); @@ -119,9 +115,7 @@ const useInventoryBotsState = () => return newValue; }); - }, []); - - UseMessageEventHook(BotRemovedFromInventoryEvent, onBotRemovedFromInventoryEvent); + }); useEffect(() => { diff --git a/src/hooks/inventory/useInventoryFurni.ts b/src/hooks/inventory/useInventoryFurni.ts index 18c0b740..15b2d0a4 100644 --- a/src/hooks/inventory/useInventoryFurni.ts +++ b/src/hooks/inventory/useInventoryFurni.ts @@ -1,12 +1,11 @@ import { FurnitureListAddOrUpdateEvent, FurnitureListComposer, FurnitureListEvent, FurnitureListInvalidateEvent, FurnitureListItemParser, FurnitureListRemovedEvent, FurniturePostItPlacedEvent } from '@nitrots/nitro-renderer'; -import { useCallback, useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { useBetween } from 'use-between'; -import { useInventoryUnseenTracker } from '.'; -import { UseMessageEventHook } from '..'; -import { addFurnitureItem, attemptItemPlacement, cancelRoomObjectPlacement, CloneObject, CreateLinkEvent, FurnitureItem, getAllItemIds, getPlacingItemId, GroupItem, mergeFurniFragments, SendMessageComposer, UnseenItemCategory } from '../../api'; +import { addFurnitureItem, attemptItemPlacement, cancelRoomObjectPlacement, CloneObject, CreateLinkEvent, DispatchUiEvent, FurnitureItem, getAllItemIds, getPlacingItemId, GroupItem, mergeFurniFragments, SendMessageComposer, UnseenItemCategory } from '../../api'; import { InventoryFurniAddedEvent } from '../../events'; -import { DispatchUiEvent } from '../events'; +import { useMessageEvent } from '../events'; import { useSharedVisibility } from '../useSharedVisibility'; +import { useInventoryUnseenTracker } from './useInventoryUnseenTracker'; let furniMsgFragments: Map[] = null; @@ -18,7 +17,7 @@ const useInventoryFurniState = () => const { isVisible = false, activate = null, deactivate = null } = useSharedVisibility(); const { isUnseen = null, resetCategory = null } = useInventoryUnseenTracker(); - const onFurnitureListAddOrUpdateEvent = useCallback((event: FurnitureListAddOrUpdateEvent) => + useMessageEvent(FurnitureListAddOrUpdateEvent, event => { const parser = event.getParser(); @@ -82,11 +81,9 @@ const useInventoryFurniState = () => return newValue; }); - }, [ isUnseen ]); + }); - UseMessageEventHook(FurnitureListAddOrUpdateEvent, onFurnitureListAddOrUpdateEvent); - - const onFurnitureListEvent = useCallback((event: FurnitureListEvent) => + useMessageEvent(FurnitureListEvent, event => { const parser = event.getParser(); @@ -160,18 +157,14 @@ const useInventoryFurniState = () => }); furniMsgFragments = null; - }, [ isUnseen ]); + }); - UseMessageEventHook(FurnitureListEvent, onFurnitureListEvent); - - const onFurnitureListInvalidateEvent = useCallback((event: FurnitureListInvalidateEvent) => + useMessageEvent(FurnitureListInvalidateEvent, event => { setNeedsUpdate(true); - }, []); + }); - UseMessageEventHook(FurnitureListInvalidateEvent, onFurnitureListInvalidateEvent); - - const onFurnitureListRemovedEvent = useCallback((event: FurnitureListRemovedEvent) => + useMessageEvent(FurnitureListRemovedEvent, event => { const parser = event.getParser(); @@ -212,16 +205,12 @@ const useInventoryFurniState = () => return newValue; }); - }, []); + }); - UseMessageEventHook(FurnitureListRemovedEvent, onFurnitureListRemovedEvent); - - const onFurniturePostItPlacedEvent = useCallback((event: FurniturePostItPlacedEvent) => + useMessageEvent(FurniturePostItPlacedEvent, event => { - }, []); - - UseMessageEventHook(FurniturePostItPlacedEvent, onFurniturePostItPlacedEvent); + }); useEffect(() => { diff --git a/src/hooks/inventory/useInventoryPets.ts b/src/hooks/inventory/useInventoryPets.ts index 5ee4d0c1..d95e8bf1 100644 --- a/src/hooks/inventory/useInventoryPets.ts +++ b/src/hooks/inventory/useInventoryPets.ts @@ -1,10 +1,10 @@ import { PetAddedToInventoryEvent, PetData, PetInventoryEvent, PetRemovedFromInventory, RequestPetsComposer } from '@nitrots/nitro-renderer'; -import { useCallback, useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { useBetween } from 'use-between'; -import { useInventoryUnseenTracker } from '.'; -import { UseMessageEventHook } from '..'; import { addSinglePetItem, IPetItem, mergePetFragments, processPetFragment, removePetItemById, SendMessageComposer, UnseenItemCategory } from '../../api'; +import { useMessageEvent } from '../events'; import { useSharedVisibility } from '../useSharedVisibility'; +import { useInventoryUnseenTracker } from './useInventoryUnseenTracker'; let petMsgFragments: Map[] = null; @@ -16,7 +16,7 @@ const useInventoryPetsState = () => const { isVisible = false, activate = null, deactivate = null } = useSharedVisibility(); const { isUnseen = null, resetCategory = null } = useInventoryUnseenTracker(); - const onPetInventoryEvent = useCallback((event: PetInventoryEvent) => + useMessageEvent(PetInventoryEvent, event => { const parser = event.getParser(); @@ -36,11 +36,9 @@ const useInventoryPetsState = () => }); petMsgFragments = null; - }, [ isUnseen ]); + }); - UseMessageEventHook(PetInventoryEvent, onPetInventoryEvent); - - const onPetAddedToInventoryEvent = useCallback((event: PetAddedToInventoryEvent) => + useMessageEvent(PetAddedToInventoryEvent, event => { const parser = event.getParser(); @@ -52,11 +50,9 @@ const useInventoryPetsState = () => return newValue; }); - }, [ isUnseen ]); + }); - UseMessageEventHook(PetAddedToInventoryEvent, onPetAddedToInventoryEvent); - - const onPetRemovedFromInventory = useCallback((event: PetRemovedFromInventory) => + useMessageEvent(PetRemovedFromInventory, event => { const parser = event.getParser(); @@ -68,9 +64,7 @@ const useInventoryPetsState = () => return newValue; }); - }, []); - - UseMessageEventHook(PetRemovedFromInventory, onPetRemovedFromInventory); + }); useEffect(() => { diff --git a/src/hooks/inventory/useInventoryTrade.ts b/src/hooks/inventory/useInventoryTrade.ts index 72166600..7eb7481f 100644 --- a/src/hooks/inventory/useInventoryTrade.ts +++ b/src/hooks/inventory/useInventoryTrade.ts @@ -1,9 +1,10 @@ import { AdvancedMap, TradingAcceptComposer, TradingAcceptEvent, TradingCancelComposer, TradingCloseComposer, TradingCloseEvent, TradingCloseParser, TradingCompletedEvent, TradingConfirmationComposer, TradingConfirmationEvent, TradingListItemEvent, TradingListItemRemoveComposer, TradingNotOpenEvent, TradingOpenEvent, TradingOpenFailedEvent, TradingOtherNotAllowedEvent, TradingUnacceptComposer, TradingYouAreNotAllowedEvent } from '@nitrots/nitro-renderer'; -import { useCallback, useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; import { useBetween } from 'use-between'; -import { useInventoryFurni } from '.'; -import { UseMessageEventHook } from '..'; -import { CloneObject, GetRoomSession, GetSessionDataManager, GroupItem, LocalizeText, NotificationUtilities, parseTradeItems, SendMessageComposer, TradeState, TradeUserData, TradingNotificationMessage, TradingNotificationType } from '../../api'; +import { CloneObject, GetRoomSession, GetSessionDataManager, GroupItem, LocalizeText, parseTradeItems, SendMessageComposer, TradeState, TradeUserData, TradingNotificationType } from '../../api'; +import { useMessageEvent } from '../events'; +import { useNotification } from '../notification'; +import { useInventoryFurni } from './useInventoryFurni'; const useInventoryTradeState = () => { @@ -11,6 +12,7 @@ const useInventoryTradeState = () => const [ otherUser, setOtherUser ] = useState(null); const [ tradeState, setTradeState ] = useState(TradeState.TRADING_STATE_READY); const { groupItems = [], setGroupItems = null, activate = null, deactivate = null } = useInventoryFurni(); + const { simpleAlert = null, showTradeAlert = null } = useNotification(); const isTrading = (tradeState >= TradeState.TRADING_STATE_RUNNING); const progressTrade = () => @@ -20,7 +22,7 @@ const useInventoryTradeState = () => case TradeState.TRADING_STATE_RUNNING: if(!otherUser.itemCount && !ownUser.accepts) { - NotificationUtilities.simpleAlert(LocalizeText('inventory.trading.warning.other_not_offering'), null, null, null); + simpleAlert(LocalizeText('inventory.trading.warning.other_not_offering'), null, null, null); } if(ownUser.accepts) @@ -64,7 +66,7 @@ const useInventoryTradeState = () => } } - const onTradingAcceptEvent = useCallback((event: TradingAcceptEvent) => + useMessageEvent(TradingAcceptEvent, event => { const parser = event.getParser(); @@ -93,54 +95,46 @@ const useInventoryTradeState = () => return newValue; }); } - }, [ ownUser, otherUser ]); + }); - UseMessageEventHook(TradingAcceptEvent, onTradingAcceptEvent); - - const onTradingCloseEvent = useCallback((event: TradingCloseEvent) => + useMessageEvent(TradingCloseEvent, event => { const parser = event.getParser(); if(parser.reason === TradingCloseParser.ERROR_WHILE_COMMIT) { - TradingNotificationMessage(TradingNotificationType.ERROR_WHILE_COMMIT); + showTradeAlert(TradingNotificationType.ERROR_WHILE_COMMIT); } else { if(ownUser && (parser.userID !== ownUser.userId)) { - TradingNotificationMessage(TradingNotificationType.THEY_CANCELLED); + showTradeAlert(TradingNotificationType.THEY_CANCELLED); } } setOwnUser(null); setOtherUser(null); setTradeState(TradeState.TRADING_STATE_READY); - }, [ ownUser ]); + }); - UseMessageEventHook(TradingCloseEvent, onTradingCloseEvent); - - const onTradingCompletedEvent = useCallback((event: TradingCompletedEvent) => + useMessageEvent(TradingCompletedEvent, event => { const parser = event.getParser(); setOwnUser(null); setOtherUser(null); setTradeState(TradeState.TRADING_STATE_READY); - }, []); + }); - UseMessageEventHook(TradingCompletedEvent, onTradingCompletedEvent); - - const onTradingConfirmationEvent = useCallback((event: TradingConfirmationEvent) => + useMessageEvent(TradingConfirmationEvent, event => { const parser = event.getParser(); setTradeState(TradeState.TRADING_STATE_COUNTDOWN); - }, []); + }); - UseMessageEventHook(TradingConfirmationEvent, onTradingConfirmationEvent); - - const onTradingListItemEvent = useCallback((event: TradingListItemEvent) => + useMessageEvent(TradingListItemEvent, event => { const parser = event.getParser(); const firstUserItems = parseTradeItems(parser.firstUserItemArray); @@ -210,18 +204,14 @@ const useInventoryTradeState = () => return newValue; }); - }, [ setGroupItems ]); + }); - UseMessageEventHook(TradingListItemEvent, onTradingListItemEvent); - - const onTradingNotOpenEvent = useCallback((event: TradingNotOpenEvent) => + useMessageEvent(TradingNotOpenEvent, event => { const parser = event.getParser(); - }, []); + }); - UseMessageEventHook(TradingNotOpenEvent, onTradingNotOpenEvent); - - const onTradingOpenEvent = useCallback((event: TradingOpenEvent) => + useMessageEvent(TradingOpenEvent, event => { const parser = event.getParser(); @@ -260,36 +250,28 @@ const useInventoryTradeState = () => setOwnUser(firstUser); setOtherUser(secondUser); setTradeState(TradeState.TRADING_STATE_RUNNING); - }, []); + }); - UseMessageEventHook(TradingOpenEvent, onTradingOpenEvent); - - const onTradingOpenFailedEvent = useCallback((event: TradingOpenFailedEvent) => + useMessageEvent(TradingOpenFailedEvent, event => { const parser = event.getParser(); - TradingNotificationMessage(parser.reason, parser.otherUserName); - }, []); + showTradeAlert(parser.reason, parser.otherUserName); + }); - UseMessageEventHook(TradingOpenFailedEvent, onTradingOpenFailedEvent); - - const onTradingOtherNotAllowedEvent = useCallback((event: TradingOtherNotAllowedEvent) => + useMessageEvent(TradingOtherNotAllowedEvent, event => { const parser = event.getParser(); - TradingNotificationMessage(TradingNotificationType.THEY_NOT_ALLOWED); - }, []); - - UseMessageEventHook(TradingOtherNotAllowedEvent, onTradingOtherNotAllowedEvent); - - const onTradingYouAreNotAllowedEvent = useCallback((event: TradingYouAreNotAllowedEvent) => + showTradeAlert(TradingNotificationType.THEY_NOT_ALLOWED); + }); + + useMessageEvent(TradingYouAreNotAllowedEvent, event => { const parser = event.getParser(); - TradingNotificationMessage(TradingNotificationType.YOU_NOT_ALLOWED); - }, []); - - UseMessageEventHook(TradingYouAreNotAllowedEvent, onTradingYouAreNotAllowedEvent); + showTradeAlert(TradingNotificationType.YOU_NOT_ALLOWED); + }); useEffect(() => { diff --git a/src/hooks/inventory/useInventoryUnseenTracker.ts b/src/hooks/inventory/useInventoryUnseenTracker.ts index fe21007e..90ba66e9 100644 --- a/src/hooks/inventory/useInventoryUnseenTracker.ts +++ b/src/hooks/inventory/useInventoryUnseenTracker.ts @@ -1,8 +1,8 @@ import { UnseenItemsEvent, UnseenResetCategoryComposer, UnseenResetItemsComposer } from '@nitrots/nitro-renderer'; import { useCallback, useMemo, useState } from 'react'; import { useBetween } from 'use-between'; -import { UseMessageEventHook } from '..'; import { SendMessageComposer } from '../../api'; +import { useMessageEvent } from '../events'; const sendResetCategoryMessage = (category: number) => SendMessageComposer(new UnseenResetCategoryComposer(category)); const sendResetItemsMessage = (category: number, itemIds: number[]) => SendMessageComposer(new UnseenResetItemsComposer(category, ...itemIds)); @@ -98,7 +98,7 @@ const useInventoryUnseenTrackerState = () => }); }, []); - const onUnseenItemsEvent = useCallback((event: UnseenItemsEvent) => + useMessageEvent(UnseenItemsEvent, event => { const parser = event.getParser(); @@ -124,9 +124,7 @@ const useInventoryUnseenTrackerState = () => return newValue; }); - }, []); - - UseMessageEventHook(UnseenItemsEvent, onUnseenItemsEvent); + }); return { getCount, getFullCount, resetCategory, resetItems, isUnseen, removeUnseen }; } diff --git a/src/hooks/messages/index.ts b/src/hooks/messages/index.ts deleted file mode 100644 index 46b80a45..00000000 --- a/src/hooks/messages/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './UseMessageEventHook'; diff --git a/src/hooks/notification/index.ts b/src/hooks/notification/index.ts new file mode 100644 index 00000000..b5a85616 --- /dev/null +++ b/src/hooks/notification/index.ts @@ -0,0 +1 @@ +export * from './useNotification'; diff --git a/src/hooks/notification/useNotification.ts b/src/hooks/notification/useNotification.ts new file mode 100644 index 00000000..aaf07cbf --- /dev/null +++ b/src/hooks/notification/useNotification.ts @@ -0,0 +1,386 @@ +import { AchievementNotificationMessageEvent, ActivityPointNotificationMessageEvent, ClubGiftNotificationEvent, ClubGiftSelectedEvent, HabboBroadcastMessageEvent, HotelClosedAndOpensEvent, HotelClosesAndWillOpenAtEvent, HotelWillCloseInMinutesEvent, InfoFeedEnableMessageEvent, MaintenanceStatusMessageEvent, ModeratorCautionEvent, ModeratorMessageEvent, MOTDNotificationEvent, NotificationDialogMessageEvent, PetLevelNotificationEvent, PetReceivedMessageEvent, RespectReceivedEvent, RoomEnterEffect, RoomEnterEvent, UserBannedMessageEvent, Vector3d } from '@nitrots/nitro-renderer'; +import { useCallback, useState } from 'react'; +import { useBetween } from 'use-between'; +import { GetConfiguration, GetNitroInstance, GetRoomEngine, GetSessionDataManager, LocalizeBadgeName, LocalizeText, NotificationAlertItem, NotificationAlertType, NotificationBubbleItem, NotificationBubbleType, NotificationConfirmItem, PlaySound, ProductImageUtility, TradingNotificationType } from '../../api'; +import { useMessageEvent } from '../events'; + +const cleanText = (text: string) => text.replace(/\\r/g, '\r'); + +const getTimeZeroPadded = (time: number) => +{ + const text = ('0' + time); + + return text.substr((text.length - 2), text.length); +} + +let modDisclaimerTimeout: ReturnType = null; + +const useNotificationState = () => +{ + const [ alerts, setAlerts ] = useState([]); + const [ bubbleAlerts, setBubbleAlerts ] = useState([]); + const [ confirms, setConfirms ] = useState([]); + const [ bubblesDisabled, setBubblesDisabled ] = useState(false); + const [ modDisclaimerShown, setModDisclaimerShown ] = useState(false); + + const getMainNotificationConfig = () => GetConfiguration<{ [key: string]: { delivery?: string, display?: string; title?: string; image?: string }}>('notification', {}); + + const getNotificationConfig = (key: string) => + { + const mainConfig = getMainNotificationConfig(); + + if(!mainConfig) return null; + + return mainConfig[key]; + } + + const getNotificationPart = (options: Map, type: string, key: string, localize: boolean) => + { + if(options.has(key)) return options.get(key); + + const localizeKey = [ 'notification', type, key ].join('.'); + + if(GetNitroInstance().localization.hasValue(localizeKey) || localize) return LocalizeText(localizeKey, Array.from(options.keys()), Array.from(options.values())); + + return null; + } + + const getNotificationImageUrl = (options: Map, type: string) => + { + let imageUrl = options.get('image'); + + if(!imageUrl) imageUrl = GetConfiguration('image.library.notifications.url', '').replace('%image%', type.replace(/\./g, '_')); + + return LocalizeText(imageUrl); + } + + const simpleAlert = useCallback((message: string, type: string = null, clickUrl: string = null, clickUrlText: string = null, title: string = null, imageUrl: string = null) => + { + if(!title || !title.length) title = LocalizeText('notifications.broadcast.title'); + + if(!type || !type.length) type = NotificationAlertType.DEFAULT; + + const alertItem = new NotificationAlertItem([ cleanText(message) ], type, clickUrl, clickUrlText, title, imageUrl); + + setAlerts(prevValue => [ alertItem, ...prevValue ]); + }, []); + + const showNitroAlert = useCallback(() => simpleAlert(null, NotificationAlertType.NITRO), [ simpleAlert ]); + + const showSingleBubble = useCallback((message: string, type: string, imageUrl: string = null, internalLink: string = null) => + { + if(bubblesDisabled) return; + + const notificationItem = new NotificationBubbleItem(message, type, imageUrl, internalLink); + + setBubbleAlerts(prevValue => [ notificationItem, ...prevValue ]); + }, [ bubblesDisabled ]); + + const showNotification = (type: string, options: Map = null) => + { + if(!options) options = new Map(); + + const configuration = getNotificationConfig(('notification.' + type)); + + if(configuration) for(const key in configuration) options.set(key, configuration[key]); + + const title = getNotificationPart(options, type, 'title', true); + const message = getNotificationPart(options, type, 'message', true).replace(/\\r/g, '\r'); + const linkTitle = getNotificationPart(options, type, 'linkTitle', false); + const linkUrl = getNotificationPart(options, type, 'linkUrl', false); + const image = getNotificationImageUrl(options, type); + + if(options.get('display') === 'BUBBLE') + { + showSingleBubble(LocalizeText(message), NotificationBubbleType.INFO, image, linkUrl); + } + else + { + simpleAlert(message, type, linkUrl, linkTitle, title, image); + } + + if(options.get('sound')) PlaySound(options.get('sound')); + } + + const showConfirm = useCallback((message: string, onConfirm: () => void, onCancel: () => void, confirmText: string = null, cancelText: string = null, title: string = null, type: string = null) => + { + if(!confirmText || !confirmText.length) confirmText = LocalizeText('generic.confirm'); + + if(!cancelText || !cancelText.length) cancelText = LocalizeText('generic.cancel'); + + if(!title || !title.length) title = LocalizeText('notifications.broadcast.title'); + + const confirmItem = new NotificationConfirmItem(type, message, onConfirm, onCancel, confirmText, cancelText, title); + + setConfirms(prevValue => [ confirmItem, ...prevValue ]); + }, []); + + const showModeratorMessage = (message: string, url: string = null, showHabboWay: boolean = true) => + { + simpleAlert(message, NotificationAlertType.DEFAULT, url, LocalizeText('mod.alert.link'), LocalizeText('mod.alert.title')); + } + + const showTradeAlert = useCallback((type: number, otherUsername: string = '') => + { + switch(type) + { + case TradingNotificationType.ALERT_SCAM: + simpleAlert(LocalizeText('inventory.trading.warning.other_not_offering'), null, null, null, LocalizeText('inventory.trading.notification.title')); + return; + case TradingNotificationType.HOTEL_TRADING_DISABLED: + case TradingNotificationType.YOU_NOT_ALLOWED: + case TradingNotificationType.THEY_NOT_ALLOWED: + case TradingNotificationType.ROOM_DISABLED: + case TradingNotificationType.YOU_OPEN: + case TradingNotificationType.THEY_OPEN: + simpleAlert(LocalizeText(`inventory.trading.openfail.${ type }`, [ 'otherusername' ], [ otherUsername ]), null, null, null, LocalizeText('inventory.trading.openfail.title')); + return; + case TradingNotificationType.ERROR_WHILE_COMMIT: + simpleAlert(`${ LocalizeText('inventory.trading.notification.caption') }, ${ LocalizeText('inventory.trading.notification.commiterror.info') }`, null, null, null, LocalizeText('inventory.trading.notification.title')); + return; + case TradingNotificationType.THEY_CANCELLED: + simpleAlert(LocalizeText('inventory.trading.info.closed'), null, null, null, LocalizeText('inventory.trading.notification.title')); + return; + } + }, [ simpleAlert ]); + + const closeAlert = useCallback((alert: NotificationAlertItem) => + { + setAlerts(prevValue => + { + const newAlerts = [ ...prevValue ]; + const index = newAlerts.findIndex(value => (alert === value)); + + if(index >= 0) newAlerts.splice(index, 1); + + return newAlerts; + }); + }, []); + + const closeBubbleAlert = useCallback((item: NotificationBubbleItem) => + { + setBubbleAlerts(prevValue => + { + const newAlerts = [ ...prevValue ]; + const index = newAlerts.findIndex(value => (item === value)); + + if(index >= 0) newAlerts.splice(index, 1); + + return newAlerts; + }) + }, []); + + const closeConfirm = useCallback((item: NotificationConfirmItem) => + { + setConfirms(prevValue => + { + const newConfirms = [ ...prevValue ]; + const index = newConfirms.findIndex(value => (item === value)); + + if(index >= 0) newConfirms.splice(index, 1); + + return newConfirms; + }) + }, []); + + useMessageEvent(RespectReceivedEvent, event => + { + const parser = event.getParser(); + + if(parser.userId !== GetSessionDataManager().userId) return; + + const text1 = LocalizeText('notifications.text.respect.1'); + const text2 = LocalizeText('notifications.text.respect.2', [ 'count' ], [ parser.respectsReceived.toString() ]); + + showSingleBubble(text1, NotificationBubbleType.RESPECT); + showSingleBubble(text2, NotificationBubbleType.RESPECT); + }); + + useMessageEvent(HabboBroadcastMessageEvent, event => + { + const parser = event.getParser(); + + simpleAlert(parser.message.replace(/\\r/g, '\r'), null, null, LocalizeText('notifications.broadcast.title')); + }); + + useMessageEvent(AchievementNotificationMessageEvent, event => + { + const parser = event.getParser(); + + const text1 = LocalizeText('achievements.levelup.desc'); + const badgeName = LocalizeBadgeName(parser.data.badgeCode); + const badgeImage = GetSessionDataManager().getBadgeUrl(parser.data.badgeCode); + const internalLink = 'questengine/achievements/' + parser.data.category; + + showSingleBubble((text1 + ' ' + badgeName), NotificationBubbleType.ACHIEVEMENT, badgeImage, internalLink); + }); + + useMessageEvent(ClubGiftNotificationEvent, event => + { + const parser = event.getParser(); + + if(parser.numGifts <= 0) return; + + showSingleBubble(parser.numGifts.toString(), NotificationBubbleType.CLUBGIFT, null, ('catalog/open/' + GetConfiguration('catalog.links')['hc.hc_gifts'])); + }); + + useMessageEvent(ModeratorMessageEvent, event => + { + const parser = event.getParser(); + + showModeratorMessage(parser.message, parser.url, false); + }); + + useMessageEvent(ActivityPointNotificationMessageEvent, event => + { + const parser = event.getParser(); + + if((parser.amountChanged <= 0) || (parser.type !== 5)) return; + + const imageUrl = GetConfiguration('currency.asset.icon.url', '').replace('%type%', parser.type.toString()); + + showSingleBubble(LocalizeText('notifications.text.loyalty.received', [ 'AMOUNT' ], [ parser.amountChanged.toString() ]), NotificationBubbleType.INFO, imageUrl); + }); + + useMessageEvent(UserBannedMessageEvent, event => + { + const parser = event.getParser(); + + showModeratorMessage(parser.message); + }); + + useMessageEvent(HotelClosesAndWillOpenAtEvent, event => + { + const parser = event.getParser(); + + simpleAlert( LocalizeText(('opening.hours.' + (parser.userThrowOutAtClose ? 'disconnected' : 'closed')), [ 'h', 'm' ], [ getTimeZeroPadded(parser.openHour), getTimeZeroPadded(parser.openMinute) ]), NotificationAlertType.DEFAULT, null, null, LocalizeText('opening.hours.title')); + }); + + useMessageEvent(PetReceivedMessageEvent, event => + { + const parser = event.getParser(); + + const text = LocalizeText('notifications.text.' + (parser.boughtAsGift ? 'petbought' : 'petreceived')); + + let imageUrl: string = null; + + const imageResult = GetRoomEngine().getRoomObjectPetImage(parser.pet.typeId, parser.pet.paletteId, parseInt(parser.pet.color, 16), new Vector3d(45 * 3), 64, null, true); + + if(imageResult) imageUrl = imageResult.getImage().src; + + showSingleBubble(text, NotificationBubbleType.PETLEVEL, imageUrl); + }); + + useMessageEvent(MOTDNotificationEvent, event => + { + const parser = event.getParser(); + + const messages = parser.messages.map(message => cleanText(message)); + + const alertItem = new NotificationAlertItem(messages, NotificationAlertType.MOTD, null, null, LocalizeText('notifications.motd.title')); + + setAlerts(prevValue => [ alertItem, ...prevValue ]); + }); + + useMessageEvent(PetLevelNotificationEvent, event => + { + const parser = event.getParser(); + + let imageUrl: string = null; + + const imageResult = GetRoomEngine().getRoomObjectPetImage(parser.figureData.typeId, parser.figureData.paletteId, parseInt(parser.figureData.color, 16), new Vector3d(45 * 3), 64, null, true); + + if(imageResult) imageUrl = imageResult.getImage().src; + + showSingleBubble(LocalizeText('notifications.text.petlevel', [ 'pet_name', 'level' ], [ parser.petName, parser.level.toString() ]), NotificationBubbleType.PETLEVEL, imageUrl); + }); + + useMessageEvent(InfoFeedEnableMessageEvent, event => + { + const parser = event.getParser(); + + setBubblesDisabled(!parser.enabled); + }); + + useMessageEvent(ClubGiftSelectedEvent, event => + { + const parser = event.getParser(); + + if(!parser.products || !parser.products.length) return; + + const productData = parser.products[0]; + + if(!productData) return; + + showSingleBubble(LocalizeText('notifications.text.club_gift.selected'), NotificationBubbleType.INFO, ProductImageUtility.getProductImageUrl(productData.productType, productData.furniClassId, productData.extraParam)); + }); + + useMessageEvent(MaintenanceStatusMessageEvent, event => + { + const parser = event.getParser(); + + simpleAlert(LocalizeText('maintenance.shutdown', [ 'm', 'd' ], [ parser.minutesUntilMaintenance.toString(), parser.duration.toString() ]), NotificationAlertType.DEFAULT, null, null, LocalizeText('opening.hours.title')); + }); + + useMessageEvent(ModeratorCautionEvent, event => + { + const parser = event.getParser(); + + showModeratorMessage(parser.message, parser.url); + }); + + useMessageEvent(NotificationDialogMessageEvent, event => + { + const parser = event.getParser(); + + showNotification(parser.type, parser.parameters); + }); + + useMessageEvent(HotelWillCloseInMinutesEvent, event => + { + const parser = event.getParser(); + + simpleAlert(LocalizeText('opening.hours.shutdown', [ 'm' ], [ parser.openMinute.toString() ]), NotificationAlertType.DEFAULT, null, null, LocalizeText('opening.hours.title')); + }); + + useMessageEvent(HotelClosedAndOpensEvent, event => + { + const parser = event.getParser(); + + simpleAlert(LocalizeText('opening.hours.disconnected', [ 'h', 'm' ], [ parser.openHour.toString(), parser.openMinute.toString() ]), NotificationAlertType.DEFAULT, null, null, LocalizeText('opening.hours.title')); + }); + + const onRoomEnterEvent = useCallback(() => + { + if(modDisclaimerShown) return; + + if(RoomEnterEffect.isRunning()) + { + if(modDisclaimerTimeout) return; + + modDisclaimerTimeout = setTimeout(() => + { + onRoomEnterEvent(); + }, (RoomEnterEffect.totalRunningTime + 5000)); + } + else + { + if(modDisclaimerTimeout) + { + clearTimeout(modDisclaimerTimeout); + + modDisclaimerTimeout = null; + } + + showSingleBubble(LocalizeText('mod.chatdisclaimer'), NotificationBubbleType.INFO); + + setModDisclaimerShown(true); + } + }, [ modDisclaimerShown, showSingleBubble ]); + + useMessageEvent(RoomEnterEvent, onRoomEnterEvent); + + return { alerts, bubbleAlerts, confirms, simpleAlert, showNitroAlert, showTradeAlert, showConfirm, closeAlert, closeBubbleAlert, closeConfirm }; +} + +export const useNotification = () => useBetween(useNotificationState); diff --git a/src/hooks/purse/usePurse.ts b/src/hooks/purse/usePurse.ts index 42f70e94..6bb5a54b 100644 --- a/src/hooks/purse/usePurse.ts +++ b/src/hooks/purse/usePurse.ts @@ -1,8 +1,8 @@ import { ActivityPointNotificationMessageEvent, UserCreditsEvent, UserCurrencyComposer, UserCurrencyEvent, UserSubscriptionComposer, UserSubscriptionEvent, UserSubscriptionParser } from '@nitrots/nitro-renderer'; -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; import { useBetween } from 'use-between'; import { CloneObject, ClubStatus, GetConfiguration, IPurse, PlaySound, Purse, SendMessageComposer, SoundNames } from '../../api'; -import { UseMessageEventHook } from '../messages'; +import { useMessageEvent } from '../events'; const usePurseState = () => { @@ -32,7 +32,7 @@ const usePurseState = () => return 0; } - const onUserCreditsEvent = useCallback((event: UserCreditsEvent) => + useMessageEvent(UserCreditsEvent, event => { const parser = event.getParser(); @@ -46,11 +46,9 @@ const usePurseState = () => return newValue; }); - }, []); + }); - UseMessageEventHook(UserCreditsEvent, onUserCreditsEvent); - - const onUserCurrencyEvent = useCallback((event: UserCurrencyEvent) => + useMessageEvent(UserCurrencyEvent, event => { const parser = event.getParser(); @@ -62,11 +60,9 @@ const usePurseState = () => return newValue; }); - }, []); + }); - UseMessageEventHook(UserCurrencyEvent, onUserCurrencyEvent); - - const onActivityPointNotificationMessageEvent = useCallback((event: ActivityPointNotificationMessageEvent) => + useMessageEvent(ActivityPointNotificationMessageEvent, event => { const parser = event.getParser(); @@ -82,11 +78,9 @@ const usePurseState = () => return newValue; }); - }, []); + }); - UseMessageEventHook(ActivityPointNotificationMessageEvent, onActivityPointNotificationMessageEvent); - - const onUserSubscriptionEvent = useCallback((event: UserSubscriptionEvent) => + useMessageEvent(UserSubscriptionEvent, event => { const parser = event.getParser(); const productName = parser.productName; @@ -108,9 +102,7 @@ const usePurseState = () => return newValue; }); - }, []); - - UseMessageEventHook(UserSubscriptionEvent, onUserSubscriptionEvent); + }); useEffect(() => { diff --git a/src/hooks/rooms/engine/index.ts b/src/hooks/rooms/engine/index.ts new file mode 100644 index 00000000..b41264de --- /dev/null +++ b/src/hooks/rooms/engine/index.ts @@ -0,0 +1,8 @@ +export * from './useFurniAddedEvent'; +export * from './useFurniRemovedEvent'; +export * from './useObjectDeselectedEvent'; +export * from './useObjectRollOutEvent'; +export * from './useObjectRollOverEvent'; +export * from './useObjectSelectedEvent'; +export * from './useUserAddedEvent'; +export * from './useUserRemovedEvent'; diff --git a/src/hooks/rooms/engine/useFurniAddedEvent.ts b/src/hooks/rooms/engine/useFurniAddedEvent.ts new file mode 100644 index 00000000..f5422c64 --- /dev/null +++ b/src/hooks/rooms/engine/useFurniAddedEvent.ts @@ -0,0 +1,19 @@ +import { useEffect } from 'react'; +import { RoomWidgetUpdateRoomObjectEvent, UI_EVENT_DISPATCHER } from '../../../api'; + +export const useFurniAddedEvent = (isActive: boolean, handler: (event: RoomWidgetUpdateRoomObjectEvent) => void) => +{ + useEffect(() => + { + if(!isActive) return; + + const onRoomWidgetUpdateRoomObjectEvent = (event: RoomWidgetUpdateRoomObjectEvent) => handler(event); + + UI_EVENT_DISPATCHER.addEventListener(RoomWidgetUpdateRoomObjectEvent.FURNI_ADDED, onRoomWidgetUpdateRoomObjectEvent); + + return () => + { + UI_EVENT_DISPATCHER.removeEventListener(RoomWidgetUpdateRoomObjectEvent.FURNI_ADDED, onRoomWidgetUpdateRoomObjectEvent); + } + }, [ isActive, handler ]); +} diff --git a/src/hooks/rooms/engine/useFurniRemovedEvent.ts b/src/hooks/rooms/engine/useFurniRemovedEvent.ts new file mode 100644 index 00000000..ddd1be2e --- /dev/null +++ b/src/hooks/rooms/engine/useFurniRemovedEvent.ts @@ -0,0 +1,19 @@ +import { useEffect } from 'react'; +import { RoomWidgetUpdateRoomObjectEvent, UI_EVENT_DISPATCHER } from '../../../api'; + +export const useFurniRemovedEvent = (isActive: boolean, handler: (event: RoomWidgetUpdateRoomObjectEvent) => void) => +{ + useEffect(() => + { + if(!isActive) return; + + const onRoomWidgetUpdateRoomObjectEvent = (event: RoomWidgetUpdateRoomObjectEvent) => handler(event); + + UI_EVENT_DISPATCHER.addEventListener(RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED, onRoomWidgetUpdateRoomObjectEvent); + + return () => + { + UI_EVENT_DISPATCHER.removeEventListener(RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED, onRoomWidgetUpdateRoomObjectEvent); + } + }, [ isActive, handler ]); +} diff --git a/src/hooks/rooms/engine/useObjectDeselectedEvent.ts b/src/hooks/rooms/engine/useObjectDeselectedEvent.ts new file mode 100644 index 00000000..ba549814 --- /dev/null +++ b/src/hooks/rooms/engine/useObjectDeselectedEvent.ts @@ -0,0 +1,7 @@ +import { RoomWidgetUpdateRoomObjectEvent } from '../../../api'; +import { useUiEvent } from '../../events'; + +export const useObjectDeselectedEvent = (handler: (event: RoomWidgetUpdateRoomObjectEvent) => void) => +{ + useUiEvent(RoomWidgetUpdateRoomObjectEvent.OBJECT_DESELECTED, handler); +} diff --git a/src/hooks/rooms/engine/useObjectRollOutEvent.ts b/src/hooks/rooms/engine/useObjectRollOutEvent.ts new file mode 100644 index 00000000..433ca915 --- /dev/null +++ b/src/hooks/rooms/engine/useObjectRollOutEvent.ts @@ -0,0 +1,7 @@ +import { RoomWidgetUpdateRoomObjectEvent } from '../../../api'; +import { useUiEvent } from '../../events'; + +export const useObjectRollOutEvent = (handler: (event: RoomWidgetUpdateRoomObjectEvent) => void) => +{ + useUiEvent(RoomWidgetUpdateRoomObjectEvent.OBJECT_ROLL_OUT, handler); +} diff --git a/src/hooks/rooms/engine/useObjectRollOverEvent.ts b/src/hooks/rooms/engine/useObjectRollOverEvent.ts new file mode 100644 index 00000000..2774ef2e --- /dev/null +++ b/src/hooks/rooms/engine/useObjectRollOverEvent.ts @@ -0,0 +1,7 @@ +import { RoomWidgetUpdateRoomObjectEvent } from '../../../api'; +import { useUiEvent } from '../../events'; + +export const useObjectRollOverEvent = (handler: (event: RoomWidgetUpdateRoomObjectEvent) => void) => +{ + useUiEvent(RoomWidgetUpdateRoomObjectEvent.OBJECT_ROLL_OVER, handler); +} diff --git a/src/hooks/rooms/engine/useObjectSelectedEvent.ts b/src/hooks/rooms/engine/useObjectSelectedEvent.ts new file mode 100644 index 00000000..38db66fa --- /dev/null +++ b/src/hooks/rooms/engine/useObjectSelectedEvent.ts @@ -0,0 +1,7 @@ +import { RoomWidgetUpdateRoomObjectEvent } from '../../../api'; +import { useUiEvent } from '../../events'; + +export const useObjectSelectedEvent = (handler: (event: RoomWidgetUpdateRoomObjectEvent) => void) => +{ + useUiEvent(RoomWidgetUpdateRoomObjectEvent.OBJECT_SELECTED, handler); +} diff --git a/src/hooks/rooms/engine/useUserAddedEvent.ts b/src/hooks/rooms/engine/useUserAddedEvent.ts new file mode 100644 index 00000000..d3c761bd --- /dev/null +++ b/src/hooks/rooms/engine/useUserAddedEvent.ts @@ -0,0 +1,19 @@ +import { useEffect } from 'react'; +import { RoomWidgetUpdateRoomObjectEvent, UI_EVENT_DISPATCHER } from '../../../api'; + +export const useUserAddedEvent = (isActive: boolean, handler: (event: RoomWidgetUpdateRoomObjectEvent) => void) => +{ + useEffect(() => + { + if(!isActive) return; + + const onRoomWidgetUpdateRoomObjectEvent = (event: RoomWidgetUpdateRoomObjectEvent) => handler(event); + + UI_EVENT_DISPATCHER.addEventListener(RoomWidgetUpdateRoomObjectEvent.USER_ADDED, onRoomWidgetUpdateRoomObjectEvent); + + return () => + { + UI_EVENT_DISPATCHER.removeEventListener(RoomWidgetUpdateRoomObjectEvent.USER_ADDED, onRoomWidgetUpdateRoomObjectEvent); + } + }, [ isActive, handler ]); +} diff --git a/src/hooks/rooms/engine/useUserRemovedEvent.ts b/src/hooks/rooms/engine/useUserRemovedEvent.ts new file mode 100644 index 00000000..28202417 --- /dev/null +++ b/src/hooks/rooms/engine/useUserRemovedEvent.ts @@ -0,0 +1,19 @@ +import { useEffect } from 'react'; +import { RoomWidgetUpdateRoomObjectEvent, UI_EVENT_DISPATCHER } from '../../../api'; + +export const useUserRemovedEvent = (isActive: boolean, handler: (event: RoomWidgetUpdateRoomObjectEvent) => void) => +{ + useEffect(() => + { + if(!isActive) return; + + const onRoomWidgetUpdateRoomObjectEvent = (event: RoomWidgetUpdateRoomObjectEvent) => handler(event); + + UI_EVENT_DISPATCHER.addEventListener(RoomWidgetUpdateRoomObjectEvent.USER_REMOVED, onRoomWidgetUpdateRoomObjectEvent); + + return () => + { + UI_EVENT_DISPATCHER.removeEventListener(RoomWidgetUpdateRoomObjectEvent.USER_REMOVED, onRoomWidgetUpdateRoomObjectEvent); + } + }, [ isActive, handler ]); +} diff --git a/src/hooks/rooms/index.ts b/src/hooks/rooms/index.ts index e7e7a361..325d8804 100644 --- a/src/hooks/rooms/index.ts +++ b/src/hooks/rooms/index.ts @@ -1 +1,3 @@ +export * from './engine'; +export * from './useRoom'; export * from './widgets'; diff --git a/src/hooks/rooms/useRoom.ts b/src/hooks/rooms/useRoom.ts new file mode 100644 index 00000000..01291dab --- /dev/null +++ b/src/hooks/rooms/useRoom.ts @@ -0,0 +1,192 @@ +import { IRoomSession, RoomEngineEvent, RoomEngineObjectEvent, RoomGeometry, RoomId, RoomObjectCategory, RoomObjectOperationType, RoomSessionEvent, RoomVariableEnum, Vector3d } from '@nitrots/nitro-renderer'; +import { useCallback, useEffect, useState } from 'react'; +import { useBetween } from 'use-between'; +import { CanManipulateFurniture, DispatchUiEvent, GetNitroInstance, GetRoomEngine, GetRoomSession, InitializeRoomInstanceRenderingCanvas, IsFurnitureSelectionDisabled, ProcessRoomObjectOperation, RoomWidgetUpdateRoomObjectEvent, SetActiveRoomId, StartRoomSession } from '../../api'; +import { useRoomEngineEvent, useRoomSessionManagerEvent } from '../events'; + +const useRoomState = () => +{ + const [ roomSession, setRoomSession ] = useState(null); + + const resize = useCallback((event: UIEvent = null) => + { + const canvas = GetNitroInstance().renderer.view; + + if(!canvas) return; + + canvas.style.width = `${ Math.floor(window.innerWidth) }px`; + canvas.style.height = `${ Math.floor(window.innerHeight) }px`; + + const nitroInstance = GetNitroInstance(); + + nitroInstance.renderer.resolution = window.devicePixelRatio; + nitroInstance.renderer.resize(window.innerWidth, window.innerHeight); + + InitializeRoomInstanceRenderingCanvas(window.innerWidth, window.innerHeight, 1); + + nitroInstance.render(); + }, []); + + useRoomEngineEvent([ + RoomEngineEvent.INITIALIZED, + RoomEngineEvent.DISPOSED + ], event => + { + if(RoomId.isRoomPreviewerId(event.roomId)) return; + + const session = GetRoomSession(); + + if(!session) return; + + switch(event.type) + { + case RoomEngineEvent.INITIALIZED: + SetActiveRoomId(event.roomId); + setRoomSession(session); + return; + case RoomEngineEvent.DISPOSED: + setRoomSession(null); + return; + } + }); + + useRoomSessionManagerEvent([ + RoomSessionEvent.CREATED, + RoomSessionEvent.ENDED + ], event => + { + switch(event.type) + { + case RoomSessionEvent.CREATED: + StartRoomSession(event.session); + return; + case RoomSessionEvent.ENDED: + setRoomSession(null); + return; + } + }); + + useRoomEngineEvent([ + RoomEngineObjectEvent.SELECTED, + RoomEngineObjectEvent.DESELECTED, + RoomEngineObjectEvent.ADDED, + RoomEngineObjectEvent.REMOVED, + RoomEngineObjectEvent.PLACED, + RoomEngineObjectEvent.REQUEST_MOVE, + RoomEngineObjectEvent.REQUEST_ROTATE, + RoomEngineObjectEvent.MOUSE_ENTER, + RoomEngineObjectEvent.MOUSE_LEAVE + ], event => + { + if(RoomId.isRoomPreviewerId(event.roomId)) return; + + let updateEvent: RoomWidgetUpdateRoomObjectEvent = null; + + switch(event.type) + { + case RoomEngineObjectEvent.SELECTED: + if(!IsFurnitureSelectionDisabled(event)) updateEvent = new RoomWidgetUpdateRoomObjectEvent(RoomWidgetUpdateRoomObjectEvent.OBJECT_SELECTED, event.objectId, event.category, event.roomId); + break; + case RoomEngineObjectEvent.DESELECTED: + updateEvent = new RoomWidgetUpdateRoomObjectEvent(RoomWidgetUpdateRoomObjectEvent.OBJECT_DESELECTED, event.objectId, event.category, event.roomId); + break; + case RoomEngineObjectEvent.ADDED: { + let addedEventType: string = null; + + switch(event.category) + { + case RoomObjectCategory.FLOOR: + case RoomObjectCategory.WALL: + addedEventType = RoomWidgetUpdateRoomObjectEvent.FURNI_ADDED; + break; + case RoomObjectCategory.UNIT: + addedEventType = RoomWidgetUpdateRoomObjectEvent.USER_ADDED; + break; + } + + if(addedEventType) updateEvent = new RoomWidgetUpdateRoomObjectEvent(addedEventType, event.objectId, event.category, event.roomId); + break; + } + case RoomEngineObjectEvent.REMOVED: { + let removedEventType: string = null; + + switch(event.category) + { + case RoomObjectCategory.FLOOR: + case RoomObjectCategory.WALL: + removedEventType = RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED; + break; + case RoomObjectCategory.UNIT: + removedEventType = RoomWidgetUpdateRoomObjectEvent.USER_REMOVED; + break; + } + + if(removedEventType) updateEvent = new RoomWidgetUpdateRoomObjectEvent(removedEventType, event.objectId, event.category, event.roomId); + break; + } + case RoomEngineObjectEvent.REQUEST_MOVE: + if(CanManipulateFurniture(roomSession, event.objectId, event.category)) ProcessRoomObjectOperation(event.objectId, event.category, RoomObjectOperationType.OBJECT_MOVE); + break; + case RoomEngineObjectEvent.REQUEST_ROTATE: + if(CanManipulateFurniture(roomSession, event.objectId, event.category)) ProcessRoomObjectOperation(event.objectId, event.category, RoomObjectOperationType.OBJECT_ROTATE_POSITIVE); + break; + case RoomEngineObjectEvent.MOUSE_ENTER: + updateEvent = new RoomWidgetUpdateRoomObjectEvent(RoomWidgetUpdateRoomObjectEvent.OBJECT_ROLL_OVER, event.objectId, event.category, event.roomId); + break; + case RoomEngineObjectEvent.MOUSE_LEAVE: + updateEvent = new RoomWidgetUpdateRoomObjectEvent(RoomWidgetUpdateRoomObjectEvent.OBJECT_ROLL_OUT, event.objectId, event.category, event.roomId); + break; + } + + if(updateEvent) DispatchUiEvent(updateEvent); + }); + + useEffect(() => + { + if(!roomSession) return; + + const roomEngine = GetRoomEngine(); + const roomId = roomSession.roomId; + const canvasId = 1; + + resize(); + + const displayObject = roomEngine.getRoomInstanceDisplay(roomId, canvasId, window.innerWidth, window.innerHeight, RoomGeometry.SCALE_ZOOMED_IN); + + if(!displayObject) return; + + const geometry = (roomEngine.getRoomInstanceGeometry(roomId, canvasId) as RoomGeometry); + + if(geometry) + { + const minX = (roomEngine.getRoomInstanceVariable(roomId, RoomVariableEnum.ROOM_MIN_X) || 0); + const maxX = (roomEngine.getRoomInstanceVariable(roomId, RoomVariableEnum.ROOM_MAX_X) || 0); + const minY = (roomEngine.getRoomInstanceVariable(roomId, RoomVariableEnum.ROOM_MIN_Y) || 0); + const maxY = (roomEngine.getRoomInstanceVariable(roomId, RoomVariableEnum.ROOM_MAX_Y) || 0); + + let x = ((minX + maxX) / 2); + let y = ((minY + maxY) / 2); + + const offset = 20; + + x = (x + (offset - 1)); + y = (y + (offset - 1)); + + const z = (Math.sqrt(((offset * offset) + (offset * offset))) * Math.tan(((30 / 180) * Math.PI))); + + geometry.location = new Vector3d(x, y, z); + } + + const stage = GetNitroInstance().stage; + + if(!stage) return; + + stage.addChild(displayObject); + + SetActiveRoomId(roomSession.roomId); + }, [ roomSession, resize ]); + + return { roomSession, resize }; +} + +export const useRoom = () => useBetween(useRoomState); diff --git a/src/hooks/rooms/widgets/furniture/index.ts b/src/hooks/rooms/widgets/furniture/index.ts new file mode 100644 index 00000000..ddc0a2fb --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/index.ts @@ -0,0 +1,16 @@ +export * from './useFurnitureBackgroundColorWidget'; +export * from './useFurnitureBadgeDisplayWidget'; +export * from './useFurnitureContextMenuWidget'; +export * from './useFurnitureDimmerWidget'; +export * from './useFurnitureExchangeWidget'; +export * from './useFurnitureExternalImageWidget'; +export * from './useFurnitureFriendFurniWidget'; +export * from './useFurnitureHighScoreWidget'; +export * from './useFurnitureInternalLinkWidget'; +export * from './useFurnitureMannequinWidget'; +export * from './useFurniturePresentWidget'; +export * from './useFurnitureRoomLinkWidget'; +export * from './useFurnitureStackHeightWidget'; +export * from './useFurnitureStickieWidget'; +export * from './useFurnitureTrophyWidget'; +export * from './useFurnitureYoutubeWidget'; diff --git a/src/hooks/rooms/widgets/furniture/useFurnitureBackgroundColorWidget.ts b/src/hooks/rooms/widgets/furniture/useFurnitureBackgroundColorWidget.ts new file mode 100644 index 00000000..b9855daa --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurnitureBackgroundColorWidget.ts @@ -0,0 +1,62 @@ +import { ApplyTonerComposer, RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@nitrots/nitro-renderer'; +import { useEffect, useState } from 'react'; +import { CanManipulateFurniture, DispatchUiEvent, GetRoomEngine, RoomWidgetUpdateBackgroundColorPreviewEvent, SendMessageComposer } from '../../../../api'; +import { useRoomEngineEvent } from '../../../events'; +import { useFurniRemovedEvent } from '../../engine'; +import { useRoom } from '../../useRoom'; + +const useFurnitureBackgroundColorWidgetState = () => +{ + const [ objectId, setObjectId ] = useState(-1); + const [ category, setCategory ] = useState(-1); + const [ hue, setHue ] = useState(0); + const [ saturation, setSaturation ] = useState(0); + const [ lightness, setLightness ] = useState(0); + const { roomSession = null } = useRoom(); + + const applyToner = () => SendMessageComposer(new ApplyTonerComposer(objectId, hue, saturation, lightness)); + const toggleToner = () => roomSession.useMultistateItem(objectId); + + const close = () => + { + DispatchUiEvent(new RoomWidgetUpdateBackgroundColorPreviewEvent(RoomWidgetUpdateBackgroundColorPreviewEvent.CLEAR_PREVIEW)); + + setObjectId(-1); + setCategory(-1); + setHue(0); + setSaturation(0); + setLightness(0); + } + + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_BACKGROUND_COLOR, event => + { + if(!CanManipulateFurniture(roomSession, event.objectId, event.category)) return; + + const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); + const model = roomObject.model; + + setObjectId(event.objectId); + setCategory(event.category) + setHue(parseInt(model.getValue(RoomObjectVariable.FURNITURE_ROOM_BACKGROUND_COLOR_HUE))); + setSaturation(parseInt(model.getValue(RoomObjectVariable.FURNITURE_ROOM_BACKGROUND_COLOR_SATURATION))); + setLightness(parseInt(model.getValue(RoomObjectVariable.FURNITURE_ROOM_BACKGROUND_COLOR_LIGHTNESS))); + }); + + useFurniRemovedEvent(((objectId !== -1) && (category !== -1)), event => + { + if((event.id !== objectId) || (event.category !== category)) return; + + close(); + }); + + useEffect(() => + { + if((objectId === -1) || (category === -1)) return; + + DispatchUiEvent(new RoomWidgetUpdateBackgroundColorPreviewEvent(RoomWidgetUpdateBackgroundColorPreviewEvent.PREVIEW, hue, saturation, lightness)); + }, [ objectId, category, hue, saturation, lightness ]); + + return { objectId, hue, setHue, saturation, setSaturation, lightness, setLightness, applyToner, toggleToner, close }; +} + +export const useFurnitureBackgroundColorWidget = useFurnitureBackgroundColorWidgetState; diff --git a/src/hooks/rooms/widgets/furniture/useFurnitureBadgeDisplayWidget.ts b/src/hooks/rooms/widgets/furniture/useFurnitureBadgeDisplayWidget.ts new file mode 100644 index 00000000..c8fb0185 --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurnitureBadgeDisplayWidget.ts @@ -0,0 +1,75 @@ +import { RoomEngineTriggerWidgetEvent, RoomObjectVariable, StringDataType } from '@nitrots/nitro-renderer'; +import { useState } from 'react'; +import { GetRoomEngine, GetSessionDataManager, LocalizeBadgeDescription, LocalizeBadgeName, LocalizeText } from '../../../../api'; +import { useRoomEngineEvent } from '../../../events'; +import { useNotification } from '../../../notification'; +import { useFurniRemovedEvent } from '../../engine'; + +const useFurnitureBadgeDisplayWidgetState = () => +{ + const [ objectId, setObjectId ] = useState(-1); + const [ category, setCategory ] = useState(-1); + const [ color, setColor ] = useState('1'); + const [ badgeName, setBadgeName ] = useState(''); + const [ badgeDesc, setBadgeDesc ] = useState(''); + const [ date, setDate ] = useState(''); + const [ senderName, setSenderName ] = useState(''); + const { simpleAlert = null } = useNotification(); + + const close = () => + { + setObjectId(-1); + setCategory(-1); + setColor('1'); + setBadgeName(''); + setBadgeDesc(''); + setDate(''); + setSenderName(''); + } + + useRoomEngineEvent([ + RoomEngineTriggerWidgetEvent.REQUEST_BADGE_DISPLAY_ENGRAVING, + RoomEngineTriggerWidgetEvent.REQUEST_ACHIEVEMENT_RESOLUTION_ENGRAVING + ], event => + { + const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); + + if(!roomObject) return; + + const stringStuff = new StringDataType(); + + stringStuff.initializeFromRoomObjectModel(roomObject.model); + + setObjectId(event.objectId); + setCategory(event.category); + setColor('1'); + setBadgeName(LocalizeBadgeName(stringStuff.getValue(1))); + setBadgeDesc(LocalizeBadgeDescription(stringStuff.getValue(1))); + setDate(stringStuff.getValue(2)); + setSenderName(stringStuff.getValue(3)); + }); + + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_ACHIEVEMENT_RESOLUTION_FAILED, event => + { + const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); + + if(!roomObject) return; + + const ownerId = roomObject.model.getValue(RoomObjectVariable.FURNITURE_OWNER_ID); + + if(ownerId !== GetSessionDataManager().userId) return; + + simpleAlert(`${ LocalizeText('resolution.failed.subtitle') } ${ LocalizeText('resolution.failed.text') }`, null, null, null, LocalizeText('resolution.failed.title')); + }); + + useFurniRemovedEvent(((objectId !== -1) && (category !== -1)), event => + { + if((event.id !== objectId) || (event.category !== category)) return; + + close(); + }); + + return { objectId, category, color, badgeName, badgeDesc, date, senderName, close }; +} + +export const useFurnitureBadgeDisplayWidget = useFurnitureBadgeDisplayWidgetState; diff --git a/src/hooks/rooms/widgets/furniture/useFurnitureContextMenuWidget.ts b/src/hooks/rooms/widgets/furniture/useFurnitureContextMenuWidget.ts new file mode 100644 index 00000000..4ff68913 --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurnitureContextMenuWidget.ts @@ -0,0 +1,149 @@ +import { ContextMenuEnum, GroupFurniContextMenuInfoMessageEvent, GroupFurniContextMenuInfoMessageParser, RoomEngineTriggerWidgetEvent, RoomObjectCategory } from '@nitrots/nitro-renderer'; +import { useCallback, useState } from 'react'; +import { GetRoomEngine, IsOwnerOfFurniture, TryJoinGroup, TryVisitRoom } from '../../../../api'; +import { useMessageEvent, useRoomEngineEvent } from '../../../events'; +import { useRoom } from '../../useRoom'; + +const MONSTERPLANT_SEED_CONFIRMATION: string = 'MONSTERPLANT_SEED_CONFIRMATION'; +const PURCHASABLE_CLOTHING_CONFIRMATION: string = 'PURCHASABLE_CLOTHING_CONFIRMATION'; +const GROUP_FURNITURE: string = 'GROUP_FURNITURE'; +const EFFECTBOX_OPEN: string = 'EFFECTBOX_OPEN'; + +const useFurnitureContextMenuWidgetState = () => +{ + const [ objectId, setObjectId ] = useState(-1); + const [ mode, setMode ] = useState(null); + const [ confirmMode, setConfirmMode ] = useState(null); + const [ confirmingObjectId, setConfirmingObjectId ] = useState(-1); + const [ groupData, setGroupData ] = useState(null); + const [ isGroupMember, setIsGroupMember ] = useState(false); + const { roomSession = null } = useRoom(); + + const close = useCallback(() => + { + setObjectId(-1); + setGroupData(null); + setIsGroupMember(false); + setMode(null); + }, []); + + const closeConfirm = () => + { + setConfirmMode(null); + setConfirmingObjectId(-1); + } + + const processAction = (name: string) => + { + if(name) + { + switch(name) + { + case 'use_friend_furni': + roomSession.useMultistateItem(objectId); + break; + case 'use_monsterplant_seed': + setConfirmMode(MONSTERPLANT_SEED_CONFIRMATION); + setConfirmingObjectId(objectId); + break; + case 'use_random_teleport': + GetRoomEngine().useRoomObject(objectId, RoomObjectCategory.FLOOR); + break; + case 'use_purchaseable_clothing': + setConfirmMode(PURCHASABLE_CLOTHING_CONFIRMATION); + setConfirmingObjectId(objectId); + break; + case 'join_group': + TryJoinGroup(groupData.guildId); + setIsGroupMember(true); + return; + case 'go_to_group_homeroom': + if(groupData) TryVisitRoom(groupData.guildHomeRoomId); + break; + } + } + + close(); + } + + useRoomEngineEvent([ + RoomEngineTriggerWidgetEvent.OPEN_FURNI_CONTEXT_MENU, + RoomEngineTriggerWidgetEvent.CLOSE_FURNI_CONTEXT_MENU, + RoomEngineTriggerWidgetEvent.REQUEST_MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG, + RoomEngineTriggerWidgetEvent.REQUEST_PURCHASABLE_CLOTHING_CONFIRMATION_DIALOG, + RoomEngineTriggerWidgetEvent.REQUEST_EFFECTBOX_OPEN_DIALOG + ], event => + { + const object = GetRoomEngine().getRoomObject(roomSession.roomId, event.objectId, event.category); + + if(!object) return; + + switch(event.type) + { + case RoomEngineTriggerWidgetEvent.REQUEST_MONSTERPLANT_SEED_PLANT_CONFIRMATION_DIALOG: + if(!IsOwnerOfFurniture(object)) return; + + setConfirmingObjectId(object.id); + setConfirmMode(MONSTERPLANT_SEED_CONFIRMATION); + + close(); + return; + case RoomEngineTriggerWidgetEvent.REQUEST_EFFECTBOX_OPEN_DIALOG: + if(!IsOwnerOfFurniture(object)) return; + + setConfirmingObjectId(object.id); + setConfirmMode(EFFECTBOX_OPEN); + + close(); + return; + case RoomEngineTriggerWidgetEvent.REQUEST_PURCHASABLE_CLOTHING_CONFIRMATION_DIALOG: + if(!IsOwnerOfFurniture(object)) return; + + setConfirmingObjectId(object.id); + setConfirmMode(PURCHASABLE_CLOTHING_CONFIRMATION); + + close(); + return; + case RoomEngineTriggerWidgetEvent.OPEN_FURNI_CONTEXT_MENU: + + setObjectId(object.id); + + switch(event.contextMenu) + { + case ContextMenuEnum.FRIEND_FURNITURE: + setMode(ContextMenuEnum.FRIEND_FURNITURE); + return; + case ContextMenuEnum.MONSTERPLANT_SEED: + if(IsOwnerOfFurniture(object)) setMode(ContextMenuEnum.MONSTERPLANT_SEED); + return; + case ContextMenuEnum.MYSTERY_BOX: + return; + case ContextMenuEnum.RANDOM_TELEPORT: + setMode(ContextMenuEnum.RANDOM_TELEPORT); + return; + case ContextMenuEnum.PURCHASABLE_CLOTHING: + if(IsOwnerOfFurniture(object)) setMode(ContextMenuEnum.PURCHASABLE_CLOTHING); + return; + } + + return; + case RoomEngineTriggerWidgetEvent.CLOSE_FURNI_CONTEXT_MENU: + if(object.id === objectId) close(); + return; + } + }); + + useMessageEvent(GroupFurniContextMenuInfoMessageEvent, event => + { + const parser = event.getParser(); + + setObjectId(parser.objectId); + setGroupData(parser); + setIsGroupMember(parser.userIsMember); + setMode(GROUP_FURNITURE); + }); + + return { objectId, mode, confirmMode, confirmingObjectId, groupData, isGroupMember, closeConfirm, processAction }; +} + +export const useFurnitureContextMenuWidget = useFurnitureContextMenuWidgetState; diff --git a/src/hooks/rooms/widgets/furniture/useFurnitureDimmerWidget.ts b/src/hooks/rooms/widgets/furniture/useFurnitureDimmerWidget.ts new file mode 100644 index 00000000..b56b0525 --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurnitureDimmerWidget.ts @@ -0,0 +1,108 @@ +import { RoomControllerLevel, RoomEngineDimmerStateEvent, RoomEngineTriggerWidgetEvent, RoomSessionDimmerPresetsEvent } from '@nitrots/nitro-renderer'; +import { useEffect, useState } from 'react'; +import { DimmerFurnitureWidgetPresetItem, FurnitureDimmerUtilities, GetSessionDataManager } from '../../../../api'; +import { useRoomEngineEvent, useRoomSessionManagerEvent } from '../../../events'; +import { useRoom } from '../../useRoom'; + +const useFurnitureDimmerWidgetState = () => +{ + const [ presets, setPresets ] = useState([]); + const [ selectedPresetId, setSelectedPresetId ] = useState(0); + const [ dimmerState, setDimmerState ] = useState(0); + const [ lastDimmerState, setLastDimmerState ] = useState(0); + const [ effectId, setEffectId ] = useState(0); + const [ color, setColor ] = useState(0xFFFFFF); + const [ brightness, setBrightness ] = useState(0xFF); + const [ selectedEffectId, setSelectedEffectId ] = useState(0); + const [ selectedColor, setSelectedColor ] = useState(0); + const [ selectedBrightness, setSelectedBrightness ] = useState(0); + const { roomSession = null } = useRoom(); + + const canOpenWidget = () => (roomSession.isRoomOwner || (roomSession.controllerLevel >= RoomControllerLevel.GUEST) || GetSessionDataManager().isModerator); + + const selectPresetId = (id: number) => + { + const preset = presets[(id - 1)]; + + if(!preset) return; + + setSelectedPresetId(preset.id); + setSelectedEffectId(preset.type); + setSelectedColor(preset.color); + setSelectedBrightness(preset.light); + } + + const applyChanges = () => + { + if(dimmerState === 0) return; + + const selectedPresetIndex = (selectedPresetId - 1); + + if((selectedPresetId < 1) || (selectedPresetId > presets.length)) return; + + const preset = presets[selectedPresetIndex]; + + if(!preset || ((selectedEffectId === preset.type) && (selectedColor === preset.color) && (selectedBrightness === preset.light))) return; + + setPresets(prevValue => + { + const newValue = [ ...prevValue ]; + + newValue[selectedPresetIndex] = new DimmerFurnitureWidgetPresetItem(preset.id, selectedEffectId, selectedColor, selectedBrightness); + + return newValue; + }); + + FurnitureDimmerUtilities.savePreset(preset.id, selectedEffectId, selectedColor, selectedBrightness, true); + } + + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_DIMMER, event => + { + if(!canOpenWidget()) return; + + roomSession.requestMoodlightSettings(); + }); + + useRoomSessionManagerEvent(RoomSessionDimmerPresetsEvent.ROOM_DIMMER_PRESETS, event => + { + const presets: DimmerFurnitureWidgetPresetItem[] = []; + + let i = 0; + + while(i < event.presetCount) + { + const preset = event.getPreset(i); + + if(preset) presets.push(new DimmerFurnitureWidgetPresetItem(preset.id, preset.type, preset.color, preset.brightness)); + + i++; + } + + setPresets(presets); + setSelectedPresetId(event.selectedPresetId); + }); + + useRoomEngineEvent(RoomEngineDimmerStateEvent.ROOM_COLOR, event => + { + setLastDimmerState(dimmerState); + setDimmerState(event.state); + setSelectedPresetId(event.presetId); + setEffectId(event.effectId); + setSelectedEffectId(event.effectId); + setColor(event.color); + setSelectedColor(event.color); + setBrightness(event.brightness); + setSelectedBrightness(event.brightness); + }); + + useEffect(() => + { + if((dimmerState === 0) && (lastDimmerState === 0)) return; + + FurnitureDimmerUtilities.previewDimmer(selectedColor, selectedBrightness, (selectedEffectId === 2)); + }, [ dimmerState, lastDimmerState, selectedColor, selectedBrightness, selectedEffectId ]); + + return { presets, selectedPresetId, dimmerState, lastDimmerState, effectId, color, brightness, selectedEffectId, setSelectedEffectId, selectedColor, setSelectedColor, selectedBrightness, setSelectedBrightness, selectPresetId, applyChanges }; +} + +export const useFurnitureDimmerWidget = useFurnitureDimmerWidgetState; diff --git a/src/hooks/rooms/widgets/furniture/useFurnitureExchangeWidget.ts b/src/hooks/rooms/widgets/furniture/useFurnitureExchangeWidget.ts new file mode 100644 index 00000000..2999d65c --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurnitureExchangeWidget.ts @@ -0,0 +1,48 @@ +import { FurnitureExchangeComposer, RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@nitrots/nitro-renderer'; +import { useCallback, useState } from 'react'; +import { GetRoomEngine, GetRoomSession, IsOwnerOfFurniture } from '../../../../api'; +import { useRoomEngineEvent } from '../../../events'; +import { useFurniRemovedEvent } from '../../engine'; + +const useFurnitureExchangeWidgetState = () => +{ + const [ objectId, setObjectId ] = useState(-1); + const [ category, setCategory ] = useState(-1); + const [ value, setValue ] = useState(0); + + const close = useCallback(() => + { + setObjectId(-1); + setCategory(-1); + setValue(0); + }, []); + + const redeem = () => + { + GetRoomSession().connection.send(new FurnitureExchangeComposer(objectId)); + + close(); + } + + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_CREDITFURNI, event => + { + const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); + + if(!roomObject || !IsOwnerOfFurniture(roomObject)) return; + + setObjectId(event.objectId); + setCategory(event.category); + setValue(roomObject.model.getValue(RoomObjectVariable.FURNITURE_CREDIT_VALUE) || 0); + }); + + useFurniRemovedEvent(((objectId !== -1) && (category !== -1)), event => + { + if((event.id !== objectId) || (event.category !== category)) return; + + close(); + }); + + return { objectId, value, redeem, close }; +} + +export const useFurnitureExchangeWidget = useFurnitureExchangeWidgetState; diff --git a/src/hooks/rooms/widgets/furniture/useFurnitureExternalImageWidget.ts b/src/hooks/rooms/widgets/furniture/useFurnitureExternalImageWidget.ts new file mode 100644 index 00000000..e530bacc --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurnitureExternalImageWidget.ts @@ -0,0 +1,44 @@ +import { RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@nitrots/nitro-renderer'; +import { useState } from 'react'; +import { GetRoomEngine, IPhotoData } from '../../../../api'; +import { useRoomEngineEvent } from '../../../events'; +import { useFurniRemovedEvent } from '../../engine'; + +const useFurnitureExternalImageWidgetState = () => +{ + const [ objectId, setObjectId ] = useState(-1); + const [ category, setCategory ] = useState(-1); + const [ photoData, setPhotoData ] = useState(null); + + const close = () => + { + setObjectId(-1); + setCategory(-1); + setPhotoData(null); + } + + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_EXTERNAL_IMAGE, event => + { + const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); + + if(!roomObject) return; + + const data = roomObject.model.getValue(RoomObjectVariable.FURNITURE_DATA); + const photoData = (JSON.parse(data) as IPhotoData); + + setObjectId(event.objectId); + setCategory(event.category); + setPhotoData(photoData); + }); + + useFurniRemovedEvent(((objectId !== -1) && (category !== -1)), event => + { + if((event.id !== objectId) || (event.category !== category)) return; + + close(); + }); + + return { objectId, photoData, close }; +} + +export const useFurnitureExternalImageWidget = useFurnitureExternalImageWidgetState; diff --git a/src/hooks/rooms/widgets/furniture/useFurnitureFriendFurniWidget.ts b/src/hooks/rooms/widgets/furniture/useFurnitureFriendFurniWidget.ts new file mode 100644 index 00000000..52c96bce --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurnitureFriendFurniWidget.ts @@ -0,0 +1,75 @@ +import { FriendFurniConfirmLockMessageComposer, LoveLockFurniFinishedEvent, LoveLockFurniFriendConfirmedEvent, LoveLockFurniStartEvent, RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@nitrots/nitro-renderer'; +import { useState } from 'react'; +import { GetRoomEngine, GetRoomSession } from '../../../../api'; +import { useMessageEvent, useRoomEngineEvent } from '../../../events'; +import { useFurniRemovedEvent } from '../../engine'; + +const useFurnitureFriendFurniWidgetState = () => +{ + const [ objectId, setObjectId ] = useState(-1); + const [ category, setCategory ] = useState(-1); + const [ type, setType ] = useState(0); + const [ usernames, setUsernames ] = useState([]); + const [ figures, setFigures ] = useState([]); + const [ date, setDate ] = useState(null); + const [ stage, setStage ] = useState(0); + + const close = () => + { + setObjectId(-1); + setCategory(-1); + setType(0); + setUsernames([]); + setFigures([]); + setDate(null); + } + + const respond = (flag: boolean) => + { + GetRoomSession().connection.send(new FriendFurniConfirmLockMessageComposer(objectId, flag)); + + close(); + } + + useMessageEvent(LoveLockFurniStartEvent, event => + { + const parser = event.getParser(); + + setObjectId(parser.furniId); + setStage(parser.start ? 1 : 2); + }); + + useMessageEvent(LoveLockFurniFinishedEvent, event => close()); + useMessageEvent(LoveLockFurniFriendConfirmedEvent, event => close()); + + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_FRIEND_FURNITURE_ENGRAVING, event => + { + const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); + + if(!roomObject) return; + + const data = roomObject.model.getValue(RoomObjectVariable.FURNITURE_DATA); + const type = roomObject.model.getValue(RoomObjectVariable.FURNITURE_FRIENDFURNI_ENGRAVING); + + if((data[0] !== '1') || (data.length !== 6)) return; + + setObjectId(event.objectId); + setCategory(event.category); + setType(type); + setUsernames([ data[1], data[2] ]); + setFigures([ data[3], data[4] ]); + setDate(data[5]); + setStage(0); + }); + + useFurniRemovedEvent(((objectId !== -1) && (category !== -1)), event => + { + if((event.id !== objectId) || (event.category !== category)) return; + + close(); + }); + + return { objectId, type, usernames, figures, date, stage, close, respond }; +} + +export const useFurnitureFriendFurniWidget = useFurnitureFriendFurniWidgetState; diff --git a/src/hooks/rooms/widgets/furniture/useFurnitureHighScoreWidget.ts b/src/hooks/rooms/widgets/furniture/useFurnitureHighScoreWidget.ts new file mode 100644 index 00000000..0d986d51 --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurnitureHighScoreWidget.ts @@ -0,0 +1,56 @@ +import { HighScoreDataType, ObjectDataFactory, RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@nitrots/nitro-renderer'; +import { useState } from 'react'; +import { GetRoomEngine } from '../../../../api'; +import { useRoomEngineEvent } from '../../../events'; +import { useRoom } from '../../useRoom'; + +const SCORE_TYPES = [ 'perteam', 'mostwins', 'classic' ]; +const CLEAR_TYPES = [ 'alltime', 'daily', 'weekly', 'monthly' ]; + +const useFurnitureHighScoreWidgetState = () => +{ + const [ stuffDatas, setStuffDatas ] = useState>(new Map()); + const { roomSession = null } = useRoom(); + + const getScoreType = (type: number) => SCORE_TYPES[type]; + const getClearType = (type: number) => CLEAR_TYPES[type]; + + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_HIGH_SCORE_DISPLAY, event => + { + const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); + + if(!roomObject) return; + + const formatKey = roomObject.model.getValue(RoomObjectVariable.FURNITURE_DATA_FORMAT); + const stuffData = (ObjectDataFactory.getData(formatKey) as HighScoreDataType); + + stuffData.initializeFromRoomObjectModel(roomObject.model); + + setStuffDatas(prevValue => + { + const newValue = new Map(prevValue); + + newValue.set(roomObject.id, stuffData); + + return newValue; + }); + }); + + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_HIDE_HIGH_SCORE_DISPLAY, event => + { + if(event.roomId !== roomSession.roomId) return; + + setStuffDatas(prevValue => + { + const newValue = new Map(prevValue); + + newValue.delete(event.objectId); + + return newValue; + }); + }); + + return { stuffDatas, getScoreType, getClearType }; +} + +export const useFurnitureHighScoreWidget = useFurnitureHighScoreWidgetState; diff --git a/src/hooks/rooms/widgets/furniture/useFurnitureInternalLinkWidget.ts b/src/hooks/rooms/widgets/furniture/useFurnitureInternalLinkWidget.ts new file mode 100644 index 00000000..c1b68801 --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurnitureInternalLinkWidget.ts @@ -0,0 +1,27 @@ +import { RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@nitrots/nitro-renderer'; +import { CreateLinkEvent, GetRoomEngine } from '../../../../api'; +import { useRoomEngineEvent } from '../../../events'; + +const INTERNALLINK = 'internalLink'; + +const useFurnitureInternalLinkWidgetState = () => +{ + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_INTERNAL_LINK, event => + { + const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); + + if(!roomObject) return; + + const data = roomObject.model.getValue(RoomObjectVariable.FURNITURE_DATA); + + let link = data[INTERNALLINK]; + + if(!link || !link.length) link = roomObject.model.getValue(RoomObjectVariable.FURNITURE_INTERNAL_LINK); + + if(link && link.length) CreateLinkEvent(link); + }); + + return {}; +} + +export const useFurnitureInternalLinkWidget = useFurnitureInternalLinkWidgetState; diff --git a/src/hooks/rooms/widgets/furniture/useFurnitureMannequinWidget.ts b/src/hooks/rooms/widgets/furniture/useFurnitureMannequinWidget.ts new file mode 100644 index 00000000..0ecedf9b --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurnitureMannequinWidget.ts @@ -0,0 +1,80 @@ +import { FurnitureMannequinSaveLookComposer, FurnitureMannequinSaveNameComposer, FurnitureMultiStateComposer, HabboClubLevelEnum, RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@nitrots/nitro-renderer'; +import { useState } from 'react'; +import { GetAvatarRenderManager, GetRoomEngine, MannequinUtilities, SendMessageComposer } from '../../../../api'; +import { useRoomEngineEvent } from '../../../events'; +import { useFurniRemovedEvent } from '../../engine'; + +const useFurnitureMannequinWidgetState = () => +{ + const [ objectId, setObjectId ] = useState(-1); + const [ category, setCategory ] = useState(-1); + const [ figure, setFigure ] = useState(null); + const [ gender, setGender ] = useState(null); + const [ clubLevel, setClubLevel ] = useState(HabboClubLevelEnum.NO_CLUB); + const [ name, setName ] = useState(null); + + const close = () => + { + setObjectId(-1); + setCategory(-1); + setFigure(null); + setGender(null); + setName(null); + } + + const saveFigure = () => + { + if(objectId === -1) return; + + SendMessageComposer(new FurnitureMannequinSaveLookComposer(objectId)); + + close(); + } + + const wearFigure = () => + { + if(objectId === -1) return; + + SendMessageComposer(new FurnitureMultiStateComposer(objectId)); + + close(); + } + + const saveName = () => + { + if(objectId === -1) return; + + SendMessageComposer(new FurnitureMannequinSaveNameComposer(objectId, name)); + } + + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_MANNEQUIN, event => + { + const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); + + if(!roomObject) return; + + const model = roomObject.model; + const figure = (model.getValue(RoomObjectVariable.FURNITURE_MANNEQUIN_FIGURE) || null); + const gender = (model.getValue(RoomObjectVariable.FURNITURE_MANNEQUIN_GENDER) || null); + const figureContainer = GetAvatarRenderManager().createFigureContainer(figure); + const figureClubLevel = GetAvatarRenderManager().getFigureClubLevel(figureContainer, gender, MannequinUtilities.MANNEQUIN_CLOTHING_PART_TYPES); + + setObjectId(event.objectId); + setCategory(event.category); + setFigure(figure); + setGender(gender); + setClubLevel(figureClubLevel); + setName(model.getValue(RoomObjectVariable.FURNITURE_MANNEQUIN_NAME) || null); + }); + + useFurniRemovedEvent(((objectId !== -1) && (category !== -1)), event => + { + if((event.id !== objectId) || (event.category !== category)) return; + + close(); + }); + + return { objectId, figure, gender, clubLevel, name, setName, saveFigure, wearFigure, saveName, close }; +} + +export const useFurnitureMannequinWidget = useFurnitureMannequinWidgetState; diff --git a/src/hooks/rooms/widgets/furniture/useFurniturePresentWidget.ts b/src/hooks/rooms/widgets/furniture/useFurniturePresentWidget.ts new file mode 100644 index 00000000..56f73be1 --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurniturePresentWidget.ts @@ -0,0 +1,225 @@ +import { IFurnitureData, IGetImageListener, PetFigureData, RoomEngineTriggerWidgetEvent, RoomObjectCategory, RoomObjectVariable, RoomSessionPresentEvent, TextureUtils, Vector3d } from '@nitrots/nitro-renderer'; +import { useMemo, useState } from 'react'; +import { useRoom } from '../../..'; +import { GetRoomEngine, GetSessionDataManager, IsOwnerOfFurniture, LocalizeText, ProductTypeEnum } from '../../../../api'; +import { useRoomEngineEvent, useRoomSessionManagerEvent } from '../../../events'; +import { useFurniRemovedEvent } from '../../engine'; + +const FLOOR: string = 'floor'; +const WALLPAPER: string = 'wallpaper'; +const LANDSCAPE: string = 'landscape'; +const POSTER: string = 'poster'; + +const useFurniturePresentWidgetState = () => +{ + const [ objectId, setObjectId ] = useState(-1); + const [ classId, setClassId ] = useState(-1); + const [ itemType, setItemType ] = useState(null); + const [ text, setText ] = useState(null); + const [ isOwnerOfFurniture, setIsOwnerOfFurniture ] = useState(false); + const [ senderName, setSenderName ] = useState(null); + const [ senderFigure, setSenderFigure ] = useState(null); + const [ placedItemId, setPlacedItemId ] = useState(-1); + const [ placedItemType, setPlacedItemType ] = useState(null); + const [ placedInRoom, setPlacedInRoom ] = useState(false); + const [ imageUrl, setImageUrl ] = useState(null); + const { roomSession = null } = useRoom(); + + const close = () => + { + setObjectId(-1); + setClassId(-1); + setItemType(null); + setText(null); + setIsOwnerOfFurniture(false); + setSenderName(null); + setSenderFigure(null); + setPlacedItemId(-1); + setPlacedItemType(null); + setPlacedInRoom(false); + setImageUrl(null); + } + + const openPresent = () => + { + if(objectId === -1) return; + + roomSession.openGift(objectId); + + GetRoomEngine().changeObjectModelData(GetRoomEngine().activeRoomId, objectId, RoomObjectCategory.FLOOR, RoomObjectVariable.FURNITURE_DISABLE_PICKING_ANIMATION, 1); + } + + const imageListener: IGetImageListener = useMemo(() => + { + return { + imageReady: (id, texture, image) => + { + if(!image && texture) + { + image = TextureUtils.generateImage(texture); + } + + setImageUrl(image.src); + }, + imageFailed: null + } + }, []); + + useRoomSessionManagerEvent(RoomSessionPresentEvent.RSPE_PRESENT_OPENED, event => + { + let furniData: IFurnitureData = null; + + if(event.itemType === ProductTypeEnum.FLOOR) + { + furniData = GetSessionDataManager().getFloorItemData(event.classId); + } + else if(event.itemType === ProductTypeEnum.WALL) + { + furniData = GetSessionDataManager().getWallItemData(event.classId); + } + + let isOwnerOfFurni = false; + + if(event.placedInRoom) + { + const roomObject = GetRoomEngine().getRoomObject(roomSession.roomId, event.placedItemId, RoomObjectCategory.FLOOR); + + if(roomObject) isOwnerOfFurni = IsOwnerOfFurniture(roomObject); + } + + let giftImage: string = null; + + switch(event.itemType) + { + case ProductTypeEnum.WALL: { + if(furniData) + { + switch(furniData.className) + { + case FLOOR: + case LANDSCAPE: + case WALLPAPER: + let imageType = null; + let message = null; + + if(furniData.className === FLOOR) + { + imageType = 'packagecard_icon_floor'; + message = LocalizeText('inventory.furni.item.floor.name'); + } + + else if(furniData.className === LANDSCAPE) + { + imageType = 'packagecard_icon_landscape'; + message = LocalizeText('inventory.furni.item.landscape.name'); + } + + else + { + imageType = 'packagecard_icon_wallpaper'; + message = LocalizeText('inventory.furni.item.wallpaper.name'); + } + + setText(message); + //setImageUrl(getGiftImageUrl(imageType)); + break; + case POSTER: { + const productCode = event.productCode; + + let extras: string = null; + + if(productCode.indexOf('poster') === 0) extras = productCode.replace('poster', ''); + + const productData = GetSessionDataManager().getProductData(productCode); + + let name: string = null; + + if(productData) name = productData.name; + else if(furniData) name = furniData.name; + + setText(name); + setImageUrl(GetRoomEngine().getFurnitureWallIconUrl(event.classId, extras)); + + break; + } + default: { + setText(furniData.name || null); + setImageUrl(GetRoomEngine().getFurnitureWallIconUrl(event.classId)); + break; + } + } + } + + break; + } + case ProductTypeEnum.HABBO_CLUB: + setText(LocalizeText('widget.furni.present.hc')); + //setImageUrl(getGiftImageUrl('packagecard_icon_hc')); + break; + default: { + if(event.placedItemType === ProductTypeEnum.PET) + { + const petfigureString = event.petFigureString; + + if(petfigureString && petfigureString.length) + { + const petFigureData = new PetFigureData(petfigureString); + + const petImage = GetRoomEngine().getRoomObjectPetImage(petFigureData.typeId, petFigureData.paletteId, petFigureData.color, new Vector3d(90), 64, imageListener, true, 0, petFigureData.customParts); + + if(petImage) setImageUrl(petImage.getImage().src); + } + } + else + { + const furniImage = GetRoomEngine().getFurnitureFloorImage(event.classId, new Vector3d(90), 64, imageListener); + + if(furniImage) setImageUrl(furniImage.getImage().src); + } + + const productData = GetSessionDataManager().getProductData(event.productCode); + + setText((productData && productData.name) || furniData.name); + break; + } + } + + setObjectId(0); + setClassId(event.classId); + setItemType(event.itemType); + setIsOwnerOfFurniture(isOwnerOfFurni); + setPlacedItemId(event.placedItemId); + setPlacedItemType(event.placedItemType); + setPlacedInRoom(event.placedInRoom); + }); + + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_PRESENT, event => + { + const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); + + if(!roomObject) return null; + + close(); + + setObjectId(event.objectId); + setClassId(-1); + setText((roomObject.model.getValue(RoomObjectVariable.FURNITURE_DATA) || '')); + setIsOwnerOfFurniture(IsOwnerOfFurniture(roomObject)); + setSenderName((roomObject.model.getValue(RoomObjectVariable.FURNITURE_PURCHASER_NAME) || null)); + setSenderFigure((roomObject.model.getValue(RoomObjectVariable.FURNITURE_PURCHASER_FIGURE) || null)); + }); + + useFurniRemovedEvent((objectId !== -1), event => + { + if(event.id === objectId) close(); + + if(event.id === placedItemId) + { + if(placedInRoom) setPlacedInRoom(false); + } + }); + + return { objectId, classId, itemType, text, isOwnerOfFurniture, senderName, senderFigure, placedItemId, placedItemType, placedInRoom, imageUrl, openPresent, close }; +} + +export const useFurniturePresentWidget = useFurniturePresentWidgetState; diff --git a/src/hooks/rooms/widgets/furniture/useFurnitureRoomLinkWidget.ts b/src/hooks/rooms/widgets/furniture/useFurnitureRoomLinkWidget.ts new file mode 100644 index 00000000..95d193f4 --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurnitureRoomLinkWidget.ts @@ -0,0 +1,49 @@ +import { GetGuestRoomMessageComposer, GetGuestRoomResultEvent, RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@nitrots/nitro-renderer'; +import { useState } from 'react'; +import { GetRoomEngine, SendMessageComposer } from '../../../../api'; +import { useMessageEvent, useRoomEngineEvent } from '../../../events'; + +const INTERNALLINK = 'internalLink'; + +const useFurnitureRoomLinkWidgetState = () => +{ + const [ roomIdToEnter, setRoomIdToEnter ] = useState(0); + + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_ROOM_LINK, event => + { + const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); + + if(!roomObject) return; + + const data = roomObject.model.getValue(RoomObjectVariable.FURNITURE_DATA); + + let roomId = data[INTERNALLINK]; + + if(!roomId || !roomId.length) roomId = roomObject.model.getValue(RoomObjectVariable.FURNITURE_INTERNAL_LINK); + + if(!roomId || !roomId.length) return; + + roomId = parseInt(roomId, 10); + + if(roomId === NaN) return; + + setRoomIdToEnter(roomId); + + SendMessageComposer(new GetGuestRoomMessageComposer(roomId, false, false)); + }); + + useMessageEvent(GetGuestRoomResultEvent, event => + { + if(!roomIdToEnter) return; + + const parser = event.getParser(); + + if(parser.data.roomId !== roomIdToEnter) return; + + setRoomIdToEnter(0); + }); + + return {}; +} + +export const useFurnitureRoomLinkWidget = useFurnitureRoomLinkWidgetState; diff --git a/src/hooks/rooms/widgets/furniture/useFurnitureStackHeightWidget.ts b/src/hooks/rooms/widgets/furniture/useFurnitureStackHeightWidget.ts new file mode 100644 index 00000000..be5bb215 --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurnitureStackHeightWidget.ts @@ -0,0 +1,79 @@ +import { FurnitureStackHeightComposer, FurnitureStackHeightEvent, RoomEngineTriggerWidgetEvent } from '@nitrots/nitro-renderer'; +import { useEffect, useState } from 'react'; +import { CanManipulateFurniture, GetRoomEngine, GetRoomSession, SendMessageComposer } from '../../../../api'; +import { useMessageEvent, useRoomEngineEvent } from '../../../events'; +import { useFurniRemovedEvent } from '../../engine'; + +const MAX_HEIGHT: number = 40; + +const useFurnitureStackHeightWidgetState = () => +{ + const [ objectId, setObjectId ] = useState(-1); + const [ category, setCategory ] = useState(-1); + const [ height, setHeight ] = useState(0); + const [ pendingHeight, setPendingHeight ] = useState(-1); + + const close = () => + { + setObjectId(-1); + setCategory(-1); + setHeight(0); + setPendingHeight(-1); + } + + const updateHeight = (height: number, server: boolean = false) => + { + if(!height) height = 0; + + height = Math.abs(height); + + if(!server) ((height > MAX_HEIGHT) && (height = MAX_HEIGHT)); + + setHeight(parseFloat(height.toFixed(2))); + + if(!server) setPendingHeight(height * 100); + } + + useMessageEvent(FurnitureStackHeightEvent, event => + { + const parser = event.getParser(); + + if(objectId !== parser.furniId) return; + + updateHeight(parser.height, true); + }); + + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_STACK_HEIGHT, event => + { + if(!CanManipulateFurniture(GetRoomSession(), event.objectId, event.category)) return; + + const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); + + if(!roomObject) return; + + setObjectId(event.objectId); + setCategory(event.category); + setHeight(roomObject.getLocation().z); + setPendingHeight(-1); + }); + + useFurniRemovedEvent(((objectId !== -1) && (category !== -1)), event => + { + if((event.id !== objectId) || (event.category !== category)) return; + + close(); + }); + + useEffect(() => + { + if((objectId === -1) || (pendingHeight === -1)) return; + + const timeout = setTimeout(() => SendMessageComposer(new FurnitureStackHeightComposer(objectId, ~~(pendingHeight))), 10); + + return () => clearTimeout(timeout); + }, [ objectId, pendingHeight ]); + + return { objectId, height, maxHeight: MAX_HEIGHT, close, updateHeight }; +} + +export const useFurnitureStackHeightWidget = useFurnitureStackHeightWidgetState; diff --git a/src/hooks/rooms/widgets/furniture/useFurnitureStickieWidget.ts b/src/hooks/rooms/widgets/furniture/useFurnitureStickieWidget.ts new file mode 100644 index 00000000..f43109c8 --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurnitureStickieWidget.ts @@ -0,0 +1,82 @@ +import { RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@nitrots/nitro-renderer'; +import { useState } from 'react'; +import { GetRoomEngine, GetRoomSession, GetSessionDataManager, IsOwnerOfFurniture } from '../../../../api'; +import { useRoomEngineEvent } from '../../../events'; +import { useFurniRemovedEvent } from '../../engine'; + +const useFurnitureStickieWidgetState = () => +{ + const [ objectId, setObjectId ] = useState(-1); + const [ category, setCategory ] = useState(-1); + const [ color, setColor ] = useState('0'); + const [ text, setText ] = useState(''); + const [ canModify, setCanModify ] = useState(false); + + const close = () => + { + setObjectId(-1); + setCategory(-1); + setColor('0'); + setText(''); + setCanModify(false); + } + + const updateColor = (newColor: string) => + { + if(newColor === color) return; + + setColor(newColor); + + GetRoomEngine().modifyRoomObjectData(objectId, category, newColor, text); + } + + const updateText = (newText: string) => + { + setText(newText); + + GetRoomEngine().modifyRoomObjectData(objectId, category, color, newText); + } + + const trash = () => GetRoomEngine().deleteRoomObject(objectId, category); + + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_STICKIE, event => + { + const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); + + if(!roomObject) return; + + const data = roomObject.model.getValue(RoomObjectVariable.FURNITURE_ITEMDATA); + + if(data.length < 6) return; + + let color: string = null; + let text: string = null; + + if(data.indexOf(' ') > 0) + { + color = data.slice(0, data.indexOf(' ')); + text = data.slice((data.indexOf(' ') + 1), data.length); + } + else + { + color = data; + } + + setObjectId(event.objectId); + setCategory(event.category); + setColor(color || '0'); + setText(text || ''); + setCanModify(GetRoomSession().isRoomOwner || GetSessionDataManager().isModerator || IsOwnerOfFurniture(roomObject)); + }); + + useFurniRemovedEvent(((objectId !== -1) && (category !== -1)), event => + { + if((event.id !== objectId) || (event.category !== category)) return; + + close(); + }); + + return { objectId, color, text, canModify, updateColor, updateText, trash, close }; +} + +export const useFurnitureStickieWidget = useFurnitureStickieWidgetState; diff --git a/src/hooks/rooms/widgets/furniture/useFurnitureTrophyWidget.ts b/src/hooks/rooms/widgets/furniture/useFurnitureTrophyWidget.ts new file mode 100644 index 00000000..8a3ee666 --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurnitureTrophyWidget.ts @@ -0,0 +1,63 @@ +import { RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@nitrots/nitro-renderer'; +import { useState } from 'react'; +import { GetRoomEngine } from '../../../../api'; +import { useRoomEngineEvent } from '../../../events'; +import { useFurniRemovedEvent } from '../../engine'; + +const useFurnitureTrophyWidgetState = () => +{ + const [ objectId, setObjectId ] = useState(-1); + const [ category, setCategory ] = useState(-1); + const [ color, setColor ] = useState('1'); + const [ senderName, setSenderName ] = useState(''); + const [ date, setDate ] = useState(''); + const [ message, setMessage ] = useState(''); + + const close = () => + { + setObjectId(-1); + setCategory(-1); + setColor('1'); + setSenderName(''); + setDate(''); + setMessage(''); + } + + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_TROPHY, event => + { + const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); + + if(!roomObject) return; + + let data = roomObject.model.getValue(RoomObjectVariable.FURNITURE_DATA); + let extra = roomObject.model.getValue(RoomObjectVariable.FURNITURE_EXTRAS); + + if(!extra) extra = '0'; + + setObjectId(event.objectId); + setCategory(event.category); + setColor(roomObject.model.getValue(RoomObjectVariable.FURNITURE_COLOR) || '1'); + + const senderName = data.substring(0, data.indexOf('\t')); + + data = data.substring((senderName.length + 1), data.length); + + const trophyDate = data.substring(0, data.indexOf('\t')); + const trophyText = data.substr((trophyDate.length + 1), data.length); + + setSenderName(senderName); + setDate(trophyDate); + setMessage(trophyText); + }); + + useFurniRemovedEvent(((objectId !== -1) && (category !== -1)), event => + { + if((event.id !== objectId) || (event.category !== category)) return; + + close(); + }); + + return { objectId, color, senderName, date, message, close }; +} + +export const useFurnitureTrophyWidget = useFurnitureTrophyWidgetState; diff --git a/src/hooks/rooms/widgets/furniture/useFurnitureYoutubeWidget.ts b/src/hooks/rooms/widgets/furniture/useFurnitureYoutubeWidget.ts new file mode 100644 index 00000000..d433b0b8 --- /dev/null +++ b/src/hooks/rooms/widgets/furniture/useFurnitureYoutubeWidget.ts @@ -0,0 +1,127 @@ +import { ControlYoutubeDisplayPlaybackMessageComposer, GetYoutubeDisplayStatusMessageComposer, RoomEngineTriggerWidgetEvent, RoomId, SecurityLevel, SetYoutubeDisplayPlaylistMessageComposer, YoutubeControlVideoMessageEvent, YoutubeDisplayPlaylist, YoutubeDisplayPlaylistsEvent, YoutubeDisplayVideoMessageEvent } from '@nitrots/nitro-renderer'; +import { useState } from 'react'; +import { GetRoomEngine, GetSessionDataManager, IsOwnerOfFurniture, SendMessageComposer, YoutubeVideoPlaybackStateEnum } from '../../../../api'; +import { useMessageEvent, useRoomEngineEvent } from '../../../events'; +import { useFurniRemovedEvent } from '../../engine'; + +const CONTROL_COMMAND_PREVIOUS_VIDEO = 0; +const CONTROL_COMMAND_NEXT_VIDEO = 1; +const CONTROL_COMMAND_PAUSE_VIDEO = 2; +const CONTROL_COMMAND_CONTINUE_VIDEO = 3; + +const useFurnitureYoutubeWidgetState = () => +{ + const [ objectId, setObjectId ] = useState(-1); + const [ category, setCategory ] = useState(-1); + const [ videoId, setVideoId ] = useState(null); + const [ videoStart, setVideoStart ] = useState(null); + const [ videoEnd, setVideoEnd ] = useState(null); + const [ currentVideoState, setCurrentVideoState ] = useState(-1); + const [ selectedVideo, setSelectedVideo ] = useState(null); + const [ playlists, setPlaylists ] = useState(null); + const [ hasControl, setHasControl ] = useState(false); + + const close = () => + { + setObjectId(-1); + setCategory(-1); + setVideoId(null); + setVideoStart(null); + setVideoEnd(null); + setCurrentVideoState(-1); + setSelectedVideo(null); + setPlaylists(null); + setHasControl(false); + } + + const previous = () => SendMessageComposer(new ControlYoutubeDisplayPlaybackMessageComposer(objectId, CONTROL_COMMAND_PREVIOUS_VIDEO)); + + const next = () => SendMessageComposer(new ControlYoutubeDisplayPlaybackMessageComposer(objectId, CONTROL_COMMAND_NEXT_VIDEO)); + + const pause = () => (hasControl && videoId && videoId.length) && SendMessageComposer(new ControlYoutubeDisplayPlaybackMessageComposer(objectId, CONTROL_COMMAND_PAUSE_VIDEO)); + + const play = () => (hasControl && videoId && videoId.length) && SendMessageComposer(new ControlYoutubeDisplayPlaybackMessageComposer(objectId, CONTROL_COMMAND_CONTINUE_VIDEO)); + + const selectVideo = (video: string) => + { + if(selectedVideo === video) + { + setSelectedVideo(null); + SendMessageComposer(new SetYoutubeDisplayPlaylistMessageComposer(objectId, '')); + + return; + } + + setSelectedVideo(video); + SendMessageComposer(new SetYoutubeDisplayPlaylistMessageComposer(objectId, video)); + } + + useRoomEngineEvent(RoomEngineTriggerWidgetEvent.REQUEST_YOUTUBE, event => + { + if(RoomId.isRoomPreviewerId(event.roomId)) return; + + const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category); + + if(!roomObject) return; + + setObjectId(event.objectId); + setCategory(event.category); + setHasControl(GetSessionDataManager().hasSecurity(SecurityLevel.EMPLOYEE) || IsOwnerOfFurniture(roomObject)); + + SendMessageComposer(new GetYoutubeDisplayStatusMessageComposer(event.objectId)); + }); + + useMessageEvent(YoutubeDisplayVideoMessageEvent, event => + { + const parser = event.getParser(); + + if((objectId === -1) || (objectId !== parser.furniId)) return; + + setVideoId(parser.videoId); + setVideoStart(parser.startAtSeconds); + setVideoEnd(parser.endAtSeconds); + setCurrentVideoState(parser.state); + }); + + useMessageEvent(YoutubeDisplayPlaylistsEvent, event => + { + const parser = event.getParser(); + + if((objectId === -1) || (objectId !== parser.furniId)) return; + + setPlaylists(parser.playlists); + setSelectedVideo(parser.selectedPlaylistId); + setVideoId(null); + setCurrentVideoState(-1); + setVideoEnd(null); + setVideoStart(null); + }); + + useMessageEvent(YoutubeControlVideoMessageEvent, event => + { + const parser = event.getParser(); + + if((objectId === -1) || (objectId !== parser.furniId)) return; + + switch(parser.commandId) + { + case 1: + setCurrentVideoState(YoutubeVideoPlaybackStateEnum.PLAYING); + break; + case 2: + setCurrentVideoState(YoutubeVideoPlaybackStateEnum.PAUSED); + break; + } + }); + + useFurniRemovedEvent(((objectId !== -1) && (category !== -1)), event => + { + if((event.id !== objectId) || (event.category !== category)) return; + + close(); + }); + + return { objectId, videoId, videoStart, videoEnd, currentVideoState, selectedVideo, playlists, close, previous, next, pause, play, selectVideo }; +} + +export const useFurnitureYoutubeWidget = useFurnitureYoutubeWidgetState; diff --git a/src/hooks/rooms/widgets/index.ts b/src/hooks/rooms/widgets/index.ts index d70c93df..53b15d41 100644 --- a/src/hooks/rooms/widgets/index.ts +++ b/src/hooks/rooms/widgets/index.ts @@ -1 +1,10 @@ +export * from './furniture'; +export * from './useAvatarInfoWidget'; +export * from './useChatInputWidget'; +export * from './useChatWidget'; export * from './useDoorbellWidget'; +export * from './useFriendRequestWidget'; +export * from './useFurniChooserWidget'; +export * from './usePollWidget'; +export * from './useUserChooserWidget'; +export * from './useWordQuizWidget'; diff --git a/src/hooks/rooms/widgets/useAvatarInfoWidget.ts b/src/hooks/rooms/widgets/useAvatarInfoWidget.ts new file mode 100644 index 00000000..a8545404 --- /dev/null +++ b/src/hooks/rooms/widgets/useAvatarInfoWidget.ts @@ -0,0 +1,351 @@ +import { RoomEngineObjectEvent, RoomEngineUseProductEvent, RoomObjectCategory, RoomObjectType, RoomObjectVariable, RoomSessionPetInfoUpdateEvent, RoomSessionPetStatusUpdateEvent, RoomSessionUserDataUpdateEvent } from '@nitrots/nitro-renderer'; +import { useEffect, useState } from 'react'; +import { AvatarInfoFurni, AvatarInfoName, AvatarInfoPet, AvatarInfoRentableBot, AvatarInfoUser, AvatarInfoUtilities, CanManipulateFurniture, FurniCategory, GetRoomEngine, GetSessionDataManager, IAvatarInfo, IsOwnerOfFurniture, RoomWidgetUpdateRoomObjectEvent, UseProductItem } from '../../../api'; +import { useRoomEngineEvent, useRoomSessionManagerEvent, useUiEvent } from '../../events'; +import { useFriends } from '../../friends'; +import { useObjectDeselectedEvent, useObjectRollOutEvent, useObjectRollOverEvent, useObjectSelectedEvent } from '../engine'; +import { useRoom } from '../useRoom'; + +const useAvatarInfoWidgetState = () => +{ + const [ avatarInfo, setAvatarInfo ] = useState(null); + const [ activeNameBubble, setActiveNameBubble ] = useState(null); + const [ nameBubbles, setNameBubbles ] = useState([]); + const [ productBubbles, setProductBubbles ] = useState([]); + const [ confirmingProduct, setConfirmingProduct ] = useState(null); + const [ pendingPetId, setPendingPetId ] = useState(-1); + const [ isDecorating, setIsDecorating ] = useState(false); + const { friends = [] } = useFriends(); + const { roomSession = null } = useRoom(); + + const removeNameBubble = (index: number) => + { + setNameBubbles(prevValue => + { + const newValue = [ ...prevValue ]; + + newValue.splice(index, 1); + + return newValue; + }); + } + + const removeProductBubble = (index: number) => + { + setProductBubbles(prevValue => + { + const newValue = [ ...prevValue ]; + const item = newValue.splice(index, 1)[0]; + + if(confirmingProduct === item) setConfirmingProduct(null); + + return newValue; + }); + } + + const updateConfirmingProduct = (product: UseProductItem) => + { + setConfirmingProduct(product); + setProductBubbles([]); + } + + const getObjectName = (objectId: number, category: number) => + { + const name = AvatarInfoUtilities.getObjectName(objectId, category); + + if(!name) return; + + setActiveNameBubble(name); + + if(category !== RoomObjectCategory.UNIT) setProductBubbles([]); + } + + const getObjectInfo = (objectId: number, category: number) => + { + let info: IAvatarInfo = null; + + switch(category) + { + case RoomObjectCategory.FLOOR: + case RoomObjectCategory.WALL: + info = AvatarInfoUtilities.getFurniInfo(objectId, category) + break; + case RoomObjectCategory.UNIT: { + const userData = roomSession.userDataManager.getUserDataByIndex(objectId); + + if(!userData) break; + + switch(userData.type) + { + case RoomObjectType.PET: + roomSession.userDataManager.requestPetInfo(userData.webID); + setPendingPetId(userData.webID); + break; + case RoomObjectType.USER: + info = AvatarInfoUtilities.getUserInfo(category, userData); + break; + case RoomObjectType.BOT: + info = AvatarInfoUtilities.getBotInfo(category, userData); + break; + case RoomObjectType.RENTABLE_BOT: + info = AvatarInfoUtilities.getRentableBotInfo(category, userData); + break; + } + } + + } + + if(!info) return; + + setAvatarInfo(info); + } + + const processUsableRoomObject = (objectId: number) => + { + } + + const refreshPetInfo = () => + { + // roomSession.userDataManager.requestPetInfo(petData.id); + } + + useRoomSessionManagerEvent(RoomSessionUserDataUpdateEvent.USER_DATA_UPDATED, event => + { + if(!event.addedUsers.length) return; + + let addedNameBubbles: AvatarInfoName[] = []; + + event.addedUsers.forEach(user => + { + if(user.webID === GetSessionDataManager().userId) return; + + if(friends.find(friend => (friend.id === user.webID))) + { + addedNameBubbles.push(new AvatarInfoName(user.roomIndex, RoomObjectCategory.UNIT, user.webID, user.name, user.type, true)); + } + }); + + if(!addedNameBubbles.length) return; + + setNameBubbles(prevValue => + { + const newValue = [ ...prevValue ]; + + addedNameBubbles.forEach(bubble => + { + const oldIndex = newValue.findIndex(oldBubble => (oldBubble.id === bubble.id)); + + if(oldIndex > -1) newValue.splice(oldIndex, 1); + + newValue.push(bubble); + }); + + return newValue; + }); + }); + + useRoomSessionManagerEvent(RoomSessionPetInfoUpdateEvent.PET_INFO, event => + { + const petData = event.petInfo; + + if(!petData) return; + + if(petData.id !== pendingPetId) return; + + const petInfo = AvatarInfoUtilities.getPetInfo(petData); + + if(!petInfo) return; + + setAvatarInfo(petInfo); + setPendingPetId(-1); + }); + + useRoomSessionManagerEvent(RoomSessionPetStatusUpdateEvent.PET_STATUS_UPDATE, event => + { + /* var _local_2:Boolean; + var _local_3:Boolean; + var _local_4:Boolean; + var _local_5:Boolean; + var _local_6:RoomUserData; + var _local_7:_Str_4828; + if (((!(this._container == null)) && (!(this._container.events == null)))) + { + _local_2 = k.canBreed; + _local_3 = k.canHarvest; + _local_4 = k.canRevive; + _local_5 = k.hasBreedingPermission; + _local_6 = this._Str_19958(k.petId); + if (_local_6 == null) + { + Logger.log((("Could not find pet with the id: " + k.petId) + " given by petStatusUpdate")); + return; + } + _local_7 = new _Str_4828(_local_6.roomObjectId, _local_2, _local_3, _local_4, _local_5); + this._container.events.dispatchEvent(_local_7); */ + }); + + useRoomEngineEvent(RoomEngineUseProductEvent.USE_PRODUCT_FROM_INVENTORY, event => + { + // this._Str_23199((k as RoomEngineUseProductEvent).inventoryStripId, (k as RoomEngineUseProductEvent).furnitureTypeId); + }); + + useRoomEngineEvent(RoomEngineUseProductEvent.USE_PRODUCT_FROM_ROOM, event => + { + const roomObject = GetRoomEngine().getRoomObject(roomSession.roomId, event.objectId, RoomObjectCategory.FLOOR); + + if(!roomObject || !IsOwnerOfFurniture(roomObject)) return; + + const ownerId = roomObject.model.getValue(RoomObjectVariable.FURNITURE_OWNER_ID); + const typeId = roomObject.model.getValue(RoomObjectVariable.FURNITURE_TYPE_ID); + const furniData = GetSessionDataManager().getFloorItemData(typeId); + const parts = furniData.customParams.split(' '); + const part = (parts.length ? parseInt(parts[0]) : -1); + + if(part === -1) return; + + const useProductBubbles: UseProductItem[] = []; + const roomObjects = GetRoomEngine().getRoomObjects(roomSession.roomId, RoomObjectCategory.UNIT); + + for(const roomObject of roomObjects) + { + const userData = roomSession.userDataManager.getUserDataByIndex(roomObject.id); + + let replace = false; + + if(!userData || (userData.type !== RoomObjectType.PET)) + { + + } + else + { + if(userData.ownerId === ownerId) + { + if(userData.hasSaddle && (furniData.specialType === FurniCategory.PET_SADDLE)) replace = true; + + const figureParts = userData.figure.split(' '); + const figurePart = (figureParts.length ? parseInt(figureParts[0]) : -1); + + if(figurePart === part) + { + if(furniData.specialType === FurniCategory.MONSTERPLANT_REVIVAL) + { + if(!userData.canRevive) continue; + } + + if(furniData.specialType === FurniCategory.MONSTERPLANT_REBREED) + { + if((userData.petLevel < 7) || userData.canRevive || userData.canBreed) continue; + } + + if(furniData.specialType === FurniCategory.MONSTERPLANT_FERTILIZE) + { + if((userData.petLevel >= 7) || userData.canRevive) continue; + } + + useProductBubbles.push(new UseProductItem(userData.roomIndex, RoomObjectCategory.UNIT, userData.name, event.objectId, roomObject.id, -1, replace)); + } + } + } + } + + setConfirmingProduct(null); + + if(useProductBubbles.length) setProductBubbles(useProductBubbles); + }); + + useRoomEngineEvent(RoomEngineObjectEvent.REQUEST_MANIPULATION, event => + { + if(!CanManipulateFurniture(roomSession, event.objectId, event.category)) return; + + setIsDecorating(true); + }); + + useObjectSelectedEvent(event => + { + getObjectInfo(event.id, event.category); + }); + + useObjectDeselectedEvent(event => + { + setAvatarInfo(null); + setProductBubbles([]); + }); + + useObjectRollOverEvent(event => + { + if(avatarInfo || (event.category !== RoomObjectCategory.UNIT)) return; + + getObjectName(event.id, event.category); + }); + + useObjectRollOutEvent(event => + { + if(!activeNameBubble || (event.category !== RoomObjectCategory.UNIT) || (activeNameBubble.roomIndex !== event.id)) return; + + setActiveNameBubble(null); + }); + + useUiEvent([ + RoomWidgetUpdateRoomObjectEvent.FURNI_REMOVED, + RoomWidgetUpdateRoomObjectEvent.USER_REMOVED + ], event => + { + if(activeNameBubble && (activeNameBubble.category === event.category) && (activeNameBubble.roomIndex === event.id)) setActiveNameBubble(null); + + if(event.category === RoomObjectCategory.UNIT) + { + let index = nameBubbles.findIndex(bubble => (bubble.roomIndex === event.id)); + + if(index > -1) setNameBubbles(prevValue => prevValue.filter(bubble => (bubble.roomIndex === event.id))); + + index = productBubbles.findIndex(bubble => (bubble.id === event.id)); + + if(index > -1) setProductBubbles(prevValue => prevValue.filter(bubble => (bubble.id !== event.id))); + } + + else if(event.category === RoomObjectCategory.FLOOR) + { + const index = productBubbles.findIndex(bubble => (bubble.id === event.id)); + + if(index > -1) setProductBubbles(prevValue => prevValue.filter(bubble => (bubble.requestRoomObjectId !== event.id))); + } + + if(avatarInfo) + { + if(avatarInfo instanceof AvatarInfoFurni) + { + if(avatarInfo.id === event.id) setAvatarInfo(null); + } + + else if((avatarInfo instanceof AvatarInfoUser) || (avatarInfo instanceof AvatarInfoRentableBot) || (avatarInfo instanceof AvatarInfoPet)) + { + if(avatarInfo.roomIndex === event.id) setAvatarInfo(null); + } + } + }); + + useEffect(() => + { + if(!avatarInfo) return; + + setActiveNameBubble(null); + setNameBubbles([]); + setProductBubbles([]); + }, [ avatarInfo ]); + + useEffect(() => + { + if(!activeNameBubble) return; + + setNameBubbles([]); + }, [ activeNameBubble ]); + + useEffect(() => + { + roomSession.isDecorating = isDecorating; + }, [ roomSession, isDecorating ]); + + return { avatarInfo, setAvatarInfo, activeNameBubble, setActiveNameBubble, nameBubbles, productBubbles, confirmingProduct, isDecorating, setIsDecorating, removeNameBubble, removeProductBubble, updateConfirmingProduct, getObjectName }; +} + +export const useAvatarInfoWidget = useAvatarInfoWidgetState; diff --git a/src/hooks/rooms/widgets/useChatInputWidget.ts b/src/hooks/rooms/widgets/useChatInputWidget.ts new file mode 100644 index 00000000..e79af288 --- /dev/null +++ b/src/hooks/rooms/widgets/useChatInputWidget.ts @@ -0,0 +1,269 @@ +import { AvatarExpressionEnum, HabboClubLevelEnum, RoomControllerLevel, RoomEngineObjectEvent, RoomObjectCategory, RoomRotatingEffect, RoomSessionChatEvent, RoomSettingsComposer, RoomShakingEffect, RoomZoomEvent, TextureUtils } from '@nitrots/nitro-renderer'; +import { useEffect, useState } from 'react'; +import { ChatMessageTypeEnum, CreateLinkEvent, GetClubMemberLevel, GetConfiguration, GetNitroInstance, GetRoomEngine, GetSessionDataManager, LocalizeText, SendMessageComposer } from '../../../api'; +import { useRoomEngineEvent, useRoomSessionManagerEvent } from '../../events'; +import { useNotification } from '../../notification'; +import { useObjectSelectedEvent } from '../engine'; +import { useRoom } from '../useRoom'; + +const useChatInputWidgetState = () => +{ + const [ selectedUsername, setSelectedUsername ] = useState(''); + const [ isTyping, setIsTyping ] = useState(false); + const [ typingStartedSent, setTypingStartedSent ] = useState(false); + const [ isIdle, setIsIdle ] = useState(false); + const [ floodBlocked, setFloodBlocked ] = useState(false); + const [ floodBlockedSeconds, setFloodBlockedSeconds ] = useState(0); + const { showNitroAlert = null, showConfirm = null } = useNotification(); + const { roomSession = null } = useRoom(); + + const sendChat = (text: string, chatType: number, recipientName: string = '', styleId: number = 0) => + { + if(text === '') return null; + + const parts = text.split(' '); + + if(parts.length > 0) + { + const firstPart = parts[0]; + let secondPart = ''; + + if(parts.length > 1) secondPart = parts[1]; + + if((firstPart.charAt(0) === ':') && (secondPart === 'x')) + { + const selectedAvatarId = GetRoomEngine().selectedAvatarId; + + if(selectedAvatarId > -1) + { + const userData = roomSession.userDataManager.getUserDataByIndex(selectedAvatarId); + + if(userData) + { + secondPart = userData.name; + text = text.replace(' x', (' ' + userData.name)); + } + } + } + + switch(firstPart.toLowerCase()) + { + case ':shake': + RoomShakingEffect.init(2500, 5000); + RoomShakingEffect.turnVisualizationOn(); + + return null; + + case ':rotate': + RoomRotatingEffect.init(2500, 5000); + RoomRotatingEffect.turnVisualizationOn(); + + return null; + case ':d': + case ';d': + if(GetClubMemberLevel() === HabboClubLevelEnum.VIP) + { + roomSession.sendExpressionMessage(AvatarExpressionEnum.LAUGH.ordinal); + } + + break; + case 'o/': + case '_o/': + roomSession.sendExpressionMessage(AvatarExpressionEnum.WAVE.ordinal); + + return null; + case ':kiss': + if(GetClubMemberLevel() === HabboClubLevelEnum.VIP) + { + roomSession.sendExpressionMessage(AvatarExpressionEnum.BLOW.ordinal); + + return null; + } + + break; + case ':jump': + if(GetClubMemberLevel() === HabboClubLevelEnum.VIP) + { + roomSession.sendExpressionMessage(AvatarExpressionEnum.JUMP.ordinal); + + return null; + } + + break; + case ':idle': + roomSession.sendExpressionMessage(AvatarExpressionEnum.IDLE.ordinal); + + return null; + case '_b': + roomSession.sendExpressionMessage(AvatarExpressionEnum.RESPECT.ordinal); + + return null; + case ':sign': + roomSession.sendSignMessage(parseInt(secondPart)); + + return null; + case ':iddqd': + case ':flip': + GetRoomEngine().events.dispatchEvent(new RoomZoomEvent(roomSession.roomId, -1, true)); + + return null; + case ':zoom': + GetRoomEngine().events.dispatchEvent(new RoomZoomEvent(roomSession.roomId, parseFloat(secondPart), false)); + + return null; + case ':screenshot': + const texture = GetRoomEngine().createTextureFromRoom(roomSession.roomId, 1); + + const image = new Image(); + + image.src = TextureUtils.generateImageUrl(texture); + + const newWindow = window.open(''); + newWindow.document.write(image.outerHTML); + return null; + case ':pickall': + if(roomSession.isRoomOwner || GetSessionDataManager().isModerator) + { + showConfirm(LocalizeText('room.confirm.pick_all'), () => + { + GetSessionDataManager().sendSpecialCommandMessage(':pickall'); + }, + null, null, null, LocalizeText('generic.alert.title')); + } + + return null; + case ':furni': + CreateLinkEvent('furni-chooser/'); + return null; + case ':chooser': + CreateLinkEvent('user-chooser/'); + return null; + case ':floor': + case ':bcfloor': + if(roomSession.controllerLevel >= RoomControllerLevel.ROOM_OWNER) CreateLinkEvent('floor-editor/show'); + + return null; + case ':togglefps': { + if(GetNitroInstance().ticker.maxFPS > 0) GetNitroInstance().ticker.maxFPS = 0; + else GetNitroInstance().ticker.maxFPS = GetConfiguration('system.animation.fps'); + + return null; + } + case ':client': + case ':nitro': + case ':billsonnn': + showNitroAlert(); + return null; + case ':settings': + if(roomSession.isRoomOwner || GetSessionDataManager().isModerator) + { + SendMessageComposer(new RoomSettingsComposer(roomSession.roomId)); + } + + return null; + } + } + + switch(chatType) + { + case ChatMessageTypeEnum.CHAT_DEFAULT: + roomSession.sendChatMessage(text, styleId); + break; + case ChatMessageTypeEnum.CHAT_SHOUT: + roomSession.sendShoutMessage(text, styleId); + break; + case ChatMessageTypeEnum.CHAT_WHISPER: + roomSession.sendWhisperMessage(recipientName, text, styleId); + break; + } + } + + useRoomSessionManagerEvent(RoomSessionChatEvent.FLOOD_EVENT, event => + { + setFloodBlocked(true); + setFloodBlockedSeconds(parseFloat(event.message)); + }); + + useObjectSelectedEvent(event => + { + if(event.category !== RoomObjectCategory.UNIT) return; + + const userData = roomSession.userDataManager.getUserDataByIndex(event.id); + + if(!userData) return; + + setSelectedUsername(userData.name); + }); + + useRoomEngineEvent(RoomEngineObjectEvent.DESELECTED, event => setSelectedUsername('')); + + useEffect(() => + { + if(!floodBlocked) return; + + let seconds = 0; + + const interval = setInterval(() => + { + setFloodBlockedSeconds(prevValue => + { + seconds = ((prevValue || 0) - 1); + + return seconds; + }); + + if(seconds < 0) + { + clearInterval(interval); + + setFloodBlocked(false); + } + }, 1000); + + return () => clearInterval(interval); + }, [ floodBlocked ]); + + useEffect(() => + { + if(!isIdle) return; + + let timeout: ReturnType = null; + + if(isIdle) + { + timeout = setTimeout(() => + { + setIsIdle(false); + setIsTyping(false) + }, 10000); + } + + return () => clearTimeout(timeout); + }, [ isIdle ]); + + useEffect(() => + { + if(isTyping) + { + if(!typingStartedSent) + { + setTypingStartedSent(true); + + roomSession.sendChatTypingMessage(isTyping); + } + } + else + { + if(typingStartedSent) + { + setTypingStartedSent(false); + + roomSession.sendChatTypingMessage(isTyping); + } + } + }, [ roomSession, isTyping, typingStartedSent ]); + + return { selectedUsername, floodBlocked, floodBlockedSeconds, setIsTyping, setIsIdle, sendChat }; +} + +export const useChatInputWidget = useChatInputWidgetState; diff --git a/src/hooks/rooms/widgets/useChatWidget.ts b/src/hooks/rooms/widgets/useChatWidget.ts new file mode 100644 index 00000000..62fa681d --- /dev/null +++ b/src/hooks/rooms/widgets/useChatWidget.ts @@ -0,0 +1,288 @@ +import { AvatarFigurePartType, AvatarScaleType, AvatarSetType, GetGuestRoomResultEvent, NitroPoint, PetFigureData, RoomChatSettings, RoomChatSettingsEvent, RoomDragEvent, RoomObjectCategory, RoomObjectType, RoomObjectVariable, RoomSessionChatEvent, RoomUserData, SystemChatStyleEnum, TextureUtils, Vector3d } from '@nitrots/nitro-renderer'; +import { useEffect, useMemo, useRef, useState } from 'react'; +import { ChatBubbleMessage, GetAvatarRenderManager, GetConfigurationManager, GetRoomEngine, GetRoomObjectScreenLocation, IRoomChatSettings, LocalizeText, PlaySound, RoomChatFormatter } from '../../../api'; +import { useMessageEvent, useRoomEngineEvent, useRoomSessionManagerEvent } from '../../events'; +import { useRoom } from '../useRoom'; + +const avatarColorCache: Map = new Map(); +const avatarImageCache: Map = new Map(); +const petImageCache: Map = new Map(); + +const useChatWidgetState = () => +{ + const [ chatMessages, setChatMessages ] = useState([]); + const [ chatSettings, setChatSettings ] = useState({ + mode: RoomChatSettings.CHAT_MODE_FREE_FLOW, + weight: RoomChatSettings.CHAT_BUBBLE_WIDTH_NORMAL, + speed: RoomChatSettings.CHAT_SCROLL_SPEED_NORMAL, + distance: 50, + protection: RoomChatSettings.FLOOD_FILTER_NORMAL + }); + const { roomSession = null } = useRoom(); + const isDisposed = useRef(false); + + const getScrollSpeed = useMemo(() => + { + if(!chatSettings) return 6000; + + switch(chatSettings.speed) + { + case RoomChatSettings.CHAT_SCROLL_SPEED_FAST: + return 3000; + case RoomChatSettings.CHAT_SCROLL_SPEED_NORMAL: + return 6000; + case RoomChatSettings.CHAT_SCROLL_SPEED_SLOW: + return 12000; + } + }, [ chatSettings ]); + + const setFigureImage = (figure: string) => + { + const avatarImage = GetAvatarRenderManager().createAvatarImage(figure, AvatarScaleType.LARGE, null, { + resetFigure: figure => + { + if(isDisposed.current) return; + + setFigureImage(figure); + }, + dispose: () => + {}, + disposed: false + }); + + if(!avatarImage) return; + + const image = avatarImage.getCroppedImage(AvatarSetType.HEAD); + const color = avatarImage.getPartColor(AvatarFigurePartType.CHEST); + + avatarColorCache.set(figure, ((color && color.rgb) || 16777215)); + + avatarImage.dispose(); + + avatarImageCache.set(figure, image.src); + + return image.src; + } + + const getUserImage = (figure: string) => + { + let existing = avatarImageCache.get(figure); + + if(!existing) existing = setFigureImage(figure); + + return existing; + } + + const getPetImage = (figure: string, direction: number, _arg_3: boolean, scale: number = 64, posture: string = null) => + { + let existing = petImageCache.get((figure + posture)); + + if(existing) return existing; + + const figureData = new PetFigureData(figure); + const typeId = figureData.typeId; + const image = GetRoomEngine().getRoomObjectPetImage(typeId, figureData.paletteId, figureData.color, new Vector3d((direction * 45)), scale, null, false, 0, figureData.customParts, posture); + + if(image) + { + existing = TextureUtils.generateImageUrl(image.data); + + petImageCache.set((figure + posture), existing); + } + + return existing; + } + + const removeHiddenChats = () => + { + setChatMessages(prevValue => + { + if(prevValue) + { + const newMessages = prevValue.filter(chat => ((chat.top > (-(chat.height) * 2)))); + + if(newMessages.length !== prevValue.length) return newMessages; + } + + return prevValue; + }) + } + + const moveAllChatsUp = (amount: number) => + { + setChatMessages(prevValue => + { + if(prevValue) + { + prevValue.forEach(chat => + { + if(chat.skipMovement) + { + chat.skipMovement = false; + + return; + } + + chat.top -= amount; + }); + } + + return prevValue; + }); + + removeHiddenChats(); + } + + useRoomSessionManagerEvent(RoomSessionChatEvent.CHAT_EVENT, event => + { + const roomObject = GetRoomEngine().getRoomObject(roomSession.roomId, event.objectId, RoomObjectCategory.UNIT); + + const objectLocation = roomObject ? roomObject.getLocation() : new Vector3d(); + const bubbleLocation = GetRoomObjectScreenLocation(roomSession.roomId, roomObject?.id, RoomObjectCategory.UNIT); + const userData = roomObject ? roomSession.userDataManager.getUserDataByIndex(event.objectId) : new RoomUserData(-1); + + let username = ''; + let avatarColor = 0; + let imageUrl: string = null; + let chatType = event.chatType; + let styleId = event.style; + let userType = 0; + let petType = -1; + let text = event.message; + + if(userData) + { + userType = userData.type; + + const figure = userData.figure; + + switch(userType) + { + case RoomObjectType.PET: + imageUrl = getPetImage(figure, 2, true, 64, roomObject.model.getValue(RoomObjectVariable.FIGURE_POSTURE)); + petType = new PetFigureData(figure).typeId; + break; + case RoomObjectType.USER: + imageUrl = getUserImage(figure); + break; + case RoomObjectType.RENTABLE_BOT: + case RoomObjectType.BOT: + styleId = SystemChatStyleEnum.BOT; + break; + } + + avatarColor = avatarColorCache.get(figure); + username = userData.name; + } + + switch(chatType) + { + case RoomSessionChatEvent.CHAT_TYPE_RESPECT: + text = LocalizeText('widgets.chatbubble.respect', [ 'username' ], [ username ]); + + if(GetConfigurationManager().getValue('respect.options')['enabled']) PlaySound(GetConfigurationManager().getValue('respect.options')['sound']); + + break; + case RoomSessionChatEvent.CHAT_TYPE_PETREVIVE: + case RoomSessionChatEvent.CHAT_TYPE_PET_REBREED_FERTILIZE: + case RoomSessionChatEvent.CHAT_TYPE_PET_SPEED_FERTILIZE: { + let textKey = 'widget.chatbubble.petrevived'; + + if(chatType === RoomSessionChatEvent.CHAT_TYPE_PET_REBREED_FERTILIZE) + { + textKey = 'widget.chatbubble.petrefertilized;'; + } + + else if(chatType === RoomSessionChatEvent.CHAT_TYPE_PET_SPEED_FERTILIZE) + { + textKey = 'widget.chatbubble.petspeedfertilized'; + } + + let targetUserName: string = null; + + const newRoomObject = GetRoomEngine().getRoomObject(roomSession.roomId, event.extraParam, RoomObjectCategory.UNIT); + + if(newRoomObject) + { + const newUserData = roomSession.userDataManager.getUserDataByIndex(roomObject.id); + + if(newUserData) targetUserName = newUserData.name; + } + + text = LocalizeText(textKey, [ 'petName', 'userName' ], [ username, targetUserName ]); + break; + } + case RoomSessionChatEvent.CHAT_TYPE_PETRESPECT: + text = LocalizeText('widget.chatbubble.petrespect', [ 'petname' ], [ username ]); + break; + case RoomSessionChatEvent.CHAT_TYPE_PETTREAT: + text = LocalizeText('widget.chatbubble.pettreat', [ 'petname' ], [ username ]); + break; + case RoomSessionChatEvent.CHAT_TYPE_HAND_ITEM_RECEIVED: + text = LocalizeText('widget.chatbubble.handitem', [ 'username', 'handitem' ], [ username, LocalizeText(('handitem' + event.extraParam)) ]); + break; + case RoomSessionChatEvent.CHAT_TYPE_MUTE_REMAINING: { + const hours = ((event.extraParam > 0) ? Math.floor((event.extraParam / 3600)) : 0).toString(); + const minutes = ((event.extraParam > 0) ? Math.floor((event.extraParam % 3600) / 60) : 0).toString(); + const seconds = (event.extraParam % 60).toString(); + + text = LocalizeText('widget.chatbubble.mutetime', [ 'hours', 'minutes', 'seconds' ], [ hours, minutes, seconds ]); + break; + } + } + + const chatMessage = new ChatBubbleMessage( + userData.roomIndex, + RoomObjectCategory.UNIT, + roomSession.roomId, + text, + RoomChatFormatter(text), + username, + new NitroPoint(bubbleLocation.x, bubbleLocation.y), + chatType, + styleId, + imageUrl, + (avatarColor && (('#' + (avatarColor.toString(16).padStart(6, '0'))) || null))); + + setChatMessages(prevValue => [ ...prevValue, chatMessage ]); + }); + + useRoomEngineEvent(RoomDragEvent.ROOM_DRAG, event => + { + if(!chatMessages.length || (event.roomId !== roomSession.roomId)) return; + + const offsetX = event.offsetX; + + chatMessages.forEach(chat => (chat.elementRef && (chat.left += offsetX))); + }); + + useMessageEvent(GetGuestRoomResultEvent, event => + { + const parser = event.getParser(); + + if(!parser.roomEnter) return; + + setChatSettings(parser.chat); + }); + + useMessageEvent(RoomChatSettingsEvent, event => + { + const parser = event.getParser(); + + setChatSettings(parser.chat); + }); + + useEffect(() => + { + isDisposed.current = false; + + return () => + { + isDisposed.current = true; + } + }, []); + + return { chatMessages, setChatMessages, chatSettings, getScrollSpeed, removeHiddenChats, moveAllChatsUp }; +} + +export const useChatWidget = useChatWidgetState; diff --git a/src/hooks/rooms/widgets/useDoorbellWidget.ts b/src/hooks/rooms/widgets/useDoorbellWidget.ts index ea1f7cf3..4ae5142d 100644 --- a/src/hooks/rooms/widgets/useDoorbellWidget.ts +++ b/src/hooks/rooms/widgets/useDoorbellWidget.ts @@ -1,20 +1,20 @@ import { RoomSessionDoorbellEvent } from '@nitrots/nitro-renderer'; -import { useCallback, useState } from 'react'; +import { useState } from 'react'; import { GetRoomSession } from '../../../api'; -import { UseRoomSessionManagerEvent } from '../../events'; +import { useRoomSessionManagerEvent } from '../../events'; const useDoorbellWidgetState = () => { const [ users, setUsers ] = useState([]); - const addUser = useCallback((userName: string) => + const addUser = (userName: string) => { if(users.indexOf(userName) >= 0) return; setUsers([ ...users, userName ]); - }, [ users ]); + } - const removeUser = useCallback((userName: string) => + const removeUser = (userName: string) => { const index = users.indexOf(userName); @@ -25,32 +25,18 @@ const useDoorbellWidgetState = () => newUsers.splice(index, 1); setUsers(newUsers); - }, [ users ]); + } - const answer = useCallback((userName: string, flag: boolean) => + const answer = (userName: string, flag: boolean) => { GetRoomSession().sendDoorbellApprovalMessage(userName, flag); removeUser(userName); - }, [ removeUser ]); + } - const onRoomSessionDoorbellEvent = useCallback((event: RoomSessionDoorbellEvent) => - { - switch(event.type) - { - case RoomSessionDoorbellEvent.DOORBELL: - addUser(event.userName); - return; - case RoomSessionDoorbellEvent.RSDE_REJECTED: - case RoomSessionDoorbellEvent.RSDE_ACCEPTED: - removeUser(event.userName); - return; - } - }, [ addUser, removeUser ]); - - UseRoomSessionManagerEvent(RoomSessionDoorbellEvent.DOORBELL, onRoomSessionDoorbellEvent); - UseRoomSessionManagerEvent(RoomSessionDoorbellEvent.RSDE_REJECTED, onRoomSessionDoorbellEvent); - UseRoomSessionManagerEvent(RoomSessionDoorbellEvent.RSDE_ACCEPTED, onRoomSessionDoorbellEvent); + useRoomSessionManagerEvent(RoomSessionDoorbellEvent.DOORBELL, event => addUser(event.userName)); + useRoomSessionManagerEvent(RoomSessionDoorbellEvent.RSDE_REJECTED, event => removeUser(event.userName)); + useRoomSessionManagerEvent(RoomSessionDoorbellEvent.RSDE_ACCEPTED, event => removeUser(event.userName)); return { users, addUser, removeUser, answer }; } diff --git a/src/hooks/rooms/widgets/useFriendRequestWidget.ts b/src/hooks/rooms/widgets/useFriendRequestWidget.ts new file mode 100644 index 00000000..f54dda5c --- /dev/null +++ b/src/hooks/rooms/widgets/useFriendRequestWidget.ts @@ -0,0 +1,84 @@ +import { RoomObjectCategory, RoomObjectUserType } from '@nitrots/nitro-renderer'; +import { useEffect, useMemo, useState } from 'react'; +import { GetRoomSession, MessengerRequest } from '../../../api'; +import { useFriends } from '../../friends'; +import { useUserAddedEvent, useUserRemovedEvent } from '../engine'; + +const useFriendRequestWidgetState = () => +{ + const [ activeRequests, setActiveRequests ] = useState<{ roomIndex: number, request: MessengerRequest }[]>([]); + const [ dismissedRequestIds, setDismissedRequestIds ] = useState([]); + const { requests = [] } = useFriends(); + + const displayedRequests = useMemo(() => activeRequests.filter(request => (dismissedRequestIds.indexOf(request.request.requesterUserId) === -1)), [ activeRequests, dismissedRequestIds ]); + + const hideFriendRequest = (userId: number) => + { + setDismissedRequestIds(prevValue => + { + if(prevValue.indexOf(userId) >= 0) return prevValue; + + const newValue = [ ...prevValue ]; + + newValue.push(userId); + + return newValue; + }); + } + + useUserAddedEvent(true, event => + { + if(event.category !== RoomObjectCategory.UNIT) return; + + const userData = GetRoomSession().userDataManager.getUserDataByIndex(event.id); + + if(!userData || (userData.type !== RoomObjectUserType.getTypeNumber(RoomObjectUserType.USER))) return; + + const request = requests.find(request => (request.requesterUserId === userData.webID)); + + if(!request || activeRequests.find(request => (request.request.requesterUserId === userData.webID))) return; + + const newValue = [ ...activeRequests ]; + + newValue.push({ roomIndex: userData.roomIndex, request }); + + setActiveRequests(newValue); + }); + + useUserRemovedEvent(true, event => + { + if(event.category !== RoomObjectCategory.UNIT) return; + + const index = activeRequests.findIndex(request => (request.roomIndex === event.id)); + + if(index === -1) return; + + const newValue = [ ...activeRequests ]; + + newValue.splice(index, 1); + + setActiveRequests(newValue); + }); + + useEffect(() => + { + if(!requests || !requests.length) return; + + const newDisplayedRequests: { roomIndex: number, request: MessengerRequest }[] = []; + + for(const request of requests) + { + const userData = GetRoomSession().userDataManager.getUserData(request.requesterUserId); + + if(!userData) continue; + + newDisplayedRequests.push({ roomIndex: userData.roomIndex, request }); + } + + setActiveRequests(newDisplayedRequests); + }, [ requests ]); + + return { displayedRequests, hideFriendRequest }; +} + +export const useFriendRequestWidget = useFriendRequestWidgetState; diff --git a/src/hooks/rooms/widgets/useFurniChooserWidget.ts b/src/hooks/rooms/widgets/useFurniChooserWidget.ts new file mode 100644 index 00000000..5022e3e9 --- /dev/null +++ b/src/hooks/rooms/widgets/useFurniChooserWidget.ts @@ -0,0 +1,132 @@ +import { RoomObjectCategory, RoomObjectVariable } from '@nitrots/nitro-renderer'; +import { useState } from 'react'; +import { GetRoomEngine, GetRoomSession, GetSessionDataManager, LocalizeText, RoomObjectItem } from '../../../api'; +import { useFurniAddedEvent, useFurniRemovedEvent } from '../engine'; +import { useRoom } from '../useRoom'; + +const useFurniChooserWidgetState = () => +{ + const [ items, setItems ] = useState(null); + const { roomSession = null } = useRoom(); + + const close = () => setItems(null); + + const selectItem = (item: RoomObjectItem) => item && GetRoomEngine().selectRoomObject(GetRoomSession().roomId, item.id, item.category); + + const populateChooser = () => + { + const sessionDataManager = GetSessionDataManager(); + const wallObjects = GetRoomEngine().getRoomObjects(roomSession.roomId, RoomObjectCategory.WALL); + const floorObjects = GetRoomEngine().getRoomObjects(roomSession.roomId, RoomObjectCategory.FLOOR); + + const wallItems = wallObjects.map(roomObject => + { + if(roomObject.id < 0) return null; + + let name = roomObject.type; + + if(name.startsWith('poster')) + { + name = LocalizeText(`poster_${ name.replace('poster', '') }_name`); + } + else + { + const typeId = roomObject.model.getValue(RoomObjectVariable.FURNITURE_TYPE_ID); + const furniData = sessionDataManager.getWallItemData(typeId); + + if(furniData && furniData.name.length) name = furniData.name; + } + + return new RoomObjectItem(roomObject.id, RoomObjectCategory.WALL, name); + }); + + const floorItems = floorObjects.map(roomObject => + { + if(roomObject.id < 0) return null; + + let name = roomObject.type; + + const typeId = roomObject.model.getValue(RoomObjectVariable.FURNITURE_TYPE_ID); + const furniData = sessionDataManager.getFloorItemData(typeId); + + if(furniData && furniData.name.length) name = furniData.name; + + return new RoomObjectItem(roomObject.id, RoomObjectCategory.FLOOR, name); + }); + + setItems([ ...wallItems, ...floorItems ].sort((a, b) => ((a.name < b.name) ? -1 : 1))); + } + + useFurniAddedEvent(!!items, event => + { + if(event.id < 0) return; + + const roomObject = GetRoomEngine().getRoomObject(GetRoomSession().roomId, event.id, event.category); + + if(!roomObject) return; + + let item: RoomObjectItem = null; + + switch(event.category) + { + case RoomObjectCategory.WALL: { + let name = roomObject.type; + + if(name.startsWith('poster')) + { + name = LocalizeText(`poster_${ name.replace('poster', '') }_name`); + } + else + { + const typeId = roomObject.model.getValue(RoomObjectVariable.FURNITURE_TYPE_ID); + const furniData = GetSessionDataManager().getWallItemData(typeId); + + if(furniData && furniData.name.length) name = furniData.name; + } + + item = new RoomObjectItem(roomObject.id, RoomObjectCategory.WALL, name); + + break; + } + case RoomObjectCategory.FLOOR: { + let name = roomObject.type; + + const typeId = roomObject.model.getValue(RoomObjectVariable.FURNITURE_TYPE_ID); + const furniData = GetSessionDataManager().getFloorItemData(typeId); + + if(furniData && furniData.name.length) name = furniData.name; + + item = new RoomObjectItem(roomObject.id, RoomObjectCategory.FLOOR, name); + } + } + + setItems(prevValue => [ ...prevValue, item ].sort((a, b) => ((a.name < b.name) ? -1 : 1))); + }); + + useFurniRemovedEvent(!!items, event => + { + if(event.id < 0) return; + + setItems(prevValue => + { + const newValue = [ ...prevValue ]; + + for(let i = 0; i < newValue.length; i++) + { + const existingValue = newValue[i]; + + if((existingValue.id !== event.id) || (existingValue.category !== event.category)) continue; + + newValue.splice(i, 1); + + break; + } + + return newValue; + }); + }); + + return { items, close, selectItem, populateChooser }; +} + +export const useFurniChooserWidget = useFurniChooserWidgetState; diff --git a/src/hooks/rooms/widgets/usePollWidget.ts b/src/hooks/rooms/widgets/usePollWidget.ts new file mode 100644 index 00000000..138a56e8 --- /dev/null +++ b/src/hooks/rooms/widgets/usePollWidget.ts @@ -0,0 +1,52 @@ +import { RoomSessionPollEvent } from '@nitrots/nitro-renderer'; +import { DispatchUiEvent, RoomWidgetPollUpdateEvent } from '../../../api'; +import { useRoomSessionManagerEvent } from '../../events'; +import { useRoom } from '../useRoom'; + +const usePollWidgetState = () => +{ + const { roomSession = null } = useRoom(); + + const startPoll = (pollId: number) => roomSession.sendPollStartMessage(pollId); + + const rejectPoll = (pollId: number) => roomSession.sendPollRejectMessage(pollId); + + const answerPoll = (pollId: number, questionId: number, answers: string[]) => roomSession.sendPollAnswerMessage(pollId, questionId, answers); + + useRoomSessionManagerEvent(RoomSessionPollEvent.OFFER, event => + { + const pollEvent = new RoomWidgetPollUpdateEvent(RoomWidgetPollUpdateEvent.OFFER, event.id); + + pollEvent.summary = event.summary; + pollEvent.headline = event.headline; + + DispatchUiEvent(pollEvent); + }); + + useRoomSessionManagerEvent(RoomSessionPollEvent.ERROR, event => + { + const pollEvent = new RoomWidgetPollUpdateEvent(RoomWidgetPollUpdateEvent.ERROR, event.id); + + pollEvent.summary = event.summary; + pollEvent.headline = event.headline; + + DispatchUiEvent(pollEvent); + }); + + useRoomSessionManagerEvent(RoomSessionPollEvent.CONTENT, event => + { + const pollEvent = new RoomWidgetPollUpdateEvent(RoomWidgetPollUpdateEvent.CONTENT, event.id); + + pollEvent.startMessage = event.startMessage; + pollEvent.endMessage = event.endMessage; + pollEvent.numQuestions = event.numQuestions; + pollEvent.questionArray = event.questionArray; + pollEvent.npsPoll = event.npsPoll; + + DispatchUiEvent(pollEvent); + }); + + return { startPoll, rejectPoll, answerPoll }; +} + +export const usePollWidget = usePollWidgetState; diff --git a/src/hooks/rooms/widgets/useUserChooserWidget.ts b/src/hooks/rooms/widgets/useUserChooserWidget.ts new file mode 100644 index 00000000..511a3c1a --- /dev/null +++ b/src/hooks/rooms/widgets/useUserChooserWidget.ts @@ -0,0 +1,80 @@ +import { RoomObjectCategory } from '@nitrots/nitro-renderer'; +import { useState } from 'react'; +import { GetRoomEngine, GetRoomSession, RoomObjectItem } from '../../../api'; +import { useUserAddedEvent, useUserRemovedEvent } from '../engine'; +import { useRoom } from '../useRoom'; + +const useUserChooserWidgetState = () => +{ + const [ items, setItems ] = useState(null); + const { roomSession = null } = useRoom(); + + const close = () => setItems(null); + + const selectItem = (item: RoomObjectItem) => item && GetRoomEngine().selectRoomObject(GetRoomSession().roomId, item.id, item.category); + + const populateChooser = () => + { + const roomSession = GetRoomSession(); + const roomObjects = GetRoomEngine().getRoomObjects(roomSession.roomId, RoomObjectCategory.UNIT); + + setItems(roomObjects + .map(roomObject => + { + if(roomObject.id < 0) return null; + + const userData = roomSession.userDataManager.getUserDataByIndex(roomObject.id); + + if(!userData) return null; + + return new RoomObjectItem(userData.roomIndex, RoomObjectCategory.UNIT, userData.name); + }) + .sort((a, b) => ((a.name < b.name) ? -1 : 1))); + } + + useUserAddedEvent(!!items, event => + { + if(event.id < 0) return; + + const userData = GetRoomSession().userDataManager.getUserDataByIndex(event.id); + + if(!userData) return; + + setItems(prevValue => + { + const newValue = [ ...prevValue ]; + + newValue.push(new RoomObjectItem(userData.roomIndex, RoomObjectCategory.UNIT, userData.name)); + newValue.sort((a, b) => ((a.name < b.name) ? -1 : 1)); + + return newValue; + }); + }); + + useUserRemovedEvent(!!items, event => + { + if(event.id < 0) return; + + setItems(prevValue => + { + const newValue = [ ...prevValue ]; + + for(let i = 0; i < newValue.length; i++) + { + const existingValue = newValue[i]; + + if((existingValue.id !== event.id) || (existingValue.category !== event.category)) continue; + + newValue.splice(i, 1); + + break; + } + + return newValue; + }); + }); + + return { items, close, selectItem, populateChooser }; +} + +export const useUserChooserWidget = useUserChooserWidgetState; diff --git a/src/hooks/rooms/widgets/useWordQuizWidget.ts b/src/hooks/rooms/widgets/useWordQuizWidget.ts new file mode 100644 index 00000000..be18edf9 --- /dev/null +++ b/src/hooks/rooms/widgets/useWordQuizWidget.ts @@ -0,0 +1,156 @@ +import { AvatarAction, IQuestion, RoomSessionWordQuizEvent } from '@nitrots/nitro-renderer'; +import { useCallback, useEffect, useState } from 'react'; +import { GetRoomEngine, VoteValue } from '../../../api'; +import { useRoomSessionManagerEvent } from '../../events'; +import { useRoom } from '../useRoom'; +import { usePollWidget } from './usePollWidget'; + +const DEFAULT_DISPLAY_DELAY = 4000; +const SIGN_FADE_DELAY = 3; + +const useWordQuizWidgetState = () => +{ + const [ pollId, setPollId ] = useState(-1); + const [ question, setQuestion ] = useState(null); + const [ answerSent, setAnswerSent ] = useState(false); + const [ questionClearTimeout, setQuestionClearTimeout ] = useState>(null); + const [ answerCounts, setAnswerCounts ] = useState>(new Map()); + const [ userAnswers, setUserAnswers ] = useState>(new Map()); + const { answerPoll = null } = usePollWidget(); + const { roomSession = null } = useRoom(); + + const clearQuestion = () => + { + setPollId(-1); + setQuestion(null); + } + + const vote = (vote: string) => + { + if(answerSent || !question) return; + + answerPoll(pollId, question.id, [ vote ]); + + setAnswerSent(true); + } + + const checkSignFade = useCallback(() => + { + setUserAnswers(prevValue => + { + const keysToRemove: number[] = []; + + prevValue.forEach((value, key) => + { + value.secondsLeft--; + + if(value.secondsLeft <= 0) keysToRemove.push(key); + }); + + if(keysToRemove.length === 0) return prevValue; + + const copy = new Map(prevValue); + + keysToRemove.forEach(key => copy.delete(key)); + + return copy; + }); + }, []); + + useRoomSessionManagerEvent(RoomSessionWordQuizEvent.ANSWERED, event => + { + const userData = roomSession.userDataManager.getUserData(event.userId); + + if(!userData) return; + + setAnswerCounts(event.answerCounts); + + setUserAnswers(prevValue => + { + if(!prevValue.has(userData.roomIndex)) + { + const newValue = new Map(userAnswers); + + newValue.set(userData.roomIndex, { value: event.value, secondsLeft: SIGN_FADE_DELAY }); + + return newValue; + } + + return prevValue; + }); + + if(event.value === '0') + { + GetRoomEngine().updateRoomObjectUserGesture(roomSession.roomId, userData.roomIndex, AvatarAction.getGestureId(AvatarAction.GESTURE_SAD)); + } + else + { + GetRoomEngine().updateRoomObjectUserGesture(roomSession.roomId, userData.roomIndex, AvatarAction.getGestureId(AvatarAction.GESTURE_SMILE)); + } + }); + + useRoomSessionManagerEvent(RoomSessionWordQuizEvent.FINISHED, event => + { + if(question && (question.id === event.questionId)) + { + setAnswerCounts(event.answerCounts); + setAnswerSent(true); + + setQuestionClearTimeout(prevValue => + { + if(prevValue) clearTimeout(prevValue); + + return setTimeout(() => clearQuestion(), DEFAULT_DISPLAY_DELAY); + }); + } + + setUserAnswers(new Map()); + }); + + useRoomSessionManagerEvent(RoomSessionWordQuizEvent.QUESTION, event => + { + setPollId(event.id); + setQuestion(event.question); + setAnswerSent(false); + setAnswerCounts(new Map()); + setUserAnswers(new Map()); + + setQuestionClearTimeout(prevValue => + { + if(prevValue) clearTimeout(prevValue); + + if(event.duration > 0) + { + const delay = event.duration < 1000 ? DEFAULT_DISPLAY_DELAY : event.duration; + + return setTimeout(() => clearQuestion(), delay); + } + + return null; + }); + }); + + useEffect(() => + { + const interval = setInterval(() => checkSignFade(), 1000); + + return () => clearInterval(interval); + }, [ checkSignFade ]); + + useEffect(() => + { + return () => + { + setQuestionClearTimeout(prevValue => + { + if(prevValue) clearTimeout(prevValue); + + return null; + }); + } + }, []); + + return { question, answerSent, answerCounts, userAnswers, vote }; +} + +export const useWordQuizWidget = useWordQuizWidgetState; diff --git a/src/hooks/session/useSessionInfo.ts b/src/hooks/session/useSessionInfo.ts index 39c102f6..faff5dca 100644 --- a/src/hooks/session/useSessionInfo.ts +++ b/src/hooks/session/useSessionInfo.ts @@ -1,33 +1,45 @@ -import { FigureUpdateEvent, UserInfoDataParser, UserInfoEvent } from '@nitrots/nitro-renderer'; -import { useCallback, useState } from 'react'; +import { FigureUpdateEvent, RoomUnitChatStyleComposer, UserInfoDataParser, UserInfoEvent, UserSettingsEvent } from '@nitrots/nitro-renderer'; +import { useState } from 'react'; import { useBetween } from 'use-between'; -import { UseMessageEventHook } from '../messages'; +import { SendMessageComposer } from '../../api'; +import { useMessageEvent } from '../events'; const useSessionInfoState = () => { const [ userInfo, setUserInfo ] = useState(null); const [ userFigure, setUserFigure ] = useState(null); + const [ chatStyleId, setChatStyleId ] = useState(0); - const onUserInfoEvent = useCallback((event: UserInfoEvent) => + const updateChatStyleId = (styleId: number) => + { + setChatStyleId(styleId); + + SendMessageComposer(new RoomUnitChatStyleComposer(styleId)); + } + + useMessageEvent(UserInfoEvent, event => { const parser = event.getParser(); setUserInfo(parser.userInfo); setUserFigure(parser.userInfo.figure); - }, []); - - UseMessageEventHook(UserInfoEvent, onUserInfoEvent); - - const onUserFigureEvent = useCallback((event: FigureUpdateEvent) => + }); + + useMessageEvent(FigureUpdateEvent, event => { const parser = event.getParser(); setUserFigure(parser.figure); - }, []); - - UseMessageEventHook(FigureUpdateEvent, onUserFigureEvent); + }); - return { userInfo, userFigure }; + useMessageEvent(UserSettingsEvent, event => + { + const parser = event.getParser(); + + setChatStyleId(parser.chatType); + }); + + return { userInfo, userFigure, chatStyleId, updateChatStyleId }; } export const useSessionInfo = () => useBetween(useSessionInfoState); diff --git a/src/hooks/useLocalStorage.ts b/src/hooks/useLocalStorage.ts index e231cc29..f0cc26cb 100644 --- a/src/hooks/useLocalStorage.ts +++ b/src/hooks/useLocalStorage.ts @@ -3,7 +3,7 @@ import { Dispatch, SetStateAction, useState } from 'react'; const useLocalStorageState = (key: string, initialValue: T): [ T, Dispatch>] => { - const [ storedValue, setStoredValuie ] = useState(() => + const [ storedValue, setStoredValue ] = useState(() => { if(typeof window === 'undefined') return initialValue; @@ -26,7 +26,7 @@ const useLocalStorageState = (key: string, initialValue: T): [ T, Dispatch +{ + const [ trigger, setTrigger ] = useState(null); + const [ intParams, setIntParams ] = useState([]); + const [ stringParam, setStringParam ] = useState(''); + const [ furniIds, setFurniIds ] = useState([]); + const [ actionDelay, setActionDelay ] = useState(0); + const { showConfirm = null } = useNotification(); + + const saveWired = () => + { + const save = (trigger: Triggerable) => + { + if(!trigger) return; + + if(trigger instanceof WiredActionDefinition) + { + SendMessageComposer(new UpdateActionMessageComposer(trigger.id, intParams, stringParam, furniIds, actionDelay, trigger.stuffTypeSelectionCode)); + } + + else if(trigger instanceof TriggerDefinition) + { + SendMessageComposer(new UpdateTriggerMessageComposer(trigger.id, intParams, stringParam, furniIds, trigger.stuffTypeSelectionCode)); + } + + else if(trigger instanceof ConditionDefinition) + { + SendMessageComposer(new UpdateConditionMessageComposer(trigger.id, intParams, stringParam, furniIds, trigger.stuffTypeSelectionCode)); + } + } + + if(!IsOwnerOfFloorFurniture(trigger.id)) + { + showConfirm(LocalizeText('wiredfurni.nonowner.change.confirm.body'), () => + { + save(trigger) + }, null, null, null, LocalizeText('wiredfurni.nonowner.change.confirm.title')); + } + else + { + save(trigger); + } + } + + useUiEvent(WiredSelectObjectEvent.SELECT_OBJECT, event => + { + if(!trigger) return; + + const furniId = event.objectId; + + if(furniId <= 0) return; + + setFurniIds(prevValue => + { + const newFurniIds = [ ...prevValue ]; + + const index = prevValue.indexOf(furniId); + + if(index >= 0) + { + newFurniIds.splice(index, 1); + + WiredSelectionVisualizer.hide(furniId); + } + + else if(newFurniIds.length < trigger.maximumItemSelectionCount) + { + newFurniIds.push(furniId); + + WiredSelectionVisualizer.show(furniId); + } + + return newFurniIds; + }); + }, !!trigger); + + useMessageEvent(WiredSaveSuccessEvent, event => + { + const parser = event.getParser(); + + setTrigger(null); + }); + + useMessageEvent(WiredFurniActionEvent, event => + { + const parser = event.getParser(); + + setTrigger(parser.definition); + }); + + useMessageEvent(WiredFurniConditionEvent, event => + { + const parser = event.getParser(); + + setTrigger(parser.definition); + }); + + useMessageEvent(WiredFurniTriggerEvent, event => + { + const parser = event.getParser(); + + setTrigger(parser.definition); + }); + + useEffect(() => + { + if(!trigger) return; + + return () => + { + setIntParams([]); + setStringParam(''); + setFurniIds([]); + setActionDelay(0); + } + }, [ trigger ]); + + return { trigger, setTrigger, intParams, setIntParams, stringParam, setStringParam, furniIds, setFurniIds, actionDelay, setActionDelay, saveWired }; +} + +export const useWired = () => useBetween(useWiredState); diff --git a/yarn.lock b/yarn.lock index 542fee0f..c35f8167 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24,17 +24,17 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.5.5": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.5.5": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: - "@babel/highlight" "^7.16.7" + "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.10.tgz#711dc726a492dfc8be8220028b1b92482362baab" - integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw== +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== "@babel/core@7.12.3": version "7.12.3" @@ -59,403 +59,400 @@ source-map "^0.5.0" "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.5", "@babel/core@^7.8.4": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.10.tgz#74ef0fbf56b7dfc3f198fc2d927f4f03e12f4b05" - integrity sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA== + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" + integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== dependencies: "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.10" - "@babel/helper-compilation-targets" "^7.17.10" - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helpers" "^7.17.9" - "@babel/parser" "^7.17.10" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.10" - "@babel/types" "^7.17.10" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" 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@^7.12.1", "@babel/generator@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.10.tgz#c281fa35b0c349bbe9d02916f4ae08fc85ed7189" - integrity sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg== +"@babel/generator@^7.12.1", "@babel/generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" + integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== dependencies: - "@babel/types" "^7.17.10" - "@jridgewell/gen-mapping" "^0.1.0" + "@babel/types" "^7.18.9" + "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.6" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" - integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" + integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz#09c63106d47af93cf31803db6bc49fef354e2ebe" - integrity sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-validator-option" "^7.16.7" + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" browserslist "^4.20.2" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.17.6", "@babel/helper-create-class-features-plugin@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz#71835d7fb9f38bd9f1378e40a4c0902fdc2ea49d" - integrity sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz#d802ee16a64a9e824fcbf0a2ffc92f19d58550ce" + integrity sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw== dependencies: - "@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-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" -"@babel/helper-create-regexp-features-plugin@^7.16.7", "@babel/helper-create-regexp-features-plugin@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz#1dcc7d40ba0c6b6b25618997c5dbfd310f186fe1" - integrity sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA== +"@babel/helper-create-regexp-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz#3e35f4e04acbbf25f1b3534a657610a000543d3c" + integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^5.0.1" + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.1.0" -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== +"@babel/helper-define-polyfill-provider@^0.3.1", "@babel/helper-define-polyfill-provider@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073" + integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg== dependencies: - "@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" + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== +"@babel/helper-environment-visitor@^7.18.6", "@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.6" -"@babel/helper-explode-assignable-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" - integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== +"@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== dependencies: - "@babel/types" "^7.16.7" + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" -"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" - integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: - "@babel/template" "^7.16.7" - "@babel/types" "^7.17.0" + "@babel/types" "^7.18.6" -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== +"@babel/helper-member-expression-to-functions@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.9" -"@babel/helper-member-expression-to-functions@^7.16.7", "@babel/helper-member-expression-to-functions@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" - integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: - "@babel/types" "^7.17.0" + "@babel/types" "^7.18.6" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== dependencies: - "@babel/types" "^7.16.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz#3943c7f777139e7954a5355c815263741a9c1cbd" - integrity sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw== +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== dependencies: - "@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.17.3" - "@babel/types" "^7.17.0" + "@babel/types" "^7.18.6" -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + +"@babel/helper-remap-async-to-generator@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== dependencies: - "@babel/types" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== - -"@babel/helper-remap-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" - integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" + integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.8" - "@babel/types" "^7.16.8" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" -"@babel/helper-replace-supers@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" - integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.6" -"@babel/helper-simple-access@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz#aaa473de92b7987c6dfa7ce9a7d9674724823367" - integrity sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA== +"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" + integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== dependencies: - "@babel/types" "^7.17.0" + "@babel/types" "^7.18.9" -"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" - integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.18.6" -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helper-wrap-function@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.9.tgz#ae1feddc6ebbaa2fd79346b77821c3bd73a39646" + integrity sha512-cG2ru3TRAL6a60tfQflpEfs4ldiPwF6YW3zfJiRgmoFVIaC1vGnBBgatfec+ZUziPHkHSaXAuEck3Cdkf3eRpQ== dependencies: - "@babel/types" "^7.16.7" + "@babel/helper-function-name" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helper-wrap-function@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" - integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== +"@babel/helpers@^7.12.1", "@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== dependencies: - "@babel/helper-function-name" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" -"@babel/helpers@^7.12.1", "@babel/helpers@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.9.tgz#b2af120821bfbe44f9907b1826e168e819375a1a" - integrity sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q== +"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.9" - "@babel/types" "^7.17.0" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.9.tgz#61b2ee7f32ea0454612def4fccdae0de232b73e3" - integrity sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.10", "@babel/parser@^7.7.0": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.10.tgz#873b16db82a8909e0fbd7f115772f4b739f6ce78" - integrity sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6", "@babel/parser@^7.18.9", "@babel/parser@^7.7.0": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" + integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" - integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" - integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" + integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" -"@babel/plugin-proposal-async-generator-functions@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" - integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== +"@babel/plugin-proposal-async-generator-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz#aedac81e6fc12bb643374656dd5f2605bf743d17" + integrity sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" - integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== +"@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-class-static-block@^7.17.6": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz#164e8fd25f0d80fa48c5a4d1438a6629325ad83c" - integrity sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA== +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" + integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.6" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-decorators@^7.16.4": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.9.tgz#67a1653be9c77ce5b6c318aa90c8287b87831619" - integrity sha512-EfH2LZ/vPa2wuPwJ26j+kYRkaubf89UlwxKXtxqEm57HrgSEYDB8t4swFP+p8LcI9yiP9ZRJJjo/58hS6BnaDA== + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.9.tgz#d09d41ffc74af8499d2ac706ed0dbd5474711665" + integrity sha512-KD7zDNaD14CRpjQjVbV4EnH9lsKYlcpUrhZH37ei2IY+AlXrfAPy5pTmRUE4X6X1k8EsKXPraykxeaogqQvSGA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.9" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/plugin-syntax-decorators" "^7.17.0" - charcodes "^0.2.0" + "@babel/helper-create-class-features-plugin" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/plugin-syntax-decorators" "^7.18.6" -"@babel/plugin-proposal-dynamic-import@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" - integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" - integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" - integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" - integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" + integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" - integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.16.0", "@babel/plugin-proposal-numeric-separator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" - integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== +"@babel/plugin-proposal-numeric-separator@^7.16.0", "@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.17.3": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz#d9eb649a54628a51701aef7e0ea3d17e2b9dd390" - integrity sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw== +"@babel/plugin-proposal-object-rest-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" + integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== dependencies: - "@babel/compat-data" "^7.17.0" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.18.8" -"@babel/plugin-proposal-optional-catch-binding@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" - integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" - integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== +"@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" + integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.16.0", "@babel/plugin-proposal-private-methods@^7.16.11": - version "7.16.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" - integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== +"@babel/plugin-proposal-private-methods@^7.16.0", "@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.10" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-private-property-in-object@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" - integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" + integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" - integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -485,12 +482,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.17.0": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz#a2be3b2c9fe7d78bd4994e790896bc411e2f166d" - integrity sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A== +"@babel/plugin-syntax-decorators@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.18.6.tgz#2e45af22835d0b0f8665da2bfd4463649ce5dbc1" + integrity sha512-fqyLgjcxf/1yhyZ6A+yo1u9gJ7eleFQod2lkaUsF9DQ7sbbY3Ligym3L0+I2c0WmqNKDpoD9UTb1AKP3qRMOAQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -506,12 +503,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz#202b147e5892b8452bbb0bb269c7ed2539ab8832" - integrity sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ== +"@babel/plugin-syntax-flow@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz#774d825256f2379d06139be0c723c4dd444f3ca1" + integrity sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-import-assertions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4" + integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -527,12 +531,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" - integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== +"@babel/plugin-syntax-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -590,363 +594,366 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.16.7": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.10.tgz#80031e6042cad6a95ed753f672ebd23c30933195" - integrity sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ== +"@babel/plugin-syntax-typescript@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" - integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== +"@babel/plugin-transform-arrow-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" + integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" - integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== +"@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" + integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" -"@babel/plugin-transform-block-scoped-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" - integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" - integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== +"@babel/plugin-transform-block-scoping@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d" + integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-classes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" - integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== +"@babel/plugin-transform-classes@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz#90818efc5b9746879b869d5ce83eb2aa48bbc3da" + integrity sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" - integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== +"@babel/plugin-transform-computed-properties@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" + integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-destructuring@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz#49dc2675a7afa9a5e4c6bdee636061136c3408d1" - integrity sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ== +"@babel/plugin-transform-destructuring@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz#68906549c021cb231bee1db21d3b5b095f8ee292" + integrity sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" - integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-duplicate-keys@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" - integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-exponentiation-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" - integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-flow-strip-types@^7.16.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz#291fb140c78dabbf87f2427e7c7c332b126964b8" - integrity sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg== + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.18.9.tgz#5b4cc521426263b5ce08893a2db41097ceba35bf" + integrity sha512-+G6rp2zRuOAInY5wcggsx4+QVao1qPM0osC9fTUVlAV3zOrzTCnrMAFVnR6+a3T8wz1wFIH7KhYMcMB3u1n80A== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-flow" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-flow" "^7.18.6" -"@babel/plugin-transform-for-of@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" - integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== +"@babel/plugin-transform-for-of@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" + integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" - integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== dependencies: - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" - integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-member-expression-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" - integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-amd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" - integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== +"@babel/plugin-transform-modules-amd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" + integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz#274be1a2087beec0254d4abd4d86e52442e1e5b6" - integrity sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw== +"@babel/plugin-transform-modules-commonjs@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883" + integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== dependencies: - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.17.8": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz#81fd834024fae14ea78fbe34168b042f38703859" - integrity sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw== +"@babel/plugin-transform-modules-systemjs@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz#545df284a7ac6a05125e3e405e536c5853099a06" + integrity sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A== dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-validator-identifier" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" - integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.17.10": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.10.tgz#715dbcfafdb54ce8bccd3d12e8917296a4ba66a4" - integrity sha512-v54O6yLaJySCs6mGzaVOUw9T967GnH38T6CQSAtnzdNPwu84l2qAjssKzo/WSO8Yi7NF+7ekm5cVbF/5qiIgNA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz#c89bfbc7cc6805d692f3a49bc5fc1b630007246d" + integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.17.0" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-new-target@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" - integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-object-super@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" - integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" - integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== +"@babel/plugin-transform-parameters@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" + integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-property-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" - integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-constant-elements@^7.12.1": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.6.tgz#6cc273c2f612a6a50cb657e63ee1303e5e68d10a" - integrity sha512-OBv9VkyyKtsHZiHLoSfCn+h6yU7YKX8nrs32xUmOa1SRSk+t03FosB6fBZ0Yz4BpD1WV7l73Nsad+2Tz7APpqw== + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.9.tgz#ff6aeedd38f57ba6b41dcf824fcc8bcedb3e783f" + integrity sha512-IrTYh1I3YCEL1trjknnlLKTp5JggjzhKl/d3ibzPc97JhpFcDTr38Jdek/oX4cFbS6By0bXJcOkpRvJ5ZHK2wQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" - integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== +"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-jsx-development@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" - integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== +"@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== dependencies: - "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/plugin-transform-react-jsx" "^7.18.6" -"@babel/plugin-transform-react-jsx@^7.16.7": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz#eac1565da176ccb1a715dae0b4609858808008c1" - integrity sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ== +"@babel/plugin-transform-react-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz#2721e96d31df96e3b7ad48ff446995d26bc028ff" + integrity sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-jsx" "^7.16.7" - "@babel/types" "^7.17.0" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.18.6" -"@babel/plugin-transform-react-pure-annotations@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz#232bfd2f12eb551d6d7d01d13fe3f86b45eb9c67" - integrity sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA== +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.17.9": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz#0a33c3a61cf47f45ed3232903683a0afd2d3460c" - integrity sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ== +"@babel/plugin-transform-regenerator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" + integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== dependencies: + "@babel/helper-plugin-utils" "^7.18.6" regenerator-transform "^0.15.0" -"@babel/plugin-transform-reserved-words@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" - integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-runtime@^7.16.4": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.10.tgz#b89d821c55d61b5e3d3c3d1d636d8d5a81040ae1" - integrity sha512-6jrMilUAJhktTr56kACL8LnWC5hx3Lf27BS0R0DSyW/OoJfb/iTHeE96V3b1dgKG3FSFdd/0culnYWMkjcKCig== + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.9.tgz#d9e4b1b25719307bfafbf43065ed7fb3a83adb8f" + integrity sha512-wS8uJwBt7/b/mzE13ktsJdmS4JP/j7PQSaADtnb4I2wL0zK51MQ0pmF8/Jy0wUIS96fr+fXT6S/ifiPXnvrlSg== dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + babel-plugin-polyfill-corejs2 "^0.3.1" + babel-plugin-polyfill-corejs3 "^0.5.2" + babel-plugin-polyfill-regenerator "^0.3.1" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" - integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-spread@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" - integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== +"@babel/plugin-transform-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz#6ea7a6297740f381c540ac56caf75b05b74fb664" + integrity sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" -"@babel/plugin-transform-sticky-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" - integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-template-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" - integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-typeof-symbol@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" - integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-typescript@^7.16.7": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" - integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== +"@babel/plugin-transform-typescript@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.8.tgz#303feb7a920e650f2213ef37b36bbf327e6fa5a0" + integrity sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-typescript" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-typescript" "^7.18.6" -"@babel/plugin-transform-unicode-escapes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" - integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== +"@babel/plugin-transform-unicode-escapes@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz#0d01fb7fb2243ae1c033f65f6e3b4be78db75f27" + integrity sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-unicode-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" - integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4", "@babel/preset-env@^7.8.4": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.17.10.tgz#a81b093669e3eb6541bb81a23173c5963c5de69c" - integrity sha512-YNgyBHZQpeoBSRBg0xixsZzfT58Ze1iZrajvv0lJc70qDDGuGfonEnMGfWeSY0mQ3JTuCWFbMkzFRVafOyJx4g== + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.9.tgz#9b3425140d724fbe590322017466580844c7eaff" + integrity sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg== dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-compilation-targets" "^7.17.10" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-async-generator-functions" "^7.16.8" - "@babel/plugin-proposal-class-properties" "^7.16.7" - "@babel/plugin-proposal-class-static-block" "^7.17.6" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.16.7" - "@babel/plugin-proposal-json-strings" "^7.16.7" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.17.3" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-private-methods" "^7.16.11" - "@babel/plugin-proposal-private-property-in-object" "^7.16.7" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.18.6" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.18.9" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" "@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.18.6" "@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" @@ -956,43 +963,43 @@ "@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.16.7" - "@babel/plugin-transform-async-to-generator" "^7.16.8" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.16.7" - "@babel/plugin-transform-classes" "^7.16.7" - "@babel/plugin-transform-computed-properties" "^7.16.7" - "@babel/plugin-transform-destructuring" "^7.17.7" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.16.7" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.16.7" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.16.7" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.16.7" - "@babel/plugin-transform-modules-commonjs" "^7.17.9" - "@babel/plugin-transform-modules-systemjs" "^7.17.8" - "@babel/plugin-transform-modules-umd" "^7.16.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.10" - "@babel/plugin-transform-new-target" "^7.16.7" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.16.7" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.17.9" - "@babel/plugin-transform-reserved-words" "^7.16.7" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.16.7" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.16.7" - "@babel/plugin-transform-typeof-symbol" "^7.16.7" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.18.9" + "@babel/plugin-transform-classes" "^7.18.9" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.18.9" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.18.6" + "@babel/plugin-transform-modules-commonjs" "^7.18.6" + "@babel/plugin-transform-modules-systemjs" "^7.18.9" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.8" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.18.9" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.6" + "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.17.10" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" + "@babel/types" "^7.18.9" + babel-plugin-polyfill-corejs2 "^0.3.1" + babel-plugin-polyfill-corejs3 "^0.5.2" + babel-plugin-polyfill-regenerator "^0.3.1" core-js-compat "^3.22.1" semver "^6.3.0" @@ -1008,72 +1015,72 @@ esutils "^2.0.2" "@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.7.tgz#4c18150491edc69c183ff818f9f2aecbe5d93852" - integrity sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-react-display-name" "^7.16.7" - "@babel/plugin-transform-react-jsx" "^7.16.7" - "@babel/plugin-transform-react-jsx-development" "^7.16.7" - "@babel/plugin-transform-react-pure-annotations" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" "@babel/preset-typescript@^7.16.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" - integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" + integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-typescript" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-typescript" "^7.18.6" "@babel/runtime-corejs3@^7.10.2": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz#3d02d0161f0fbf3ada8e88159375af97690f4055" - integrity sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw== + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz#7bacecd1cb2dd694eacd32a91fcf7021c20770ae" + integrity sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A== dependencies: core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.16", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": - version "7.17.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" - integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== +"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.4", "@babel/template@^7.16.7", "@babel/template@^7.3.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== +"@babel/template@^7.10.4", "@babel/template@^7.18.6", "@babel/template@^7.3.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" + integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.10", "@babel/traverse@^7.17.3", "@babel/traverse@^7.17.9", "@babel/traverse@^7.7.0": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.10.tgz#1ee1a5ac39f4eac844e6cf855b35520e5eb6f8b5" - integrity sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.0": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" + integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.10" - "@babel/helper-environment-visitor" "^7.16.7" - "@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.17.10" - "@babel/types" "^7.17.10" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.9" + "@babel/types" "^7.18.9" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.10", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.17.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.10.tgz#d35d7b4467e439fcf06d195f8100e0fea7fc82c4" - integrity sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A== +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.6", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" + integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1089,10 +1096,10 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@craco/craco@^6.3.0": - version "6.4.3" - resolved "https://registry.yarnpkg.com/@craco/craco/-/craco-6.4.3.tgz#784395b6ebab764056550a2860494d24c3abd44e" - integrity sha512-RzkXYmNzRCGUyG7mM+IUMM+nvrpSfA34352sPSGQN76UivAmCAht3sI4v5JKgzO05oUK9Zwi6abCKD7iKXI8hQ== +"@craco/craco@^6.4.5": + version "6.4.5" + resolved "https://registry.yarnpkg.com/@craco/craco/-/craco-6.4.5.tgz#471e67082a2ffd3edf73759b215bdc16250d27b3" + integrity sha512-8F2rIAao8sEh0FPP52ViEvDM9GjJ7acq0knu1c8UgI+EuZMD5/ZB270ol6jV4iNY7it9Umg/RoGBvNRUNr8U8w== dependencies: cosmiconfig "^7.0.1" cosmiconfig-typescript-loader "^1.0.0" @@ -1101,17 +1108,12 @@ semver "^7.3.2" webpack-merge "^4.2.2" -"@cspotcode/source-map-consumer@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" - integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== - -"@cspotcode/source-map-support@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" - integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: - "@cspotcode/source-map-consumer" "0.8.0" + "@jridgewell/trace-mapping" "0.3.9" "@csstools/convert-colors@^1.4.0": version "1.4.0" @@ -1138,19 +1140,19 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@eslint/eslintrc@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.2.tgz#4989b9e8c0216747ee7cca314ae73791bb281aae" - integrity sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg== +"@eslint/eslintrc@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" + integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.3.1" - globals "^13.9.0" + espree "^9.3.2" + globals "^13.15.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" - minimatch "^3.0.4" + minimatch "^3.1.2" strip-json-comments "^3.1.1" "@fortawesome/fontawesome-common-types@6.1.1": @@ -1158,24 +1160,24 @@ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.1.tgz#7dc996042d21fc1ae850e3173b5c67b0549f9105" integrity sha512-wVn5WJPirFTnzN6tR95abCx+ocH+3IFLXAgyavnf9hUmN0CfWoDjPT/BAWsUVwSlYYVBeCLJxaqi7ZGe4uSjBA== -"@fortawesome/fontawesome-svg-core@^6.1.0": +"@fortawesome/fontawesome-svg-core@^6.1.1": version "6.1.1" resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.1.1.tgz#3424ec6182515951816be9b11665d67efdce5b5f" integrity sha512-NCg0w2YIp81f4V6cMGD9iomfsIj7GWrqmsa0ZsPh59G7PKiGN1KymZNxmF00ssuAlo/VZmpK6xazsGOwzKYUMg== dependencies: "@fortawesome/fontawesome-common-types" "6.1.1" -"@fortawesome/free-solid-svg-icons@^6.1.0": +"@fortawesome/free-solid-svg-icons@^6.1.1": version "6.1.1" resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.1.1.tgz#3369e673f8fe8be2fba30b1ec274d47490a830a6" integrity sha512-0/5exxavOhI/D4Ovm2r3vxNojGZioPwmFrKg0ZUH69Q68uFhFPs6+dhAToh6VEQBntxPRYPuT5Cg1tpNa9JUPg== dependencies: "@fortawesome/fontawesome-common-types" "6.1.1" -"@fortawesome/react-fontawesome@^0.1.17": - version "0.1.18" - resolved "https://registry.yarnpkg.com/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.18.tgz#dae37f718a24e14d7a99a5496c873d69af3fbd73" - integrity sha512-RwLIB4TZw0M9gvy5u+TusAA0afbwM4JQIimNH/j3ygd6aIvYPQLqXMhC9ErY26J23rDPyDZldIfPq/HpTTJ/tQ== +"@fortawesome/react-fontawesome@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz#d90dd8a9211830b4e3c08e94b63a0ba7291ddcf4" + integrity sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw== dependencies: prop-types "^15.8.1" @@ -1434,22 +1436,39 @@ "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz#4ac237f4dabc8dd93330386907b97591801f7352" - integrity sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw== +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/set-array@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.0.tgz#1179863356ac8fbea64a5a4bcde93a4871012c01" - integrity sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg== +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.11" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" - integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@0.3.9": version "0.3.9" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== @@ -1457,43 +1476,51 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@nitrots/nitro-renderer@^1.2.5": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@nitrots/nitro-renderer/-/nitro-renderer-1.2.5.tgz#9cb79a2467849995c9d44d55a7e5029bf7006f93" - integrity sha512-26aShPy1kCbN3S3UDa6IIycomfHoTvNWbZryS0Qx/0wieM0YIwMfPatSbiPn3YU6dYdmgbUZsvDzLYtp0tDojw== +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" + integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== dependencies: - "@pixi/app" "^6.3.0" - "@pixi/basis" "^6.3.0" - "@pixi/canvas-display" "^6.3.0" - "@pixi/canvas-extract" "^6.3.0" - "@pixi/canvas-renderer" "^6.3.0" - "@pixi/constants" "^6.3.0" - "@pixi/core" "^6.3.0" - "@pixi/display" "^6.3.0" - "@pixi/events" "^6.3.0" - "@pixi/extract" "^6.3.0" + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@nitrots/nitro-renderer@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@nitrots/nitro-renderer/-/nitro-renderer-1.3.1.tgz#a8563762bf8aaa172d33e1af09b4844e41e3ee49" + integrity sha512-npkBsyJe3bEbUajBIygXjFgDTHhx/RH0z9ss80KcnCHOoef5+nazun6zQ0M5aXRm6huMM9j8doZ0Et1mQ2Zhuw== + dependencies: + "@pixi/app" "~6.4.2" + "@pixi/basis" "~6.4.2" + "@pixi/canvas-display" "~6.4.2" + "@pixi/canvas-extract" "~6.4.2" + "@pixi/canvas-renderer" "~6.4.2" + "@pixi/constants" "~6.4.2" + "@pixi/core" "~6.4.2" + "@pixi/display" "~6.4.2" + "@pixi/events" "~6.4.2" + "@pixi/extract" "~6.4.2" "@pixi/filter-adjustment" "^4.1.3" - "@pixi/filter-alpha" "^6.3.0" - "@pixi/filter-color-matrix" "^6.3.0" - "@pixi/graphics" "^6.3.0" - "@pixi/graphics-extras" "^6.3.0" - "@pixi/interaction" "^6.3.0" - "@pixi/loaders" "^6.3.0" - "@pixi/math" "^6.3.0" - "@pixi/math-extras" "^6.3.0" - "@pixi/mixin-cache-as-bitmap" "^6.3.0" - "@pixi/mixin-get-child-by-name" "^6.3.0" - "@pixi/mixin-get-global-position" "^6.3.0" - "@pixi/polyfill" "^6.3.0" - "@pixi/runner" "^6.3.0" - "@pixi/settings" "^6.3.0" - "@pixi/sprite" "^6.3.0" - "@pixi/sprite-tiling" "^6.3.0" - "@pixi/spritesheet" "^6.3.0" - "@pixi/text" "^6.3.0" - "@pixi/ticker" "^6.3.0" + "@pixi/filter-alpha" "~6.4.2" + "@pixi/filter-color-matrix" "~6.4.2" + "@pixi/graphics" "~6.4.2" + "@pixi/graphics-extras" "~6.4.2" + "@pixi/interaction" "~6.4.2" + "@pixi/loaders" "~6.4.2" + "@pixi/math" "~6.4.2" + "@pixi/math-extras" "~6.4.2" + "@pixi/mixin-cache-as-bitmap" "~6.4.2" + "@pixi/mixin-get-child-by-name" "~6.4.2" + "@pixi/mixin-get-global-position" "~6.4.2" + "@pixi/polyfill" "~6.4.2" + "@pixi/runner" "~6.4.2" + "@pixi/settings" "~6.4.2" + "@pixi/sprite" "~6.4.2" + "@pixi/sprite-tiling" "~6.4.2" + "@pixi/spritesheet" "~6.4.2" + "@pixi/text" "~6.4.2" + "@pixi/ticker" "~6.4.2" "@pixi/tilemap" "^3.2.2" - "@pixi/utils" "^6.3.0" + "@pixi/utils" "~6.4.2" gifuct-js "^2.1.2" pako "^2.0.4" @@ -1534,172 +1561,172 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@pixi/app@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/app/-/app-6.3.0.tgz#9d8cb89e01b8a92c20700aa7d289e7ebc3f59be6" - integrity sha512-Ud+D/VkGFCx9Z+i0OXDzXqT3zNrUJ9f3sZuoACz1VVD6nnSq+wBZPnyoOOsgfiMYo/0KYVJh+EdBKZS8aYnnVQ== +"@pixi/app@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/app/-/app-6.4.2.tgz#d24e1fe4cb415e8dd7f2fd26a8e59969debee3ca" + integrity sha512-r0cTQan9ST0N+QmaaZQso7q0Q/lk9pUXB7dez+2vrLEbP8TAnLym2V2H+ChN6TwD+EoX6qXD7oFohNbwPedNyA== -"@pixi/basis@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/basis/-/basis-6.3.0.tgz#09afb9b2f5cdd453ec550859aa34cc042e515d00" - integrity sha512-vSZSJUFj8fHwdU7pKcHlxZNQN92CEj1G6FiWhuoEGzIGKg00BTkJ4EapiimfauA7BCF6wqJpYjNSGAtYCdPzgw== +"@pixi/basis@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/basis/-/basis-6.4.2.tgz#27631986560c2dc7c07a0059be4c122c3dbe1753" + integrity sha512-R17XUYnni8Nkg4Z9b2h/GYSQsY/iUQEZWJK3QHhdCbTOVb+NyKpEO7Jt5aOIqdpmC7jEySIN3x64xa+Wq+Ezbg== -"@pixi/canvas-display@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/canvas-display/-/canvas-display-6.3.0.tgz#41fea0e555cfd39ee7a7fb4f205471fc190acd63" - integrity sha512-M47bfxT9Imt68rz6VGfFSr1+LwiZRr0n9Ro40na4XsPHgTSG+dmkCA5fz6oSjQ2Z4VNv/jl4ehIlABWMJBu58A== +"@pixi/canvas-display@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/canvas-display/-/canvas-display-6.4.2.tgz#3641eb07db542c0e3fc80fb9110b245dbe712887" + integrity sha512-RoHJLcLkl4w3a3HrWhkvB8Tu9V0GWIxOcdM81o58rBFhi+BWC4MEuiqkQ/6AUXaaCSYV4dIbyiEbrxb7fJM57g== -"@pixi/canvas-extract@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/canvas-extract/-/canvas-extract-6.3.0.tgz#c9d0e471c103bfe3b0be174a4d041c73aef28fa2" - integrity sha512-+QQd8yTE83IUPcuEQKvtQi0hS3l8W6VP0UfdD2zhIAi/i17lZw+omWZ86Lifhj1RIE2OUIGNSvansIUrGyD2uA== +"@pixi/canvas-extract@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/canvas-extract/-/canvas-extract-6.4.2.tgz#224ca7399fb0f7e0f551b5c437357b4078a68cdd" + integrity sha512-BNddDRWD0Eejn7pozqTJkmfQNVcwx9r++aAFZ4DOqXJji84G57M4eXkdM22+N4j5hgxxxiCTZCkYUmCIk9Y/RQ== -"@pixi/canvas-renderer@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/canvas-renderer/-/canvas-renderer-6.3.0.tgz#54e2cc71fff5a3072dc68e67516524c6c8aa05ed" - integrity sha512-i/qAm7E8Wti4OFcOtU5PP2/w1YZcLspfg0zW2z6fUAFZfCgNrh5DdhLT04JY9wpgz990vg0NI1wjPPh1jHDjIA== +"@pixi/canvas-renderer@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/canvas-renderer/-/canvas-renderer-6.4.2.tgz#cd73279918f3c61a09645d5e2bdae3585ffd7c44" + integrity sha512-NnVT61LlzCk80FGl/imp8zVg6cxinyFk7uljTYJBPJTM6PBFdn/LD+H3wcdbggjNWVSfqwYXVM6gN5Ce22tONg== -"@pixi/constants@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/constants/-/constants-6.3.0.tgz#c900b875ee132d7061af4c1ab53c060faec1a504" - integrity sha512-295/bb0+5IugA9plqBnD6xrvApjgGRdaNJ6EryCa7UB2j8wt4YtuzLjNeaCtng9eJONgJXXPhPF85+spdWRMbg== +"@pixi/constants@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/constants/-/constants-6.4.2.tgz#1835fe2cbae9ce7865f9a67bd2d4aef800be6a11" + integrity sha512-qj+eviYmJqeGkMbIKSkp1FVMLglQPVyzzyo/2/0VYmSuY4m4WItC4w3wtyjDd4vBK9YxZIUBZz+LKJvKkRplLQ== -"@pixi/core@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/core/-/core-6.3.0.tgz#f0eeb6804f811f7de59e32130590f82c4b930745" - integrity sha512-j7UMizcgDoUB9eDrZIP22xJCPYpjx2/BCl8deE5M9Cim9OR2qPxnNnt3jC1oKf2vVnNMTDrMOLekhMVo89FX2Q== +"@pixi/core@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/core/-/core-6.4.2.tgz#b62fa4dc59280313a33922eac69db63f0336db42" + integrity sha512-W5RWg0537uz2ni0BW9pA0gRmYGBE628e5XR4iDXO5VLSIZmc4jcaBLsPC7o1amcg1xo5Ty44yMpVpodv+GGRCw== dependencies: "@types/offscreencanvas" "^2019.6.4" -"@pixi/display@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/display/-/display-6.3.0.tgz#82781587c928ac49ea24dbc675781e885d3c4a08" - integrity sha512-Uxc1aLTFzV55d3kOlh/g19RlE2okPXsroi5jfYGCNS0VCdFk0sp6jMNEwk12BwC0KcA5SU7217H4jLy38VCVpA== +"@pixi/display@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/display/-/display-6.4.2.tgz#04ad9c5b41e039fe9a778c5346d28a810d82a2fe" + integrity sha512-mE35oRa4Ex5NOVXsuk7JldmmjBfO0gtOO7FPU3VpheOB13HLoacJ4XAa1HfAGapFiFZe+K19gOXEiOj1RyJfGA== -"@pixi/events@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/events/-/events-6.3.0.tgz#56d5de336f9d4debdd1ec85de4c5761aff0cc3de" - integrity sha512-Cjg5fHS2jbYTGg+jYMMU2ql0WpVWol/FWRQAde6ELXxNq+R6kz7/HDal2dYH52wu541PR6ZSaAASzB2wrIzZ4g== +"@pixi/events@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/events/-/events-6.4.2.tgz#b65d2b6e64631571179079819972b515d6336ec5" + integrity sha512-peLSZrNzU4jRlKkYc80FpyW4ziep1rDnHxto/kKNkEJbn2dALZjMdzIV7ALB17pV7GH5ZH2cqwiKw26rhLFwmQ== -"@pixi/extract@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/extract/-/extract-6.3.0.tgz#ee1f4eaa933e98c2c54930bb0c1b3f3935e4b1ad" - integrity sha512-p5d3Jx0hoIQZsn1msIOyYCzyRjVkfiDUNkuzpLmNo9zng7C6bwqmIZWEMr5alm7+XwqKHlQdsBuK9PeUJt9fGQ== +"@pixi/extract@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/extract/-/extract-6.4.2.tgz#9423483ecc58d6feb441d8eb8d5bc2cdacc37c9c" + integrity sha512-4eMqkns+NL2/DmdezjbVG4TW+eII3hvgDM3koDQNoO4yjMgU+55TTptPU9jJL/JJwntRiUECLSIHg8eZxmA5mA== "@pixi/filter-adjustment@^4.1.3": version "4.1.3" resolved "https://registry.yarnpkg.com/@pixi/filter-adjustment/-/filter-adjustment-4.1.3.tgz#61e34b4dd9766ccf40463f0538201bf68f78df66" integrity sha512-W+NhPiZRYKoRToa5+tkU95eOw8gnS5dfIp3ZP+pLv2mdER9RI+4xHxp1uLHMqUYZViTaMdZIIoVOuCgHFPYCbQ== -"@pixi/filter-alpha@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/filter-alpha/-/filter-alpha-6.3.0.tgz#3585bfe8a215fb13f56352d34dee2243fd8651ad" - integrity sha512-FyO35T2ym7R/rxaQzz3+dfpMlNn7b4XCFebD7hAgYoLqb+/vaM32ZjjoKBxxFRFqpZxBO6BObCyJQd245h+P4A== +"@pixi/filter-alpha@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/filter-alpha/-/filter-alpha-6.4.2.tgz#592f3285a86293d372c241c01530966f463d15d9" + integrity sha512-If6a/tCPnFo0FQI/v6uy0OSqrNI8YMZMdcY7CfgklqDHx50CvhKp0d2tPYE4ETNgSpO883LARz6pi6yLAH83AA== -"@pixi/filter-color-matrix@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/filter-color-matrix/-/filter-color-matrix-6.3.0.tgz#bf6795960c4c1b608bf92c5f513b5e60b1888754" - integrity sha512-9qKrRiaeINap7BgolI3GZ5RaRgYNx0pK8iyrn7vWcuQAxR/lPM+rfgWQPagjXdU9NbnbnfZj0LNOmgFqtWsZTQ== +"@pixi/filter-color-matrix@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/filter-color-matrix/-/filter-color-matrix-6.4.2.tgz#313aa6df18dfe8d91049ee8aff4eafd22ef54e63" + integrity sha512-IsR2piAxGmyesqZ4OlIyv5OvUkHx3K5iL+js6vricbcbBZA9fQUjTXdZmb7RloO6Po3Amze3f9ZkuLe4CNpUDQ== -"@pixi/graphics-extras@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/graphics-extras/-/graphics-extras-6.3.0.tgz#940319377b8ec17acaeae370a0b9010fb2988a59" - integrity sha512-XsRZSRY4Jyhlc2Df6is43OfSBPwICXceczSeOcWx7juRQ8rwGVZLfaKEgBQtTs4++MOBTTIY8BrXqJ0yJOaS1w== +"@pixi/graphics-extras@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/graphics-extras/-/graphics-extras-6.4.2.tgz#caf4277b6852b93b2f58cbb4c400e8fd194b04b7" + integrity sha512-SOYBCs2bs5wZYnMPLr3lTb/CZ5yP8cX/GUa+Nu4ohtpesrXlvkAWdAG+qeujnsUNp/9RLXQZhjw5vFC6TzqbRA== -"@pixi/graphics@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/graphics/-/graphics-6.3.0.tgz#50e758385b7704d0a068db189a20f0244f5fd68d" - integrity sha512-cnce8ddZSRgVuwK3hdWjEgf9WJljEXlJp+tOIEYvmNYnkvfaRpdeVRpF5yd+A24ZswrVRU9W/W7cXCMw2uq/vQ== +"@pixi/graphics@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/graphics/-/graphics-6.4.2.tgz#a3dadc078432b67d4606b1f05c5ab3fce80db40b" + integrity sha512-bMIuOee3ONsibRzq9/YUOPfrJ9rD5UK4ifhHRcB5sXwyRXhVK2HNkT2H4+0JQ8o7TxqjJE8neb5en9hn3ZR3SQ== -"@pixi/interaction@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/interaction/-/interaction-6.3.0.tgz#2329eae55884bf380a4c5443b29631a1fba6f283" - integrity sha512-ZAgYJPnpQS07r69o6Mgn4SxurY+t05EWblC8bpVssQ/k2yU3xeWAKNV/Hk39AKrM5S+PBU9YyGX//jM+3gt8rQ== +"@pixi/interaction@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/interaction/-/interaction-6.4.2.tgz#5745498057c174fb5c7538619644c7b104a58cf5" + integrity sha512-CJ4BAZUM+9ykRE9NIOyTiv7oR+PoiDqn+GcI8boE9mRyJ0WZosznCYdcAwEk5k/F5+Az0z8hK3PjzTuNvrPAcw== -"@pixi/loaders@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/loaders/-/loaders-6.3.0.tgz#82441d1f664c489a754db7d2deb68bccdf97f4d6" - integrity sha512-FXW3DkcAg2w0FABS6ixmzJNQSdabHXWumltelYM76NmBSE8oaLmg6tniBvjrTlSxUs3HlgwdeqgnUHV9GIFxLQ== +"@pixi/loaders@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/loaders/-/loaders-6.4.2.tgz#74558719d9febfc34de863a2df791502cefdc600" + integrity sha512-2y4JbGhhYYYdKIZfy9Evc7rcctqcXiP6xuAuIfqVgRD9SjQkxImelgCpyYT/BpjXP5jetyim8Usv07Ynx+4B0w== -"@pixi/math-extras@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/math-extras/-/math-extras-6.3.0.tgz#ff528e873d7e43648a3e669419577ced36e35b3f" - integrity sha512-T3/GWAEVnxZEpFTxxY08zJ02BLcoiso9Goo/oxtp1TC0LT6mzPlMfBputWUUQFfb1BMktfAJuviAk8YZK3lnHg== +"@pixi/math-extras@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/math-extras/-/math-extras-6.4.2.tgz#3210e6ca2f7b0c8d2e5d8cc1142a8e3e349fef2e" + integrity sha512-Dc1GszTU5pW4cSG6VV2UYMkcDASC5KW0N7wPGEh3UCB8p79JwmN+xJ/mCC6m9lkgAdAc6b3KQTUPdWFycnpdJA== -"@pixi/math@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/math/-/math-6.3.0.tgz#2df6a27a8a73e1976ebbe90b01dfeab999b17bdb" - integrity sha512-QkF9wl3/kXvthwWhrDAVgWQWl3T9dbyicHsoWfx0s9b3E0rx+PZcpz5ftaAVxGd7EvecIxV9nEUnna9TIjvwJQ== +"@pixi/math@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/math/-/math-6.4.2.tgz#32c39453877e6faa0c8891b8fbeec02a4f8bfecf" + integrity sha512-/byuwLhzln7Gahl3pT/Ckfwe4nvAQ3tAYu+38B+b18HkQWi3Ykci/QwVq/nICb5sa5tJzW3icno2qcv7zBd2xQ== -"@pixi/mixin-cache-as-bitmap@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/mixin-cache-as-bitmap/-/mixin-cache-as-bitmap-6.3.0.tgz#02d8422d2345f941c68bfe33f186537cce521c62" - integrity sha512-KIbclUCTv6J2ERIX8LM0PaGezKqfmDbR8X/68irbwsYU3fRtsFb9X4IHttguiItYK8C6syyepEyIRbWB/poc6Q== +"@pixi/mixin-cache-as-bitmap@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/mixin-cache-as-bitmap/-/mixin-cache-as-bitmap-6.4.2.tgz#10f37259ddc65aafb0a492adb17135d040db7874" + integrity sha512-TyMoSDoxd8o1J6/S/8xjJlCO4ThVOC2aJdHMP3hNX8GqjszOWZ2JONwVrPauToCPLyM76JXoDylwINB0bMh3YQ== -"@pixi/mixin-get-child-by-name@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/mixin-get-child-by-name/-/mixin-get-child-by-name-6.3.0.tgz#5e58d496d2ecd79b98b566901eec74b3b3119c69" - integrity sha512-R1nh985Fffo0HG3gmbbsBgbR0obGdjkVb31V9gUFileydY8u1jVA4sL1uzOfBbHAjDE+HFOO1wC1p6ygalUrkQ== +"@pixi/mixin-get-child-by-name@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/mixin-get-child-by-name/-/mixin-get-child-by-name-6.4.2.tgz#1e8ad6736eaeb4f62d8eb6536bc501d069399d70" + integrity sha512-VP8RihmDiah3x/7jHoJe1f9PCWadWOC5m5pHE886e4KafZq6vRJAoD9SMBm2VxcVJMZAvwIXnnTd6M2paC6ijg== -"@pixi/mixin-get-global-position@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/mixin-get-global-position/-/mixin-get-global-position-6.3.0.tgz#ba02920c45ea3284b5c58371d9e5e32c61312c05" - integrity sha512-hDzLubpLSRH6hp+mn8mpONZeMcMc75ndkz6WROXI0gfoUkFdzxHStGBSk4VJRgtSj1zzOgmEqo7LP/y2blgYlw== +"@pixi/mixin-get-global-position@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/mixin-get-global-position/-/mixin-get-global-position-6.4.2.tgz#8f4566210839fe59c1dc36d74879e24d367d596e" + integrity sha512-sb+uzQ1OjXeGZaehuhmYoLtmrpt18gj4OQXa/ACebIEYZNB0fy57k1MMEhQlQvv4cOML0nglf64nzhkdNxk85A== -"@pixi/polyfill@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/polyfill/-/polyfill-6.3.0.tgz#4b8862c4c6ce589a21abfafa174acbfcee631d2c" - integrity sha512-sjOLw0yndRipWOW3ykkCej5+VMZRBmnd32kUXXum9kgceSeL0w+iRPZrfvaFmgypqGnGpqwg24MsZ3vtIffd9g== +"@pixi/polyfill@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/polyfill/-/polyfill-6.4.2.tgz#c1a0b44ae60bff6749e00df069803546afe86a9b" + integrity sha512-526FVALec5Hf6KVuguRLmLjnAAodpcBeZdQvMVEyMqgxZLch3f6QSwq+SITqR2lr7toqRYEWMyH7ISXdqbcRAg== dependencies: object-assign "^4.1.1" promise-polyfill "^8.2.0" -"@pixi/runner@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/runner/-/runner-6.3.0.tgz#e300c0865825fa736376801b57485d3d1d6f5fb8" - integrity sha512-dG0YK/59dMay1pBD3sXYWtyDQ1gjRY8QCI38b+wQiH9oFMNFtj/f/RxkL1XyaK0r7sC8TjXUiQ+7+lZlmcqIjw== +"@pixi/runner@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/runner/-/runner-6.4.2.tgz#006ab5e49e281717868d46d6b020d26675b1f334" + integrity sha512-mH1//C931Rd+RB/c66t8VMNmLUGBCnefRftgijV5mBFXNgyP8Dnbig1790Qw4IDKPgiiR1mRmGDGAJAr0Xa/3A== -"@pixi/settings@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/settings/-/settings-6.3.0.tgz#1207fdb65fa1cf305e34a97fdffb47004bb8e5f5" - integrity sha512-UkbZmlexr6NGM6Qz30Et63bpWAmpmkknOOnavrhWPnnbhFIx4kVzU9mvGMHGSGNLJabX9+gFUdjDGSlzF42v4w== +"@pixi/settings@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/settings/-/settings-6.4.2.tgz#1d912cd0c82d669c03666e4e8bd11b79aaf9fac7" + integrity sha512-wA2PEVoHYaRiQ0/zvq8nqJZkzDT3qLRl8S7yVfL1yhsbCsh6KI0hjCwqy8b8xCAVAMwkInzWx64lvQbfActnAg== dependencies: ismobilejs "^1.1.0" -"@pixi/sprite-tiling@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/sprite-tiling/-/sprite-tiling-6.3.0.tgz#75d0db26c471eaa6ca5c378c787de570486371d1" - integrity sha512-4+HodD9QwhiqIptBpT3rXuJDAJ5TSg2IRnHOo/+qSopA70VC1E+RRgyVvxfRfopfptcAHi60XWfzvFLHSV3LsA== +"@pixi/sprite-tiling@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/sprite-tiling/-/sprite-tiling-6.4.2.tgz#ed7459224ced02824d2161e31b2dc8f9e5d1c060" + integrity sha512-2kTVlgOMDi8MmvrZJBe4pt96hIcFS89kJrZYG+aEg7DoS1oQJ1X/T68feqz0PfMHgTJtQiDqn2NbR+/S1E/HpQ== -"@pixi/sprite@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/sprite/-/sprite-6.3.0.tgz#8441400c001403250cd5bb21d456735373172532" - integrity sha512-dv0CSkxjWZeUujYQ6NorJ5Cue6SL+RE/H739JK4+cAwEtoWpYqKqiw6aeUu4aqSRsqjhyk9ilhR+K1MbnImJKA== +"@pixi/sprite@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/sprite/-/sprite-6.4.2.tgz#018f63dace945bf3bcb26d06e8160118bb9db128" + integrity sha512-UW3587gBSdY8iCh/t7+7j1CV9iouAQrLvRNw42gJm5iQm+GaLWpQEI3GSaQX9u47fi1C2nokeGa6uB2Hwz/48Q== -"@pixi/spritesheet@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/spritesheet/-/spritesheet-6.3.0.tgz#d3047938f6ab3d93f69ff535f71fbc39ee86bd3e" - integrity sha512-TAIIVA2KFJk7lKB4Ggep99bxpkSjnYlODuLEZ9EoJ6QIEx9A1HesaKwwqzfneeCzX5BOBeJMgZ++rujE29rrpg== +"@pixi/spritesheet@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/spritesheet/-/spritesheet-6.4.2.tgz#e17118c476ebf2f3371022b5df8f254ed7989208" + integrity sha512-iSKVXcH4oPNZ+XdirqMTdgo3MbbXRsoAeuXsoWum2aP4Zm94cSQ0kRGAMXg5SVhQTWF5w+tQ+JKfE/kGZqd5Vg== -"@pixi/text@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/text/-/text-6.3.0.tgz#f39b3aa2567de42f3d4266c276f5abb0529dbb23" - integrity sha512-hDevLv8HztzdImA6sIvmpBpNoIyDCrMNJAdjTUo/Kw1aoKlDaOGx4K3J7wVTzV1d1WrreIXtOsO3rQUOzf/hmg== +"@pixi/text@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/text/-/text-6.4.2.tgz#340aa90a241deecff499b540b9e1ec34cadff27c" + integrity sha512-jX2LBjgEwKqm5lTUKh3gusSKsSPQpibdcxYMQKxMDNVqvNyGG9UqEO/FogMnGg6c5EHBKyMas26c8oXrf1oagg== -"@pixi/ticker@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/ticker/-/ticker-6.3.0.tgz#0438efd9abbd74eab59be7361bac47553c25e4cb" - integrity sha512-cEqyQgM5entsi+h85fUnESBzNc/yMRG/mqsfAr7/KraP7bmCcn3MYVuTycRMkRbuNPjC1NIpqkqiOaxzgAUGPw== +"@pixi/ticker@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/ticker/-/ticker-6.4.2.tgz#5e84fcd9c76240e9c141f268b780de19b63cf231" + integrity sha512-OM2U0qLiU2Z+qami7DRNkBJnx20ElQO/5mJNsoHQRH6k/po0nXlux8jcCXhh5DE9lds4RdUFAwTL4RmLT1clDw== "@pixi/tilemap@^3.2.2": version "3.2.2" resolved "https://registry.yarnpkg.com/@pixi/tilemap/-/tilemap-3.2.2.tgz#8327e5d7007a90be640a0b1eb9943a1e405b57e4" integrity sha512-svdmMyJP63vdae3t66tCmE8IWeO/6lD1xXU+5gzfxqxJS5seTp2bm8mQok2c8PF0O6l/NYlLz6BRklOuEuHboQ== -"@pixi/utils@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@pixi/utils/-/utils-6.3.0.tgz#74703e1593b3f7462165adcfaf41c62ce303829c" - integrity sha512-QI5wb/fDdH8DAzIMlrYS0MhG382FPMLh4s3yRtOaftiOb84LL7Syz//SC+CJAyVB0UV/Lpr+T6PiCa4eBjRDgA== +"@pixi/utils@~6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@pixi/utils/-/utils-6.4.2.tgz#77c5bac2ba26094ac0308327a5b6685d3287f649" + integrity sha512-FORUzSikNUNceS6sf2NlRcGukmJrnWCQToA6Nqk+tQ7Lvb42vDTVI66ya44O6HYM2J0nL684YeYesWbAZ+UeKg== dependencies: "@types/earcut" "^2.1.0" earcut "^2.2.2" @@ -1718,19 +1745,19 @@ schema-utils "^2.6.5" source-map "^0.7.3" -"@popperjs/core@^2.10.1": +"@popperjs/core@^2.11.5": version "2.11.5" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.5.tgz#db5a11bf66bdab39569719555b0f76e138d7bd64" integrity sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw== -"@react-aria/ssr@^3.0.1": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.1.2.tgz#665a6fd56385068c7417922af2d0d71b0618e52d" - integrity sha512-amXY11ImpokvkTMeKRHjsSsG7v1yzzs6yeqArCyBIk60J3Yhgxwx9Cah+Uu/804ATFwqzN22AXIo7SdtIaMP+g== +"@react-aria/ssr@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.2.0.tgz#88460384b43204f91c972d5b0de24ee44d6a2984" + integrity sha512-wwJFdkl+Q8NU5yJ4NvdAOqx5LM3QtUVoSjuK7Ey8jZ4WS4bB0EqT3Kr3IInBs257HzZ5nXCiKXKE4NGXXuIRWA== dependencies: "@babel/runtime" "^7.6.2" -"@restart/hooks@^0.4.0", "@restart/hooks@^0.4.6": +"@restart/hooks@^0.4.6", "@restart/hooks@^0.4.7": version "0.4.7" resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.7.tgz#d79ca6472c01ce04389fc73d4a79af1b5e33cd39" integrity sha512-ZbjlEHcG+FQtpDPHd7i4FzNNvJf2enAwZfJbpM8CW7BhmOAbsHpZe3tsHwfQUrBuyrxWqPYp2x5UMnilWcY22A== @@ -1738,14 +1765,14 @@ dequal "^2.0.2" "@restart/ui@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.2.0.tgz#fb90251aa25f99b41ccedc78a91d2a15f3c5e0fb" - integrity sha512-oIh2t3tG8drZtZ9SlaV5CY6wGsUViHk8ZajjhcI+74IQHyWy+AnxDv8rJR5wVgsgcgrPBUvGNkC1AEdcGNPaLQ== + version "1.3.1" + resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.3.1.tgz#ae16be26128cc205efb7e0bf93d1f34deb1fe116" + integrity sha512-MYvMs2eeZTHu2dBJHOXKx72vxzEZeWbZx2z1QjeXq62iYjpjIyukBC2ZEy8x+sb9Gl0AiOiHkPXrl1wn95aOGQ== dependencies: - "@babel/runtime" "^7.13.16" - "@popperjs/core" "^2.10.1" - "@react-aria/ssr" "^3.0.1" - "@restart/hooks" "^0.4.0" + "@babel/runtime" "^7.18.3" + "@popperjs/core" "^2.11.5" + "@react-aria/ssr" "^3.2.0" + "@restart/hooks" "^0.4.7" "@types/warning" "^3.0.0" dequal "^2.0.2" dom-helpers "^5.2.0" @@ -1911,24 +1938,24 @@ integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@tsconfig/node10@^1.0.7": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" - integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" - integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" - integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" - integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.19" @@ -1968,7 +1995,7 @@ resolved "https://registry.yarnpkg.com/@types/earcut/-/earcut-2.1.1.tgz#573a0af609f17005c751f6f4ffec49cfe358ea51" integrity sha512-w8oigUCDjElRHRRrMvn/spybSMyX8MTkKA5Dv+tS1IE/TgmNZPqUYtvYBXGY8cieSE66gm+szeK+bnbxC2xHTQ== -"@types/eslint@^7.28.2": +"@types/eslint@^7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.29.0.tgz#e56ddc8e542815272720bb0b4ccc2aff9c3e1c78" integrity sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng== @@ -1977,9 +2004,9 @@ "@types/json-schema" "*" "@types/estree@*": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== "@types/estree@0.0.39": version "0.0.39" @@ -2033,27 +2060,17 @@ "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/minimatch@*": version "3.0.5" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== -"@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== - -"@types/node@*": - version "17.0.31" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.31.tgz#a5bb84ecfa27eec5e1c802c6bbf8139bdb163a5d" - integrity sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q== - -"@types/node@^12.20.19": - version "12.20.50" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.50.tgz#14ba5198f1754ffd0472a2f84ab433b45ee0b65e" - integrity sha512-+9axpWx2b2JCVovr7Ilgt96uc6C1zBKOQMpGtRbWT9IoR/8ue32GGMfGA4woP8QyP2gBs6GQWEVM3tCybGCxDA== +"@types/node@*", "@types/node@^18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.1.tgz#828e4785ccca13f44e2fb6852ae0ef11e3e20ba5" + integrity sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -2061,9 +2078,9 @@ integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/offscreencanvas@^2019.6.4": - version "2019.6.4" - resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.6.4.tgz#64f6d120b53925028299c744fcdd32d2cd525963" - integrity sha512-u8SAgdZ8ROtkTF+mfZGOscl0or6BSj9A4g37e6nvxDc+YB/oDut0wHkK2PBBiC2bNR8TS0CPV+1gAk4fNisr1Q== + version "2019.7.0" + resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz#e4a932069db47bb3eabeb0b305502d01586fa90d" + integrity sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg== "@types/parse-json@^4.0.0": version "4.0.0" @@ -2071,9 +2088,9 @@ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prettier@^2.0.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.0.tgz#efcbd41937f9ae7434c714ab698604822d890759" - integrity sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw== + version "2.6.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a" + integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg== "@types/prop-types@*": version "15.7.5" @@ -2085,10 +2102,10 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== -"@types/react-dom@^18.0.3": - version "18.0.3" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.3.tgz#a022ea08c75a476fe5e96b675c3e673363853831" - integrity sha512-1RRW9kst+67gveJRYPxGmVy8eVJ05O43hg77G2j5m76/RFJtMbcfAs2viQ2UNsvvDg8F7OfQZx8qQcl6ymygaQ== +"@types/react-dom@^18.0.6": + version "18.0.6" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.6.tgz#36652900024842b74607a17786b6662dd1e103a1" + integrity sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA== dependencies: "@types/react" "*" @@ -2099,14 +2116,14 @@ dependencies: "@types/react" "*" -"@types/react-transition-group@^4.4.4": - version "4.4.4" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.4.tgz#acd4cceaa2be6b757db61ed7b432e103242d163e" - integrity sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug== +"@types/react-transition-group@^4.4.4", "@types/react-transition-group@^4.4.5": + version "4.4.5" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416" + integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA== dependencies: "@types/react" "*" -"@types/react-virtualized@^9.21.13": +"@types/react-virtualized@^9.21.21": version "9.21.21" resolved "https://registry.yarnpkg.com/@types/react-virtualized/-/react-virtualized-9.21.21.tgz#65c96f25314f0fb3d40536929dc78112753b49e1" integrity sha512-Exx6I7p4Qn+BBA1SRyj/UwQlZ0I0Pq7g7uhAp0QQ4JWzZunqEqNBGTmCmMmS/3N9wFgAGWuBD16ap7k8Y14VPA== @@ -2114,10 +2131,10 @@ "@types/prop-types" "*" "@types/react" "^17" -"@types/react@*", "@types/react@>=16.9.11", "@types/react@^17", "@types/react@^18.0.8": - version "18.0.8" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.8.tgz#a051eb380a9fbcaa404550543c58e1cf5ce4ab87" - integrity sha512-+j2hk9BzCOrrOSJASi5XiOyBbERk9jG5O73Ya4M0env5Ixi6vUNli4qy994AINcEF+1IEHISYFfIT4zwr++LKw== +"@types/react@*", "@types/react@>=16.9.11", "@types/react@^17", "@types/react@^18.0.15": + version "18.0.15" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" + integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2151,16 +2168,16 @@ integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== "@types/uglify-js@*": - version "3.13.2" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.2.tgz#1044c1713fb81cb1ceef29ad8a9ee1ce08d690ef" - integrity sha512-/xFrPIo+4zOeNGtVMbf9rUm0N+i4pDf1ynExomqtokIJmVzR3962lJ1UE+MmexMkA0cmN9oTzg5Xcbwge0Ij2Q== + version "3.16.0" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.16.0.tgz#2cf74a0e6ebb6cd54c0d48e509d5bd91160a9602" + integrity sha512-0yeUr92L3r0GLRnBOvtYK1v2SjqMIqQDHMl7GLb+l2L8+6LSFWEEWEIgVsPdMn5ImLM8qzWT8xFPtQYpp8co0g== dependencies: source-map "^0.6.1" "@types/warning@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" - integrity sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI= + integrity sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA== "@types/webpack-sources@*": version "3.2.0" @@ -2209,19 +2226,19 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/eslint-plugin@^5.17.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.21.0.tgz#bfc22e0191e6404ab1192973b3b4ea0461c1e878" - integrity sha512-fTU85q8v5ZLpoZEyn/u1S2qrFOhi33Edo2CZ0+q1gDaWWm0JuPh3bgOyU8lM0edIEYgKLDkPFiZX2MOupgjlyg== +"@typescript-eslint/eslint-plugin@^5.30.7": + version "5.30.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.7.tgz#1621dabc1ae4084310e19e9efc80dfdbb97e7493" + integrity sha512-l4L6Do+tfeM2OK0GJsU7TUcM/1oN/N25xHm3Jb4z3OiDU4Lj8dIuxX9LpVMS9riSXQs42D1ieX7b85/r16H9Fw== dependencies: - "@typescript-eslint/scope-manager" "5.21.0" - "@typescript-eslint/type-utils" "5.21.0" - "@typescript-eslint/utils" "5.21.0" - debug "^4.3.2" + "@typescript-eslint/scope-manager" "5.30.7" + "@typescript-eslint/type-utils" "5.30.7" + "@typescript-eslint/utils" "5.30.7" + debug "^4.3.4" functional-red-black-tree "^1.0.1" - ignore "^5.1.8" + ignore "^5.2.0" regexpp "^3.2.0" - semver "^7.3.5" + semver "^7.3.7" tsutils "^3.21.0" "@typescript-eslint/experimental-utils@4.33.0", "@typescript-eslint/experimental-utils@^4.0.1": @@ -2257,15 +2274,15 @@ "@typescript-eslint/typescript-estree" "4.33.0" debug "^4.3.1" -"@typescript-eslint/parser@^5.17.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.21.0.tgz#6cb72673dbf3e1905b9c432175a3c86cdaf2071f" - integrity sha512-8RUwTO77hstXUr3pZoWZbRQUxXcSXafZ8/5gpnQCfXvgmP9gpNlRGlWzvfbEQ14TLjmtU8eGnONkff8U2ui2Eg== +"@typescript-eslint/parser@^5.30.7": + version "5.30.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.7.tgz#99d09729392aec9e64b1de45cd63cb81a4ddd980" + integrity sha512-Rg5xwznHWWSy7v2o0cdho6n+xLhK2gntImp0rJroVVFkcYFYQ8C8UJTSuTw/3CnExBmPjycjmUJkxVmjXsld6A== dependencies: - "@typescript-eslint/scope-manager" "5.21.0" - "@typescript-eslint/types" "5.21.0" - "@typescript-eslint/typescript-estree" "5.21.0" - debug "^4.3.2" + "@typescript-eslint/scope-manager" "5.30.7" + "@typescript-eslint/types" "5.30.7" + "@typescript-eslint/typescript-estree" "5.30.7" + debug "^4.3.4" "@typescript-eslint/scope-manager@4.33.0": version "4.33.0" @@ -2275,21 +2292,21 @@ "@typescript-eslint/types" "4.33.0" "@typescript-eslint/visitor-keys" "4.33.0" -"@typescript-eslint/scope-manager@5.21.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.21.0.tgz#a4b7ed1618f09f95e3d17d1c0ff7a341dac7862e" - integrity sha512-XTX0g0IhvzcH/e3393SvjRCfYQxgxtYzL3UREteUneo72EFlt7UNoiYnikUtmGVobTbhUDByhJ4xRBNe+34kOQ== +"@typescript-eslint/scope-manager@5.30.7": + version "5.30.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.7.tgz#8269a931ef1e5ae68b5eb80743cc515c4ffe3dd7" + integrity sha512-7BM1bwvdF1UUvt+b9smhqdc/eniOnCKxQT/kj3oXtj3LqnTWCAM0qHRHfyzCzhEfWX0zrW7KqXXeE4DlchZBKw== dependencies: - "@typescript-eslint/types" "5.21.0" - "@typescript-eslint/visitor-keys" "5.21.0" + "@typescript-eslint/types" "5.30.7" + "@typescript-eslint/visitor-keys" "5.30.7" -"@typescript-eslint/type-utils@5.21.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.21.0.tgz#ff89668786ad596d904c21b215e5285da1b6262e" - integrity sha512-MxmLZj0tkGlkcZCSE17ORaHl8Th3JQwBzyXL/uvC6sNmu128LsgjTX0NIzy+wdH2J7Pd02GN8FaoudJntFvSOw== +"@typescript-eslint/type-utils@5.30.7": + version "5.30.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.7.tgz#5693dc3db6f313f302764282d614cfdbc8a9fcfd" + integrity sha512-nD5qAE2aJX/YLyKMvOU5jvJyku4QN5XBVsoTynFrjQZaDgDV6i7QHFiYCx10wvn7hFvfuqIRNBtsgaLe0DbWhw== dependencies: - "@typescript-eslint/utils" "5.21.0" - debug "^4.3.2" + "@typescript-eslint/utils" "5.30.7" + debug "^4.3.4" tsutils "^3.21.0" "@typescript-eslint/types@3.10.1": @@ -2302,10 +2319,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== -"@typescript-eslint/types@5.21.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.21.0.tgz#8cdb9253c0dfce3f2ab655b9d36c03f72e684017" - integrity sha512-XnOOo5Wc2cBlq8Lh5WNvAgHzpjnEzxn4CJBwGkcau7b/tZ556qrWXQz4DJyChYg8JZAD06kczrdgFPpEQZfDsA== +"@typescript-eslint/types@5.30.7": + version "5.30.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.7.tgz#18331487cc92d0f1fb1a6f580c8ec832528079d0" + integrity sha512-ocVkETUs82+U+HowkovV6uxf1AnVRKCmDRNUBUUo46/5SQv1owC/EBFkiu4MOHeZqhKz2ktZ3kvJJ1uFqQ8QPg== "@typescript-eslint/typescript-estree@3.10.1": version "3.10.1" @@ -2334,28 +2351,28 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.21.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.21.0.tgz#9f0c233e28be2540eaed3df050f0d54fb5aa52de" - integrity sha512-Y8Y2T2FNvm08qlcoSMoNchh9y2Uj3QmjtwNMdRQkcFG7Muz//wfJBGBxh8R7HAGQFpgYpdHqUpEoPQk+q9Kjfg== +"@typescript-eslint/typescript-estree@5.30.7": + version "5.30.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.7.tgz#05da9f1b281985bfedcf62349847f8d168eecc07" + integrity sha512-tNslqXI1ZdmXXrHER83TJ8OTYl4epUzJC0aj2i4DMDT4iU+UqLT3EJeGQvJ17BMbm31x5scSwo3hPM0nqQ1AEA== dependencies: - "@typescript-eslint/types" "5.21.0" - "@typescript-eslint/visitor-keys" "5.21.0" - debug "^4.3.2" - globby "^11.0.4" + "@typescript-eslint/types" "5.30.7" + "@typescript-eslint/visitor-keys" "5.30.7" + debug "^4.3.4" + globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.5" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.21.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.21.0.tgz#51d7886a6f0575e23706e5548c7e87bce42d7c18" - integrity sha512-q/emogbND9wry7zxy7VYri+7ydawo2HDZhRZ5k6yggIvXa7PvBbAAZ4PFH/oZLem72ezC4Pr63rJvDK/sTlL8Q== +"@typescript-eslint/utils@5.30.7": + version "5.30.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.7.tgz#7135be070349e9f7caa262b0ca59dc96123351bb" + integrity sha512-Z3pHdbFw+ftZiGUnm1GZhkJgVqsDL5CYW2yj+TB2mfXDFOMqtbzQi2dNJIyPqPbx9mv2kUxS1gU+r2gKlKi1rQ== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.21.0" - "@typescript-eslint/types" "5.21.0" - "@typescript-eslint/typescript-estree" "5.21.0" + "@typescript-eslint/scope-manager" "5.30.7" + "@typescript-eslint/types" "5.30.7" + "@typescript-eslint/typescript-estree" "5.30.7" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -2374,13 +2391,13 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" -"@typescript-eslint/visitor-keys@5.21.0": - version "5.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.21.0.tgz#453fb3662409abaf2f8b1f65d515699c888dd8ae" - integrity sha512-SX8jNN+iHqAF0riZQMkm7e8+POXa/fXw5cxL+gjpyP+FI+JVNhii53EmQgDAfDcBpFekYSlO0fGytMQwRiMQCA== +"@typescript-eslint/visitor-keys@5.30.7": + version "5.30.7" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.7.tgz#c093abae75b4fd822bfbad9fc337f38a7a14909a" + integrity sha512-KrRXf8nnjvcpxDFOKej4xkD7657+PClJs5cJVSG7NNoCNnjEdc46juNAQt7AyuWctuCgs6mVRc1xGctEqrjxWw== dependencies: - "@typescript-eslint/types" "5.21.0" - eslint-visitor-keys "^3.0.0" + "@typescript-eslint/types" "5.30.7" + eslint-visitor-keys "^3.3.0" "@webassemblyjs/ast@1.9.0": version "1.9.0" @@ -2542,11 +2559,6 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -2563,7 +2575,7 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.3.1: +acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -2588,10 +2600,10 @@ acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.0: - version "8.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== +acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== address@1.1.2: version "1.1.2" @@ -2636,7 +2648,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2659,12 +2671,7 @@ ajv@^8.0.1: alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + integrity sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ== animate.css@^4.1.1: version "4.1.1" @@ -2677,9 +2684,9 @@ ansi-colors@^3.0.0: integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: version "4.3.2" @@ -2691,12 +2698,12 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: ansi-html@0.0.7, ansi-html@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + integrity sha512-JoAxEa1DfP9m2xfB/y2r/aKcwXNlltr4+0QSBC4TrLfcxyvepX2Pv0t/xpgGV5bGsDzCYV8SzjWgyCW0T9yYbA== ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^4.1.0: version "4.1.1" @@ -2708,11 +2715,6 @@ ansi-regex@^5.0.0, ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -2743,19 +2745,11 @@ anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -are-we-there-yet@~1.1.2: - version "1.1.7" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" - integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -2784,12 +2778,12 @@ aria-query@^4.2.2: arity-n@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" - integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= + integrity sha512-fExL2kFDC1Q2DUOx3whE/9KoN66IzkY4b4zUHUBFM1ojEYjZZYDcUW3bek/ufGionX9giIKDC5redH2IlGqcQQ== arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== arr-flatten@^1.1.0: version "1.1.0" @@ -2799,33 +2793,33 @@ arr-flatten@^1.1.0: arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-flatten@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" - integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== +array-includes@^3.1.4, array-includes@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" + integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.19.5" get-intrinsic "^1.1.1" is-string "^1.0.7" array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== dependencies: array-uniq "^1.0.1" @@ -2837,12 +2831,12 @@ array-union@^2.1.0: array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== array.prototype.flat@^1.2.5: version "1.3.0" @@ -2854,7 +2848,7 @@ array.prototype.flat@^1.2.5: es-abstract "^1.19.2" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.2.5: +array.prototype.flatmap@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== @@ -2864,10 +2858,16 @@ array.prototype.flatmap@^1.2.5: es-abstract "^1.19.2" es-shim-unscopables "^1.0.0" -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +array.prototype.reduce@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz#8167e80089f78bff70a99e20bd4201d4663b0a6f" + integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" arrify@^2.0.1: version "2.0.1" @@ -2877,7 +2877,7 @@ arrify@^2.0.1: asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== asn1.js@^5.2.0: version "5.4.1" @@ -2889,18 +2889,6 @@ asn1.js@^5.2.0: minimalistic-assert "^1.0.0" safer-buffer "^2.1.0" -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - assert@^1.1.1: version "1.5.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" @@ -2912,12 +2900,12 @@ assert@^1.1.1: assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== astral-regex@^2.0.0: version "2.0.0" @@ -2929,11 +2917,6 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" - integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= - async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" @@ -2949,7 +2932,7 @@ async@^2.6.2: asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" @@ -2974,20 +2957,10 @@ autoprefixer@^9.6.1: postcss "^7.0.32" postcss-value-parser "^4.1.0" -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -axe-core@^4.3.5: - version "4.4.1" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413" - integrity sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw== +axe-core@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f" + integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w== axobject-query@^2.2.0: version "2.2.0" @@ -3080,24 +3053,24 @@ babel-plugin-named-asset-import@^0.3.7: resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== -babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== +babel-plugin-polyfill-corejs2@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" + integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q== dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.2" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== +babel-plugin-polyfill-corejs3@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" + integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/helper-define-polyfill-provider" "^0.3.2" core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.3.0: +babel-plugin-polyfill-regenerator@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== @@ -3107,12 +3080,12 @@ babel-plugin-polyfill-regenerator@^0.3.0: babel-plugin-syntax-object-rest-spread@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= + integrity sha512-C4Aq+GaAj83pRQ0EFgTvw5YO6T3Qz2KGrNRwIj9mSoNHVvdZY4KO2uA6HNtNXCw993iSZnckY1aLW8nOi8i4+w== babel-plugin-transform-object-rest-spread@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= + integrity sha512-ocgA9VJvyxwt+qJB0ncxV8kb/CjfTcECUY4tQ5VT7nP6Aohzobm8CDFaQ5FHdvZQzLmf0sgDxB8iRXZXxwZcyA== dependencies: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.26.0" @@ -3173,7 +3146,7 @@ babel-preset-react-app@^10.0.0: babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" @@ -3209,14 +3182,7 @@ base@^0.11.1: batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== bfj@^7.0.2: version "7.0.2" @@ -3261,9 +3227,9 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== body-parser@1.20.0: version "1.20.0" @@ -3286,7 +3252,7 @@ body-parser@1.20.0: bonjour@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + integrity sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg== dependencies: array-flatten "^2.1.0" deep-equal "^1.0.1" @@ -3298,7 +3264,7 @@ bonjour@^3.5.0: boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== brace-expansion@^1.1.7: version "1.1.11" @@ -3334,7 +3300,7 @@ braces@^3.0.2, braces@~3.0.2: brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browser-process-hrtime@^1.0.0: version "1.0.0" @@ -3412,16 +3378,15 @@ browserslist@4.14.2: escalade "^3.0.2" node-releases "^1.1.61" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.6.2, browserslist@^4.6.4: - version "4.20.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.3.tgz#eb7572f49ec430e054f56d52ff0ebe9be915f8bf" - integrity sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg== +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.20.2, browserslist@^4.21.2, browserslist@^4.6.2, browserslist@^4.6.4: + version "4.21.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.2.tgz#59a400757465535954946a400b841ed37e2b4ecf" + integrity sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA== dependencies: - caniuse-lite "^1.0.30001332" - electron-to-chromium "^1.4.118" - escalade "^3.1.1" - node-releases "^2.0.3" - picocolors "^1.0.0" + caniuse-lite "^1.0.30001366" + electron-to-chromium "^1.4.188" + node-releases "^2.0.6" + update-browserslist-db "^1.0.4" bser@2.1.1: version "2.1.1" @@ -3443,7 +3408,7 @@ buffer-indexof@^1.0.0: buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== buffer@^4.3.0: version "4.9.2" @@ -3455,19 +3420,19 @@ buffer@^4.3.0: isarray "^1.0.0" builtin-modules@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== bytes@3.1.2: version "3.1.2" @@ -3545,21 +3510,21 @@ call-bind@^1.0.0, call-bind@^1.0.2: caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== dependencies: callsites "^2.0.0" caller-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== dependencies: caller-callsite "^2.0.0" callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== callsites@^3.0.0: version "3.1.0" @@ -3574,15 +3539,6 @@ camel-case@^4.1.1: pascal-case "^3.1.2" tslib "^2.0.3" -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -3603,10 +3559,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001332: - version "1.0.30001334" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001334.tgz#892e9965b35285033fc2b8a8eff499fe02f13d8b" - integrity sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001366: + version "1.0.30001370" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz#0a30d4f20d38b9e108cc5ae7cc62df9fe66cd5ba" + integrity sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g== capture-exit@^2.0.0: version "2.0.0" @@ -3620,11 +3576,6 @@ case-sensitive-paths-webpack-plugin@2.3.0: resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -3634,17 +3585,6 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -3658,16 +3598,26 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -charcodes@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4" - integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ== - check-types@^11.1.1: version "11.1.2" resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + 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" + optionalDependencies: + fsevents "~2.3.2" + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -3687,21 +3637,6 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.4.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - 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" - optionalDependencies: - fsevents "~2.3.2" - chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -3781,14 +3716,14 @@ cliui@^6.0.0: wrap-ansi "^6.2.0" clsx@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" - integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== coa@^2.0.2: version "2.0.2" @@ -3799,11 +3734,6 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -3812,7 +3742,7 @@ collect-v8-coverage@^1.0.0: collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -3834,7 +3764,7 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" @@ -3857,7 +3787,7 @@ color@^3.0.0: color-convert "^1.9.3" color-string "^1.6.0" -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: +combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -3882,7 +3812,7 @@ common-tags@^1.8.0: commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== component-emitter@^1.2.1: version "1.3.0" @@ -3892,7 +3822,7 @@ component-emitter@^1.2.1: compose-function@3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f" - integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= + integrity sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg== dependencies: arity-n "^1.0.4" @@ -3919,7 +3849,7 @@ compression@^1.7.4: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^1.5.0: version "1.6.2" @@ -3946,15 +3876,10 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== content-disposition@0.5.4: version "0.5.4" @@ -3978,7 +3903,7 @@ convert-source-map@1.7.0: convert-source-map@^0.3.3: version "0.3.5" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" - integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= + integrity sha512-+4nRk0k3oEpwUB7/CalD7xE2z4VmtEnnq0GO2IPTkrooTrAhEsWvuLF5iWP1dXrwluki/azwXV1ve7gtYuPldg== convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" @@ -3990,7 +3915,7 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.5.0: version "0.5.0" @@ -4012,20 +3937,20 @@ copy-concurrently@^1.0.0: copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== core-js-compat@^3.21.0, core-js-compat@^3.22.1: - version "3.22.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.22.3.tgz#9b10d786052d042bc97ee8df9c0d1fb6a49c2005" - integrity sha512-wliMbvPI2idgFWpFe7UEyHMvu6HWgW8WA+HnDRtgzoSDYvXFMpoGX1H3tPDDXrcfUSyXafCLDd7hOeMQHEZxGw== + version "3.23.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.5.tgz#11edce2f1c4f69a96d30ce77c805ce118909cd5b" + integrity sha512-fHYozIFIxd+91IIbXJgWd/igXIc8Mf9is0fusswjnGIWVG96y2cwyUdlCkGOw6rMLHKAxg7xtCIVaHsyOUnJIg== dependencies: - browserslist "^4.20.3" + browserslist "^4.21.2" semver "7.0.0" core-js-pure@^3.20.2: - version "3.22.3" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.22.3.tgz#181d1b6321fb29fe99c16a1f28beb840ab84ad36" - integrity sha512-oN88zz7nmKROMy8GOjs+LN+0LedIvbMdnB5XsTlhcOg1WGARt9l0LFg0zohdoFmCsEZ1h2ZbSQ6azj3M+vhzwQ== + version "3.23.5" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.23.5.tgz#23daaa9af9230e50f10b0fa4b8e6b87402be4c33" + integrity sha512-8t78LdpKSuCq4pJYCYk8hl7XEkAX+BP16yRIwL3AanTksxuEf7CM83vRyctmiEL8NDZ3jpUcv56fk9/zG3aIuw== core-js@^2.4.0: version "2.6.12" @@ -4033,14 +3958,9 @@ core-js@^2.4.0: integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-js@^3.6.5: - version "3.22.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.22.3.tgz#498c41d997654cb00e81c7a54b44f0ab21ab01d5" - integrity sha512-1t+2a/d2lppW1gkLXx3pKPVGbBdxXAkqztvWb1EJ8oF8O2gIGiytzflNiFEehYwVK/t2ryUsGBoOFFvNx95mbg== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + version "3.23.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.23.5.tgz#1f82b0de5eece800827a2f59d597509c67650475" + integrity sha512-7Vh11tujtAZy82da4duVreQysIoO2EvVrur7y6IzZkH1IHPSekuDi8Vuw1+YKjkbfWLRD7Nc9ICQ/sIUDutcyg== core-util-is@~1.0.0: version "1.0.3" @@ -4119,7 +4039,7 @@ cross-env@^7.0.3: dependencies: cross-spawn "^7.0.1" -cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -4159,7 +4079,7 @@ crypto-browserify@^3.11.0: crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + integrity sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg== css-blank-pseudo@^0.1.4: version "0.1.4" @@ -4171,7 +4091,7 @@ css-blank-pseudo@^0.1.4: css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + integrity sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q== css-declaration-sorter@^4.0.1: version "4.0.1" @@ -4330,12 +4250,12 @@ cssnano-preset-default@^4.0.8: cssnano-util-get-arguments@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + integrity sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw== cssnano-util-get-match@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + integrity sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw== cssnano-util-raw-cache@^4.0.1: version "4.0.1" @@ -4384,14 +4304,14 @@ cssstyle@^2.3.0: cssom "~0.3.6" csstype@^3.0.2: - version "3.0.11" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33" - integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw== + version "3.1.0" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" + integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + integrity sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A== d@1, d@^1.0.1: version "1.0.1" @@ -4401,18 +4321,11 @@ d@1, d@^1.0.1: es5-ext "^0.10.50" type "^1.0.1" -damerau-levenshtein@^1.0.7: +damerau-levenshtein@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -4429,7 +4342,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6. dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4443,18 +4356,10 @@ debug@^3.1.1, debug@^3.2.7: dependencies: ms "^2.1.1" -decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.2.0: +decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decimal.js@^10.2.1: version "10.3.1" @@ -4464,12 +4369,12 @@ decimal.js@^10.2.1: decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== deep-equal@^1.0.1: version "1.1.1" @@ -4501,7 +4406,7 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" -define-properties@^1.1.2, define-properties@^1.1.3: +define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== @@ -4512,14 +4417,14 @@ define-properties@^1.1.2, define-properties@^1.1.3: define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== dependencies: is-descriptor "^1.0.0" @@ -4547,12 +4452,7 @@ del@^4.1.1: delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== depd@2.0.0: version "2.0.0" @@ -4562,12 +4462,12 @@ depd@2.0.0: depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== dequal@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d" - integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== des.js@^1.0.0: version "1.0.1" @@ -4629,7 +4529,7 @@ dir-glob@^3.0.1: dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== dns-packet@^1.3.1: version "1.3.4" @@ -4642,7 +4542,7 @@ dns-packet@^1.3.1: dns-txt@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + integrity sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ== dependencies: buffer-indexof "^1.0.0" @@ -4779,32 +4679,24 @@ duplexify@^3.4.2, duplexify@^3.6.0: stream-shift "^1.0.0" earcut@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.3.tgz#d44ced2ff5a18859568e327dd9c7d46b16f55cf4" - integrity sha512-iRDI1QeCQIhMCZk48DRDMVgQSSBDmbzzNhnxIo+pwx3swkfjMh6vh0nWLq1NdvGHLKH6wIrAM3vQWeTj6qeoug== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" + version "2.2.4" + resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.4.tgz#6d02fd4d68160c114825d06890a92ecaae60343a" + integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== ejs@^2.6.1: version "2.7.4" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.564, electron-to-chromium@^1.4.118: - version "1.4.129" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.129.tgz#c675793885721beefff99da50f57c6525c2cd238" - integrity sha512-GgtN6bsDtHdtXJtlMYZWGB/uOyjZWjmRDumXTas7dGBaB9zUyCjzHet1DY2KhyHN8R0GLbzZWqm4efeddqqyRQ== +electron-to-chromium@^1.3.564, electron-to-chromium@^1.4.188: + version "1.4.199" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz#e0384fde79fdda89880e8be58196a9153e04db3b" + integrity sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg== elliptic@^6.5.3: version "6.5.4" @@ -4847,7 +4739,7 @@ emoji-toolkit@^6.6.0: emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + integrity sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng== emojis-list@^3.0.0: version "3.0.0" @@ -4857,7 +4749,7 @@ emojis-list@^3.0.0: encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" @@ -4887,11 +4779,6 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - errno@^0.1.3, errno@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" @@ -4907,23 +4794,25 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" error-stack-parser@^2.0.6: - version "2.0.7" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.7.tgz#b0c6e2ce27d0495cf78ad98715e0cad1219abb57" - integrity sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA== + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== dependencies: - stackframe "^1.1.1" + stackframe "^1.3.4" -es-abstract@^1.17.2, es-abstract@^1.19.1, es-abstract@^1.19.2: - version "1.19.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.5.tgz#a2cb01eb87f724e815b278b0dd0d00f36ca9a7f1" - integrity sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA== +es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" + integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" + function.prototype.name "^1.1.5" get-intrinsic "^1.1.1" get-symbol-description "^1.0.0" has "^1.0.3" + has-property-descriptors "^1.0.0" has-symbols "^1.0.3" internal-slot "^1.0.3" is-callable "^1.2.4" @@ -4935,9 +4824,15 @@ es-abstract@^1.17.2, es-abstract@^1.19.1, es-abstract@^1.19.2: object-inspect "^1.12.0" object-keys "^1.1.1" object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" + regexp.prototype.flags "^1.4.3" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-shim-unscopables@^1.0.0: version "1.0.0" @@ -4967,7 +4862,7 @@ es5-ext@^0.10.35, es5-ext@^0.10.50: es6-iterator@2.0.3, es6-iterator@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== dependencies: d "1" es5-ext "^0.10.35" @@ -4989,17 +4884,17 @@ escalade@^3.0.2, escalade@^3.1.1: escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" @@ -5049,7 +4944,7 @@ eslint-plugin-flowtype@^5.2.0: lodash "^4.17.15" string-natural-compare "^3.0.1" -eslint-plugin-import@^2.22.1, eslint-plugin-import@^2.25.4: +eslint-plugin-import@^2.22.1, eslint-plugin-import@^2.26.0: version "2.26.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== @@ -5075,48 +4970,49 @@ eslint-plugin-jest@^24.1.0: dependencies: "@typescript-eslint/experimental-utils" "^4.0.1" -eslint-plugin-jsx-a11y@^6.3.1, eslint-plugin-jsx-a11y@^6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz#cdbf2df901040ca140b6ec14715c988889c2a6d8" - integrity sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g== +eslint-plugin-jsx-a11y@^6.3.1, eslint-plugin-jsx-a11y@^6.6.0: + version "6.6.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" + integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== dependencies: - "@babel/runtime" "^7.16.3" + "@babel/runtime" "^7.18.9" aria-query "^4.2.2" - array-includes "^3.1.4" + array-includes "^3.1.5" ast-types-flow "^0.0.7" - axe-core "^4.3.5" + axe-core "^4.4.3" axobject-query "^2.2.0" - damerau-levenshtein "^1.0.7" + damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" has "^1.0.3" - jsx-ast-utils "^3.2.1" + jsx-ast-utils "^3.3.2" language-tags "^1.0.5" - minimatch "^3.0.4" + minimatch "^3.1.2" + semver "^6.3.0" -eslint-plugin-react-hooks@^4.2.0, eslint-plugin-react-hooks@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz#5f762dfedf8b2cf431c689f533c9d3fa5dcf25ad" - integrity sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw== +eslint-plugin-react-hooks@^4.2.0, eslint-plugin-react-hooks@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@^7.21.5, eslint-plugin-react@^7.29.4: - version "7.29.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz#4717de5227f55f3801a5fd51a16a4fa22b5914d2" - integrity sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ== +eslint-plugin-react@^7.21.5, eslint-plugin-react@^7.30.1: + version "7.30.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz#2be4ab23ce09b5949c6631413ba64b2810fd3e22" + integrity sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg== dependencies: - array-includes "^3.1.4" - array.prototype.flatmap "^1.2.5" + array-includes "^3.1.5" + array.prototype.flatmap "^1.3.0" doctrine "^2.1.0" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" object.entries "^1.1.5" object.fromentries "^2.0.5" - object.hasown "^1.1.0" + object.hasown "^1.1.1" object.values "^1.1.5" prop-types "^15.8.1" resolve "^2.0.0-next.3" semver "^6.3.0" - string.prototype.matchall "^4.0.6" + string.prototype.matchall "^4.0.7" eslint-plugin-testing-library@^3.9.2: version "3.10.2" @@ -5173,20 +5069,20 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: +eslint-visitor-keys@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint-webpack-plugin@^2.5.2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.6.0.tgz#3bd4ada4e539cb1f6687d2f619073dbb509361cd" - integrity sha512-V+LPY/T3kur5QO3u+1s34VDTcRxjXWPUGM4hlmTb5DwVD0OQz631yGTxJZf4SpAqAjdbBVe978S8BJeHpAdOhQ== + version "2.7.0" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.7.0.tgz#0525793a4f8c652c1c6d863995ce1e0f2dcbd143" + integrity sha512-bNaVVUvU4srexGhVcayn/F4pJAz19CWBkKoMx7aSQ4wtTbZQCnG5O9LHCE42mM+JSKOUp7n6vd5CIwzj7lOVGA== dependencies: - "@types/eslint" "^7.28.2" + "@types/eslint" "^7.29.0" arrify "^2.0.1" - jest-worker "^27.3.1" - micromatch "^4.0.4" + jest-worker "^27.5.1" + micromatch "^4.0.5" normalize-path "^3.0.0" schema-utils "^3.1.1" @@ -5236,12 +5132,12 @@ eslint@^7.11.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -eslint@^8.12.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.14.0.tgz#62741f159d9eb4a79695b28ec4989fcdec623239" - integrity sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw== +eslint@^8.20.0: + version "8.20.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.20.0.tgz#048ac56aa18529967da8354a478be4ec0a2bc81b" + integrity sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA== dependencies: - "@eslint/eslintrc" "^1.2.2" + "@eslint/eslintrc" "^1.3.0" "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" chalk "^4.0.0" @@ -5252,14 +5148,14 @@ eslint@^8.12.0: eslint-scope "^7.1.1" eslint-utils "^3.0.0" eslint-visitor-keys "^3.3.0" - espree "^9.3.1" + 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.6.0" + globals "^13.15.0" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" @@ -5268,7 +5164,7 @@ eslint@^8.12.0: json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" regexpp "^3.2.0" @@ -5286,13 +5182,13 @@ espree@^7.3.0, espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -espree@^9.3.1: - version "9.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.1.tgz#8793b4bc27ea4c778c19908e0719e7b8f4115bcd" - integrity sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ== +espree@^9.3.2: + version "9.3.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" + integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== dependencies: - acorn "^8.7.0" - acorn-jsx "^5.3.1" + acorn "^8.7.1" + acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" esprima@^4.0.0, esprima@^4.0.1: @@ -5342,7 +5238,7 @@ esutils@^2.0.2: etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eventemitter3@^3.1.0: version "3.1.2" @@ -5359,12 +5255,10 @@ events@^3.0.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -eventsource@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" - integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== - dependencies: - original "^1.0.0" +eventsource@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-2.0.2.tgz#76dfcc02930fb2ff339520b6d290da573a9e8508" + integrity sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" @@ -5410,12 +5304,12 @@ execa@^4.0.0: exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -5484,23 +5378,18 @@ ext@^1.1.2: extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -5515,16 +5404,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - fast-deep-equal@3.1.3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -5549,7 +5428,7 @@ fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: version "1.13.0" @@ -5605,7 +5484,7 @@ filesize@6.1.0: fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -5661,7 +5540,7 @@ find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== dependencies: locate-path "^2.0.0" @@ -5681,9 +5560,9 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.1.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== + version "3.2.6" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" + integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== flatten@^1.0.2: version "1.0.3" @@ -5699,19 +5578,14 @@ flush-write-stream@^1.0.0: readable-stream "^2.3.6" follow-redirects@^1.0.0: - version "1.14.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" - integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== + version "1.15.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== fork-ts-checker-webpack-plugin@4.1.6: version "4.1.6" @@ -5735,15 +5609,6 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -5752,19 +5617,19 @@ forwarded@0.2.0: fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== dependencies: map-cache "^0.2.2" fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== dependencies: inherits "^2.0.1" readable-stream "^2.0.0" @@ -5807,7 +5672,7 @@ fs-minipass@^2.0.0: fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + integrity sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA== dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" @@ -5817,7 +5682,7 @@ fs-write-stream-atomic@^1.0.8: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^1.2.7: version "1.2.13" @@ -5837,37 +5702,26 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== functions-have-names@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -gaze@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" - integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== - dependencies: - globule "^1.0.0" - gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -5879,13 +5733,13 @@ get-caller-file@^2.0.1: integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== dependencies: function-bind "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" + has-symbols "^1.0.3" get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" @@ -5897,11 +5751,6 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -5927,14 +5776,7 @@ get-symbol-description@^1.0.0: get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== gifuct-js@^2.1.2: version "2.1.2" @@ -5946,7 +5788,7 @@ gifuct-js@^2.1.2: glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" @@ -5965,27 +5807,15 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@~7.1.1: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" @@ -6010,10 +5840,10 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.6.0, globals@^13.9.0: - version "13.13.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.13.0.tgz#ac32261060d8070e2719dd6998406e27d2b5727b" - integrity sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A== +globals@^13.15.0, globals@^13.6.0, globals@^13.9.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== dependencies: type-fest "^0.20.2" @@ -6029,7 +5859,7 @@ globby@11.0.1: merge2 "^1.3.0" slash "^3.0.0" -globby@^11.0.3, globby@^11.0.4: +globby@^11.0.3, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -6044,7 +5874,7 @@ globby@^11.0.3, globby@^11.0.4: globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw== dependencies: array-union "^1.0.1" glob "^7.0.3" @@ -6052,16 +5882,7 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -globule@^1.0.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.3.tgz#811919eeac1ab7344e905f2e3be80a13447973c2" - integrity sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg== - dependencies: - glob "~7.1.1" - lodash "~4.17.10" - minimatch "~3.0.2" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -6069,7 +5890,7 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6 growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw== gzip-size@5.1.1: version "5.1.1" @@ -6084,36 +5905,11 @@ handle-thing@^2.0.0: resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - harmony-reflect@^1.4.6: version "1.6.2" resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -6122,7 +5918,7 @@ has-bigints@^1.0.1, has-bigints@^1.0.2: has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" @@ -6148,15 +5944,10 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -6165,7 +5956,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -6174,12 +5965,12 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== dependencies: is-number "^3.0.0" kind-of "^4.0.0" @@ -6221,7 +6012,7 @@ hex-color-regex@^1.1.0: hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -6237,17 +6028,10 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== dependencies: inherits "^2.0.1" obuf "^1.0.0" @@ -6257,12 +6041,12 @@ hpack.js@^2.1.6: hsl-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + integrity sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A== hsla-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + integrity sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA== html-encoding-sniffer@^2.0.1: version "2.0.1" @@ -6322,7 +6106,7 @@ htmlparser2@^6.1.0: http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== http-errors@2.0.0: version "2.0.0" @@ -6338,7 +6122,7 @@ http-errors@2.0.0: http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== dependencies: depd "~1.1.2" inherits "2.0.3" @@ -6346,9 +6130,9 @@ http-errors@~1.6.2: statuses ">= 1.4.0 < 2" http-parser-js@>=0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd" - integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA== + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== http-proxy-agent@^4.0.1: version "4.0.1" @@ -6378,19 +6162,10 @@ http-proxy@^1.17.0: follow-redirects "^1.0.0" requires-port "^1.0.0" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== https-proxy-agent@^5.0.0: version "5.0.1" @@ -6422,7 +6197,7 @@ icss-utils@^4.0.0, icss-utils@^4.1.1: identity-obj-proxy@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" - integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= + integrity sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA== dependencies: harmony-reflect "^1.4.6" @@ -6434,7 +6209,7 @@ ieee754@^1.1.4: iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== ignore@^4.0.6: version "4.0.6" @@ -6451,17 +6226,22 @@ immer@8.0.1: resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656" integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== +immutable@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" + integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + import-cwd@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + integrity sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg== dependencies: import-from "^2.1.0" import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== dependencies: caller-path "^2.0.0" resolve-from "^3.0.0" @@ -6477,7 +6257,7 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: import-from@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + integrity sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w== dependencies: resolve-from "^3.0.0" @@ -6500,7 +6280,7 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" @@ -6510,7 +6290,7 @@ indent-string@^4.0.0: indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + integrity sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA== infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" @@ -6520,7 +6300,7 @@ infer-owner@^1.0.3, infer-owner@^1.0.4: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" @@ -6533,12 +6313,12 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + integrity sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA== inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== ini@^1.3.5: version "1.3.8" @@ -6572,12 +6352,12 @@ invariant@^2.2.4: ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw== ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + version "1.1.8" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" + integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== ipaddr.js@1.9.1, ipaddr.js@^1.9.0: version "1.9.1" @@ -6587,7 +6367,7 @@ ipaddr.js@1.9.1, ipaddr.js@^1.9.0: is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + integrity sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg== is-absolute-url@^3.0.3: version "3.0.3" @@ -6597,7 +6377,7 @@ is-absolute-url@^3.0.3: is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== dependencies: kind-of "^3.0.2" @@ -6619,7 +6399,7 @@ is-arguments@^1.0.4: is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-arrayish@^0.3.1: version "0.3.2" @@ -6636,7 +6416,7 @@ is-bigint@^1.0.1: is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== dependencies: binary-extensions "^1.0.0" @@ -6675,7 +6455,7 @@ is-ci@^2.0.0: is-color-stop@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + integrity sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA== dependencies: css-color-names "^0.0.4" hex-color-regex "^1.1.0" @@ -6684,7 +6464,7 @@ is-color-stop@^1.0.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" -is-core-module@^2.0.0, is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.1: +is-core-module@^2.0.0, is-core-module@^2.8.1, is-core-module@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== @@ -6694,7 +6474,7 @@ is-core-module@^2.0.0, is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-mod is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== dependencies: kind-of "^3.0.2" @@ -6733,7 +6513,7 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== is-docker@^2.0.0: version "2.2.1" @@ -6743,7 +6523,7 @@ is-docker@^2.0.0: is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extendable@^1.0.1: version "1.0.1" @@ -6755,19 +6535,12 @@ is-extendable@^1.0.1: is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -6782,7 +6555,7 @@ is-generator-fn@^2.0.0: is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== dependencies: is-extglob "^2.1.0" @@ -6796,7 +6569,7 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== is-negative-zero@^2.0.2: version "2.0.2" @@ -6813,7 +6586,7 @@ is-number-object@^1.0.4: is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== dependencies: kind-of "^3.0.2" @@ -6825,7 +6598,7 @@ is-number@^7.0.0: is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== is-obj@^2.0.0: version "2.0.0" @@ -6851,10 +6624,10 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: +is-plain-obj@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" @@ -6879,7 +6652,7 @@ is-regex@^1.0.4, is-regex@^1.1.4: is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== is-resolvable@^1.0.0: version "1.1.0" @@ -6901,7 +6674,7 @@ is-shared-array-buffer@^1.0.2: is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== is-stream@^2.0.0: version "2.0.1" @@ -6922,10 +6695,10 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typedarray@^1.0.0, is-typedarray@~1.0.0: +is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-weakref@^1.0.2: version "1.0.2" @@ -6942,7 +6715,7 @@ is-windows@^1.0.2: is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" @@ -6954,12 +6727,12 @@ is-wsl@^2.1.1, is-wsl@^2.2.0: isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== ismobilejs@^1.1.0: version "1.1.1" @@ -6969,19 +6742,14 @@ ismobilejs@^1.1.0: isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" @@ -7028,9 +6796,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.0.2: - version "3.1.4" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c" - integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -7461,7 +7229,7 @@ jest-worker@^26.5.0, jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^27.3.1: +jest-worker@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== @@ -7479,11 +7247,6 @@ jest@26.6.0: import-local "^3.0.2" jest-cli "^26.6.0" -js-base64@^2.1.8: - version "2.6.4" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" - integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== - js-binary-schema-parser@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz#3d7848748e8586e63b34e8911b643f59cfb6396e" @@ -7509,11 +7272,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - jsdom@^16.4.0: version "16.7.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" @@ -7555,7 +7313,7 @@ jsesc@^2.5.1: jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" @@ -7577,20 +7335,10 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^1.0.1: version "1.0.1" @@ -7607,7 +7355,7 @@ json5@^2.1.2, json5@^2.2.1: jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" @@ -7620,22 +7368,12 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz#afe5efe4332cd3515c065072bd4d6b0aa22152bd" + integrity sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q== dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz#e624f259143b9062c92b6413ff92a164c80d3ccb" - integrity sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q== - dependencies: - array-includes "^3.1.4" + array-includes "^3.1.5" object.assign "^4.1.2" killable@^1.0.1: @@ -7646,14 +7384,14 @@ killable@^1.0.1: kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== dependencies: is-buffer "^1.1.5" @@ -7662,7 +7400,7 @@ kind-of@^5.0.0: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== -kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: +kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -7678,14 +7416,14 @@ klona@^2.0.4: integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== language-subtag-registry@~0.3.2: - version "0.3.21" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" - integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== language-tags@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== dependencies: language-subtag-registry "~0.3.2" @@ -7713,7 +7451,7 @@ levn@^0.4.1: levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" @@ -7726,7 +7464,7 @@ lines-and-columns@^1.1.6: load-script@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" - integrity sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ= + integrity sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA== loader-runner@^2.4.0: version "2.4.0" @@ -7772,7 +7510,7 @@ loader-utils@^2.0.0: locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: p-locate "^2.0.0" path-exists "^3.0.0" @@ -7795,28 +7533,23 @@ locate-path@^5.0.0: lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA== lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - lodash.template@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -7835,14 +7568,14 @@ lodash.templatesettings@^4.0.0: lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0, lodash@~4.17.10: +"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -7917,22 +7650,12 @@ makeerror@1.0.12: map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== dependencies: object-visit "^1.0.0" @@ -7958,12 +7681,12 @@ mdn-data@2.0.4: media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + integrity sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ== dependencies: errno "^0.1.3" readable-stream "^2.0.1" @@ -7976,28 +7699,10 @@ memory-fs@^0.5.0: errno "^0.1.3" readable-stream "^2.0.1" -meow@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" - integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize "^1.2.0" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge-stream@^2.0.0: version "2.0.0" @@ -8012,7 +7717,7 @@ merge2@^1.3.0, merge2@^1.4.1: methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== microevent.ts@~0.1.1: version "0.1.1" @@ -8038,7 +7743,7 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -8059,7 +7764,7 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -8081,11 +7786,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - mini-css-extract-plugin@0.11.3: version "0.11.3" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz#15b0910a7f32e62ffde4a7430cfefbd700724ea6" @@ -8104,7 +7804,7 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== minimatch@3.0.4: version "3.0.4" @@ -8113,29 +7813,13 @@ minimatch@3.0.4: dependencies: brace-expansion "^1.1.7" -minimatch@^3.0.4, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@~3.0.2: - version "3.0.8" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" - integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== - dependencies: - brace-expansion "^1.1.7" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" @@ -8163,9 +7847,9 @@ minipass-pipeline@^1.2.2: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.1.1: - version "3.1.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" - integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== + version "3.3.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== dependencies: yallist "^4.0.0" @@ -8216,7 +7900,7 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + integrity sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ== dependencies: aproba "^1.1.1" copy-concurrently "^1.0.0" @@ -8228,7 +7912,7 @@ move-concurrently@^1.0.1: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" @@ -8243,7 +7927,7 @@ ms@2.1.3, ms@^2.1.1: multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + integrity sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ== multicast-dns@^6.0.1: version "6.2.3" @@ -8253,15 +7937,15 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" -nan@^2.12.1, nan@^2.13.2: - version "2.15.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" - integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== +nan@^2.12.1: + version "2.16.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" + integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== -nanoid@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== nanomatch@^1.2.9: version "1.2.13" @@ -8290,7 +7974,7 @@ native-url@^0.2.6: natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@0.6.3: version "0.6.3" @@ -8325,26 +8009,10 @@ node-forge@^0.10.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== -node-gyp@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" - integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.3" - nopt "^5.0.0" - npmlog "^4.1.2" - request "^2.88.2" - rimraf "^3.0.2" - semver "^7.3.2" - tar "^6.0.2" - which "^2.0.2" - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-libs-browser@^2.2.1: version "2.2.1" @@ -8392,38 +8060,10 @@ node-releases@^1.1.61: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== -node-releases@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.4.tgz#f38252370c43854dc48aa431c766c6c398f40476" - integrity sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ== - -node-sass@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-6.0.1.tgz#cad1ccd0ce63e35c7181f545d8b986f3a9a887fe" - integrity sha512-f+Rbqt92Ful9gX0cGtdYwjTrWAaGURgaK5rZCWOgCNyGWusFYHhbqCCBoFBeat+HKETOU02AyTxNhJV0YZf2jQ== - dependencies: - async-foreach "^0.1.3" - chalk "^1.1.1" - cross-spawn "^7.0.3" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - lodash "^4.17.15" - meow "^9.0.0" - nan "^2.13.2" - node-gyp "^7.1.0" - npmlog "^4.0.0" - request "^2.88.0" - sass-graph "2.2.5" - stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== normalize-package-data@^2.5.0: version "2.5.0" @@ -8435,20 +8075,10 @@ normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== dependencies: remove-trailing-separator "^1.0.1" @@ -8460,12 +8090,12 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== normalize-url@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + integrity sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ== dependencies: object-assign "^4.0.1" prepend-http "^1.0.0" @@ -8480,7 +8110,7 @@ normalize-url@^3.0.0: npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== dependencies: path-key "^2.0.0" @@ -8491,16 +8121,6 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" -npmlog@^4.0.0, npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - nth-check@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -8509,50 +8129,40 @@ nth-check@^1.0.2: boolbase "~1.0.0" nth-check@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" - integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + integrity sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg== nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + version "2.2.1" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.1.tgz#10a9f268fbf4c461249ebcfe38e359aa36e2577c" + integrity sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg== object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" object-inspect@^1.12.0, object-inspect@^1.9.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" - integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== object-is@^1.0.1: version "1.1.5" @@ -8570,7 +8180,7 @@ object-keys@^1.1.1: object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== dependencies: isobject "^3.0.0" @@ -8603,26 +8213,27 @@ object.fromentries@^2.0.5: es-abstract "^1.19.1" object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" - integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== + version "2.1.4" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz#7965e6437a57278b587383831a9b829455a4bc37" + integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== dependencies: + array.prototype.reduce "^1.0.4" call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.1" -object.hasown@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.0.tgz#7232ed266f34d197d15cac5880232f7a4790afe5" - integrity sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg== +object.hasown@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3" + integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== dependencies: - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.19.5" object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" @@ -8655,7 +8266,7 @@ on-headers@~1.0.2: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" @@ -8713,17 +8324,10 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== p-each-series@^2.1.0: version "2.2.0" @@ -8733,7 +8337,7 @@ p-each-series@^2.1.0: p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-limit@^1.1.0: version "1.3.0" @@ -8759,7 +8363,7 @@ p-limit@^3.0.2: p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: p-limit "^1.1.0" @@ -8799,7 +8403,7 @@ p-retry@^3.0.1: p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== p-try@^2.0.0: version "2.2.0" @@ -8854,7 +8458,7 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" @@ -8890,7 +8494,7 @@ pascal-case@^3.1.2: pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== path-browserify@0.0.1: version "0.0.1" @@ -8900,12 +8504,12 @@ path-browserify@0.0.1: path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" @@ -8915,17 +8519,17 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" @@ -8940,7 +8544,7 @@ path-parse@^1.0.6, path-parse@^1.0.7: path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== path-type@^4.0.0: version "4.0.0" @@ -8961,7 +8565,7 @@ pbkdf2@^3.0.3: performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== picocolors@^0.2.1: version "0.2.1" @@ -8981,7 +8585,7 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^4.0.1: version "4.0.1" @@ -8991,14 +8595,14 @@ pify@^4.0.1: pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== pirates@^4.0.1: version "4.0.5" @@ -9045,7 +8649,7 @@ portfinder@^1.0.26: posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== postcss-attribute-case-insensitive@^4.0.1: version "4.0.2" @@ -9705,11 +9309,11 @@ postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, po source-map "^0.6.1" postcss@^8.1.0: - version "8.4.13" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.13.tgz#7c87bc268e79f7f86524235821dfdf9f73e5d575" - integrity sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA== + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== dependencies: - nanoid "^3.3.3" + nanoid "^3.3.4" picocolors "^1.0.0" source-map-js "^1.0.2" @@ -9721,12 +9325,12 @@ prelude-ls@^1.2.1: prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== pretty-bytes@^5.3.0: version "5.6.0" @@ -9759,7 +9363,7 @@ process-nextick-args@~2.0.0: process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== progress@^2.0.0: version "2.0.3" @@ -9769,7 +9373,7 @@ progress@^2.0.0: promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise-polyfill@^8.2.0: version "8.2.3" @@ -9836,12 +9440,12 @@ proxy-addr@~2.0.7: prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== -psl@^1.1.28, psl@^1.1.33: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== public-encrypt@^4.0.0: version "4.0.3" @@ -9883,12 +9487,12 @@ pumpify@^1.3.3: punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" @@ -9898,7 +9502,7 @@ punycode@^2.1.0, punycode@^2.1.1: q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== qs@6.10.3: version "6.10.3" @@ -9907,15 +9511,10 @@ qs@6.10.3: dependencies: side-channel "^1.0.4" -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - query-string@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + integrity sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q== dependencies: object-assign "^4.1.0" strict-uri-encode "^1.0.0" @@ -9923,12 +9522,12 @@ query-string@^4.1.0: querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== querystring@^0.2.0: version "0.2.1" @@ -9945,11 +9544,6 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" @@ -10000,9 +9594,9 @@ react-app-polyfill@^2.0.0: whatwg-fetch "^3.4.1" react-bootstrap@^2.2.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.3.1.tgz#f14239efb89ca24044766e20cc829b7a264db11d" - integrity sha512-+k68LdaSS62Zc/1gr18NC9QpDk/wwhNk+90QgcTMYSA8BzlXC1G2ogWWrz2LFuP2FlmCtVjcr/UXw3mpdxVmWw== + version "2.4.0" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.4.0.tgz#99bf9656e2e7a23ae1ae135d18fd5ad7c344b416" + integrity sha512-dn599jNK1Fg5GGjJH+lQQDwELVzigh/MdusKpB/0el+sCjsO5MZDH5gRMmBjRhC+vb7VlCDr6OXffPIDSkNMLw== dependencies: "@babel/runtime" "^7.17.2" "@restart/hooks" "^0.4.6" @@ -10047,18 +9641,18 @@ react-dev-utils@^11.0.3: strip-ansi "6.0.0" text-table "0.2.0" -react-dom@^18.0.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.1.0.tgz#7f6dd84b706408adde05e1df575b3a024d7e8a2f" - integrity sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w== +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - scheduler "^0.22.0" + scheduler "^0.23.0" -react-error-overlay@6.0.9, react-error-overlay@^6.0.9: - version "6.0.9" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" - integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== +react-error-overlay@6.0.11, react-error-overlay@^6.0.9: + version "6.0.11" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" + integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== react-is@^16.13.1, react-is@^16.3.2, react-is@^16.8.1: version "16.13.1" @@ -10147,9 +9741,9 @@ react-scripts@4.0.3: fsevents "^2.1.3" react-slider@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/react-slider/-/react-slider-2.0.0.tgz#d904593b23434bf50bf3913aa2ab8c68621f41a5" - integrity sha512-r2Z4VkGvtQXbmiANEYzYdCnb4SnTRpgog1QZa++Wl1x1n5vRL3QOufyf52VVkcaLQCLk5m0WPMwGNvRqcBDtmw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/react-slider/-/react-slider-2.0.1.tgz#51fb80aaebb98a07d6563b757a49c437a5142fed" + integrity sha512-EnPLeyPGQcgpU9i+OvdD6W1Fk+rHg7LOVGvREXqLnbSngYvnE+d++nus0iHho1kcDw6NzF1OXzqWXAEs2Nbl4Q== dependencies: prop-types "^15.8.1" @@ -10184,10 +9778,10 @@ react-youtube@^7.13.1: prop-types "15.7.2" youtube-player "5.5.2" -react@^18.0.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890" - integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ== +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" @@ -10210,7 +9804,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -10255,14 +9849,6 @@ recursive-readdir@2.2.2: dependencies: minimatch "3.0.4" -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - regenerate-unicode-properties@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" @@ -10305,7 +9891,7 @@ regex-parser@^2.2.11: resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.1: +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== @@ -10319,10 +9905,10 @@ regexpp@^3.1.0, regexpp@^3.2.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" - integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== +regexpu-core@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d" + integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== dependencies: regenerate "^1.4.2" regenerate-unicode-properties "^10.0.1" @@ -10346,12 +9932,12 @@ regjsparser@^0.8.2: relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== renderkid@^2.0.4: version "2.0.7" @@ -10372,38 +9958,12 @@ repeat-element@^1.1.2: repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -request@^2.88.0, request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" @@ -10418,12 +9978,12 @@ require-main-filename@^2.0.0: requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + integrity sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg== dependencies: resolve-from "^3.0.0" @@ -10437,7 +9997,7 @@ resolve-cwd@^3.0.0: resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== resolve-from@^4.0.0: version "4.0.0" @@ -10468,7 +10028,7 @@ resolve-url-loader@^3.1.2: resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== resolve@1.18.1: version "1.18.1" @@ -10479,21 +10039,22 @@ resolve@1.18.1: path-parse "^1.0.6" resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.3.2: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: - is-core-module "^2.8.1" + is-core-module "^2.9.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" resolve@^2.0.0-next.3: - version "2.0.0-next.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" - integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" ret@~0.1.10: version "0.1.15" @@ -10503,7 +10064,7 @@ ret@~0.1.10: retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== reusify@^1.0.4: version "1.0.4" @@ -10513,12 +10074,12 @@ reusify@^1.0.4: rework-visit@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" - integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= + integrity sha512-W6V2fix7nCLUYX1v6eGPrBOZlc03/faqzP4sUxMAJMBMOPYhfV/RyLegTufn5gJKaOITyi+gvf0LXDZ9NzkHnQ== rework@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" - integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= + integrity sha512-eEjL8FdkdsxApd0yWVZgBGzfCQiT8yqSc2H1p4jpZpQdtz7ohETiDMoje5PlM8I9WgkqkreVxFUKYOiJdVWDXw== dependencies: convert-source-map "^0.3.3" css "^2.0.0" @@ -10526,12 +10087,12 @@ rework@1.0.1: rgb-regex@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + integrity sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w== rgba-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + integrity sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg== rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" @@ -10605,7 +10166,7 @@ run-parallel@^1.1.9: run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + integrity sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg== dependencies: aproba "^1.1.1" @@ -10622,11 +10183,11 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -10651,20 +10212,10 @@ sanitize.css@^10.0.0: resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-10.0.0.tgz#b5cb2547e96d8629a60947544665243b1dc3657a" integrity sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg== -sass-graph@2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" - integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== - dependencies: - glob "^7.0.0" - lodash "^4.0.0" - scss-tokenizer "^0.2.3" - yargs "^13.3.2" - sass-loader@^10.0.5: - version "10.2.1" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.2.1.tgz#17e51df313f1a7a203889ce8ff91be362651276e" - integrity sha512-RRvWl+3K2LSMezIsd008ErK4rk6CulIMSwrcc2aZvjymUgKo/vjXGp1rSWmfTUX7bblEOz8tst4wBwWtCGBqKA== + version "10.3.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.3.1.tgz#a45f0d1dd7ea90de7eb099239a18c83dea6e6341" + integrity sha512-y2aBdtYkbqorVavkC3fcJIUDGIegzDWPn3/LAFhsf3G+MzPKTJx37sROf5pXtUeggSVbNbmfj8TgRaSLMelXRA== dependencies: klona "^2.0.4" loader-utils "^2.0.0" @@ -10672,6 +10223,15 @@ sass-loader@^10.0.5: schema-utils "^3.0.0" semver "^7.3.2" +sass@^1.53.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.0.tgz#24873673265e2a4fe3d3a997f714971db2fba1f4" + integrity sha512-C4zp79GCXZfK0yoHZg+GxF818/aclhp9F48XBu/+bm9vXEVAYov9iU3FBVRMq3Hx3OA4jfKL+p2K9180mEh0xQ== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -10684,10 +10244,10 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8" - integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ== +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" @@ -10718,18 +10278,10 @@ schema-utils@^3.0.0, schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" -scss-tokenizer@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" - integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= - dependencies: - js-base64 "^2.1.8" - source-map "^0.4.2" - select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== selfsigned@^1.10.8: version "1.10.14" @@ -10758,7 +10310,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +semver@^7.2.1, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== @@ -10801,7 +10353,7 @@ serialize-javascript@^5.0.1: serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== dependencies: accepts "~1.3.4" batch "0.6.1" @@ -10821,10 +10373,10 @@ serve-static@1.15.0: parseurl "~1.3.3" send "0.18.0" -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -10839,7 +10391,7 @@ set-value@^2.0.0, set-value@^2.0.1: setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== setprototypeof@1.1.0: version "1.1.0" @@ -10862,7 +10414,7 @@ sha.js@^2.4.0, sha.js@^2.4.8: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" @@ -10876,7 +10428,7 @@ shebang-command@^2.0.0: shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" @@ -10910,7 +10462,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: is-arrayish "^0.3.1" @@ -10969,12 +10521,12 @@ snapdragon@^0.8.1: use "^3.1.0" sockjs-client@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.6.0.tgz#e0277b8974558edcb557eafc7d3027ef6128d865" - integrity sha512-qVHJlyfdHFht3eBFZdKEXKTlb7I4IV41xnVNo8yUKA1UHcPJwgW2SvTq9LhnjjCywSkSK7c/e4nghU0GOoMCRQ== + version "1.6.1" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.6.1.tgz#350b8eda42d6d52ddc030c39943364c11dcad806" + integrity sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw== dependencies: debug "^3.2.7" - eventsource "^1.1.0" + eventsource "^2.0.2" faye-websocket "^0.11.4" inherits "^2.0.4" url-parse "^1.5.10" @@ -10991,7 +10543,7 @@ sockjs@^0.3.21: sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== dependencies: is-plain-obj "^1.0.0" @@ -11000,7 +10552,7 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-js@^1.0.2: +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== @@ -11034,29 +10586,15 @@ source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, sourc resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - integrity sha1-66T12pwNyZneaAMti092FzZSA2s= - dependencies: - amdefine ">=0.0.4" - source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -source-map@~0.8.0-beta.0: - version "0.8.0-beta.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" - integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== - dependencies: - whatwg-url "^7.0.0" + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== sourcemap-codec@^1.4.8: version "1.4.8" @@ -11122,22 +10660,7 @@ split-string@^3.0.1, split-string@^3.0.2: sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== ssri@^6.0.1: version "6.0.2" @@ -11165,15 +10688,15 @@ stack-utils@^2.0.2: dependencies: escape-string-regexp "^2.0.0" -stackframe@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.1.tgz#1033a3473ee67f08e2f2fc8eba6aef4f845124e1" - integrity sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg== +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== dependencies: define-property "^0.2.5" object-copy "^0.1.0" @@ -11186,14 +10709,7 @@ statuses@2.0.1: "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stdout-stream@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" - integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== - dependencies: - readable-stream "^2.0.1" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== stream-browserify@^2.0.1: version "2.0.2" @@ -11230,7 +10746,7 @@ stream-shift@^1.0.0: strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== string-length@^4.0.1: version "4.0.2" @@ -11245,24 +10761,6 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -11272,7 +10770,16 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string.prototype.matchall@^4.0.6: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.matchall@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== @@ -11286,21 +10793,23 @@ string.prototype.matchall@^4.0.6: regexp.prototype.flags "^1.4.1" side-channel "^1.0.4" -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" + define-properties "^1.1.4" + es-abstract "^1.19.5" -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" + define-properties "^1.1.4" + es-abstract "^1.19.5" string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" @@ -11332,10 +10841,10 @@ strip-ansi@6.0.0: dependencies: ansi-regex "^5.0.0" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: +strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" @@ -11356,7 +10865,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: version "4.0.0" @@ -11374,20 +10883,13 @@ strip-comments@^1.0.2: strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -11410,11 +10912,6 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -11516,7 +11013,7 @@ tar@^6.0.2: temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== tempy@^0.3.0: version "0.3.0" @@ -11566,22 +11063,22 @@ terser-webpack-plugin@^1.4.3: worker-farm "^1.7.0" terser@^4.1.2, terser@^4.6.2, terser@^4.6.3: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + version "4.8.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" + integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== dependencies: commander "^2.20.0" source-map "~0.6.1" source-map-support "~0.5.12" terser@^5.3.4: - version "5.13.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.13.1.tgz#66332cdc5a01b04a224c9fad449fc1a18eaa1799" - integrity sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA== + version "5.14.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" + integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== dependencies: + "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" commander "^2.20.0" - source-map "~0.8.0-beta.0" source-map-support "~0.5.20" test-exclude@^6.0.0: @@ -11596,7 +11093,7 @@ test-exclude@^6.0.0: text-table@0.2.0, text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== throat@^5.0.0: version "5.0.0" @@ -11626,7 +11123,7 @@ timers-browserify@^2.0.4: timsort@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A== tmpl@1.0.5: version "1.0.5" @@ -11636,24 +11133,24 @@ tmpl@1.0.5: to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA== to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -11689,21 +11186,6 @@ tough-cookie@^4.0.0: punycode "^2.1.1" universalify "^0.1.2" -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - tr46@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" @@ -11711,29 +11193,17 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -"true-case-path@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" - integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== - dependencies: - glob "^7.1.2" - tryer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== ts-node@^10.7.0: - version "10.7.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.7.0.tgz#35d503d0fab3e2baa672a0e94f4b40653c2463f5" - integrity sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A== + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: - "@cspotcode/source-map-support" "0.7.0" + "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" @@ -11744,7 +11214,7 @@ ts-node@^10.7.0: create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" - v8-compile-cache-lib "^3.0.0" + v8-compile-cache-lib "^3.0.1" yn "3.1.1" ts-pnp@1.2.0, ts-pnp@^1.1.6: @@ -11782,19 +11252,7 @@ tsutils@^3.17.1, tsutils@^3.21.0: tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -11806,7 +11264,7 @@ type-check@^0.4.0, type-check@~0.4.0: type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" @@ -11815,11 +11273,6 @@ type-detect@4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" @@ -11873,14 +11326,14 @@ typedarray-to-buffer@^3.1.5: typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@^4.3.5: - version "4.6.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9" - integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== -unbox-primitive@^1.0.1: +unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== @@ -11936,12 +11389,12 @@ union-value@^1.0.0: uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA== uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + integrity sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ== unique-filename@^1.1.1: version "1.1.1" @@ -11960,7 +11413,7 @@ unique-slug@^2.0.0: unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + integrity sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg== dependencies: crypto-random-string "^1.0.0" @@ -11977,17 +11430,17 @@ universalify@^2.0.0: unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== unquote@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -11997,6 +11450,14 @@ upath@^1.1.1, upath@^1.1.2, upath@^1.2.0: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-browserslist-db@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -12007,7 +11468,7 @@ uri-js@^4.2.2: urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== url-loader@4.1.1: version "4.1.1" @@ -12018,7 +11479,7 @@ url-loader@4.1.1: mime-types "^2.1.27" schema-utils "^3.0.0" -url-parse@^1.4.3, url-parse@^1.5.10: +url-parse@^1.5.10: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== @@ -12029,15 +11490,15 @@ url-parse@^1.4.3, url-parse@^1.5.10: url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ== dependencies: punycode "1.3.2" querystring "0.2.0" -use-between@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/use-between/-/use-between-1.3.1.tgz#5a22ea7799d65cbe38329a8242b1ccb99161d8d3" - integrity sha512-/UZe/gxNNkJUTlmqpWyVH2yJsaEh2kKTyZwgHSiSk0X2/rxOKFb5qjGCqM71LxI50cWHuhwkVGl6m+UYUvDUNQ== +use-between@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/use-between/-/use-between-1.3.4.tgz#e1a4487458689d95f0921fab431f3acb989c39f2" + integrity sha512-jtLCBVeytJUjAc9+/r/0SREuNLyn3KO9VjvSi7eozeThPfnbOedKuH9qep/C+jgfJ9Ohx4bf714ri78Hev9BGA== use@^3.1.0: version "3.1.1" @@ -12047,7 +11508,7 @@ use@^3.1.0: util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util.promisify@1.0.0: version "1.0.0" @@ -12070,7 +11531,7 @@ util.promisify@~1.0.0: util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + integrity sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ== dependencies: inherits "2.0.1" @@ -12084,12 +11545,12 @@ util@^0.11.0: utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@^3.3.2: version "3.4.0" @@ -12101,7 +11562,7 @@ uuid@^8.3.0, uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache-lib@^3.0.0: +v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== @@ -12131,22 +11592,13 @@ validate-npm-package-license@^3.0.1: vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vendors@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -12205,11 +11657,6 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -12363,15 +11810,6 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-url@^8.0.0, whatwg-url@^8.5.0: version "8.7.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" @@ -12395,7 +11833,7 @@ which-boxed-primitive@^1.0.2: which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== which@^1.2.9, which@^1.3.1: version "1.3.1" @@ -12411,13 +11849,6 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -12611,7 +12042,7 @@ wrap-ansi@^6.2.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^3.0.0: version "3.0.3" @@ -12631,9 +12062,9 @@ ws@^6.2.1: async-limiter "~1.0.0" ws@^7.4.6: - version "7.5.7" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" - integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== xml-name-validator@^3.0.0: version "3.0.0" @@ -12686,11 +12117,6 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs@^13.3.2: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"