diff --git a/package-lock.json b/package-lock.json
index 2fd8775..f19af69 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -21,14 +21,14 @@
"million": "3.0.6",
"nanoid": "5.0.7",
"pako": "2.1.0",
- "react": "18.3.0",
+ "react": "18.3.1",
"react-cropper": "2.3.3",
- "react-dom": "18.3.0",
+ "react-dom": "18.3.1",
"react-error-boundary": "4.0.13",
"react-helmet-async": "2.0.4",
"react-hook-form": "7.51.3",
- "react-icons": "5.1.0",
- "react-intersection-observer": "9.8.2",
+ "react-icons": "5.2.1",
+ "react-intersection-observer": "9.10.2",
"react-lazy-load": "4.0.1",
"react-router-dom": "6.23.0",
"react-share": "4.4.1",
@@ -40,22 +40,22 @@
"@testing-library/react": "15.0.5",
"@types/cypress": "1.1.3",
"@types/pako": "2.0.3",
- "@types/react": "18.3.0",
+ "@types/react": "18.3.2",
"@types/react-dom": "18.3.0",
- "@typescript-eslint/eslint-plugin": "7.7.1",
- "@typescript-eslint/parser": "7.7.1",
+ "@typescript-eslint/eslint-plugin": "7.9.0",
+ "@typescript-eslint/parser": "7.9.0",
"@vitejs/plugin-react": "4.2.1",
"@vitest/ui": "1.5.2",
"cypress": "13.8.1",
- "eslint": "^8.53.0",
+ "eslint": "8.57.0",
"eslint-config-prettier": "9.1.0",
"eslint-config-standard": "17.1.0",
- "eslint-plugin-cypress": "3.0.2",
+ "eslint-plugin-cypress": "3.2.0",
"eslint-plugin-import": "2.29.1",
"eslint-plugin-node": "11.1.0",
"eslint-plugin-prettier": "5.1.3",
"eslint-plugin-react": "7.34.1",
- "eslint-plugin-react-hooks": "4.6.1",
+ "eslint-plugin-react-hooks": "4.6.2",
"husky": "9.0.11",
"jsdom": "24.0.0",
"lint-staged": "15.2.2",
@@ -4209,12 +4209,6 @@
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
},
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
- },
"node_modules/@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@@ -4256,9 +4250,9 @@
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
},
"node_modules/@types/react": {
- "version": "18.3.0",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.0.tgz",
- "integrity": "sha512-DiUcKjzE6soLyln8NNZmyhcQjVv+WsUIFSqetMN0p8927OztKT4VTfFTqsbAi5oAGIcgOmOajlfBqyptDDjZRw==",
+ "version": "18.3.2",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.2.tgz",
+ "integrity": "sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==",
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.0.2"
@@ -4281,12 +4275,6 @@
"@types/react": "*"
}
},
- "node_modules/@types/semver": {
- "version": "7.5.8",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
- "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
- "dev": true
- },
"node_modules/@types/sinonjs__fake-timers": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz",
@@ -4310,21 +4298,19 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.1.tgz",
- "integrity": "sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz",
+ "integrity": "sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==",
"dev": true,
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "7.7.1",
- "@typescript-eslint/type-utils": "7.7.1",
- "@typescript-eslint/utils": "7.7.1",
- "@typescript-eslint/visitor-keys": "7.7.1",
- "debug": "^4.3.4",
+ "@typescript-eslint/scope-manager": "7.9.0",
+ "@typescript-eslint/type-utils": "7.9.0",
+ "@typescript-eslint/utils": "7.9.0",
+ "@typescript-eslint/visitor-keys": "7.9.0",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
- "semver": "^7.6.0",
"ts-api-utils": "^1.3.0"
},
"engines": {
@@ -4344,31 +4330,16 @@
}
}
},
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@typescript-eslint/parser": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz",
- "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.9.0.tgz",
+ "integrity": "sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "7.7.1",
- "@typescript-eslint/types": "7.7.1",
- "@typescript-eslint/typescript-estree": "7.7.1",
- "@typescript-eslint/visitor-keys": "7.7.1",
+ "@typescript-eslint/scope-manager": "7.9.0",
+ "@typescript-eslint/types": "7.9.0",
+ "@typescript-eslint/typescript-estree": "7.9.0",
+ "@typescript-eslint/visitor-keys": "7.9.0",
"debug": "^4.3.4"
},
"engines": {
@@ -4388,13 +4359,13 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz",
- "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz",
+ "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "7.7.1",
- "@typescript-eslint/visitor-keys": "7.7.1"
+ "@typescript-eslint/types": "7.9.0",
+ "@typescript-eslint/visitor-keys": "7.9.0"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -4405,13 +4376,13 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.1.tgz",
- "integrity": "sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.9.0.tgz",
+ "integrity": "sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/typescript-estree": "7.7.1",
- "@typescript-eslint/utils": "7.7.1",
+ "@typescript-eslint/typescript-estree": "7.9.0",
+ "@typescript-eslint/utils": "7.9.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.3.0"
},
@@ -4432,9 +4403,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz",
- "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz",
+ "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==",
"dev": true,
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -4445,13 +4416,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz",
- "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz",
+ "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "7.7.1",
- "@typescript-eslint/visitor-keys": "7.7.1",
+ "@typescript-eslint/types": "7.9.0",
+ "@typescript-eslint/visitor-keys": "7.9.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -4497,13 +4468,10 @@
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -4512,18 +4480,15 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz",
- "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.9.0.tgz",
+ "integrity": "sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
- "@types/json-schema": "^7.0.15",
- "@types/semver": "^7.5.8",
- "@typescript-eslint/scope-manager": "7.7.1",
- "@typescript-eslint/types": "7.7.1",
- "@typescript-eslint/typescript-estree": "7.7.1",
- "semver": "^7.6.0"
+ "@typescript-eslint/scope-manager": "7.9.0",
+ "@typescript-eslint/types": "7.9.0",
+ "@typescript-eslint/typescript-estree": "7.9.0"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -4536,28 +4501,13 @@
"eslint": "^8.56.0"
}
},
- "node_modules/@typescript-eslint/utils/node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz",
- "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz",
+ "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "7.7.1",
+ "@typescript-eslint/types": "7.9.0",
"eslint-visitor-keys": "^3.4.3"
},
"engines": {
@@ -7023,15 +6973,15 @@
}
},
"node_modules/eslint-plugin-cypress": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-3.0.2.tgz",
- "integrity": "sha512-5hIWc3SqXSuR+Sd7gmNMzx8yJ3LWQQS0e+qLvEVF4C1JfFtu1s9imtEm1KxlCBCcKb7+6CyR9KQYs0GiI02AlA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-3.2.0.tgz",
+ "integrity": "sha512-HaxMz6BoU4ay+K4WrG9ZJC1NdX06FqSlAwtRDStjM0ORFT7zCNPNuRJ+kUPc17Rt2AMUBSqeD9L0zTR3uZhPpw==",
"dev": true,
"dependencies": {
"globals": "^13.20.0"
},
"peerDependencies": {
- "eslint": ">=7 <9"
+ "eslint": ">=7"
}
},
"node_modules/eslint-plugin-cypress/node_modules/globals": {
@@ -7322,9 +7272,9 @@
}
},
"node_modules/eslint-plugin-react-hooks": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.1.tgz",
- "integrity": "sha512-Ck77j8hF7l9N4S/rzSLOWEKpn994YH6iwUK8fr9mXIaQvGpQYmOnQLbiue1u5kI5T1y+gdgqosnEAO9NCz0DBg==",
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz",
+ "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==",
"dev": true,
"engines": {
"node": ">=10"
@@ -7452,9 +7402,9 @@
}
},
"node_modules/eslint/node_modules/globals": {
- "version": "13.20.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
- "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -11359,9 +11309,9 @@
]
},
"node_modules/react": {
- "version": "18.3.0",
- "resolved": "https://registry.npmjs.org/react/-/react-18.3.0.tgz",
- "integrity": "sha512-RPutkJftSAldDibyrjuku7q11d3oy6wKOyPe5K1HA/HwwrXcEqBdHsLypkC2FFYjP7bPUa6gbzSBhw4sY2JcDg==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"dependencies": {
"loose-envify": "^1.1.0"
},
@@ -11392,15 +11342,15 @@
}
},
"node_modules/react-dom": {
- "version": "18.3.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.0.tgz",
- "integrity": "sha512-zaKdLBftQJnvb7FtDIpZtsAIb2MZU087RM8bRDZU8LVCCFYjPTsDZJNFUWPcVz3HFSN1n/caxi0ca4B/aaVQGQ==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"dependencies": {
"loose-envify": "^1.1.0",
- "scheduler": "^0.23.1"
+ "scheduler": "^0.23.2"
},
"peerDependencies": {
- "react": "^18.3.0"
+ "react": "^18.3.1"
}
},
"node_modules/react-error-boundary": {
@@ -11471,20 +11421,20 @@
}
},
"node_modules/react-icons": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.1.0.tgz",
- "integrity": "sha512-D3zug1270S4hbSlIRJ0CUS97QE1yNNKDjzQe3HqY0aefp2CBn9VgzgES27sRR2gOvFK+0CNx/BW0ggOESp6fqQ==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.2.1.tgz",
+ "integrity": "sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw==",
"peerDependencies": {
"react": "*"
}
},
"node_modules/react-intersection-observer": {
- "version": "9.8.2",
- "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.8.2.tgz",
- "integrity": "sha512-901naEiiZmse3p+AmtbQ3NL9xx+gQ8TXLiGDc+8GiE3JKJkNV3vP737aGuWTAXBA+1QqxPrDDE+fIEgYpGDlrQ==",
+ "version": "9.10.2",
+ "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.10.2.tgz",
+ "integrity": "sha512-j2hGADK2hCbAlfaq6L3tVLb4iqngoN7B1fT16MwJ4J16YW/vWLcmAIinLsw0lgpZeMi4UDUWtHC9QDde0/P1yQ==",
"peerDependencies": {
- "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
+ "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"react-dom": {
@@ -11985,9 +11935,9 @@
}
},
"node_modules/scheduler": {
- "version": "0.23.1",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.1.tgz",
- "integrity": "sha512-5GKS5JGfiah1O38Vfa9srZE4s3wdHbwjlCrvIookrg2FO9aIwKLOJXuJQFlEfNcVSOXuaL2hzDeY20uVXcUtrw==",
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
"dependencies": {
"loose-envify": "^1.1.0"
}
@@ -16803,12 +16753,6 @@
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
},
- "@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
- },
"@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@@ -16850,9 +16794,9 @@
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
},
"@types/react": {
- "version": "18.3.0",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.0.tgz",
- "integrity": "sha512-DiUcKjzE6soLyln8NNZmyhcQjVv+WsUIFSqetMN0p8927OztKT4VTfFTqsbAi5oAGIcgOmOajlfBqyptDDjZRw==",
+ "version": "18.3.2",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.2.tgz",
+ "integrity": "sha512-Btgg89dAnqD4vV7R3hlwOxgqobUQKgx3MmrQRi0yYbs/P0ym8XozIAlkqVilPqHQwXs4e9Tf63rrCgl58BcO4w==",
"requires": {
"@types/prop-types": "*",
"csstype": "^3.0.2"
@@ -16875,12 +16819,6 @@
"@types/react": "*"
}
},
- "@types/semver": {
- "version": "7.5.8",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
- "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
- "dev": true
- },
"@types/sinonjs__fake-timers": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz",
@@ -16904,84 +16842,71 @@
}
},
"@typescript-eslint/eslint-plugin": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.1.tgz",
- "integrity": "sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz",
+ "integrity": "sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==",
"dev": true,
"requires": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "7.7.1",
- "@typescript-eslint/type-utils": "7.7.1",
- "@typescript-eslint/utils": "7.7.1",
- "@typescript-eslint/visitor-keys": "7.7.1",
- "debug": "^4.3.4",
+ "@typescript-eslint/scope-manager": "7.9.0",
+ "@typescript-eslint/type-utils": "7.9.0",
+ "@typescript-eslint/utils": "7.9.0",
+ "@typescript-eslint/visitor-keys": "7.9.0",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
- "semver": "^7.6.0",
"ts-api-utils": "^1.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
}
},
"@typescript-eslint/parser": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz",
- "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.9.0.tgz",
+ "integrity": "sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==",
"dev": true,
"requires": {
- "@typescript-eslint/scope-manager": "7.7.1",
- "@typescript-eslint/types": "7.7.1",
- "@typescript-eslint/typescript-estree": "7.7.1",
- "@typescript-eslint/visitor-keys": "7.7.1",
+ "@typescript-eslint/scope-manager": "7.9.0",
+ "@typescript-eslint/types": "7.9.0",
+ "@typescript-eslint/typescript-estree": "7.9.0",
+ "@typescript-eslint/visitor-keys": "7.9.0",
"debug": "^4.3.4"
}
},
"@typescript-eslint/scope-manager": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz",
- "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz",
+ "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "7.7.1",
- "@typescript-eslint/visitor-keys": "7.7.1"
+ "@typescript-eslint/types": "7.9.0",
+ "@typescript-eslint/visitor-keys": "7.9.0"
}
},
"@typescript-eslint/type-utils": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.1.tgz",
- "integrity": "sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.9.0.tgz",
+ "integrity": "sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==",
"dev": true,
"requires": {
- "@typescript-eslint/typescript-estree": "7.7.1",
- "@typescript-eslint/utils": "7.7.1",
+ "@typescript-eslint/typescript-estree": "7.9.0",
+ "@typescript-eslint/utils": "7.9.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.3.0"
}
},
"@typescript-eslint/types": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz",
- "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz",
+ "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==",
"dev": true
},
"@typescript-eslint/typescript-estree": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz",
- "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz",
+ "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "7.7.1",
- "@typescript-eslint/visitor-keys": "7.7.1",
+ "@typescript-eslint/types": "7.9.0",
+ "@typescript-eslint/visitor-keys": "7.9.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -17009,49 +16934,32 @@
}
},
"semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true
}
}
},
"@typescript-eslint/utils": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz",
- "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.9.0.tgz",
+ "integrity": "sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==",
"dev": true,
"requires": {
"@eslint-community/eslint-utils": "^4.4.0",
- "@types/json-schema": "^7.0.15",
- "@types/semver": "^7.5.8",
- "@typescript-eslint/scope-manager": "7.7.1",
- "@typescript-eslint/types": "7.7.1",
- "@typescript-eslint/typescript-estree": "7.7.1",
- "semver": "^7.6.0"
- },
- "dependencies": {
- "semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
+ "@typescript-eslint/scope-manager": "7.9.0",
+ "@typescript-eslint/types": "7.9.0",
+ "@typescript-eslint/typescript-estree": "7.9.0"
}
},
"@typescript-eslint/visitor-keys": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz",
- "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==",
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz",
+ "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "7.7.1",
+ "@typescript-eslint/types": "7.9.0",
"eslint-visitor-keys": "^3.4.3"
}
},
@@ -18846,9 +18754,9 @@
"dev": true
},
"globals": {
- "version": "13.20.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
- "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
@@ -18950,9 +18858,9 @@
}
},
"eslint-plugin-cypress": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-3.0.2.tgz",
- "integrity": "sha512-5hIWc3SqXSuR+Sd7gmNMzx8yJ3LWQQS0e+qLvEVF4C1JfFtu1s9imtEm1KxlCBCcKb7+6CyR9KQYs0GiI02AlA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-3.2.0.tgz",
+ "integrity": "sha512-HaxMz6BoU4ay+K4WrG9ZJC1NdX06FqSlAwtRDStjM0ORFT7zCNPNuRJ+kUPc17Rt2AMUBSqeD9L0zTR3uZhPpw==",
"dev": true,
"requires": {
"globals": "^13.20.0"
@@ -19176,9 +19084,9 @@
}
},
"eslint-plugin-react-hooks": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.1.tgz",
- "integrity": "sha512-Ck77j8hF7l9N4S/rzSLOWEKpn994YH6iwUK8fr9mXIaQvGpQYmOnQLbiue1u5kI5T1y+gdgqosnEAO9NCz0DBg==",
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz",
+ "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==",
"dev": true,
"requires": {}
},
@@ -21967,9 +21875,9 @@
"dev": true
},
"react": {
- "version": "18.3.0",
- "resolved": "https://registry.npmjs.org/react/-/react-18.3.0.tgz",
- "integrity": "sha512-RPutkJftSAldDibyrjuku7q11d3oy6wKOyPe5K1HA/HwwrXcEqBdHsLypkC2FFYjP7bPUa6gbzSBhw4sY2JcDg==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"requires": {
"loose-envify": "^1.1.0"
}
@@ -21991,12 +21899,12 @@
}
},
"react-dom": {
- "version": "18.3.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.0.tgz",
- "integrity": "sha512-zaKdLBftQJnvb7FtDIpZtsAIb2MZU087RM8bRDZU8LVCCFYjPTsDZJNFUWPcVz3HFSN1n/caxi0ca4B/aaVQGQ==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"requires": {
"loose-envify": "^1.1.0",
- "scheduler": "^0.23.1"
+ "scheduler": "^0.23.2"
}
},
"react-error-boundary": {
@@ -22042,15 +21950,15 @@
"requires": {}
},
"react-icons": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.1.0.tgz",
- "integrity": "sha512-D3zug1270S4hbSlIRJ0CUS97QE1yNNKDjzQe3HqY0aefp2CBn9VgzgES27sRR2gOvFK+0CNx/BW0ggOESp6fqQ==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.2.1.tgz",
+ "integrity": "sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw==",
"requires": {}
},
"react-intersection-observer": {
- "version": "9.8.2",
- "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.8.2.tgz",
- "integrity": "sha512-901naEiiZmse3p+AmtbQ3NL9xx+gQ8TXLiGDc+8GiE3JKJkNV3vP737aGuWTAXBA+1QqxPrDDE+fIEgYpGDlrQ==",
+ "version": "9.10.2",
+ "resolved": "https://registry.npmjs.org/react-intersection-observer/-/react-intersection-observer-9.10.2.tgz",
+ "integrity": "sha512-j2hGADK2hCbAlfaq6L3tVLb4iqngoN7B1fT16MwJ4J16YW/vWLcmAIinLsw0lgpZeMi4UDUWtHC9QDde0/P1yQ==",
"requires": {}
},
"react-is": {
@@ -22383,9 +22291,9 @@
}
},
"scheduler": {
- "version": "0.23.1",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.1.tgz",
- "integrity": "sha512-5GKS5JGfiah1O38Vfa9srZE4s3wdHbwjlCrvIookrg2FO9aIwKLOJXuJQFlEfNcVSOXuaL2hzDeY20uVXcUtrw==",
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
"requires": {
"loose-envify": "^1.1.0"
}
diff --git a/package.json b/package.json
index d086829..fdfcb67 100644
--- a/package.json
+++ b/package.json
@@ -33,14 +33,14 @@
"million": "3.0.6",
"nanoid": "5.0.7",
"pako": "2.1.0",
- "react": "18.3.0",
+ "react": "18.3.1",
"react-cropper": "2.3.3",
- "react-dom": "18.3.0",
+ "react-dom": "18.3.1",
"react-error-boundary": "4.0.13",
"react-helmet-async": "2.0.4",
"react-hook-form": "7.51.3",
- "react-icons": "5.1.0",
- "react-intersection-observer": "9.8.2",
+ "react-icons": "5.2.1",
+ "react-intersection-observer": "9.10.2",
"react-lazy-load": "4.0.1",
"react-router-dom": "6.23.0",
"react-share": "4.4.1",
@@ -52,22 +52,22 @@
"@testing-library/react": "15.0.5",
"@types/cypress": "1.1.3",
"@types/pako": "2.0.3",
- "@types/react": "18.3.0",
+ "@types/react": "18.3.2",
"@types/react-dom": "18.3.0",
- "@typescript-eslint/eslint-plugin": "7.7.1",
- "@typescript-eslint/parser": "7.7.1",
+ "@typescript-eslint/eslint-plugin": "7.9.0",
+ "@typescript-eslint/parser": "7.9.0",
"@vitejs/plugin-react": "4.2.1",
"@vitest/ui": "1.5.2",
"cypress": "13.8.1",
- "eslint": "8.53.0",
+ "eslint": "8.57.0",
"eslint-config-prettier": "9.1.0",
"eslint-config-standard": "17.1.0",
- "eslint-plugin-cypress": "3.0.2",
+ "eslint-plugin-cypress": "3.2.0",
"eslint-plugin-import": "2.29.1",
"eslint-plugin-node": "11.1.0",
"eslint-plugin-prettier": "5.1.3",
"eslint-plugin-react": "7.34.1",
- "eslint-plugin-react-hooks": "4.6.1",
+ "eslint-plugin-react-hooks": "4.6.2",
"husky": "9.0.11",
"jsdom": "24.0.0",
"lint-staged": "15.2.2",
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
index 81700e7..1160dc5 100644
--- a/src/components/Footer.tsx
+++ b/src/components/Footer.tsx
@@ -1,14 +1,53 @@
-import React from 'react';
+import React, { useEffect, useState } from 'react';
import { NavLink } from 'react-router-dom';
import { Box, Flex, useColorModeValue, Link } from '@chakra-ui/react';
import { useNetworkState } from '@hooks/useNetworkState';
+import { useMyToast } from '@hooks/useMyToast';
+import { FaCheckCircle } from 'react-icons/fa';
+import { MdError } from 'react-icons/md';
export function Footer() {
+ const myToast = useMyToast();
const bgFooter = useColorModeValue('gray.100', 'gray.900');
const networkState = useNetworkState();
+ const [prevNetworkState, setPrevNetworkState] = useState(networkState);
let connectionState;
+ useEffect(() => {
+ if (prevNetworkState !== networkState) {
+ setPrevNetworkState(networkState);
+
+ if (networkState === 'offline') {
+ myToast({
+ title: 'Conexión Perdida',
+ icon: MdError,
+ iconColor: 'red.600',
+ bgColor: 'red.50',
+ position: 'bottom',
+ color: 'red.600',
+ width: 'auto',
+ align: 'center',
+ fntSize: 'sm',
+ bxSize: 4,
+ });
+ } else if (networkState === 'online') {
+ myToast({
+ title: 'De nuevo en línea',
+ icon: FaCheckCircle,
+ iconColor: 'green.800',
+ bgColor: '#EAFFE5',
+ position: 'bottom',
+ color: 'green.800',
+ width: 'auto',
+ align: 'center',
+ fntSize: 'sm',
+ bxSize: 4,
+ });
+ }
+ }
+ }, [networkState, prevNetworkState, myToast]);
+
if (networkState === 'online') {
connectionState = (
@@ -45,11 +84,11 @@ export function Footer() {
Políticas de Privacidad
diff --git a/src/components/forms/FormEdit.tsx b/src/components/forms/FormEdit.tsx
index cddd9a2..f93f9ea 100644
--- a/src/components/forms/FormEdit.tsx
+++ b/src/components/forms/FormEdit.tsx
@@ -186,6 +186,13 @@ export function FormEdit({
icon: FaCheckCircle,
iconColor: 'green.700',
bgColor: 'black',
+ position: 'top-right',
+ width: '300px',
+ color: 'white',
+ align: 'center',
+ padding: '2',
+ fntSize: 'md',
+ bxSize: 4,
});
navigate('/explore', { replace: true });
@@ -196,6 +203,13 @@ export function FormEdit({
icon: IoWarningSharp,
iconColor: 'red.400',
bgColor: 'black',
+ position: 'top-right',
+ width: '300px',
+ color: 'white',
+ align: 'center',
+ padding: '2',
+ fntSize: 'md',
+ bxSize: 5,
});
}
diff --git a/src/components/forms/NewBook.tsx b/src/components/forms/NewBook.tsx
index 734fb57..2b8665d 100644
--- a/src/components/forms/NewBook.tsx
+++ b/src/components/forms/NewBook.tsx
@@ -169,6 +169,13 @@ export function FormNewBook() {
icon: FaCheckCircle,
iconColor: 'green.700',
bgColor: 'black',
+ position: 'top-right',
+ width: '300px',
+ color: 'white',
+ align: 'center',
+ padding: '2',
+ fntSize: 'md',
+ bxSize: 5,
});
navigate(`/${data.username}`, { replace: true });
@@ -179,6 +186,13 @@ export function FormNewBook() {
icon: IoWarningSharp,
iconColor: 'red.400',
bgColor: 'black',
+ position: 'top-right',
+ width: '300px',
+ color: 'white',
+ align: 'center',
+ padding: '2',
+ fntSize: 'md',
+ bxSize: 5,
});
}
diff --git a/src/hooks/useMyToast.tsx b/src/hooks/useMyToast.tsx
index 7b27bd8..960036a 100644
--- a/src/hooks/useMyToast.tsx
+++ b/src/hooks/useMyToast.tsx
@@ -1,4 +1,5 @@
import React from 'react';
+import type { IconType } from 'react-icons';
import {
Box,
CloseButton,
@@ -8,12 +9,50 @@ import {
useToast,
} from '@chakra-ui/react';
+type ToastPosition =
+ | 'bottom'
+ | 'top'
+ | 'top-left'
+ | 'top-right'
+ | 'bottom-left'
+ | 'bottom-right';
+
+interface ToastType {
+ width: string;
+ padding?: string;
+ marginT?: string;
+ align: string;
+ bxSize: number | string;
+ fntSize: number | string;
+ bgColor: string;
+ iconColor?: string;
+ title: string;
+ position: ToastPosition | undefined;
+ description?: string;
+ icon?: IconType;
+ color: string;
+}
+
export function useMyToast() {
const toast = useToast();
- function myToast({ bgColor, iconColor, title, description, icon }) {
+ function myToast({
+ width,
+ padding,
+ marginT,
+ align,
+ bxSize,
+ fntSize,
+ bgColor,
+ iconColor,
+ title,
+ position,
+ description,
+ icon,
+ color,
+ }: ToastType) {
toast({
- position: 'top-right',
+ position: `${position as ToastPosition}`,
duration: 3000,
containerStyle: {
fontFamily: 'sans-serif',
@@ -21,17 +60,19 @@ export function useMyToast() {
render: ({ onClose }) => (
-
-
-
- {title}
- {description}
+
+
+
+
+ {title}
+
+ {description}
diff --git a/src/pages/Book.tsx b/src/pages/Book.tsx
index edfdc4b..028976c 100644
--- a/src/pages/Book.tsx
+++ b/src/pages/Book.tsx
@@ -108,6 +108,13 @@ export default function Book() {
icon: FaCheckCircle,
iconColor: 'green.700',
bgColor: 'black',
+ position: 'top-right',
+ width: '300px',
+ color: 'white',
+ align: 'center',
+ padding: '2',
+ fntSize: 'md',
+ bxSize: 5,
});
navigate('/explore', { replace: true });
diff --git a/src/pages/MostViewed.tsx b/src/pages/MostViewed.tsx
index a67cba7..d9bb715 100644
--- a/src/pages/MostViewed.tsx
+++ b/src/pages/MostViewed.tsx
@@ -12,7 +12,7 @@ export default function MostViewed() {
return (
<>
-
+
{data?.map(