From 4ba243bc76f9b8dc901072d4e6dd5334177eb616 Mon Sep 17 00:00:00 2001 From: harry0000 Date: Fri, 14 Jul 2023 13:25:50 +0900 Subject: [PATCH 1/8] Update dependencies --- package-lock.json | 373 ++++++++++++++++++++++++---------------------- package.json | 32 ++-- 2 files changed, 208 insertions(+), 197 deletions(-) diff --git a/package-lock.json b/package-lock.json index e73140a2..358b0ded 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,42 +9,42 @@ "version": "1.2.12", "license": "UNLICENSED", "dependencies": { - "@emotion/react": "^11.11.0", + "@emotion/react": "^11.11.1", "@types/gtag.js": "0.0.12", - "@types/node": "^18.16.16", - "@types/react": "^18.2.7", - "@types/react-dom": "^18.2.4", + "@types/node": "^18.16.19", + "@types/react": "^18.2.14", + "@types/react-dom": "^18.2.7", "@types/react-router-dom": "^5.3.3", "@types/recoil": "0.0.9", "bootstrap": "^4.6.2", "fast-deep-equal": "^3.1.3", - "i18next": "^22.5.0", - "rdndmb-html5-to-touch": "^8.0.0", + "i18next": "^22.5.1", + "rdndmb-html5-to-touch": "^8.0.1", "react": "^18.2.0", "react-bootstrap": "^1.6.7", "react-dnd": "^16.0.1", "react-dnd-html5-backend": "^16.0.1", - "react-dnd-multi-backend": "^8.0.0", - "react-dnd-preview": "^8.0.0", + "react-dnd-multi-backend": "^8.0.1", + "react-dnd-preview": "^8.0.1", "react-dnd-touch-backend": "^16.0.1", "react-dom": "^18.2.0", "react-i18next": "^12.3.1", - "react-router-dom": "^5.3.3", + "react-router-dom": "^5.3.4", "react-scripts": "^5.0.1", - "react-virtuoso": "^4.3.8", + "react-virtuoso": "^4.4.0", "recoil": "^0.7.7" }, "devDependencies": { "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.4.3", - "@types/jest": "^29.5.2", - "@typescript-eslint/eslint-plugin": "^5.59.8", - "@typescript-eslint/parser": "^5.59.8", - "eslint": "^8.41.0", + "@types/jest": "^29.5.3", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "@typescript-eslint/parser": "^5.62.0", + "eslint": "^8.44.0", "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", - "typescript": "^5.0.4" + "typescript": "^5.1.6" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -2371,9 +2371,9 @@ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" }, "node_modules/@emotion/react": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.0.tgz", - "integrity": "sha512-ZSK3ZJsNkwfjT3JpDAWJZlrGD81Z3ytNDsxw1LKq1o+xkmO5pnWfr6gmCC8gHEFf3nSSX/09YrG67jybNPxSUw==", + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", @@ -2456,13 +2456,13 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", + "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.2", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -2478,17 +2478,17 @@ } }, "node_modules/@eslint/js": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", - "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", + "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -4108,9 +4108,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.2.tgz", - "integrity": "sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg==", + "version": "29.5.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.3.tgz", + "integrity": "sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -4165,9 +4165,9 @@ "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "node_modules/@types/node": { - "version": "18.16.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.16.tgz", - "integrity": "sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==" + "version": "18.16.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.19.tgz", + "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -4200,9 +4200,9 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "node_modules/@types/react": { - "version": "18.2.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.7.tgz", - "integrity": "sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw==", + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz", + "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4210,9 +4210,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.4", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", - "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", + "version": "18.2.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", + "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", "dependencies": { "@types/react": "*" } @@ -4347,16 +4347,16 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.8.tgz", - "integrity": "sha512-JDMOmhXteJ4WVKOiHXGCoB96ADWg9q7efPWHRViT/f09bA8XOMLAVHHju3l0MkZnG1izaWXYmgvQcUjTRcpShQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dependencies": { "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.8", - "@typescript-eslint/type-utils": "5.59.8", - "@typescript-eslint/utils": "5.59.8", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", "semver": "^7.3.7", @@ -4380,12 +4380,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.8.tgz", - "integrity": "sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dependencies": { - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/visitor-keys": "5.59.8" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4396,9 +4396,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.8.tgz", - "integrity": "sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4408,12 +4408,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.8.tgz", - "integrity": "sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dependencies": { - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/visitor-keys": "5.59.8", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -4434,16 +4434,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.8.tgz", - "integrity": "sha512-Tr65630KysnNn9f9G7ROF3w1b5/7f6QVCJ+WK9nhIocWmx9F+TmCAcglF26Vm7z8KCTwoKcNEBZrhlklla3CKg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.8", - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/typescript-estree": "5.59.8", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -4459,11 +4459,11 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.8.tgz", - "integrity": "sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dependencies": { - "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -4493,13 +4493,13 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.8.tgz", - "integrity": "sha512-AnR19RjJcpjoeGojmwZtCwBX/RidqDZtzcbG3xHrmz0aHHoOcbWnpDllenRDmDvsV0RQ6+tbb09/kyc+UT9Orw==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dependencies": { - "@typescript-eslint/scope-manager": "5.59.8", - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/typescript-estree": "5.59.8", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "debug": "^4.3.4" }, "engines": { @@ -4519,12 +4519,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.8.tgz", - "integrity": "sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dependencies": { - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/visitor-keys": "5.59.8" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4535,9 +4535,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.8.tgz", - "integrity": "sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4547,12 +4547,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.8.tgz", - "integrity": "sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dependencies": { - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/visitor-keys": "5.59.8", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -4573,11 +4573,11 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.8.tgz", - "integrity": "sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dependencies": { - "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -4605,12 +4605,12 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.8.tgz", - "integrity": "sha512-+5M518uEIHFBy3FnyqZUF3BMP+AXnYn4oyH8RF012+e7/msMY98FhGL5SrN29NQ9xDgvqCgYnsOiKp1VjZ/fpA==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dependencies": { - "@typescript-eslint/typescript-estree": "5.59.8", - "@typescript-eslint/utils": "5.59.8", + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -4631,12 +4631,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.8.tgz", - "integrity": "sha512-/w08ndCYI8gxGf+9zKf1vtx/16y8MHrZs5/tnjHhMLNSixuNcJavSX4wAiPf4aS5x41Es9YPCn44MIe4cxIlig==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dependencies": { - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/visitor-keys": "5.59.8" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4647,9 +4647,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.8.tgz", - "integrity": "sha512-+uWuOhBTj/L6awoWIg0BlWy0u9TyFpCHrAuQ5bNfxDaZ1Ppb3mx6tUigc74LHcbHpOHuOTOJrBoAnhdHdaea1w==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4659,12 +4659,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.8.tgz", - "integrity": "sha512-Jy/lPSDJGNow14vYu6IrW790p7HIf/SOV1Bb6lZ7NUkLc2iB2Z9elESmsaUtLw8kVqogSbtLH9tut5GCX1RLDg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dependencies": { - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/visitor-keys": "5.59.8", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -4685,16 +4685,16 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.8.tgz", - "integrity": "sha512-Tr65630KysnNn9f9G7ROF3w1b5/7f6QVCJ+WK9nhIocWmx9F+TmCAcglF26Vm7z8KCTwoKcNEBZrhlklla3CKg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.8", - "@typescript-eslint/types": "5.59.8", - "@typescript-eslint/typescript-estree": "5.59.8", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -4710,11 +4710,11 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.8", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.8.tgz", - "integrity": "sha512-pJhi2ms0x0xgloT7xYabil3SGGlojNNKjK/q6dB3Ey0uJLMjK2UDGJvHieiyJVW/7C3KI+Z4Q3pEHkm4ejA+xQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dependencies": { - "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -4963,9 +4963,9 @@ } }, "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "bin": { "acorn": "bin/acorn" }, @@ -7012,9 +7012,13 @@ } }, "node_modules/dnd-multi-backend": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/dnd-multi-backend/-/dnd-multi-backend-8.0.0.tgz", - "integrity": "sha512-5iFo8USv3+q0kVRTm9zsuyi/5GRZEA6fDZKr9ZpmV5pUdHmL9ktL/2c2Anw8T2tnpDDw8FM3k2cvqyMAKhWd/w==" + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/dnd-multi-backend/-/dnd-multi-backend-8.0.1.tgz", + "integrity": "sha512-2HLUzxU32ol+COX8klzwy41mA3wOPuSH+08vGmN9WfyrlM3cMcRWFYRStUJkR3obGVUUuQxEtg0m50VxMCHafA==", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + } }, "node_modules/dns-equal": { "version": "1.0.0", @@ -7470,15 +7474,15 @@ } }, "node_modules/eslint": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", - "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", + "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.41.0", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", + "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", @@ -7489,7 +7493,7 @@ "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.0", "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", + "espree": "^9.6.0", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -7509,7 +7513,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" @@ -7658,9 +7662,9 @@ } }, "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -7718,9 +7722,9 @@ } }, "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -7792,9 +7796,9 @@ } }, "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -7960,11 +7964,11 @@ } }, "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", + "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" }, @@ -8815,11 +8819,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" - }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -9192,9 +9191,9 @@ } }, "node_modules/i18next": { - "version": "22.5.0", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.0.tgz", - "integrity": "sha512-sqWuJFj+wJAKQP2qBQ+b7STzxZNUmnSxrehBCCj9vDOW9RDYPfqCaK1Hbh2frNYQuPziz6O2CGoJPwtzY3vAYA==", + "version": "22.5.1", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-22.5.1.tgz", + "integrity": "sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA==", "funding": [ { "type": "individual", @@ -9787,9 +9786,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -12062,9 +12061,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -14403,13 +14402,17 @@ } }, "node_modules/rdndmb-html5-to-touch": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/rdndmb-html5-to-touch/-/rdndmb-html5-to-touch-8.0.0.tgz", - "integrity": "sha512-pBWigLQKJMD4hV+dwcEqcDB4dgGD7LD2ZCtT2gi8Yw4cef2pmp/ZvPZpYVxpAesJXOIDNFhmtYzZIsf9noKHmQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/rdndmb-html5-to-touch/-/rdndmb-html5-to-touch-8.0.1.tgz", + "integrity": "sha512-p2va3HLxCMbSeuD4o8z+iJAetxmbzWgrI1x1PDvt2A0QMWRUt7JZ9jGCi+6a/00NVDAxfxuc58euKR91UMo4Lg==", "dependencies": { - "dnd-multi-backend": "^8.0.0", + "dnd-multi-backend": "^8.0.1", "react-dnd-html5-backend": "^16.0.1", "react-dnd-touch-backend": "^16.0.1" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" } }, "node_modules/react": { @@ -14547,12 +14550,16 @@ } }, "node_modules/react-dnd-multi-backend": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/react-dnd-multi-backend/-/react-dnd-multi-backend-8.0.0.tgz", - "integrity": "sha512-sYJmGUWRJsTa4sF/bxFu4tF/KSk668vf1TWbDqGdpvR9ltik/lBBqgihV3KLVtRRWytR/8wJCd9K5slj2Ve1tg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/react-dnd-multi-backend/-/react-dnd-multi-backend-8.0.1.tgz", + "integrity": "sha512-+/7mFkWk4HIpQsd4d8lKB8aStafv9wgpvbkQrPWF4JeTA1j2IPAdPTOiHI5bvpyoLA5BGD02u8cgxtY/gZQpjg==", "dependencies": { - "dnd-multi-backend": "^8.0.0", - "react-dnd-preview": "^8.0.0" + "dnd-multi-backend": "^8.0.1", + "react-dnd-preview": "^8.0.1" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" }, "peerDependencies": { "react": "^16.14.0 || ^17.0.2 || ^18.0.0", @@ -14560,9 +14567,13 @@ } }, "node_modules/react-dnd-preview": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/react-dnd-preview/-/react-dnd-preview-8.0.0.tgz", - "integrity": "sha512-pKDpJxaGya00tqPqswGHN6d1lmXe26gGkiXSb9xsDGEXMS+efjz4YAid9tKyaKNWJMU8hJOcUmJWTQpdi22P2g==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/react-dnd-preview/-/react-dnd-preview-8.0.1.tgz", + "integrity": "sha512-CsQwvWXLXGN9DoRzHC79DbCF42AXJdoUDMxnIF7TvA/xE6Hm+cVl6kPQIYz1UL755/JNSD2/WHuILuU40k29rw==", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/LouisBrunner" + }, "peerDependencies": { "react": "^16.14.0 || ^17.0.2 || ^18.0.0", "react-dnd": "^16.0.1" @@ -14776,9 +14787,9 @@ } }, "node_modules/react-virtuoso": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.3.8.tgz", - "integrity": "sha512-hoZj8Dl1R9fYqtUwA5LjCii1djO4ZNtoYkYsR52ZjdJzdXh2hec1IQ2O+1MZNjLTb4v8ff3hbt34StiHTVDdlg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.4.0.tgz", + "integrity": "sha512-7hVk43DN9Sx6czpclTpPnB2uzDmCaioSoTSN8lRv4mMF7UL5jmfc58UpjRrGoJavzVn1VBjHLLj6RHBLsS+N5Q==", "engines": { "node": ">=10" }, @@ -16599,15 +16610,15 @@ } }, "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12.20" + "node": ">=14.17" } }, "node_modules/unbox-primitive": { diff --git a/package.json b/package.json index 1e0fac7f..74f45a80 100644 --- a/package.json +++ b/package.json @@ -39,44 +39,44 @@ ] }, "dependencies": { - "@emotion/react": "^11.11.0", + "@emotion/react": "^11.11.1", "@types/gtag.js": "0.0.12", - "@types/node": "^18.16.16", - "@types/react": "^18.2.7", - "@types/react-dom": "^18.2.4", + "@types/node": "^18.16.19", + "@types/react": "^18.2.14", + "@types/react-dom": "^18.2.7", "@types/react-router-dom": "^5.3.3", "@types/recoil": "0.0.9", "bootstrap": "^4.6.2", "fast-deep-equal": "^3.1.3", - "i18next": "^22.5.0", - "rdndmb-html5-to-touch": "^8.0.0", + "i18next": "^22.5.1", + "rdndmb-html5-to-touch": "^8.0.1", "react": "^18.2.0", "react-bootstrap": "^1.6.7", "react-dnd": "^16.0.1", "react-dnd-html5-backend": "^16.0.1", - "react-dnd-multi-backend": "^8.0.0", - "react-dnd-preview": "^8.0.0", + "react-dnd-multi-backend": "^8.0.1", + "react-dnd-preview": "^8.0.1", "react-dnd-touch-backend": "^16.0.1", "react-dom": "^18.2.0", "react-i18next": "^12.3.1", - "react-router-dom": "^5.3.3", + "react-router-dom": "^5.3.4", "react-scripts": "^5.0.1", - "react-virtuoso": "^4.3.8", + "react-virtuoso": "^4.4.0", "recoil": "^0.7.7" }, "devDependencies": { "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.4.3", - "@types/jest": "^29.5.2", - "@typescript-eslint/eslint-plugin": "^5.59.8", - "@typescript-eslint/parser": "^5.59.8", - "eslint": "^8.41.0", + "@types/jest": "^29.5.3", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "@typescript-eslint/parser": "^5.62.0", + "eslint": "^8.44.0", "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", - "typescript": "^5.0.4" + "typescript": "^5.1.6" }, "overrides": { - "typescript": "^5.0.4" + "typescript": "^5.1.6" } } From a32ba8695a5c70fd8c83f09bfffc90310efc7931 Mon Sep 17 00:00:00 2001 From: harry0000 Date: Thu, 13 Jul 2023 20:30:55 +0900 Subject: [PATCH 2/8] Fix units of the BioroidUnder145cmTall alias - Add P-18 Sylphid to BioroidUnder145cmTall alias --- src/domain/UnitAlias.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/domain/UnitAlias.ts b/src/domain/UnitAlias.ts index 20df3262..6e32bb65 100644 --- a/src/domain/UnitAlias.ts +++ b/src/domain/UnitAlias.ts @@ -34,7 +34,7 @@ export const UnitAlias = { export type UnitAlias = typeof UnitAlias[keyof typeof UnitAlias] export const unitNumbersForAlias: { [key in UnitAlias]: ReadonlySet } = { - [UnitAlias.BioroidUnder145cmTall]: new Set([9, 22, 26, 37, 51, 76, 84, 90, 102, 108, 118, 123, 141, 161, 177, 188, 206, 230]), + [UnitAlias.BioroidUnder145cmTall]: new Set([9, 22, 26, 37, 51, 55, 76, 84, 90, 102, 108, 118, 123, 141, 161, 177, 188, 206, 230]), [UnitAlias.ElectricActive]: new Set([6, 11, 75, 84, 113, 115, 132, 139, 174, 179, 201, 221, 230, 231, 235]), [UnitAlias.ArtilleryTypeActive]: new Set([22, 51, 202]), [UnitAlias.Squad21]: new Set([2, 3, 85, 92, 118, 121, 187]), From a369b4cb9ad9b20526318931c3baf0bb87b252d8 Mon Sep 17 00:00:00 2001 From: harry0000 Date: Thu, 13 Jul 2023 20:32:24 +0900 Subject: [PATCH 3/8] Add Vargr --- public/unit_icon/156.webp | Bin 0 -> 8510 bytes .../skill/SkillEffectConditionView.tsx | 12 +- src/data/unitBasicData.ts | 7 + src/data/unitCoreLinkBonusData.ts | 10 ++ src/data/unitEquipmentSlotData.ts | 1 + src/data/unitSkillData.ts | 120 ++++++++++++++++++ src/data/unitStatusData.ts | 21 +++ src/domain/UnitAlias.ts | 2 +- src/domain/UnitCoreLinkBonusData.ts | 2 +- .../skill/SkillEffectActivationCondition.ts | 8 +- src/domain/skill/SkillEffectTag.ts | 4 + src/i18n/ja/effect.json | 4 + src/i18n/ja/skill.json | 11 ++ src/i18n/ja/unit.json | 1 + 14 files changed, 194 insertions(+), 9 deletions(-) create mode 100644 public/unit_icon/156.webp diff --git a/public/unit_icon/156.webp b/public/unit_icon/156.webp new file mode 100644 index 0000000000000000000000000000000000000000..a193e62570bdfdf9ee3034626603b4e7f8686d49 GIT binary patch literal 8510 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 sG2EYKOdBmC;q6t@d%7A+4zJ(<0EZT4RR910 literal 0 HcmV?d00001 diff --git a/src/component/skill/SkillEffectConditionView.tsx b/src/component/skill/SkillEffectConditionView.tsx index 66f66ee6..f4c5898b 100644 --- a/src/component/skill/SkillEffectConditionView.tsx +++ b/src/component/skill/SkillEffectConditionView.tsx @@ -452,11 +452,13 @@ const TriggerView: React.FC<{ { condition.round ? - 'at' in condition.round ? - t('effect:condition.trigger.round.at', { round: condition.round.at }) : - 'from' in condition.round ? - t('effect:condition.trigger.round.from', { round: condition.round.from }) : - t('effect:condition.trigger.round.until', { round: condition.round.until }) : + typeof condition.round === 'string' ? + t(`effect:condition.trigger.start_${condition.round}_round`) : + 'at' in condition.round ? + t('effect:condition.trigger.round.at', { round: condition.round.at }) : + 'from' in condition.round ? + t('effect:condition.trigger.round.from', { round: condition.round.from }) : + t('effect:condition.trigger.round.until', { round: condition.round.until }) : t('effect:condition.trigger.start_round') } diff --git a/src/data/unitBasicData.ts b/src/data/unitBasicData.ts index ffa89016..05b01cf0 100644 --- a/src/data/unitBasicData.ts +++ b/src/data/unitBasicData.ts @@ -860,6 +860,13 @@ export const unitBasicData = { type: 'light', role: 'attacker' }, + 156: { + no: 156, + kind: 'bioroid', + rank: 'ss', + type: 'heavy', + role: 'attacker' + }, 161: { no: 161, kind: 'bioroid', diff --git a/src/data/unitCoreLinkBonusData.ts b/src/data/unitCoreLinkBonusData.ts index 0c4856aa..66c7cef5 100644 --- a/src/data/unitCoreLinkBonusData.ts +++ b/src/data/unitCoreLinkBonusData.ts @@ -1314,6 +1314,16 @@ export const unitCoreLinkBonusData: UnitCoreLinkBonusData = { { spd_up: { microValue: 100000 } } ] }, + 156: { + specific_link_bonus: { def_up: { milliPercentage: 3_000 } }, + full_link_bonus: [ + { sortie_cost: { milliPercentage: 25000 } }, + { cri_up: { milliPercentage: 30000 } }, + { range_up: { value: 2 } }, + { buff_debuff_lv_up: { value: 2 } }, + { spd_up: { microValue: 100000 } } + ] + }, 161: { specific_link_bonus: { acc_up: { milliPercentage: 7000 } }, full_link_bonus: [ diff --git a/src/data/unitEquipmentSlotData.ts b/src/data/unitEquipmentSlotData.ts index 19bcfa80..8446c320 100644 --- a/src/data/unitEquipmentSlotData.ts +++ b/src/data/unitEquipmentSlotData.ts @@ -130,6 +130,7 @@ export const unitEquipmentSlotData = { 152: { chip1: 20, chip2: 40, os: 60, gear: 80 }, 154: { chip1: 60, chip2: 80, os: 40, gear: 20 }, 155: { chip1: 20, chip2: 40, os: 60, gear: 80 }, + 156: { chip1: 20, chip2: 80, os: 40, gear: 60 }, 161: { chip1: 60, chip2: 80, os: 40, gear: 20 }, 162: { chip1: 60, chip2: 80, os: 40, gear: 20 }, 165: { chip1: 40, chip2: 60, os: 80, gear: 20 }, diff --git a/src/data/unitSkillData.ts b/src/data/unitSkillData.ts index a4b37fe5..4c40c26a 100644 --- a/src/data/unitSkillData.ts +++ b/src/data/unitSkillData.ts @@ -13743,6 +13743,126 @@ export const unitSkillData: UnitSkillData = { }] }] }, + 156: { + no: 156, + active: [{ + damage_deal: { + base: { milliPercentage: 172000 }, + per_lv_up: { milliPercentage: 13300 } + }, + range: 2, + cost: 5, + area: 'single', + effects: [{ + conditions: [{ trigger: 'hit', state: { self: [{ tagged: 'skoll' }, { tagged: 'solagarmr' }] } }], + details: { self: { atk_up: { base: { milliPercentage: 15000 }, per_lv_up: { milliPercentage: 1000 }, term: { for_rounds: 3 }, max_stack: 3 } } } + }, { + conditions: [{ trigger: 'hit', state: { self: [{ tagged: 'hati' }, { tagged: 'managarmr' }] } }], + details: { self: { damage_multiplier_up: { base: { milliPercentage: 15000 }, per_lv_up: { milliPercentage: 1000 }, term: { for_rounds: 3 }, max_stack: 3 } } } + }] + }, { + damage_deal: { + base: { milliPercentage: 199000 }, + per_lv_up: { milliPercentage: 19900 } + }, + range: 2, + cost: 10, + area: 'diagonal', + effects: [{ + details: { self: { ignore_protect: {} } } + }, { + conditions: [{ trigger: 'hit', state: { self: [{ tagged: 'skoll' }, { tagged: 'solagarmr' }] } }], + target: { kind: 'enemy' }, + details: { target: { atk_down: { base: { milliPercentage: 15000 }, per_lv_up: { milliPercentage: 1000 }, term: { for_rounds: 3 }, max_stack: 3 } } } + }, { + conditions: [{ trigger: 'hit', state: { self: [{ tagged: 'hati' }, { tagged: 'managarmr' }] } }], + target: { kind: 'enemy' }, + details: { target: { damage_multiplier_down: { base: { milliPercentage: 15000 }, per_lv_up: { milliPercentage: 1000 }, term: { for_rounds: 3 }, max_stack: 3 } } } + }] + }], + passive: [{ + area: 'self', + effects: [{ + conditions: [{ trigger: 'start_wave' }], + details: { + self: { + counterattack: { base: { milliPercentage: 60000 }, per_lv_up: { milliPercentage: 5000 }, term: { for_rounds: 2 } }, + barrier: { base: { value: 1000 }, per_lv_up: { value: 100 }, term: { for_rounds: 2 } } + } + } + }, { + conditions: [{ trigger: 'use_active_2' }], + details: { + self: { + counterattack: { base: { milliPercentage: 60000 }, per_lv_up: { milliPercentage: 5000 }, term: { for_rounds: 3 } }, + barrier: { base: { value: 1000 }, per_lv_up: { value: 100 }, term: { for_rounds: 3 } } + } + } + }, { + conditions: [{ trigger: 'start_round', state: { self: [{ affected: 'barrier' }] } }], + details: { self: { marked: { term: { for_rounds: 1 } } } } + }, { + conditions: [{ trigger: 'be_hit', state: { self: [{ not_affected: ['barrier'] }] } }], + details: { self: { effect_removal: { effect: 'marked', term: 'immediate' } } } + }, { + conditions: [{ trigger: 'start_round', state: { self: [{ equipped: 'lunch_box' }] } }], + details: { + self: { + atk_up: { milliPercentage: 5000, term: { for_rounds: 1 } }, + spd_up: { milliPercentage: 5000, term: { for_rounds: 1 } } + } + } + }] + }, { + area: 'self', + effects: [{ + conditions: [{ trigger: 'start_round', round: 'odd', state: { self: [{ not_tagged: 'solagarmr' }] } }], + details: { self: { re_attack: { tag: 'skoll', term: { for_rounds: 1 } } } } + }, { + conditions: [{ trigger: 'start_round', round: 'even', state: { self: [{ not_tagged: 'managarmr' }] } }], + details: { self: { ignore_protect: { tag: 'hati', term: { for_rounds: 1 } } } } + }, { + conditions: [{ trigger: 'kill' }], + details: { + self: { + re_attack: { tag: 'solagarmr', term: { for_rounds: 2 }, max_stack: 1 }, + ignore_protect: { tag: 'managarmr', term: { for_rounds: 2 }, max_stack: 1 } + } + } + }, { + conditions: [{ trigger: 'hit', state: { self: [{ tagged: ['solagarmr', 'managarmr'] }] } }], + details: { self: { additional_damage: { base: { milliPercentage: 25000 }, per_lv_up: { milliPercentage: 2500 }, term: 'immediate' } } } + }] + }, { + area: 'self', + effects: [{ + conditions: [{ trigger: 'start_round' }], + details: { + self: { + cri_up: { base: { milliPercentage: 10000 }, per_lv_up: { milliPercentage: 1000 }, term: { for_rounds: 1 } }, + status_resist_up: { base: { milliPercentage: 20000 }, per_lv_up: { milliPercentage: 2500 }, term: { for_rounds: 1 } } + } + } + }, { + conditions: [{ trigger: 'hit' }], + target: { kind: 'enemy' }, + details: { + target: { + def_down: { base: { milliPercentage: 10000 }, per_lv_up: { milliPercentage: 1000 }, term: { for_rounds: 2 } }, + ap_down: { base: { microValue: 200000 }, per_lv_up: { microValue: 20000 }, term: 'immediate' } + } + } + }, { + conditions: [{ trigger: 'hit', state: { target: [{ status_greater_than_self: { status: 'def' } }] } }], + target: { kind: 'enemy' }, + details: { target: { def_down: { base: { milliPercentage: 10000 }, per_lv_up: { milliPercentage: 1000 }, term: { for_rounds: 2 } } } } + }, { + conditions: [{ trigger: 'hit', state: { target: [{ status_greater_than_self: { status: 'spd' } }] } }], + target: { kind: 'enemy' }, + details: { target: { ap_down: { base: { microValue: 200000 }, per_lv_up: { microValue: 20000 }, term: 'immediate' } } } + }] + }] + }, 161: { no: 161, active: [{ diff --git a/src/data/unitStatusData.ts b/src/data/unitStatusData.ts index 75898a46..8a77e14e 100644 --- a/src/data/unitStatusData.ts +++ b/src/data/unitStatusData.ts @@ -2752,6 +2752,27 @@ export const unitStatusData: UnitStatusData = { iceResist: { milliPercentage: -25000 }, electricResist: { milliPercentage: 0 } }, + 156: { + hp: { + 1: { value: 371 }, + 90: { value: 3290 } + }, + atk: { + 1: { milliValue: 77000 }, + 90: { milliValue: 967000 } + }, + def: { + 1: { milliValue: 27000 }, + 90: { milliValue: 365000 } + }, + acc: { milliPercentage: 125000 }, + eva: { milliPercentage: 0 }, + cri: { milliPercentage: 10000 }, + spd: { microValue: 3600000 }, + fireResist: { milliPercentage: 15000 }, + iceResist: { milliPercentage: 15000 }, + electricResist: { milliPercentage: 15000 } + }, 161: { hp: { 1: { value: 198 }, diff --git a/src/domain/UnitAlias.ts b/src/domain/UnitAlias.ts index 6e32bb65..42674391 100644 --- a/src/domain/UnitAlias.ts +++ b/src/domain/UnitAlias.ts @@ -59,7 +59,7 @@ export const unitNumbersForAlias: { [key in UnitAlias]: ReadonlySet [UnitAlias.MagicalGirl]: new Set([123, 127]), [UnitAlias.KouheiChurch]: new Set([126, 138, 139, 140, 236]), [UnitAlias.Strikers]: new Set([149, 150, 151, 152]), - [UnitAlias.EmpressHound]: new Set([154, 155]), + [UnitAlias.EmpressHound]: new Set([154, 155, 156]), [UnitAlias.SmartEnjoy]: new Set([205, 206]), [UnitAlias.SpartanSeries]: new Set([215, 216, 217]), [UnitAlias.Mermaid]: new Set([250, 251, 252, 253]) diff --git a/src/domain/UnitCoreLinkBonusData.ts b/src/domain/UnitCoreLinkBonusData.ts index 97d23760..af8f8527 100644 --- a/src/domain/UnitCoreLinkBonusData.ts +++ b/src/domain/UnitCoreLinkBonusData.ts @@ -56,7 +56,7 @@ export type DamageMultiplierBonus = Readonly<{ }> export type Range1UpBonus = Readonly<{ - [Effect.RangeUp]: { [key in keyof IntegerValue]: 1 } + [Effect.RangeUp]: { [key in keyof IntegerValue]: 1 | 2 } }> export type AccUpBonus = Readonly<{ diff --git a/src/domain/skill/SkillEffectActivationCondition.ts b/src/domain/skill/SkillEffectActivationCondition.ts index f41915dd..7aaf3781 100644 --- a/src/domain/skill/SkillEffectActivationCondition.ts +++ b/src/domain/skill/SkillEffectActivationCondition.ts @@ -222,11 +222,15 @@ export type ActivationSelfState = [EffectActivationState.NotEquipped]?: ReadonlyArray } & { - [EffectActivationState.Tagged]?: SkillEffectTag + [EffectActivationState.Tagged]?: + SkillEffectTag | + // The following is AND condition + readonly ['solagarmr', 'managarmr'] } & { [EffectActivationState.NotAffected]?: // The following are AND conditions + readonly [typeof Effect.Barrier] | readonly [typeof Effect.Counterattack] | readonly [typeof Effect.Reconnaissance] | readonly [typeof Effect.FollowUpAttack] | @@ -396,7 +400,7 @@ export type SkillEffectActivationState = SelfSkillEffectActivationState | Target export type SkillEffectActivationTrigger = { trigger: typeof EffectTrigger.StartRound, - round?: { at: 1 | 2 | 3 | 4 } | { from: 2 | 3 | 5 } | { until: 1 | 2 | 3 | 4 } + round?: 'odd' | 'even' | { at: 1 | 2 | 3 | 4 } | { from: 2 | 3 | 5 } | { until: 1 | 2 | 3 | 4 } } | { trigger: typeof EffectTrigger.HitActive1, round?: 'odd' diff --git a/src/domain/skill/SkillEffectTag.ts b/src/domain/skill/SkillEffectTag.ts index 2efa2b90..e286406b 100644 --- a/src/domain/skill/SkillEffectTag.ts +++ b/src/domain/skill/SkillEffectTag.ts @@ -126,6 +126,10 @@ export type SkillEffectTag = 'take_down_a_peg_or_two' | 'separation_anxiety' | 'energy_focusing' | + 'skoll' | + 'hati' | + 'solagarmr' | + 'managarmr' | 'mimesis' | 'great_antarctica_adventure' | 'pre_cooking' | diff --git a/src/i18n/ja/effect.json b/src/i18n/ja/effect.json index 0801dd4b..f330b8b9 100644 --- a/src/i18n/ja/effect.json +++ b/src/i18n/ja/effect.json @@ -204,6 +204,10 @@ "take_down_a_peg_or_two": "一発お見舞い", "separation_anxiety": "分離不安症", "energy_focusing": "エネルギー集束", + "skoll": "スコール", + "hati": "ハティ", + "solagarmr": "ソラガルム", + "managarmr": "マナガルム", "mimesis": "擬態", "great_antarctica_adventure": "南極大冒険", "pre_cooking": "下準備", diff --git a/src/i18n/ja/skill.json b/src/i18n/ja/skill.json index 5910f31c..53ac88c2 100644 --- a/src/i18n/ja/skill.json +++ b/src/i18n/ja/skill.json @@ -1483,6 +1483,17 @@ "3": "あったかくていいね~" } }, + "156": { + "active": { + "1": "フローズビトニル", + "2": "ラグナロク" + }, + "passive": { + "1": "忠実な番犬", + "2": "盈虧", + "3": "効率的な変数遮断" + } + }, "161": { "active": { "1": "アイスエイジ", diff --git a/src/i18n/ja/unit.json b/src/i18n/ja/unit.json index effa9207..ebe4e62a 100644 --- a/src/i18n/ja/unit.json +++ b/src/i18n/ja/unit.json @@ -132,6 +132,7 @@ "152": "X-02 ウル", "154": "薔花", "155": "チョナ", + "156": "ワーグ", "161": "エンプレス", "162": "セティ", "165": "アウローラ", From e1c5ce2c4f60f4d6e71059905a049c7f8d7a4a92 Mon Sep 17 00:00:00 2001 From: harry0000 Date: Fri, 14 Jul 2023 13:11:05 +0900 Subject: [PATCH 4/8] Add rank up - Add SS rank up for AA-7 Impet - Add SS rank up for C-77 Red Hood --- src/data/unitRankUpBonusData.ts | 17 ++++++ src/data/unitSkillData.ts | 52 +++++++++++++++++++ .../skill/SkillEffectActivationCondition.ts | 3 ++ .../squad/simulator/ConditionMatcher.ts | 6 ++- src/i18n/ja/effect.json | 1 + src/i18n/ja/skill.json | 6 ++- 6 files changed, 81 insertions(+), 4 deletions(-) diff --git a/src/data/unitRankUpBonusData.ts b/src/data/unitRankUpBonusData.ts index 34e33d8f..65d0e0a6 100644 --- a/src/data/unitRankUpBonusData.ts +++ b/src/data/unitRankUpBonusData.ts @@ -142,6 +142,12 @@ export const unitRankUpBonusData = { def_up: { milliValue: 5000 }, acc_up: { milliPercentage: 5000 }, spd_up: { microValue: 20000 } + }, + ss: { + hp_up: { value: 60 }, + atk_up: { milliValue: 70000 }, + cri_up: { milliPercentage: 14000 }, + spd_up: { microValue: 40000 } } }, 25: { @@ -213,6 +219,17 @@ export const unitRankUpBonusData = { spd_up: { microValue: 20000 } } }, + 29: { + ss: { + hp_up: { value: 140 }, + atk_up: { milliValue: 100000 }, + def_up: { milliValue: 20000 }, + cri_up: { milliPercentage: 10000 }, + acc_up: { milliPercentage: 15000 }, + eva_up: { milliPercentage: 5000 }, + spd_up: { microValue: 100000 } + } + }, 30: { s: { hp_up: { value: 100 }, diff --git a/src/data/unitSkillData.ts b/src/data/unitSkillData.ts index 4c40c26a..123aa99c 100644 --- a/src/data/unitSkillData.ts +++ b/src/data/unitSkillData.ts @@ -2063,6 +2063,31 @@ export const unitSkillData: UnitSkillData = { target: { spd_up: { base: { milliPercentage: 5000 }, per_lv_up: { milliPercentage: 500 }, term: { for_rounds: 1 } } } } }] + }, { + area: 'fixed_all', + effects: [{ + conditions: [{ trigger: 'start_round' }], + details: { self: { re_attack: { term: { for_rounds: 1 } } } } + }, { + conditions: [{ trigger: 'start_round', state: { target: [{ affected: 're_attack' }, { affected: 'follow_up_attack' }] } }], + target: { kind: 'ally' }, + details: { + target: { + atk_up: { base: { milliPercentage: 10000 }, per_lv_up: { milliPercentage: 1000 }, term: { for_rounds: 1 } }, + acc_up: { base: { milliPercentage: 20000 }, per_lv_up: { milliPercentage: 2000 }, term: { for_rounds: 1 } } + } + } + }, { + conditions: [{ trigger: 'start_round', state: { target: [{ affected: 're_attack' }, { affected: 'follow_up_attack' }] } }], + target: { kind: 'ally', conditions: ['flying', 'steel_line'] }, + details: { + target: { + atk_up: { base: { milliPercentage: 5000 }, per_lv_up: { milliPercentage: 500 }, term: { for_rounds: 1 } }, + acc_up: { base: { milliPercentage: 10000 }, per_lv_up: { milliPercentage: 1000 }, term: { for_rounds: 1 } }, + damage_multiplier_up: { base: { milliPercentage: 20000 }, per_lv_up: { milliPercentage: 2000 }, term: { for_rounds: 1 } } + } + } + }] }] }, 25: { @@ -2587,6 +2612,33 @@ export const unitSkillData: UnitSkillData = { conditions: [{ trigger: 'start_round', state: { squad: { in_squad: 'steel_line_excluding_officer_ranks' } } }], details: { self: { spd_up: { base: { milliPercentage: 10000 }, per_lv_up: { milliPercentage: 1000 }, term: { for_rounds: 1 } } } } }] + }, { + area: 'fixed_all', + effects: [{ + conditions: [{ trigger: 'start_wave' }], + scale_factor: { per_units: { type: 'squad' } }, + target: { kind: 'ally' }, + details: { + self: { atk_up: { base: { milliPercentage: 3000 }, per_lv_up: { milliPercentage: 300 }, term: 'infinite', cannot_be_dispelled: true } }, + target: { atk_up: { base: { milliPercentage: 3000 }, per_lv_up: { milliPercentage: 300 }, term: 'infinite', cannot_be_dispelled: true } } + } + }, { + conditions: [{ trigger: 'start_round', state: { squad: { num_of_units: { unit: 'killed', greater_or_equal: 1 } } } }], + target: { kind: 'ally' }, + details: { target: { spd_up: { base: { milliPercentage: 15000 }, per_lv_up: { milliPercentage: 1500 }, term: { for_rounds: 1 }, cannot_be_dispelled: true } } } + }, { + conditions: [{ trigger: 'start_round', state: { squad: { num_of_units: { unit: 'killed', greater_or_equal: 2 } } } }], + target: { kind: 'ally' }, + details: { target: { damage_reduction_up: { base: { milliPercentage: 20000 }, per_lv_up: { milliPercentage: 2000 }, term: { for_rounds: 1 }, cannot_be_dispelled: true } } } + }, { + conditions: [{ trigger: 'start_round', state: { squad: { num_of_units: { unit: 'killed', greater_or_equal: 3 } } } }], + target: { kind: 'ally' }, + details: { target: { counterattack: { base: { milliPercentage: 70000 }, per_lv_up: { milliPercentage: 4000 }, term: { for_rounds: 1 }, cannot_be_dispelled: true } } } + }, { + conditions: [{ trigger: 'start_round', state: { squad: { num_of_units: { unit: 'killed', equal: 4 } } } }], + target: { kind: 'ally' }, + details: { target: { battle_continuation: { base: { value: 500 }, per_lv_up: { value: 50 }, term: { for_rounds: 1 }, times: 1, cannot_be_dispelled: true } } } + }] }] }, 30: { diff --git a/src/domain/skill/SkillEffectActivationCondition.ts b/src/domain/skill/SkillEffectActivationCondition.ts index 7aaf3781..9eb198eb 100644 --- a/src/domain/skill/SkillEffectActivationCondition.ts +++ b/src/domain/skill/SkillEffectActivationCondition.ts @@ -139,6 +139,7 @@ const AffectedSkillEffect = [ Effect.DamageReductionUp, Effect.MinimizeDamage, Effect.Barrier, + Effect.ReAttack, Effect.FollowUpAttack, Effect.IgnoreBarrierDr, Effect.IgnoreProtect, @@ -335,6 +336,8 @@ export type NumOfUnitsInSquadState = { { unit: typeof SkillAreaType.CrossAdjacent, greater_or_equal: 1 | 2 | 3 } | { unit: typeof SkillAreaType.CrossAdjacent, greater_or_equal: 2, less_or_equal: 3 } | { unit: typeof SkillAreaType.CrossAdjacent, equal: 4 } | + { unit: 'killed', greater_or_equal: 1 | 2 | 3 } | + { unit: 'killed', equal: 4 } | { unit: DefenderAndArmoredBulgasari, equal: 1 | 2 | 3 | 4 } } diff --git a/src/domain/squad/simulator/ConditionMatcher.ts b/src/domain/squad/simulator/ConditionMatcher.ts index f82985fb..ea1a9953 100644 --- a/src/domain/squad/simulator/ConditionMatcher.ts +++ b/src/domain/squad/simulator/ConditionMatcher.ts @@ -161,7 +161,7 @@ function getSquadUnitMatcher( 'golden_factory' > | NotInSquadCondition | - Exclude, + Exclude, sourcePosition: TenKeyPosition ): (state: UnitOriginState) => boolean { if (!cond) { @@ -707,7 +707,9 @@ export function matchStaticSquadState( const count = target === 'ally' ? squad.length - 1 : // except source unit - squad.filter(exceptSourceUnit(getSquadUnitMatcher(target, source.position))).length; + target === 'killed' ? + 0 : // Currently, the number of units killed is always 0 + squad.filter(exceptSourceUnit(getSquadUnitMatcher(target, source.position))).length; return ( 'equal' in num_of_units ? num_of_units.equal === count : diff --git a/src/i18n/ja/effect.json b/src/i18n/ja/effect.json index f330b8b9..1a00d096 100644 --- a/src/i18n/ja/effect.json +++ b/src/i18n/ja/effect.json @@ -21,6 +21,7 @@ "heavy": "重装型", "flying": "機動型", "cross_adjacent": "隣接した味方", + "killed": "戦闘不能な$t(effect:unit.ally)", "bioroid_under_145cm_tall": "身長145cm以下のバイオロイド", "electric_active": "攻撃が電気属性の味方", "artillery_type_active": "着弾型アクティブスキルを保有する味方", diff --git a/src/i18n/ja/skill.json b/src/i18n/ja/skill.json index 53ac88c2..96ade0cf 100644 --- a/src/i18n/ja/skill.json +++ b/src/i18n/ja/skill.json @@ -240,7 +240,8 @@ }, "passive": { "1": "試作EFP弾", - "2": "野戦教範" + "2": "野戦教範", + "3": "JTAC任命承認" } }, "25": { @@ -293,7 +294,8 @@ }, "passive": { "1": "引き下がるな!", - "2": "前進あるのみ!" + "2": "前進あるのみ!", + "3": "最後の一人まで" } }, "30": { From 1f559e93427ca54c9595ea07525ec5a1ec0a89aa Mon Sep 17 00:00:00 2001 From: harry0000 Date: Fri, 14 Jul 2023 16:45:44 +0900 Subject: [PATCH 5/8] Refactor initial unit lv state --- src/domain/UnitCoreLink.ts | 32 +++++++++++------ src/domain/status/UnitLv.ts | 10 ++++-- src/service/SquadJsonConverter.ts | 10 +++--- src/state/corelink/UnitCoreLinkState.ts | 36 ++++++++++++------- .../status/parameters/UnitLvStatusState.ts | 6 ++-- .../parameters/UnitStatusParameterState.ts | 8 ++--- 6 files changed, 64 insertions(+), 38 deletions(-) diff --git a/src/domain/UnitCoreLink.ts b/src/domain/UnitCoreLink.ts index d620671d..1d0847a8 100644 --- a/src/domain/UnitCoreLink.ts +++ b/src/domain/UnitCoreLink.ts @@ -110,11 +110,27 @@ function calcBonus(linkRate: number, no: UnitNumber): CoreLinkBonus { class UnitCoreLink { + static initialState = { + coreLinkUnit: undefined, + linkCount: 0, + linkRate: 0, + fullLinkBonusAvailable: false, + selectedFullLinkBonus: undefined, + fullLinkBonus: undefined + } as const; + static get slot1AvailableLv(): CoreLinkSlotAvailableLv { return 10; } static get slot2AvailableLv(): CoreLinkSlotAvailableLv { return 30; } static get slot3AvailableLv(): CoreLinkSlotAvailableLv { return 50; } static get slot4AvailableLv(): CoreLinkSlotAvailableLv { return 70; } static get slot5AvailableLv(): CoreLinkSlotAvailableLv { return 90; } + + static isSlot1Available(lv: UnitLvValue): boolean { return lv >= UnitCoreLink.slot1AvailableLv; } + static isSlot2Available(lv: UnitLvValue): boolean { return lv >= UnitCoreLink.slot2AvailableLv; } + static isSlot3Available(lv: UnitLvValue): boolean { return lv >= UnitCoreLink.slot3AvailableLv; } + static isSlot4Available(lv: UnitLvValue): boolean { return lv >= UnitCoreLink.slot4AvailableLv; } + static isSlot5Available(lv: UnitLvValue): boolean { return lv >= UnitCoreLink.slot5AvailableLv; } + static emptyBonus(unit: UnitNumber): CoreLinkBonus { return calcBonus(0, unit); } static getCoreLinkUnits( @@ -265,17 +281,11 @@ class UnitCoreLink { this; } - isSlot1Available(lv: UnitLvValue): boolean { return lv >= UnitCoreLink.slot1AvailableLv; } - isSlot2Available(lv: UnitLvValue): boolean { return lv >= UnitCoreLink.slot2AvailableLv; } - isSlot3Available(lv: UnitLvValue): boolean { return lv >= UnitCoreLink.slot3AvailableLv; } - isSlot4Available(lv: UnitLvValue): boolean { return lv >= UnitCoreLink.slot4AvailableLv; } - isSlot5Available(lv: UnitLvValue): boolean { return lv >= UnitCoreLink.slot5AvailableLv; } - - slot1LinkRate(lv: UnitLvValue): number { return this.isSlot1Available(lv) && this.slot1 ? this.slot1.rate : 0; } - slot2LinkRate(lv: UnitLvValue): number { return this.isSlot2Available(lv) && this.slot2 ? this.slot2.rate : 0; } - slot3LinkRate(lv: UnitLvValue): number { return this.isSlot3Available(lv) && this.slot3 ? this.slot3.rate : 0; } - slot4LinkRate(lv: UnitLvValue): number { return this.isSlot4Available(lv) && this.slot4 ? this.slot4.rate : 0; } - slot5LinkRate(lv: UnitLvValue): number { return this.isSlot5Available(lv) && this.slot5 ? this.slot5.rate : 0; } + slot1LinkRate(lv: UnitLvValue): number { return UnitCoreLink.isSlot1Available(lv) && this.slot1 ? this.slot1.rate : 0; } + slot2LinkRate(lv: UnitLvValue): number { return UnitCoreLink.isSlot2Available(lv) && this.slot2 ? this.slot2.rate : 0; } + slot3LinkRate(lv: UnitLvValue): number { return UnitCoreLink.isSlot3Available(lv) && this.slot3 ? this.slot3.rate : 0; } + slot4LinkRate(lv: UnitLvValue): number { return UnitCoreLink.isSlot4Available(lv) && this.slot4 ? this.slot4.rate : 0; } + slot5LinkRate(lv: UnitLvValue): number { return UnitCoreLink.isSlot5Available(lv) && this.slot5 ? this.slot5.rate : 0; } linkCount(lv: UnitLvValue): CoreLinkCount { return ( diff --git a/src/domain/status/UnitLv.ts b/src/domain/status/UnitLv.ts index 2294750e..abb3d9c3 100644 --- a/src/domain/status/UnitLv.ts +++ b/src/domain/status/UnitLv.ts @@ -11,12 +11,18 @@ export type UnitLvMode = typeof UnitLvMode[keyof typeof UnitLvMode] class UnitLv { + static initialState = { + value: 100, + mode: UnitLvMode.Manual, + points: 300 + } as const; + readonly value: UnitLvValue; readonly mode: UnitLvMode; constructor(value?: UnitLvValue, mode?: UnitLvMode) { - this.value = value ?? 100; - this.mode = mode ?? UnitLvMode.Manual; + this.value = value ?? UnitLv.initialState.value; + this.mode = mode ?? UnitLv.initialState.mode; } setLv(value: UnitLvValue): UnitLv { diff --git a/src/service/SquadJsonConverter.ts b/src/service/SquadJsonConverter.ts index 33c252f5..bd761740 100644 --- a/src/service/SquadJsonConverter.ts +++ b/src/service/SquadJsonConverter.ts @@ -86,11 +86,11 @@ function convertEquipment( function convertCoreLink(lv: UnitLvValue, unitCoreLink: UnitCoreLink): UnitCoreLinkJsonStructure { return [ - unitCoreLink.isSlot1Available(lv) && unitCoreLink.slot1 ? unitCoreLink.slot1.rate : 0, - unitCoreLink.isSlot2Available(lv) && unitCoreLink.slot2 ? unitCoreLink.slot2.rate : 0, - unitCoreLink.isSlot3Available(lv) && unitCoreLink.slot3 ? unitCoreLink.slot3.rate : 0, - unitCoreLink.isSlot4Available(lv) && unitCoreLink.slot4 ? unitCoreLink.slot4.rate : 0, - unitCoreLink.isSlot5Available(lv) && unitCoreLink.slot5 ? unitCoreLink.slot5.rate : 0, + UnitCoreLink.isSlot1Available(lv) && unitCoreLink.slot1 ? unitCoreLink.slot1.rate : 0, + UnitCoreLink.isSlot2Available(lv) && unitCoreLink.slot2 ? unitCoreLink.slot2.rate : 0, + UnitCoreLink.isSlot3Available(lv) && unitCoreLink.slot3 ? unitCoreLink.slot3.rate : 0, + UnitCoreLink.isSlot4Available(lv) && unitCoreLink.slot4 ? unitCoreLink.slot4.rate : 0, + UnitCoreLink.isSlot5Available(lv) && unitCoreLink.slot5 ? unitCoreLink.slot5.rate : 0, unitCoreLink.isFullLinkBonusAvailable(lv) ? unitCoreLink.selectedFullLinkBonusIndex : -1 ]; } diff --git a/src/state/corelink/UnitCoreLinkState.ts b/src/state/corelink/UnitCoreLinkState.ts index ecc31a24..35755ce0 100644 --- a/src/state/corelink/UnitCoreLinkState.ts +++ b/src/state/corelink/UnitCoreLinkState.ts @@ -3,7 +3,7 @@ import deepEqual from 'fast-deep-equal'; import { CoreLinkBonus, FullLinkBonus } from '../../domain/UnitCoreLinkBonusData'; import UnitCoreLink, { CoreLinkCount, CoreLinkUnit } from '../../domain/UnitCoreLink'; -import { UnitLvValue } from '../../domain/status/UnitLv'; +import UnitLv, { UnitLvValue } from '../../domain/status/UnitLv'; import { UnitNumber } from '../../domain/UnitBasicInfo'; import { lvValueState } from '../status/parameters/UnitLvStatusState'; @@ -16,14 +16,24 @@ export type CoreLinkSlot = 'slot1' | 'slot2' | 'slot3' | 'slot4' | 'slot5' function createLinkedUnit(slot: CoreLinkSlot) { return atomFamily({ key: `UnitCoreLinkState_linkedUnit_${slot}`, - default: undefined + default: UnitCoreLink.initialState.coreLinkUnit }); } +function initialSlotAvailable(slot: CoreLinkSlot): boolean { + switch (slot) { + case 'slot1': return UnitCoreLink.isSlot1Available(UnitLv.initialState.value); + case 'slot2': return UnitCoreLink.isSlot2Available(UnitLv.initialState.value); + case 'slot3': return UnitCoreLink.isSlot3Available(UnitLv.initialState.value); + case 'slot4': return UnitCoreLink.isSlot4Available(UnitLv.initialState.value); + case 'slot5': return UnitCoreLink.isSlot5Available(UnitLv.initialState.value); + } +} + function createSlotAvailable(slot: CoreLinkSlot) { return atomFamily({ key: `UnitCoreLinkState_slotAvailable_${slot}`, - default: true + default: initialSlotAvailable(slot) }); } @@ -32,8 +42,8 @@ const _unitCoreLink = atomFamily({ default: (unit) => new UnitCoreLink(unit) }); -const _linkRate = atomFamily({ key: 'UnitCoreLinkState_linkRate', default: 0 }); -const _linkCount = atomFamily({ key: 'UnitCoreLinkState_linkCount', default: 0 }); +const _linkRate = atomFamily({ key: 'UnitCoreLinkState_linkRate', default: UnitCoreLink.initialState.linkRate }); +const _linkCount = atomFamily({ key: 'UnitCoreLinkState_linkCount', default: UnitCoreLink.initialState.linkCount }); const _linkedUnit = { slot1: createLinkedUnit('slot1'), slot2: createLinkedUnit('slot2'), @@ -54,15 +64,15 @@ const _linkBonus = atomFamily({ }); const _fullLinkAvailable = atomFamily({ key: 'UnitCoreLinkState_fullLinkAvailable', - default: false + default: UnitCoreLink.initialState.fullLinkBonusAvailable }); const _selectedFullLinkBonus = atomFamily({ key: 'UnitCoreLinkState_selectedFullLinkBonus', - default: undefined + default: UnitCoreLink.initialState.selectedFullLinkBonus }); const _fullLinkBonus = atomFamily({ key: 'UnitCoreLinkState_fullLinkBonus', - default: undefined + default: UnitCoreLink.initialState.fullLinkBonus }); function _update(unit: UnitNumber, lv: UnitLvValue, valueOrUpdater: ValueOrUpdater): (cbi: CallbackInterface) => void { @@ -93,11 +103,11 @@ function _update(unit: UnitNumber, lv: UnitLvValue, valueOrUpdater: ValueOrUpdat updateLinkedUnit('slot4'); updateLinkedUnit('slot5'); - set(_slotAvailable.slot1(unit), nextValue.isSlot1Available(lv)); - set(_slotAvailable.slot2(unit), nextValue.isSlot2Available(lv)); - set(_slotAvailable.slot3(unit), nextValue.isSlot3Available(lv)); - set(_slotAvailable.slot4(unit), nextValue.isSlot4Available(lv)); - set(_slotAvailable.slot5(unit), nextValue.isSlot5Available(lv)); + set(_slotAvailable.slot1(unit), UnitCoreLink.isSlot1Available(lv)); + set(_slotAvailable.slot2(unit), UnitCoreLink.isSlot2Available(lv)); + set(_slotAvailable.slot3(unit), UnitCoreLink.isSlot3Available(lv)); + set(_slotAvailable.slot4(unit), UnitCoreLink.isSlot4Available(lv)); + set(_slotAvailable.slot5(unit), UnitCoreLink.isSlot5Available(lv)); set(_linkRate(unit), nextValue.linkRate(lv)); set(_linkCount(unit), nextValue.linkCount(lv)); diff --git a/src/state/status/parameters/UnitLvStatusState.ts b/src/state/status/parameters/UnitLvStatusState.ts index c3b01ebd..9bbf9843 100644 --- a/src/state/status/parameters/UnitLvStatusState.ts +++ b/src/state/status/parameters/UnitLvStatusState.ts @@ -74,9 +74,9 @@ const _unitLvStatusState = atomFamily({ default: (unit) => new UnitLvStatus(unit) }); -const _lv = atomFamily({ key: 'UnitLvStatusState_lv', default: 100 }); -const _lvMode = atomFamily({ key: 'UnitLvStatusState_lvMode', default: UnitLvMode.Manual }); -const _remainPoints = atomFamily({ key: 'UnitLvStatusState_remainPoints', default: 300 }); +const _lv = atomFamily({ key: 'UnitLvStatusState_lv', default: UnitLv.initialState.value }); +const _lvMode = atomFamily({ key: 'UnitLvStatusState_lvMode', default: UnitLv.initialState.mode }); +const _remainPoints = atomFamily({ key: 'UnitLvStatusState_remainPoints', default: UnitLv.initialState.points }); const _canResetPoints = atomFamily({ key: 'UnitLvStatusState_canResetPoints', default: false }); const _enhanceLv ={ diff --git a/src/state/status/parameters/UnitStatusParameterState.ts b/src/state/status/parameters/UnitStatusParameterState.ts index c6358142..2d0231ae 100644 --- a/src/state/status/parameters/UnitStatusParameterState.ts +++ b/src/state/status/parameters/UnitStatusParameterState.ts @@ -61,8 +61,8 @@ import { } from '../../../domain/equipment/UnitEquipment'; import UnitCoreLink from '../../../domain/UnitCoreLink'; import UnitDamagedState, { DamagedState } from '../../../domain/UnitDamagedState'; +import UnitLv, { UnitLvValue } from '../../../domain/status/UnitLv'; import UnitLvStatus from '../../../domain/status/UnitLvStatus'; -import { UnitLvValue } from '../../../domain/status/UnitLv'; import { UnitNumber, UnitRank } from '../../../domain/UnitBasicInfo'; import { UnitSkill } from '../../../domain/skill/UnitSkill'; @@ -203,9 +203,9 @@ const ZeroMilliValue: MilliValue = { milliValue: 0 }; const ZeroMicroValue: MicroValue = { microValue: 0 }; const ZeroMilliPercentageValue: MilliPercentageValue = { milliPercentage: 0 }; -const _hp = atomFamily({ key: 'UnitStatusParameterState_hp', default: (unit) => calculateUnitBaseHp(unit, 100) }); -const _atk = atomFamily({ key: 'UnitStatusParameterState_atk', default: (unit) => calculateUnitBaseAtk(unit, 100) }); -const _def = atomFamily({ key: 'UnitStatusParameterState_def', default: (unit) => calculateUnitBaseDef(unit, 100) }); +const _hp = atomFamily({ key: 'UnitStatusParameterState_hp', default: (unit) => calculateUnitBaseHp(unit, UnitLv.initialState.value) }); +const _atk = atomFamily({ key: 'UnitStatusParameterState_atk', default: (unit) => calculateUnitBaseAtk(unit, UnitLv.initialState.value) }); +const _def = atomFamily({ key: 'UnitStatusParameterState_def', default: (unit) => calculateUnitBaseDef(unit, UnitLv.initialState.value) }); const _acc = atomFamily({ key: 'UnitStatusParameterState_acc', default: (unit) => unitStatusData[unit].acc }); const _eva = atomFamily({ key: 'UnitStatusParameterState_eva', default: (unit) => unitStatusData[unit].eva }); const _cri = atomFamily({ key: 'UnitStatusParameterState_cri', default: (unit) => unitStatusData[unit].cri }); From ab5ebed62b42ccdd38bfe480a6a8edee1ad709ae Mon Sep 17 00:00:00 2001 From: harry0000 Date: Fri, 14 Jul 2023 16:59:24 +0900 Subject: [PATCH 6/8] Refactor zero values --- src/domain/ValueUnit.ts | 5 +++++ src/domain/squad/SquadUnitActionOrder.ts | 6 +++--- src/domain/status/SquadUnitStatusParameter.ts | 5 +++-- src/domain/status/UnitStatusParameter.ts | 14 ++++++++------ .../status/parameters/UnitStatusParameterState.ts | 9 ++++----- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/domain/ValueUnit.ts b/src/domain/ValueUnit.ts index a93d4793..c1089df3 100644 --- a/src/domain/ValueUnit.ts +++ b/src/domain/ValueUnit.ts @@ -6,6 +6,11 @@ export type MilliPercentageValue = Readonly<{ milliPercentage export type ValueUnit = keyof IntegerValue | keyof MilliValue | keyof MicroValue | keyof MilliPercentageValue export type ValueTypes = IntegerValue | MilliValue | MicroValue | MilliPercentageValue +export const ZeroIntegerValue = { value: 0 } as const satisfies IntegerValue; +export const ZeroMilliValue = { milliValue: 0 } as const satisfies MilliValue; +export const ZeroMicroValue = { microValue: 0 } as const satisfies MicroValue; +export const ZeroMilliPercentageValue = { milliPercentage: 0 } as const satisfies MilliPercentageValue; + export function reverseIntegerValueSign({ value }: IntegerValue): IntegerValue { return { value: -value }; } diff --git a/src/domain/squad/SquadUnitActionOrder.ts b/src/domain/squad/SquadUnitActionOrder.ts index 9281feb4..4e90044a 100644 --- a/src/domain/squad/SquadUnitActionOrder.ts +++ b/src/domain/squad/SquadUnitActionOrder.ts @@ -1,6 +1,6 @@ import { Squad, TenKeyPosition } from './Squad'; import { UnitNumber } from '../UnitBasicInfo'; -import { MicroValue } from '../ValueUnit'; +import { MicroValue, ZeroMicroValue } from '../ValueUnit'; import { partition } from '../../util/array'; type SquadUnitApValue = { @@ -48,8 +48,8 @@ export class SquadUnitActionOrder { ) { const units = squad.units.map(({ unit: { no }, position }) => ({ unit: no, position, - ap: apRepository(no) ?? { microValue: 0 }, - spd: spdRepository(no) ?? { microValue: 0 } + ap: apRepository(no) ?? ZeroMicroValue, + spd: spdRepository(no) ?? ZeroMicroValue })).sort(descendingOrder); const [ready, notReady] = partition(units, ({ ap }) => readyToAction(ap)); diff --git a/src/domain/status/SquadUnitStatusParameter.ts b/src/domain/status/SquadUnitStatusParameter.ts index a7f5ad54..a7631527 100644 --- a/src/domain/status/SquadUnitStatusParameter.ts +++ b/src/domain/status/SquadUnitStatusParameter.ts @@ -27,6 +27,7 @@ import { MicroValue, MilliPercentageValue, MilliValue, + ZeroMilliValue, multiplyMicroValue, multiplyMilliValue, reverseMicroValueSign, @@ -325,7 +326,7 @@ class SquadUnitStatus { } this.#atk = atk; - this.#atkValueUpByUnitEffects = atkValueUpByUnitEffects.map(effect => ({ effect, value: { milliValue: 0 } })); + this.#atkValueUpByUnitEffects = atkValueUpByUnitEffects.map(effect => ({ effect, value: ZeroMilliValue })); this.#ap = sumMicroValues(...apEffectValues); } @@ -388,7 +389,7 @@ export class SquadUnitStatusCalculator { #calculateAtk(): void { const repository: (unit: UnitNumber) => MilliValue = - (unit) => this.#units.get(unit)?.atkRateEffectValue ?? { milliValue: 0 }; + (unit) => this.#units.get(unit)?.atkRateEffectValue ?? ZeroMilliValue; this.#units.forEach(unit => { unit.calculateAtkUpValueByUnit(repository); diff --git a/src/domain/status/UnitStatusParameter.ts b/src/domain/status/UnitStatusParameter.ts index 718ceee0..41a236f2 100644 --- a/src/domain/status/UnitStatusParameter.ts +++ b/src/domain/status/UnitStatusParameter.ts @@ -19,6 +19,8 @@ import { MicroValue, MilliPercentageValue, MilliValue, + ZeroIntegerValue, + ZeroMilliValue, multiplyMilliValue, multiplyValue, reverseSign, @@ -132,8 +134,8 @@ export class UnitHpStatusParameter { const hpAddition = sumValues(...pickValues(Effect.HpUp, Effect.HpDown)(hpEnhancement, chip1, chip2, os, gear)); const hp = sumValues(baseHp, rankUpBonusSummary, hpAddition); - this.hpCoreLinkBonus = Effect.HpUp in coreLinkBonus ? multiplyValue(hp, coreLinkBonus.hp_up) : { value: 0 }; - this.hpFullLinkBonus = Effect.HpUp in _fullLinkBonus ? multiplyValue(hp, _fullLinkBonus.hp_up) : { value: 0 }; + this.hpCoreLinkBonus = Effect.HpUp in coreLinkBonus ? multiplyValue(hp, coreLinkBonus.hp_up) : ZeroIntegerValue; + this.hpFullLinkBonus = Effect.HpUp in _fullLinkBonus ? multiplyValue(hp, _fullLinkBonus.hp_up) : ZeroIntegerValue; this.hpEffectValue = sumValues(hpAddition, this.hpCoreLinkBonus, this.hpFullLinkBonus); @@ -167,8 +169,8 @@ export class UnitAtkStatusParameter { const atkAddition = sumMilliValues(...pickValues(Effect.AtkUp, Effect.AtkDown)(atkEnhancement, chip1, chip2, os, gear)); const atk = sumMilliValues(baseAtk, rankUpBonusSummary, atkAddition); - this.atkCoreLinkBonus = Effect.AtkUp in coreLinkBonus ? multiplyMilliValue(atk, coreLinkBonus.atk_up) : { milliValue: 0 }; - this.atkFullLinkBonus = Effect.AtkUp in _fullLinkBonus ? multiplyMilliValue(atk, _fullLinkBonus.atk_up) : { milliValue: 0 }; + this.atkCoreLinkBonus = Effect.AtkUp in coreLinkBonus ? multiplyMilliValue(atk, coreLinkBonus.atk_up) : ZeroMilliValue; + this.atkFullLinkBonus = Effect.AtkUp in _fullLinkBonus ? multiplyMilliValue(atk, _fullLinkBonus.atk_up) : ZeroMilliValue; this.atkEffectValue = sumMilliValues(atkAddition, this.atkCoreLinkBonus, this.atkFullLinkBonus); @@ -202,8 +204,8 @@ export class UnitDefStatusParameter { const defAddition = sumMilliValues(...pickValues(Effect.DefUp, Effect.DefDown)(defEnhancement, chip1, chip2, os, gear)); const def = sumMilliValues(baseDef, rankUpBonusSummary, defAddition); - this.defCoreLinkBonus = Effect.DefUp in coreLinkBonus ? multiplyMilliValue(def, coreLinkBonus.def_up) : { milliValue: 0 }; - this.defFullLinkBonus = Effect.DefUp in _fullLinkBonus ? multiplyMilliValue(def, _fullLinkBonus.def_up) : { milliValue: 0 }; + this.defCoreLinkBonus = Effect.DefUp in coreLinkBonus ? multiplyMilliValue(def, coreLinkBonus.def_up) : ZeroMilliValue; + this.defFullLinkBonus = Effect.DefUp in _fullLinkBonus ? multiplyMilliValue(def, _fullLinkBonus.def_up) : ZeroMilliValue; this.defEffectValue = sumMilliValues(defAddition, this.defCoreLinkBonus, this.defFullLinkBonus); diff --git a/src/state/status/parameters/UnitStatusParameterState.ts b/src/state/status/parameters/UnitStatusParameterState.ts index 2d0231ae..4ef98138 100644 --- a/src/state/status/parameters/UnitStatusParameterState.ts +++ b/src/state/status/parameters/UnitStatusParameterState.ts @@ -27,6 +27,10 @@ import { MicroValue, MilliPercentageValue, MilliValue, + ZeroMicroValue, + ZeroIntegerValue, + ZeroMilliValue, + ZeroMilliPercentageValue, equalIntegerValue, equalMicroValue, equalMilliPercentageValue, @@ -198,11 +202,6 @@ function getRemovedUnits(prev: Squad, next: Squad): ReadonlySet { return prevUnits; } -const ZeroIntegerValue: IntegerValue = { value: 0 }; -const ZeroMilliValue: MilliValue = { milliValue: 0 }; -const ZeroMicroValue: MicroValue = { microValue: 0 }; -const ZeroMilliPercentageValue: MilliPercentageValue = { milliPercentage: 0 }; - const _hp = atomFamily({ key: 'UnitStatusParameterState_hp', default: (unit) => calculateUnitBaseHp(unit, UnitLv.initialState.value) }); const _atk = atomFamily({ key: 'UnitStatusParameterState_atk', default: (unit) => calculateUnitBaseAtk(unit, UnitLv.initialState.value) }); const _def = atomFamily({ key: 'UnitStatusParameterState_def', default: (unit) => calculateUnitBaseDef(unit, UnitLv.initialState.value) }); From 8afdb44703419207e94a3041987059fc2c43a22e Mon Sep 17 00:00:00 2001 From: harry0000 Date: Fri, 14 Jul 2023 19:25:00 +0900 Subject: [PATCH 7/8] Add full link button --- src/component/status/UnitSlot.css | 4 ++ .../status/corelink/UnitCoreLinkView.css | 11 +++++ .../status/corelink/UnitCoreLinkView.tsx | 46 ++++++++++++++++++- src/domain/UnitCoreLink.ts | 15 ++++++ src/i18n/ja/common.json | 1 + src/state/corelink/UnitCoreLinkHook.ts | 12 +++++ src/state/corelink/UnitCoreLinkState.ts | 13 ++++++ 7 files changed, 100 insertions(+), 2 deletions(-) diff --git a/src/component/status/UnitSlot.css b/src/component/status/UnitSlot.css index 886a5395..83c0a083 100644 --- a/src/component/status/UnitSlot.css +++ b/src/component/status/UnitSlot.css @@ -1,3 +1,7 @@ +.slot-container { + width: fit-content; +} + .slot-row { display: flex; } diff --git a/src/component/status/corelink/UnitCoreLinkView.css b/src/component/status/corelink/UnitCoreLinkView.css index 33beeeb9..9f33bf2a 100644 --- a/src/component/status/corelink/UnitCoreLinkView.css +++ b/src/component/status/corelink/UnitCoreLinkView.css @@ -10,3 +10,14 @@ .core-link-rate-details { margin-left: 15px; } + +.core-link-action { + display: flex; + margin-left: auto; +} + +.core-link-action > .btn { + line-height: 0.5; + font-weight: bold; + font-size: 0.9em; +} diff --git a/src/component/status/corelink/UnitCoreLinkView.tsx b/src/component/status/corelink/UnitCoreLinkView.tsx index fe2c15e5..ff34f5ec 100644 --- a/src/component/status/corelink/UnitCoreLinkView.tsx +++ b/src/component/status/corelink/UnitCoreLinkView.tsx @@ -5,7 +5,7 @@ import React, { Suspense } from 'react'; import { ReactElementLike } from 'prop-types'; import { useTranslation } from 'react-i18next'; -import { OverlayTrigger, Popover } from 'react-bootstrap'; +import { Button, OverlayTrigger, Popover } from 'react-bootstrap'; import PopoverListContent from '../../common/PopoverListContent'; import { Search } from '../../icon/FluentIcons'; import SVGIcon from '../../icon/SVGIcon'; @@ -16,7 +16,11 @@ import { CoreLinkBonus } from '../../../domain/UnitCoreLinkBonusData'; import { UnitBasicInfo } from '../../../domain/UnitBasicInfo'; import { calcMicroValue, calcMilliPercentageValue } from '../../../domain/ValueUnit'; -import { useCoreLinkEffect, useCoreLinkRate } from '../../../state/corelink/UnitCoreLinkHook'; +import { + useCoreLinkEffect, + useCoreLinkRate, + useLinkAllSlot +} from '../../../state/corelink/UnitCoreLinkHook'; import { useSelectedUnit } from '../../../state/selector/UnitSelectorHook'; import '../UnitSlot.css'; @@ -88,6 +92,43 @@ const CoreLinkEffectDetailView: React.FC = () => { ); }; +const WrappedButton: React.FC<{ + available: boolean, + onClick: () => void +}> = ({ available, onClick, ...rest }) => { + const { t } = useTranslation(); + return ( + + ); +}; + +const LinkAllSlotButton: React.FC<{ unit: UnitBasicInfo }> = ({ unit }) => { + const [linkAllSlot, available] = useLinkAllSlot(unit); + + return (); +}; + +const DisabledButton: React.FC = () => { + return ( { return; }} />); +}; + +const CoreLinkAction: React.FC = () => { + const selected = useSelectedUnit(); + + return ( +
+ {selected ? (): ()} +
+ ); +}; + const CoreLinkSelector = React.lazy(() => import('./CoreLinkSelector')); const UnitCoreLinkView: React.FC = () => { @@ -99,6 +140,7 @@ const UnitCoreLinkView: React.FC = () => { > +
diff --git a/src/domain/UnitCoreLink.ts b/src/domain/UnitCoreLink.ts index 1d0847a8..851e360d 100644 --- a/src/domain/UnitCoreLink.ts +++ b/src/domain/UnitCoreLink.ts @@ -258,6 +258,21 @@ class UnitCoreLink { return this.slot5 ? new UnitCoreLink(this.unit, this.slot1, this.slot2, this.slot3, this.slot4, undefined, this.fullLinkBonus) : this; } + linkAllSlot(): UnitCoreLink { + const fitUnit = UnitCoreLink.#fitUnit(this.unit); + return this.linkSlot1(fitUnit).linkSlot2(fitUnit).linkSlot3(fitUnit).linkSlot4(fitUnit).linkSlot5(fitUnit); + } + + isAllSlotLinkedFitUnit(): boolean { + return ( + this.slot1?.rate === 100 && + this.slot2?.rate === 100 && + this.slot3?.rate === 100 && + this.slot4?.rate === 100 && + this.slot5?.rate === 100 + ); + } + #fullLinkBonusIndex(bonus: FullLinkBonus): FullLinkBonusIndex | -1 { return unitCoreLinkBonusData[this.unit].full_link_bonus.indexOf(bonus) as FullLinkBonusIndex | -1; } diff --git a/src/i18n/ja/common.json b/src/i18n/ja/common.json index 9e6a00f4..24f89299 100644 --- a/src/i18n/ja/common.json +++ b/src/i18n/ja/common.json @@ -114,6 +114,7 @@ "range_up": "$t(form.full_link_bonus.range_up, { \"value\": 1 })", "buff_debuff_lv_2_up": "$t(form.full_link_bonus.buff_debuff_lv_up, { \"value\": 2 })" }, + "link_all_slot": "500 %", "rank_up_conditions": { "empty": "未指定", "a": "Aランク昇級", diff --git a/src/state/corelink/UnitCoreLinkHook.ts b/src/state/corelink/UnitCoreLinkHook.ts index d781c253..238943c2 100644 --- a/src/state/corelink/UnitCoreLinkHook.ts +++ b/src/state/corelink/UnitCoreLinkHook.ts @@ -10,6 +10,8 @@ import { coreLinkRateState, coreLinkSlotAvailableState, fullLinkAvailableState, + linkAllSlot, + linkAllSlotAvailableState, linkSlot, linkedUnitState, selectFullLinkBonus, @@ -53,6 +55,16 @@ export function useAvailableFullLinkBonus({ no }: UnitBasicInfo): ReadonlyArray< return unitCoreLinkBonusData[no].full_link_bonus; } +export function useLinkAllSlot({ no }: UnitBasicInfo): [ + linkAllSlot: () => void, + available: boolean +] { + return [ + useRecoilCallback(linkAllSlot(no)), + useRecoilValue(linkAllSlotAvailableState(no)) + ]; +} + export function useFullLinkBonus({ no }: UnitBasicInfo): [ selectedBonus: FullLinkBonus | undefined, selectBonus: (bonus: FullLinkBonus | undefined) => void, diff --git a/src/state/corelink/UnitCoreLinkState.ts b/src/state/corelink/UnitCoreLinkState.ts index 35755ce0..4b18ae7d 100644 --- a/src/state/corelink/UnitCoreLinkState.ts +++ b/src/state/corelink/UnitCoreLinkState.ts @@ -62,6 +62,10 @@ const _linkBonus = atomFamily({ key: 'UnitCoreLinkState_linkBonus', default: (unit) => UnitCoreLink.emptyBonus(unit) }); +const _linkAllSlotAvailable = atomFamily({ + key: 'UnitCoreLinkState_linkAllSlotAvailable', + default: true +}); const _fullLinkAvailable = atomFamily({ key: 'UnitCoreLinkState_fullLinkAvailable', default: UnitCoreLink.initialState.fullLinkBonusAvailable @@ -111,6 +115,8 @@ function _update(unit: UnitNumber, lv: UnitLvValue, valueOrUpdater: ValueOrUpdat set(_linkRate(unit), nextValue.linkRate(lv)); set(_linkCount(unit), nextValue.linkCount(lv)); + set(_linkAllSlotAvailable(unit), !nextValue.isAllSlotLinkedFitUnit()); + set(_selectedFullLinkBonus(unit), nextValue.fullLinkBonus); set(_fullLinkBonus(unit), nextValue.fullLinkBonusEffect(lv)); set(_fullLinkAvailable(unit), nextValue.isFullLinkBonusAvailable(lv)); @@ -128,6 +134,8 @@ export const coreLinkSlotAvailableState = (unit: UnitNumber, slot: CoreLinkSlot) export const coreLinkRateState = (unit: UnitNumber): RecoilValueReadOnly => _linkRate(unit); export const coreLinkCountState = (unit: UnitNumber): RecoilValueReadOnly => _linkCount(unit); +export const linkAllSlotAvailableState = (unit: UnitNumber): RecoilValueReadOnly => _linkAllSlotAvailable(unit); + export const selectedFullLinkBonus = (unit: UnitNumber): RecoilValueReadOnly => _selectedFullLinkBonus(unit); export const fullLinkAvailableState = (unit: UnitNumber): RecoilValueReadOnly => _fullLinkAvailable(unit); @@ -151,6 +159,11 @@ export const linkSlot = (unit: UnitNumber, slot: CoreLinkSlot) => (cbi: Callback )(cbi); }; +export const linkAllSlot = (unit: UnitNumber) => (cbi: CallbackInterface) => (): void => { + const lv = cbi.snapshot.getLoadable(lvValueState(unit)).getValue(); + _update(unit, lv, s => s.linkAllSlot())(cbi); +}; + export const selectFullLinkBonus = (unit: UnitNumber) => (cbi: CallbackInterface) => (bonus: FullLinkBonus | undefined): void => { const lv = cbi.snapshot.getLoadable(lvValueState(unit)).getValue(); _update( From b6aea2992df2d0c6114304d6bc83b12f87d7f3ea Mon Sep 17 00:00:00 2001 From: harry0000 Date: Fri, 14 Jul 2023 19:27:01 +0900 Subject: [PATCH 8/8] Update version to 1.2.13 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 358b0ded..7df7899d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "last-origin-unit-viewer", - "version": "1.2.12", + "version": "1.2.13", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "last-origin-unit-viewer", - "version": "1.2.12", + "version": "1.2.13", "license": "UNLICENSED", "dependencies": { "@emotion/react": "^11.11.1", diff --git a/package.json b/package.json index 74f45a80..4b1c946c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "last-origin-unit-viewer", - "version": "1.2.12", + "version": "1.2.13", "private": true, "license": "UNLICENSED", "author": "harry0000 ",