From 848601e1ad9b53ede5db8123825de2005ee1758e Mon Sep 17 00:00:00 2001 From: durumi99 Date: Sun, 25 Jan 2026 14:23:21 +0900 Subject: [PATCH 1/2] 1 --- package-lock.json | 1071 +++++++++++------ package.json | 2 + src/assets/design/card/card.svg | 32 +- src/assets/koreaFlag.svg | 9 - src/assets/usFlag.svg | 9 - .../CardList/StockCard/StockCard.tsx | 4 +- .../PopUp/PWAinfoPopUp/PWAInfoPopUp.tsx | 2 +- .../Search/GuageChart/GuageChart.tsx | 2 +- .../ShortView/Tutorial/Tutorial.tsx | 6 +- src/pages/About/About.tsx | 2 +- src/pages/Lab/Step/Country/Country.tsx | 2 +- src/pages/Lab/Step/Done/Done.tsx | 2 +- src/pages/Lab/Step/Tutorial/Tutorial.tsx | 2 +- src/pages/Notification/Notification.tsx | 2 +- src/pages/Usage/Usage.tsx | 2 +- src/pages/Withdraw/Withdraw.tsx | 2 +- vite.config.ts | 8 +- 17 files changed, 729 insertions(+), 430 deletions(-) delete mode 100644 src/assets/koreaFlag.svg delete mode 100644 src/assets/usFlag.svg diff --git a/package-lock.json b/package-lock.json index 9971ec66..4ac1b3e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,6 +39,8 @@ "prettier": "^3.3.3", "prettier-plugin-css-order": "^2.1.2", "prettier-plugin-emotion-order": "^1.1.0", + "rollup-plugin-visualizer": "^6.0.5", + "svgo": "^4.0.0", "typescript": "^5.7.2", "typescript-eslint": "^8.11.0", "vite": "^5.4.11", @@ -249,17 +251,17 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", - "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.6.tgz", + "integrity": "sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "debug": "^4.4.1", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", "lodash.debounce": "^4.0.8", - "resolve": "^1.22.10" + "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -2442,6 +2444,44 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", @@ -2458,6 +2498,24 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -2654,9 +2712,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.2.tgz", - "integrity": "sha512-21J6xzayjy3O6NdnlO6aXi/urvSRjm6nCI6+nF6ra2YofKruGixN9kfT+dt55HVNwfDmpDHJcaS3JuP/boNnlA==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.56.0.tgz", + "integrity": "sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==", "cpu": [ "arm" ], @@ -2667,9 +2725,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.2.tgz", - "integrity": "sha512-eXBg7ibkNUZ+sTwbFiDKou0BAckeV6kIigK7y5Ko4mB/5A1KLhuzEKovsmfvsL8mQorkoincMFGnQuIT92SKqA==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.56.0.tgz", + "integrity": "sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==", "cpu": [ "arm64" ], @@ -2680,9 +2738,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.2.tgz", - "integrity": "sha512-UCbaTklREjrc5U47ypLulAgg4njaqfOVLU18VrCrI+6E5MQjuG0lSWaqLlAJwsD7NpFV249XgB0Bi37Zh5Sz4g==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.56.0.tgz", + "integrity": "sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==", "cpu": [ "arm64" ], @@ -2693,9 +2751,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.2.tgz", - "integrity": "sha512-dP67MA0cCMHFT2g5XyjtpVOtp7y4UyUxN3dhLdt11at5cPKnSm4lY+EhwNvDXIMzAMIo2KU+mc9wxaAQJTn7sQ==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.56.0.tgz", + "integrity": "sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==", "cpu": [ "x64" ], @@ -2706,9 +2764,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.2.tgz", - "integrity": "sha512-WDUPLUwfYV9G1yxNRJdXcvISW15mpvod1Wv3ok+Ws93w1HjIVmCIFxsG2DquO+3usMNCpJQ0wqO+3GhFdl6Fow==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.56.0.tgz", + "integrity": "sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==", "cpu": [ "arm64" ], @@ -2719,9 +2777,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.2.tgz", - "integrity": "sha512-Ng95wtHVEulRwn7R0tMrlUuiLVL/HXA8Lt/MYVpy88+s5ikpntzZba1qEulTuPnPIZuOPcW9wNEiqvZxZmgmqQ==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.56.0.tgz", + "integrity": "sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==", "cpu": [ "x64" ], @@ -2732,9 +2790,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.2.tgz", - "integrity": "sha512-AEXMESUDWWGqD6LwO/HkqCZgUE1VCJ1OhbvYGsfqX2Y6w5quSXuyoy/Fg3nRqiwro+cJYFxiw5v4kB2ZDLhxrw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.56.0.tgz", + "integrity": "sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==", "cpu": [ "arm" ], @@ -2745,9 +2803,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.2.tgz", - "integrity": "sha512-ZV7EljjBDwBBBSv570VWj0hiNTdHt9uGznDtznBB4Caj3ch5rgD4I2K1GQrtbvJ/QiB+663lLgOdcADMNVC29Q==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.56.0.tgz", + "integrity": "sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==", "cpu": [ "arm" ], @@ -2758,9 +2816,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.2.tgz", - "integrity": "sha512-uvjwc8NtQVPAJtq4Tt7Q49FOodjfbf6NpqXyW/rjXoV+iZ3EJAHLNAnKT5UJBc6ffQVgmXTUL2ifYiLABlGFqA==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.56.0.tgz", + "integrity": "sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==", "cpu": [ "arm64" ], @@ -2771,9 +2829,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.2.tgz", - "integrity": "sha512-s3KoWVNnye9mm/2WpOZ3JeUiediUVw6AvY/H7jNA6qgKA2V2aM25lMkVarTDfiicn/DLq3O0a81jncXszoyCFA==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.56.0.tgz", + "integrity": "sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==", "cpu": [ "arm64" ], @@ -2784,9 +2842,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.2.tgz", - "integrity": "sha512-gi21faacK+J8aVSyAUptML9VQN26JRxe484IbF+h3hpG+sNVoMXPduhREz2CcYr5my0NE3MjVvQ5bMKX71pfVA==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.56.0.tgz", + "integrity": "sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==", "cpu": [ "loong64" ], @@ -2797,9 +2855,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.2.tgz", - "integrity": "sha512-qSlWiXnVaS/ceqXNfnoFZh4IiCA0EwvCivivTGbEu1qv2o+WTHpn1zNmCTAoOG5QaVr2/yhCoLScQtc/7RxshA==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.56.0.tgz", + "integrity": "sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==", "cpu": [ "loong64" ], @@ -2810,9 +2868,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.2.tgz", - "integrity": "sha512-rPyuLFNoF1B0+wolH277E780NUKf+KoEDb3OyoLbAO18BbeKi++YN6gC/zuJoPPDlQRL3fIxHxCxVEWiem2yXw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.56.0.tgz", + "integrity": "sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==", "cpu": [ "ppc64" ], @@ -2823,9 +2881,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.2.tgz", - "integrity": "sha512-g+0ZLMook31iWV4PvqKU0i9E78gaZgYpSrYPed/4Bu+nGTgfOPtfs1h11tSSRPXSjC5EzLTjV/1A7L2Vr8pJoQ==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.56.0.tgz", + "integrity": "sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==", "cpu": [ "ppc64" ], @@ -2836,9 +2894,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.2.tgz", - "integrity": "sha512-i+sGeRGsjKZcQRh3BRfpLsM3LX3bi4AoEVqmGDyc50L6KfYsN45wVCSz70iQMwPWr3E5opSiLOwsC9WB4/1pqg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.56.0.tgz", + "integrity": "sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==", "cpu": [ "riscv64" ], @@ -2849,9 +2907,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.2.tgz", - "integrity": "sha512-C1vLcKc4MfFV6I0aWsC7B2Y9QcsiEcvKkfxprwkPfLaN8hQf0/fKHwSF2lcYzA9g4imqnhic729VB9Fo70HO3Q==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.56.0.tgz", + "integrity": "sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==", "cpu": [ "riscv64" ], @@ -2862,9 +2920,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.2.tgz", - "integrity": "sha512-68gHUK/howpQjh7g7hlD9DvTTt4sNLp1Bb+Yzw2Ki0xvscm2cOdCLZNJNhd2jW8lsTPrHAHuF751BygifW4bkQ==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.56.0.tgz", + "integrity": "sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==", "cpu": [ "s390x" ], @@ -2875,9 +2933,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.2.tgz", - "integrity": "sha512-1e30XAuaBP1MAizaOBApsgeGZge2/Byd6wV4a8oa6jPdHELbRHBiw7wvo4dp7Ie2PE8TZT4pj9RLGZv9N4qwlw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.56.0.tgz", + "integrity": "sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==", "cpu": [ "x64" ], @@ -2888,9 +2946,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.2.tgz", - "integrity": "sha512-4BJucJBGbuGnH6q7kpPqGJGzZnYrpAzRd60HQSt3OpX/6/YVgSsJnNzR8Ot74io50SeVT4CtCWe/RYIAymFPwA==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.56.0.tgz", + "integrity": "sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==", "cpu": [ "x64" ], @@ -2901,9 +2959,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.2.tgz", - "integrity": "sha512-cT2MmXySMo58ENv8p6/O6wI/h/gLnD3D6JoajwXFZH6X9jz4hARqUhWpGuQhOgLNXscfZYRQMJvZDtWNzMAIDw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.56.0.tgz", + "integrity": "sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==", "cpu": [ "x64" ], @@ -2914,9 +2972,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.2.tgz", - "integrity": "sha512-sZnyUgGkuzIXaK3jNMPmUIyJrxu/PjmATQrocpGA1WbCPX8H5tfGgRSuYtqBYAvLuIGp8SPRb1O4d1Fkb5fXaQ==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.56.0.tgz", + "integrity": "sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==", "cpu": [ "arm64" ], @@ -2927,9 +2985,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.2.tgz", - "integrity": "sha512-sDpFbenhmWjNcEbBcoTV0PWvW5rPJFvu+P7XoTY0YLGRupgLbFY0XPfwIbJOObzO7QgkRDANh65RjhPmgSaAjQ==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.56.0.tgz", + "integrity": "sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==", "cpu": [ "arm64" ], @@ -2940,9 +2998,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.2.tgz", - "integrity": "sha512-GvJ03TqqaweWCigtKQVBErw2bEhu1tyfNQbarwr94wCGnczA9HF8wqEe3U/Lfu6EdeNP0p6R+APeHVwEqVxpUQ==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.56.0.tgz", + "integrity": "sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==", "cpu": [ "ia32" ], @@ -2953,9 +3011,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.2.tgz", - "integrity": "sha512-KvXsBvp13oZz9JGe5NYS7FNizLe99Ny+W8ETsuCyjXiKdiGrcz2/J/N8qxZ/RSwivqjQguug07NLHqrIHrqfYw==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.56.0.tgz", + "integrity": "sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==", "cpu": [ "x64" ], @@ -2966,9 +3024,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.2.tgz", - "integrity": "sha512-xNO+fksQhsAckRtDSPWaMeT1uIM+JrDRXlerpnWNXhn1TdB3YZ6uKBMBTKP0eX9XtYEP978hHk1f8332i2AW8Q==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.56.0.tgz", + "integrity": "sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==", "cpu": [ "x64" ], @@ -3264,9 +3322,9 @@ } }, "node_modules/@swc/core": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.8.tgz", - "integrity": "sha512-T8keoJjXaSUoVBCIjgL6wAnhADIb09GOELzKg10CjNg+vLX48P93SME6jTfte9MZIm5m+Il57H3rTSk/0kzDUw==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.10.tgz", + "integrity": "sha512-udNofxftduMUEv7nqahl2nvodCiCDQ4Ge0ebzsEm6P8s0RC2tBM0Hqx0nNF5J/6t9uagFJyWIDjXy3IIWMHDJw==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -3282,16 +3340,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.15.8", - "@swc/core-darwin-x64": "1.15.8", - "@swc/core-linux-arm-gnueabihf": "1.15.8", - "@swc/core-linux-arm64-gnu": "1.15.8", - "@swc/core-linux-arm64-musl": "1.15.8", - "@swc/core-linux-x64-gnu": "1.15.8", - "@swc/core-linux-x64-musl": "1.15.8", - "@swc/core-win32-arm64-msvc": "1.15.8", - "@swc/core-win32-ia32-msvc": "1.15.8", - "@swc/core-win32-x64-msvc": "1.15.8" + "@swc/core-darwin-arm64": "1.15.10", + "@swc/core-darwin-x64": "1.15.10", + "@swc/core-linux-arm-gnueabihf": "1.15.10", + "@swc/core-linux-arm64-gnu": "1.15.10", + "@swc/core-linux-arm64-musl": "1.15.10", + "@swc/core-linux-x64-gnu": "1.15.10", + "@swc/core-linux-x64-musl": "1.15.10", + "@swc/core-win32-arm64-msvc": "1.15.10", + "@swc/core-win32-ia32-msvc": "1.15.10", + "@swc/core-win32-x64-msvc": "1.15.10" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" @@ -3303,9 +3361,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.8.tgz", - "integrity": "sha512-M9cK5GwyWWRkRGwwCbREuj6r8jKdES/haCZ3Xckgkl8MUQJZA3XB7IXXK1IXRNeLjg6m7cnoMICpXv1v1hlJOg==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.10.tgz", + "integrity": "sha512-U72pGqmJYbjrLhMndIemZ7u9Q9owcJczGxwtfJlz/WwMaGYAV/g4nkGiUVk/+QSX8sFCAjanovcU1IUsP2YulA==", "cpu": [ "arm64" ], @@ -3320,9 +3378,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.8.tgz", - "integrity": "sha512-j47DasuOvXl80sKJHSi2X25l44CMc3VDhlJwA7oewC1nV1VsSzwX+KOwE5tLnfORvVJJyeiXgJORNYg4jeIjYQ==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.10.tgz", + "integrity": "sha512-NZpDXtwHH083L40xdyj1sY31MIwLgOxKfZEAGCI8xHXdHa+GWvEiVdGiu4qhkJctoHFzAEc7ZX3GN5phuJcPuQ==", "cpu": [ "x64" ], @@ -3337,9 +3395,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.8.tgz", - "integrity": "sha512-siAzDENu2rUbwr9+fayWa26r5A9fol1iORG53HWxQL1J8ym4k7xt9eME0dMPXlYZDytK5r9sW8zEA10F2U3Xwg==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.10.tgz", + "integrity": "sha512-ioieF5iuRziUF1HkH1gg1r93e055dAdeBAPGAk40VjqpL5/igPJ/WxFHGvc6WMLhUubSJI4S0AiZAAhEAp1jDg==", "cpu": [ "arm" ], @@ -3354,9 +3412,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.8.tgz", - "integrity": "sha512-o+1y5u6k2FfPYbTRUPvurwzNt5qd0NTumCTFscCNuBksycloXY16J8L+SMW5QRX59n4Hp9EmFa3vpvNHRVv1+Q==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.10.tgz", + "integrity": "sha512-tD6BClOrxSsNus9cJL7Gxdv7z7Y2hlyvZd9l0NQz+YXzmTWqnfzLpg16ovEI7gknH2AgDBB5ywOsqu8hUgSeEQ==", "cpu": [ "arm64" ], @@ -3371,9 +3429,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.8.tgz", - "integrity": "sha512-koiCqL09EwOP1S2RShCI7NbsQuG6r2brTqUYE7pV7kZm9O17wZ0LSz22m6gVibpwEnw8jI3IE1yYsQTVpluALw==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.10.tgz", + "integrity": "sha512-4uAHO3nbfbrTcmO/9YcVweTQdx5fN3l7ewwl5AEK4yoC4wXmoBTEPHAVdKNe4r9+xrTgd4BgyPsy0409OjjlMw==", "cpu": [ "arm64" ], @@ -3388,9 +3446,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.8.tgz", - "integrity": "sha512-4p6lOMU3bC+Vd5ARtKJ/FxpIC5G8v3XLoPEZ5s7mLR8h7411HWC/LmTXDHcrSXRC55zvAVia1eldy6zDLz8iFQ==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.10.tgz", + "integrity": "sha512-W0h9ONNw1pVIA0cN7wtboOSTl4Jk3tHq+w2cMPQudu9/+3xoCxpFb9ZdehwCAk29IsvdWzGzY6P7dDVTyFwoqg==", "cpu": [ "x64" ], @@ -3405,9 +3463,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.8.tgz", - "integrity": "sha512-z3XBnbrZAL+6xDGAhJoN4lOueIxC/8rGrJ9tg+fEaeqLEuAtHSW2QHDHxDwkxZMjuF/pZ6MUTjHjbp8wLbuRLA==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.10.tgz", + "integrity": "sha512-XQNZlLZB62S8nAbw7pqoqwy91Ldy2RpaMRqdRN3T+tAg6Xg6FywXRKCsLh6IQOadr4p1+lGnqM/Wn35z5a/0Vw==", "cpu": [ "x64" ], @@ -3422,9 +3480,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.8.tgz", - "integrity": "sha512-djQPJ9Rh9vP8GTS/Df3hcc6XP6xnG5c8qsngWId/BLA9oX6C7UzCPAn74BG/wGb9a6j4w3RINuoaieJB3t+7iQ==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.10.tgz", + "integrity": "sha512-qnAGrRv5Nj/DATxAmCnJQRXXQqnJwR0trxLndhoHoxGci9MuguNIjWahS0gw8YZFjgTinbTxOwzatkoySihnmw==", "cpu": [ "arm64" ], @@ -3439,9 +3497,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.8.tgz", - "integrity": "sha512-/wfAgxORg2VBaUoFdytcVBVCgf1isWZIEXB9MZEUty4wwK93M/PxAkjifOho9RN3WrM3inPLabICRCEgdHpKKQ==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.10.tgz", + "integrity": "sha512-i4X/q8QSvzVlaRtv1xfnfl+hVKpCfiJ+9th484rh937fiEZKxZGf51C+uO0lfKDP1FfnT6C1yBYwHy7FLBVXFw==", "cpu": [ "ia32" ], @@ -3456,9 +3514,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.8.tgz", - "integrity": "sha512-GpMePrh9Sl4d61o4KAHOOv5is5+zt6BEXCOCgs/H0FLGeii7j9bWDE8ExvKFy2GRRZVNR1ugsnzaGWHKM6kuzA==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.10.tgz", + "integrity": "sha512-HvY8XUFuoTXn6lSccDLYFlXv1SU/PzYi4PyUqGT++WfTnbw/68N/7BdUZqglGRwiSqr0qhYt/EhmBpULj0J9rA==", "cpu": [ "x64" ], @@ -3703,17 +3761,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.0.tgz", - "integrity": "sha512-eEXsVvLPu8Z4PkFibtuFJLJOTAV/nPdgtSjkGoPpddpFk3/ym2oy97jynY6ic2m6+nc5M8SE1e9v/mHKsulcJg==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.1.tgz", + "integrity": "sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.53.0", - "@typescript-eslint/type-utils": "8.53.0", - "@typescript-eslint/utils": "8.53.0", - "@typescript-eslint/visitor-keys": "8.53.0", + "@typescript-eslint/scope-manager": "8.53.1", + "@typescript-eslint/type-utils": "8.53.1", + "@typescript-eslint/utils": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" @@ -3726,22 +3784,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.53.0", + "@typescript-eslint/parser": "^8.53.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.0.tgz", - "integrity": "sha512-npiaib8XzbjtzS2N4HlqPvlpxpmZ14FjSJrteZpPxGUaYPlvhzlzUZ4mZyABo0EFrOWnvyd0Xxroq//hKhtAWg==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.1.tgz", + "integrity": "sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.53.0", - "@typescript-eslint/types": "8.53.0", - "@typescript-eslint/typescript-estree": "8.53.0", - "@typescript-eslint/visitor-keys": "8.53.0", + "@typescript-eslint/scope-manager": "8.53.1", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1", "debug": "^4.4.3" }, "engines": { @@ -3757,14 +3815,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.0.tgz", - "integrity": "sha512-Bl6Gdr7NqkqIP5yP9z1JU///Nmes4Eose6L1HwpuVHwScgDPPuEWbUVhvlZmb8hy0vX9syLk5EGNL700WcBlbg==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.1.tgz", + "integrity": "sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.53.0", - "@typescript-eslint/types": "^8.53.0", + "@typescript-eslint/tsconfig-utils": "^8.53.1", + "@typescript-eslint/types": "^8.53.1", "debug": "^4.4.3" }, "engines": { @@ -3779,14 +3837,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.0.tgz", - "integrity": "sha512-kWNj3l01eOGSdVBnfAF2K1BTh06WS0Yet6JUgb9Cmkqaz3Jlu0fdVUjj9UI8gPidBWSMqDIglmEXifSgDT/D0g==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.1.tgz", + "integrity": "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.53.0", - "@typescript-eslint/visitor-keys": "8.53.0" + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3797,9 +3855,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.0.tgz", - "integrity": "sha512-K6Sc0R5GIG6dNoPdOooQ+KtvT5KCKAvTcY8h2rIuul19vxH5OTQk7ArKkd4yTzkw66WnNY0kPPzzcmWA+XRmiA==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.1.tgz", + "integrity": "sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==", "dev": true, "license": "MIT", "engines": { @@ -3814,15 +3872,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.0.tgz", - "integrity": "sha512-BBAUhlx7g4SmcLhn8cnbxoxtmS7hcq39xKCgiutL3oNx1TaIp+cny51s8ewnKMpVUKQUGb41RAUWZ9kxYdovuw==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.1.tgz", + "integrity": "sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.53.0", - "@typescript-eslint/typescript-estree": "8.53.0", - "@typescript-eslint/utils": "8.53.0", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1", + "@typescript-eslint/utils": "8.53.1", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, @@ -3839,9 +3897,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.0.tgz", - "integrity": "sha512-Bmh9KX31Vlxa13+PqPvt4RzKRN1XORYSLlAE+sO1i28NkisGbTtSLFVB3l7PWdHtR3E0mVMuC7JilWJ99m2HxQ==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.1.tgz", + "integrity": "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==", "dev": true, "license": "MIT", "engines": { @@ -3853,16 +3911,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.0.tgz", - "integrity": "sha512-pw0c0Gdo7Z4xOG987u3nJ8akL9093yEEKv8QTJ+Bhkghj1xyj8cgPaavlr9rq8h7+s6plUJ4QJYw2gCZodqmGw==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.1.tgz", + "integrity": "sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.53.0", - "@typescript-eslint/tsconfig-utils": "8.53.0", - "@typescript-eslint/types": "8.53.0", - "@typescript-eslint/visitor-keys": "8.53.0", + "@typescript-eslint/project-service": "8.53.1", + "@typescript-eslint/tsconfig-utils": "8.53.1", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/visitor-keys": "8.53.1", "debug": "^4.4.3", "minimatch": "^9.0.5", "semver": "^7.7.3", @@ -3881,16 +3939,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.0.tgz", - "integrity": "sha512-XDY4mXTez3Z1iRDI5mbRhH4DFSt46oaIFsLg+Zn97+sYrXACziXSQcSelMybnVZ5pa1P6xYkPr5cMJyunM1ZDA==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.1.tgz", + "integrity": "sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.53.0", - "@typescript-eslint/types": "8.53.0", - "@typescript-eslint/typescript-estree": "8.53.0" + "@typescript-eslint/scope-manager": "8.53.1", + "@typescript-eslint/types": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3905,13 +3963,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.0.tgz", - "integrity": "sha512-LZ2NqIHFhvFwxG0qZeLL9DvdNAHPGCY5dIRwBhyYeU+LfLhcStE1ImjsuTG/WaVh3XysGaeLW8Rqq7cGkPCFvw==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.1.tgz", + "integrity": "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/types": "8.53.1", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -4248,14 +4306,14 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", - "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz", + "integrity": "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.7", - "@babel/helper-define-polyfill-provider": "^0.6.5", + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.6", "semver": "^6.3.1" }, "peerDependencies": { @@ -4287,13 +4345,13 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", - "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz", + "integrity": "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5" + "@babel/helper-define-polyfill-provider": "^0.6.6" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -4306,9 +4364,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.15", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.15.tgz", - "integrity": "sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg==", + "version": "2.9.18", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.18.tgz", + "integrity": "sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4324,6 +4382,13 @@ "node": ">=0.6" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, "node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -4464,9 +4529,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001765", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz", - "integrity": "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==", + "version": "1.0.30001766", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", + "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", "dev": true, "funding": [ { @@ -4501,6 +4566,21 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4522,11 +4602,14 @@ "license": "MIT" }, "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true, - "license": "MIT" + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } }, "node_modules/common-tags": { "version": "1.8.2", @@ -4551,13 +4634,13 @@ "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.47.0.tgz", - "integrity": "sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz", + "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.28.0" + "browserslist": "^4.28.1" }, "funding": { "type": "opencollective", @@ -4618,6 +4701,86 @@ "postcss": "^8.0.9" } }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", @@ -4730,6 +4893,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", @@ -4767,6 +4940,65 @@ "node": ">=6.0.0" } }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/dot-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", @@ -4817,16 +5049,16 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "version": "1.5.278", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.278.tgz", + "integrity": "sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw==", "dev": true, "license": "ISC" }, "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, @@ -5943,6 +6175,16 @@ "node": ">=6.9.0" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -6437,6 +6679,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -6744,6 +7002,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -6997,9 +7268,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "dev": true, "license": "MIT" }, @@ -7086,6 +7357,13 @@ "node": ">= 0.4" } }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/microseconds": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", @@ -7201,6 +7479,19 @@ "dev": true, "license": "MIT" }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -7339,6 +7630,24 @@ "wrappy": "1" } }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -7639,9 +7948,9 @@ } }, "node_modules/prettier": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.0.tgz", - "integrity": "sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "dev": true, "license": "MIT", "bin": { @@ -7984,6 +8293,16 @@ "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==", "license": "MIT" }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -8051,9 +8370,9 @@ } }, "node_modules/rollup": { - "version": "4.55.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.2.tgz", - "integrity": "sha512-PggGy4dhwx5qaW+CKBilA/98Ql9keyfnb7lh4SR6shQ91QQQi1ORJ1v4UinkdP2i87OBs9AQFooQylcrrRfIcg==", + "version": "4.56.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.56.0.tgz", + "integrity": "sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==", "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -8066,34 +8385,75 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.55.2", - "@rollup/rollup-android-arm64": "4.55.2", - "@rollup/rollup-darwin-arm64": "4.55.2", - "@rollup/rollup-darwin-x64": "4.55.2", - "@rollup/rollup-freebsd-arm64": "4.55.2", - "@rollup/rollup-freebsd-x64": "4.55.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.55.2", - "@rollup/rollup-linux-arm-musleabihf": "4.55.2", - "@rollup/rollup-linux-arm64-gnu": "4.55.2", - "@rollup/rollup-linux-arm64-musl": "4.55.2", - "@rollup/rollup-linux-loong64-gnu": "4.55.2", - "@rollup/rollup-linux-loong64-musl": "4.55.2", - "@rollup/rollup-linux-ppc64-gnu": "4.55.2", - "@rollup/rollup-linux-ppc64-musl": "4.55.2", - "@rollup/rollup-linux-riscv64-gnu": "4.55.2", - "@rollup/rollup-linux-riscv64-musl": "4.55.2", - "@rollup/rollup-linux-s390x-gnu": "4.55.2", - "@rollup/rollup-linux-x64-gnu": "4.55.2", - "@rollup/rollup-linux-x64-musl": "4.55.2", - "@rollup/rollup-openbsd-x64": "4.55.2", - "@rollup/rollup-openharmony-arm64": "4.55.2", - "@rollup/rollup-win32-arm64-msvc": "4.55.2", - "@rollup/rollup-win32-ia32-msvc": "4.55.2", - "@rollup/rollup-win32-x64-gnu": "4.55.2", - "@rollup/rollup-win32-x64-msvc": "4.55.2", + "@rollup/rollup-android-arm-eabi": "4.56.0", + "@rollup/rollup-android-arm64": "4.56.0", + "@rollup/rollup-darwin-arm64": "4.56.0", + "@rollup/rollup-darwin-x64": "4.56.0", + "@rollup/rollup-freebsd-arm64": "4.56.0", + "@rollup/rollup-freebsd-x64": "4.56.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.56.0", + "@rollup/rollup-linux-arm-musleabihf": "4.56.0", + "@rollup/rollup-linux-arm64-gnu": "4.56.0", + "@rollup/rollup-linux-arm64-musl": "4.56.0", + "@rollup/rollup-linux-loong64-gnu": "4.56.0", + "@rollup/rollup-linux-loong64-musl": "4.56.0", + "@rollup/rollup-linux-ppc64-gnu": "4.56.0", + "@rollup/rollup-linux-ppc64-musl": "4.56.0", + "@rollup/rollup-linux-riscv64-gnu": "4.56.0", + "@rollup/rollup-linux-riscv64-musl": "4.56.0", + "@rollup/rollup-linux-s390x-gnu": "4.56.0", + "@rollup/rollup-linux-x64-gnu": "4.56.0", + "@rollup/rollup-linux-x64-musl": "4.56.0", + "@rollup/rollup-openbsd-x64": "4.56.0", + "@rollup/rollup-openharmony-arm64": "4.56.0", + "@rollup/rollup-win32-arm64-msvc": "4.56.0", + "@rollup/rollup-win32-ia32-msvc": "4.56.0", + "@rollup/rollup-win32-x64-gnu": "4.56.0", + "@rollup/rollup-win32-x64-msvc": "4.56.0", "fsevents": "~2.3.2" } }, + "node_modules/rollup-plugin-visualizer": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-6.0.5.tgz", + "integrity": "sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "open": "^8.0.0", + "picomatch": "^4.0.2", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "rolldown": "1.x || ^1.0.0-beta", + "rollup": "2.x || 3.x || 4.x" + }, + "peerDependenciesMeta": { + "rolldown": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -8194,6 +8554,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -8467,21 +8837,18 @@ } }, "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/string-width-cjs": { @@ -8500,42 +8867,6 @@ "node": ">=8" } }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/string.prototype.matchall": { "version": "4.0.12", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", @@ -8747,6 +9078,32 @@ "dev": true, "license": "MIT" }, + "node_modules/svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.4.1" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, "node_modules/synckit": { "version": "0.11.12", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", @@ -8811,6 +9168,13 @@ "node": ">=10" } }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "devOptional": true, + "license": "MIT" + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -9006,16 +9370,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.53.0.tgz", - "integrity": "sha512-xHURCQNxZ1dsWn0sdOaOfCSQG0HKeqSj9OexIxrz6ypU6wHYOdX2I3D2b8s8wFSsSOYJb+6q283cLiLlkEsBYw==", + "version": "8.53.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.53.1.tgz", + "integrity": "sha512-gB+EVQfP5RDElh9ittfXlhZJdjSU4jUSTyE2+ia8CYyNvet4ElfaLlAIqDvQV9JPknKx0jQH1racTYe/4LaLSg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.53.0", - "@typescript-eslint/parser": "8.53.0", - "@typescript-eslint/typescript-estree": "8.53.0", - "@typescript-eslint/utils": "8.53.0" + "@typescript-eslint/eslint-plugin": "8.53.1", + "@typescript-eslint/parser": "8.53.1", + "@typescript-eslint/typescript-estree": "8.53.1", + "@typescript-eslint/utils": "8.53.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -9858,18 +10222,18 @@ } }, "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -9894,90 +10258,65 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } + "license": "ISC" }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 6" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "license": "ISC", "engines": { - "node": ">= 6" + "node": ">=12" } }, "node_modules/yocto-queue": { diff --git a/package.json b/package.json index fd31f166..2fc12460 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,8 @@ "prettier": "^3.3.3", "prettier-plugin-css-order": "^2.1.2", "prettier-plugin-emotion-order": "^1.1.0", + "rollup-plugin-visualizer": "^6.0.5", + "svgo": "^4.0.0", "typescript": "^5.7.2", "typescript-eslint": "^8.11.0", "vite": "^5.4.11", diff --git a/src/assets/design/card/card.svg b/src/assets/design/card/card.svg index 20a9e429..8c6954c1 100644 --- a/src/assets/design/card/card.svg +++ b/src/assets/design/card/card.svg @@ -1,31 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/src/assets/koreaFlag.svg b/src/assets/koreaFlag.svg deleted file mode 100644 index 41942f9a..00000000 --- a/src/assets/koreaFlag.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/assets/usFlag.svg b/src/assets/usFlag.svg deleted file mode 100644 index 6f88520a..00000000 --- a/src/assets/usFlag.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/components/CardList/StockCard/StockCard.tsx b/src/components/CardList/StockCard/StockCard.tsx index bc150433..d3e6ffe0 100644 --- a/src/components/CardList/StockCard/StockCard.tsx +++ b/src/components/CardList/StockCard/StockCard.tsx @@ -45,7 +45,7 @@ export const LargeStockCard = ({
- +

민심 키워드

@@ -78,7 +78,7 @@ export const SmallStockCard = ({ return ( - +

{symbolName}

diff --git a/src/components/PopUp/PWAinfoPopUp/PWAInfoPopUp.tsx b/src/components/PopUp/PWAinfoPopUp/PWAInfoPopUp.tsx index 1f76b74e..8575b612 100644 --- a/src/components/PopUp/PWAinfoPopUp/PWAInfoPopUp.tsx +++ b/src/components/PopUp/PWAinfoPopUp/PWAInfoPopUp.tsx @@ -64,7 +64,7 @@ const PWAInfoPopUp = ({}: {}) => { 인간지표를 누려보세요.

- + diff --git a/src/pages/Lab/Step/Tutorial/Tutorial.tsx b/src/pages/Lab/Step/Tutorial/Tutorial.tsx index 594bc298..5723bff3 100644 --- a/src/pages/Lab/Step/Tutorial/Tutorial.tsx +++ b/src/pages/Lab/Step/Tutorial/Tutorial.tsx @@ -78,7 +78,7 @@ const LabTutorial = () => {

{e.title}

- +

{e.description}

))} diff --git a/src/pages/Notification/Notification.tsx b/src/pages/Notification/Notification.tsx index c50585d0..0abf79ed 100644 --- a/src/pages/Notification/Notification.tsx +++ b/src/pages/Notification/Notification.tsx @@ -44,7 +44,7 @@ const NotificationList = ({ notifications }: { notifications: NotificationItem[] if (notifications.length === 0) return ( - +

아직은 알림이 없어요

diff --git a/src/pages/Usage/Usage.tsx b/src/pages/Usage/Usage.tsx index 6c7b77d6..bb3c6579 100644 --- a/src/pages/Usage/Usage.tsx +++ b/src/pages/Usage/Usage.tsx @@ -51,7 +51,7 @@ const Usage = () => {

{index + 1}

{step.title}

- + ))} diff --git a/src/pages/Withdraw/Withdraw.tsx b/src/pages/Withdraw/Withdraw.tsx index 3ea0e3d4..44057e17 100644 --- a/src/pages/Withdraw/Withdraw.tsx +++ b/src/pages/Withdraw/Withdraw.tsx @@ -47,7 +47,7 @@ const Withdraw = () => { - +

정말 탈퇴를 진행하시겠어요?

diff --git a/vite.config.ts b/vite.config.ts index deab325f..ecbd188f 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,6 +4,7 @@ import { VitePWA } from 'vite-plugin-pwa'; import { VitePluginRadar } from 'vite-plugin-radar'; import svgr from 'vite-plugin-svgr'; import wasm from 'vite-plugin-wasm'; +import { visualizer } from 'rollup-plugin-visualizer'; export default defineConfig({ esbuild: { @@ -18,6 +19,11 @@ export default defineConfig({ id: 'G-EZPQMV95QJ', }, }), + visualizer({ + filename: './dist/stats.html', + open: false, + gzipSize: true, + }), VitePWA({ registerType: 'autoUpdate', workbox: { @@ -82,7 +88,7 @@ export default defineConfig({ assetFileNames: 'assets/[name]-[hash].[ext]', }, }, - // 500KB 목표로 설정 (Vercel 권장) + // 500KB 목표로 청크 사이즈 제한 chunkSizeWarningLimit: 500, // 소스맵 비활성화로 빌드 크기 감소 sourcemap: false, From 2fefc03f0e24e084bb1709b9d41a1cfce62119b7 Mon Sep 17 00:00:00 2001 From: durumi99 Date: Sun, 25 Jan 2026 16:17:29 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20=EC=8A=A4=ED=83=80=EC=9D=BC=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EB=B6=84=EB=A6=AC=20=EB=B0=8F=20ESLint=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 인라인 styled-components를 별도 .Style.ts 파일로 분리 (22개 파일) - 모든 Style 파일의 export 형식을 일괄 export로 통일 - ESLint flat config 형식으로 재구성 및 빌드 파일 제외 설정 - 불필요한 try/catch 구문 제거 및 React 관련 에러 수정 - 미사용 styled-component export 제거 (4개) - 모든 ESLint 에러 해결 (33개 → 0개) Co-Authored-By: Claude Sonnet 4.5 --- eslint.config.js | 58 +++--- .../CardList/StockCard/StockCard.Style.ts | 9 - src/components/Common/Common.Style.ts | 85 +++++++++ src/components/Common/Common.tsx | 85 +-------- src/components/Common/ContentsItem.Style.ts | 74 -------- src/components/Common/Header.Style.ts | 38 ++++ src/components/Common/Header.tsx | 37 +--- .../ScrollTopButton/ScrollTopButton.Style.ts | 31 ++++ .../ScrollTopButton/ScrollTopButton.tsx | 30 +-- src/components/Event/Disquiet.Style.ts | 8 +- src/components/Lab/Common.Style.ts | 159 ---------------- src/components/Loading/Loading.Style.ts | 67 +++++++ src/components/Loading/Loading.tsx | 66 +------ .../AboutReportClass.Style.ts | 107 +++++++++++ .../AboutReportClass/AboutReportClass.tsx | 108 +---------- .../AboutReportPattern.Style.ts | 107 +++++++++++ .../AboutReportPattern/AboutReportPattern.tsx | 106 +---------- .../AboutAntVoice/AboutAntVoice.Style.ts | 21 +++ .../AboutAntVoice/AboutAntVoice.tsx | 20 +- .../AboutHumanZipyo/AboutHumanZipyo.Style.ts | 151 +++++++++++++++ .../AboutHumanZipyo/AboutHumanZipyo.tsx | 150 +-------------- src/components/Modal/Common.Style.ts | 71 ------- .../Modal/Confirm/ConfirmModal.Style.ts | 78 ++++++++ src/components/Modal/Confirm/ConfirmModal.tsx | 77 +------- .../ExperimentDetail/ExperimentDetail.tsx | 1 - .../BottomUpCancel/BottomUpCancel.Style.ts | 58 ++++++ .../Layout/BottomUpCancel/BottomUpCancel.tsx | 57 +----- .../MyPage/MyPageInput/MyPageInput.Style.ts | 67 +++++++ .../MyPage/MyPageInput/MyPageInput.tsx | 66 +------ .../ProfileCircle/ProfileCircle.Style.ts | 42 +++++ .../MyPage/ProfileCircle/ProfileCircle.tsx | 41 +---- .../PopUp/PWAinfoPopUp/PWAInfoPopUp.tsx | 2 +- .../Search/SearchTitle/SearchTitle.Style.ts | 32 +++- .../Search/StockChart/StockChart.Style.ts | 83 ++++----- .../AutoComplete/Keywords/Keywords.tsx | 4 +- .../SearchBar/AutoComplete/Stocks/Stocks.tsx | 2 +- .../PopularKeywords/PopularKeywords.Style.ts | 40 ++++ .../PopularKeywords/PopularKeywords.tsx | 39 +--- src/components/SlideView/SlideView.Style.ts | 14 +- src/components/SlideView/SlideView.tsx | 1 + src/components/Toast/Toast.Style.ts | 59 ++++++ src/components/Toast/Toast.tsx | 58 +----- src/controllers/auth/api.ts | 130 ++++++------- src/controllers/common/base.ts | 166 ++++++++--------- src/controllers/stocks/query.ts | 4 +- src/hooks/useCanvas.ts | 4 +- src/hooks/useModal.Style.ts | 19 ++ src/hooks/useModal.tsx | 18 +- src/hooks/useQueryComponent.tsx | 4 +- src/hooks/useSocialAuth.ts | 1 + .../BottomNavigation.Style.ts | 6 +- src/layout/Mainlayout/Mainlayout.Style.ts | 16 +- src/layout/SearchHeader/SearchHeader.Style.ts | 47 +++++ src/layout/SearchHeader/SearchHeader.tsx | 46 +---- src/pages/Lab/Step/Tutorial/Tutorial.tsx | 4 +- src/pages/Login/Login.tsx | 2 +- src/pages/MyPage/Done/Done.Style.ts | 55 ++++++ src/pages/MyPage/Done/Done.tsx | 54 +----- src/pages/MyPage/Edit/Edit.Style.ts | 54 ++++++ src/pages/MyPage/Edit/Edit.tsx | 66 +------ src/pages/MyPage/Profile/Profile.Style.ts | 45 +++++ src/pages/MyPage/Profile/Profile.tsx | 44 +---- src/pages/Register/Register.tsx | 13 +- src/pages/Term/Term.tsx | 8 +- src/pages/Withdraw/Withdraw.Style.ts | 171 +++++++++++++++++ src/pages/Withdraw/Withdraw.tsx | 173 ++---------------- src/pages/WithdrawDone/WithdrawDone.Style.ts | 64 +++++++ src/pages/WithdrawDone/WithdrawDone.tsx | 63 +------ src/utils/getBusinessDaysLater.ts | 2 +- tsconfig.app.tsbuildinfo | 2 +- tsconfig.node.tsbuildinfo | 2 +- 71 files changed, 1723 insertions(+), 1969 deletions(-) create mode 100644 src/components/Common/Common.Style.ts delete mode 100644 src/components/Common/ContentsItem.Style.ts create mode 100644 src/components/Common/Header.Style.ts create mode 100644 src/components/Common/ScrollTopButton/ScrollTopButton.Style.ts delete mode 100644 src/components/Lab/Common.Style.ts create mode 100644 src/components/Loading/Loading.Style.ts create mode 100644 src/components/Modal/AboutReportClass/AboutReportClass.Style.ts create mode 100644 src/components/Modal/AboutReportPattern/AboutReportPattern.Style.ts create mode 100644 src/components/Modal/CenterTutorial/AboutAntVoice/AboutAntVoice.Style.ts create mode 100644 src/components/Modal/CenterTutorial/AboutHumanZipyo/AboutHumanZipyo.Style.ts delete mode 100644 src/components/Modal/Common.Style.ts create mode 100644 src/components/Modal/Confirm/ConfirmModal.Style.ts create mode 100644 src/components/Modal/Layout/BottomUpCancel/BottomUpCancel.Style.ts create mode 100644 src/components/MyPage/MyPageInput/MyPageInput.Style.ts create mode 100644 src/components/MyPage/ProfileCircle/ProfileCircle.Style.ts create mode 100644 src/components/SearchBar/PopularKeywords/PopularKeywords.Style.ts create mode 100644 src/components/Toast/Toast.Style.ts create mode 100644 src/hooks/useModal.Style.ts create mode 100644 src/layout/SearchHeader/SearchHeader.Style.ts create mode 100644 src/pages/MyPage/Done/Done.Style.ts create mode 100644 src/pages/MyPage/Edit/Edit.Style.ts create mode 100644 src/pages/MyPage/Profile/Profile.Style.ts create mode 100644 src/pages/Withdraw/Withdraw.Style.ts create mode 100644 src/pages/WithdrawDone/WithdrawDone.Style.ts diff --git a/eslint.config.js b/eslint.config.js index 9fc58d6c..236f4a7c 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -4,40 +4,38 @@ import globals from 'globals'; import tseslint from 'typescript-eslint'; export default [ + { + ignores: [ + 'dist/**', + 'public/assets/**', + 'node_modules/**', + 'build/**', + '*.config.js', + '*.config.ts', + 'src/utils/test.js', + 'src/utils/worker/**', + 'src/utils/wasm/**', + ], + }, { files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'] }, { languageOptions: { globals: globals.browser } }, + pluginJs.configs.recommended, + ...tseslint.configs.recommended, + pluginReact.configs.flat.recommended, { - 'jsx-runtime': { - env: { - browser: true, - es6: true, - node: true, - }, - plugins: ['@typescript-eslint', 'react', 'prettier'], - extends: [ - 'prettier', - 'eslint:recommended', - 'plugin:react/recommended', - 'plugin:prettier/recommended', - 'plugin:@typescript-eslint/recommended', - ], - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - project: './tsconfig.json', - }, - rules: { - 'prettier/prettier': 'error', - 'react/react-in-jsx-scope': 0, - 'react/prefer-stateless-function': 0, - 'react/jsx-filename-extension': 0, - 'react/jsx-one-expression-per-line': 0, - 'no-nested-ternary': 0, + settings: { + react: { + version: 'detect', }, }, + rules: { + 'react/react-in-jsx-scope': 0, + 'react/prefer-stateless-function': 0, + 'react/jsx-filename-extension': 0, + 'react/jsx-one-expression-per-line': 0, + 'no-nested-ternary': 0, + 'react/prop-types': 0, + '@typescript-eslint/no-explicit-any': 'warn', + }, }, - pluginJs.configs.recommended, - ...tseslint.configs.recommended, - pluginReact.configs.flat.recommended, ]; diff --git a/src/components/CardList/StockCard/StockCard.Style.ts b/src/components/CardList/StockCard/StockCard.Style.ts index fab021d4..25eebad5 100644 --- a/src/components/CardList/StockCard/StockCard.Style.ts +++ b/src/components/CardList/StockCard/StockCard.Style.ts @@ -90,14 +90,6 @@ const LargeStockCardHeader = styled.div({ }, }); -const LargeStockCardHeaderImage = styled.div({ - width: '24px', - height: '24px', - borderRadius: '50%', - background: 'red', - flexShrink: '0', -}); - const LargeStockCardContent = styled.div({ display: 'flex', padding: '16px 12px 12px', @@ -215,7 +207,6 @@ export { StockCardItem, LargeStockCardContainer, LargeStockCardHeader, - LargeStockCardHeaderImage, LargeStockCardContent, LargeStockCardContentTextContainer, SmallStockCardContainer, diff --git a/src/components/Common/Common.Style.ts b/src/components/Common/Common.Style.ts new file mode 100644 index 00000000..d011e57c --- /dev/null +++ b/src/components/Common/Common.Style.ts @@ -0,0 +1,85 @@ +import styled from '@emotion/styled'; +import { theme } from '../../styles/themes'; +import { AbsoluteDivProps, ButtonDivProps, FlexDivProps, ImgDivProps } from './Common.Props'; + +const FlexDiv = styled.div( + ({ + flexDirection = 'row', + alignItems = 'normal', + justifyContent = 'normal', + padding = '0', + width = 'auto', + gap = '0', + }: FlexDivProps) => ({ + display: 'flex', + flexDirection: flexDirection, + alignItems: alignItems, + justifyContent: justifyContent, + padding: padding, + width: width, + gap: gap, + }), +); + +const ButtonDiv = styled.div( + ({ gap = '0', padding = '0', background, width = 'auto', height = 'auto', radius = 'auto' }: ButtonDivProps) => ({ + display: 'flex', + padding: padding, + background: theme.colors[background ?? 'transparent'], + cursor: 'pointer', + gap: gap, + width: width, + height: height, + borderRadius: radius, + }), +); + +const RelativeDiv = styled.div({ + position: 'relative', +}); + +const AbsoluteDiv = styled.div( + { position: 'absolute' }, + ({ + width = 'auto', + height = 'auto', + top = 'auto', + bottom = 'auto', + left = 'auto', + right = 'auto', + }: AbsoluteDivProps) => ({ + width: width, + height: height, + top: top, + bottom: bottom, + left: left, + right: right, + }), +); + +const ImgDiv = styled.img(({ width = 'auto', height = 'auto', objectFit = 'contain' }: ImgDivProps) => ({ + width: width, + height: height, + objectFit: objectFit, +})); + +const Container = styled.div({ + display: 'flex', + flexDirection: 'column', + boxSizing: 'border-box', + width: '100%', + height: '100%', + justifyContent: 'center', + alignItems: 'center', + overflow: 'hidden', + + ['>img']: { + objectFit: 'contain', + objectPosition: 'center', + + width: '100%', + height: '100%', + }, +}); + +export { FlexDiv, ButtonDiv, RelativeDiv, AbsoluteDiv, ImgDiv, Container }; diff --git a/src/components/Common/Common.tsx b/src/components/Common/Common.tsx index 38ca9e2a..81e314b3 100644 --- a/src/components/Common/Common.tsx +++ b/src/components/Common/Common.tsx @@ -1,69 +1,9 @@ import styled from '@emotion/styled'; import { media, theme, themeColor, themeFontSizeBody, themeTextType } from '../../styles/themes'; -import { AbsoluteDivProps, ButtonDivProps, FlexDivProps, ImgDivProps } from './Common.Props'; -const FlexDiv = styled.div( - ({ - flexDirection = 'row', - alignItems = 'normal', - justifyContent = 'normal', - padding = '0', - width = 'auto', - gap = '0', - }: FlexDivProps) => ({ - display: 'flex', - flexDirection: flexDirection, - alignItems: alignItems, - justifyContent: justifyContent, - padding: padding, - width: width, - gap: gap, - }), -); +export { FlexDiv, ButtonDiv, RelativeDiv, AbsoluteDiv, ImgDiv, Container } from './Common.Style'; -const ButtonDiv = styled.div( - ({ gap = '0', padding = '0', background, width = 'auto', height = 'auto', radius = 'auto' }: ButtonDivProps) => ({ - display: 'flex', - padding: padding, - background: theme.colors[background ?? 'transparent'], - cursor: 'pointer', - gap: gap, - width: width, - height: height, - borderRadius: radius, - }), -); - -const RelativeDiv = styled.div({ - position: 'relative', -}); - -const AbsoluteDiv = styled.div( - { position: 'absolute' }, - ({ - width = 'auto', - height = 'auto', - top = 'auto', - bottom = 'auto', - left = 'auto', - right = 'auto', - }: AbsoluteDivProps) => ({ - width: width, - height: height, - top: top, - bottom: bottom, - left: left, - right: right, - }), -); - -const ImgDiv = styled.img(({ width = 'auto', height = 'auto', objectFit = 'contain' }: ImgDivProps) => ({ - width: width, - height: height, - objectFit: objectFit, -})); - -const StyledSVG = ({ +export const StyledSVG = ({ svg, fill, stroke, @@ -94,24 +34,3 @@ const StyledSVG = ({ }); return ; }; - -const Container = styled.div({ - display: 'flex', - flexDirection: 'column', - boxSizing: 'border-box', - width: '100%', - height: '100%', - justifyContent: 'center', - alignItems: 'center', - overflow: 'hidden', - - ['>img']: { - objectFit: 'contain', - objectPosition: 'center', - - width: '100%', - height: '100%', - }, -}); - -export { FlexDiv, ButtonDiv, RelativeDiv, AbsoluteDiv, ImgDiv, StyledSVG, Container }; diff --git a/src/components/Common/ContentsItem.Style.ts b/src/components/Common/ContentsItem.Style.ts deleted file mode 100644 index 5b1fbecf..00000000 --- a/src/components/Common/ContentsItem.Style.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { css } from '@emotion/react'; -import styled from '@emotion/styled'; -import { media, theme, themeColor } from '@styles/themes'; - -const ContentsItemContainer = styled.div({ - display: 'flex', - flexDirection: 'column', - gap: '24px', - - [media[0]]: { - gap: '18px', - }, -}); - -const ContentsItemTitle = styled.div<{ color?: themeColor }>(({ color }) => - css({ - display: 'flex', - flexDirection: 'column', - alignItems: 'flex-start', - gap: '8px', - color: theme.colors.grayscale10, - ...theme.font.title20Semibold, - - ['.btn_info']: { - height: '0.8em', - marginLeft: '4px', - cursor: 'pointer', - }, - - ['svg']: { - width: 'auto', - height: '0.9em', - fill: color ? theme.colors[color] : '', - }, - - [media[0]]: { - gap: '6px', - - ['.btn_info']: { - marginLeft: '0px', - }, - }, - }), -); - -const ContentsItemContent = styled.div({ - display: 'flex', - flexDirection: 'column', - gap: '18px', - margin: '0 32px', - - [media[0]]: { - margin: '0 0px', - }, -}); - -export const DetailText = styled.div({ - ...theme.font.detail12Medium, - color: theme.colors.sub_gray6, -}); - -export const TitleDetailText = styled.div({ - ...theme.font.body14Medium, - color: theme.colors.sub_gray8, -}); - -export const ContentsItemTitleSeparator = styled.div({ - display: 'flex', - alignItems: 'center', - justifyContent: 'space-between', - width: '100%', -}); - -export { ContentsItemContainer, ContentsItemTitle, ContentsItemContent }; diff --git a/src/components/Common/Header.Style.ts b/src/components/Common/Header.Style.ts new file mode 100644 index 00000000..bb90e787 --- /dev/null +++ b/src/components/Common/Header.Style.ts @@ -0,0 +1,38 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const HeaderContainer = styled.div({ + paddingBottom: '8px', + borderBottom: `4px solid ${theme.colors.sub_gray11}`, +}); + +const HeaderContents = styled.div({ + position: 'relative', + display: 'flex', + alignItems: 'center', + padding: '8px 20px', + gap: '12px', + + ['>p']: { + position: 'absolute', + left: '50%', + transform: 'translateX(-50%)', + ...theme.font.body18Semibold, + color: theme.colors.sub_white, + margin: '0', + }, + + ['>svg']: { + width: '32px', + height: 'auto', + aspectRatio: '1 / 1', + cursor: 'pointer', + fill: theme.colors.sub_gray5, + }, + + ['>span']: { + flexGrow: 1, + }, +}); + +export { HeaderContainer, HeaderContents }; diff --git a/src/components/Common/Header.tsx b/src/components/Common/Header.tsx index f13b475a..dbaafc09 100644 --- a/src/components/Common/Header.tsx +++ b/src/components/Common/Header.tsx @@ -1,42 +1,7 @@ -import styled from '@emotion/styled'; import { useNavigate } from 'react-router-dom'; -import { theme } from '@styles/themes'; import ArrowLeftSVG from '@assets/arrowLeft.svg?react'; import CloseSVG from '@assets/close.svg?react'; - -const HeaderContainer = styled.div({ - paddingBottom: '8px', - borderBottom: `4px solid ${theme.colors.sub_gray11}`, -}); - -const HeaderContents = styled.div({ - position: 'relative', - display: 'flex', - alignItems: 'center', - padding: '8px 20px', - gap: '12px', - - ['>p']: { - position: 'absolute', - left: '50%', - transform: 'translateX(-50%)', - ...theme.font.body18Semibold, - color: theme.colors.sub_white, - margin: '0', - }, - - ['>svg']: { - width: '32px', - height: 'auto', - aspectRatio: '1 / 1', - cursor: 'pointer', - fill: theme.colors.sub_gray5, - }, - - ['>span']: { - flexGrow: 1, - }, -}); +import { HeaderContainer, HeaderContents } from './Header.Style'; const Header = ({ title, diff --git a/src/components/Common/ScrollTopButton/ScrollTopButton.Style.ts b/src/components/Common/ScrollTopButton/ScrollTopButton.Style.ts new file mode 100644 index 00000000..236998ad --- /dev/null +++ b/src/components/Common/ScrollTopButton/ScrollTopButton.Style.ts @@ -0,0 +1,31 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const ScrollTopButtonContainer = styled.div( + ({ isHidden }: { isHidden: boolean }) => ({ + display: isHidden ? 'none' : 'flex', + }), + { + position: 'fixed', + bottom: '96px', + right: '0', + width: '58px', + height: '58px', + margin: '20px', + borderRadius: '50%', + alignItems: 'center', + justifyContent: 'center', + background: 'rgba(52, 58, 64, 0.5)', + boxShadow: '5px 5px 10px rgba(0, 0, 0, 0.7)', + backdropFilter: 'blur(10px)', + + ['>svg']: { + width: '32px', + height: 'auto', + aspectRatio: '1 / 1', + fill: theme.colors.sub_white, + }, + }, +); + +export { ScrollTopButtonContainer }; diff --git a/src/components/Common/ScrollTopButton/ScrollTopButton.tsx b/src/components/Common/ScrollTopButton/ScrollTopButton.tsx index 01c5d41b..d867b742 100644 --- a/src/components/Common/ScrollTopButton/ScrollTopButton.tsx +++ b/src/components/Common/ScrollTopButton/ScrollTopButton.tsx @@ -1,34 +1,6 @@ -import styled from '@emotion/styled'; import { useEffect, useState } from 'react'; -import { theme } from '@styles/themes'; import ArrowUpSVG from '@assets/icons/arrowUp.svg?react'; - -const ScrollTopButtonContainer = styled.div( - ({ isHidden }: { isHidden: boolean }) => ({ - display: isHidden ? 'none' : 'flex', - }), - { - position: 'fixed', - bottom: '96px', - right: '0', - width: '58px', - height: '58px', - margin: '20px', - borderRadius: '50%', - alignItems: 'center', - justifyContent: 'center', - background: 'rgba(52, 58, 64, 0.5)', - boxShadow: '5px 5px 10px rgba(0, 0, 0, 0.7)', - backdropFilter: 'blur(10px)', - - ['>svg']: { - width: '32px', - height: 'auto', - aspectRatio: '1 / 1', - fill: theme.colors.sub_white, - }, - }, -); +import { ScrollTopButtonContainer } from './ScrollTopButton.Style'; const ScrollTopButton = () => { const [isScrolled, setIsScrolled] = useState(false); diff --git a/src/components/Event/Disquiet.Style.ts b/src/components/Event/Disquiet.Style.ts index 43dcfd88..4f496d7a 100644 --- a/src/components/Event/Disquiet.Style.ts +++ b/src/components/Event/Disquiet.Style.ts @@ -23,7 +23,7 @@ const elevator = keyframes({ }, }); -export const DisquietViewStyled = styled.div({ +const DisquietViewStyled = styled.div({ position: 'absolute', top: 0, right: 300, @@ -39,7 +39,7 @@ export const DisquietViewStyled = styled.div({ animation: shiny + ' 12s ease-in-out 1s infinite', }); -export const DisquietViewContainer = styled.div({ +const DisquietViewContainer = styled.div({ position: 'absolute', top: '0', right: '0', @@ -89,7 +89,7 @@ export const DisquietViewContainer = styled.div({ }, }); -export const DisquietViewTitleContainer = styled.div({ +const DisquietViewTitleContainer = styled.div({ display: 'flex', flexDirection: 'column', gap: '12px', @@ -114,3 +114,5 @@ export const DisquietViewTitleContainer = styled.div({ }, }, }); + +export { DisquietViewStyled, DisquietViewContainer, DisquietViewTitleContainer }; diff --git a/src/components/Lab/Common.Style.ts b/src/components/Lab/Common.Style.ts deleted file mode 100644 index de6d2ab7..00000000 --- a/src/components/Lab/Common.Style.ts +++ /dev/null @@ -1,159 +0,0 @@ -import styled from '@emotion/styled'; -import { theme } from '@styles/themes'; - -export const Container = styled.div` - background: black; - color: ${theme.colors.sub_white}; - display: flex; - flex-direction: column; - height: 100vh; -`; - -export const TopBar = styled.div<{ statusRate: number }>` - position: relative; - display: flex; - align-items: center; - justify-content: center; - height: 64px; - padding: 24px; - box-sizing: border-box; - border-bottom: 4px solid ${theme.colors.sub_gray11}; - - &::before { - position: absolute; - bottom: -4px; - left: 0; - background: ${theme.colors.sub_gray9}; - width: ${({ statusRate }) => `${statusRate}%`}; - height: 4px; - content: ''; - } -`; - -export const BackIcon = styled.div` - position: absolute; - left: 20px; - top: 50%; - transform: translateY(-50%); - display: flex; - align-items: center; - padding-left: 8px; -`; - -export const TopBarTitle = styled.div` - ${theme.font.body18Semibold}; - color: ${theme.colors.sub_gray5}; -`; - -export const TabContainer = styled.div` - border-bottom: 1px solid ${theme.colors.sub_gray6}; - padding: 0 24px; -`; - -export const InnerContainer = styled.div` - padding: 24px; - padding-bottom: 120px; - overflow-y: auto; - justify-content: space-between; -`; - -export const Title = styled.div` - ${theme.font.title20Semibold} - margin-bottom: 12px; -`; - -export const Description = styled.p` - ${theme.font.body14Medium}; - color: ${theme.colors.sub_gray6}; - margin-bottom: 36px; -`; - -export const NavButtonContainer = styled.div` - display: flex; - justify-content: space-between; - margin-top: 100px; -`; - -export const NavButton = styled.button<{ next?: boolean; active?: boolean }>` - ${theme.font.body18Semibold}; - flex: 1; - padding: 12px; - margin: 0 4px; - border-radius: 8px; - border: none; - background: ${({ next, active }) => - active ? theme.colors.sub_blue6 : next ? theme.colors.sub_gray8 : theme.colors.sub_gray11}; - color: ${({ next, active }) => - active ? theme.colors.sub_white : next ? theme.colors.sub_black : theme.colors.sub_gray5}; -`; - -export const IndustryTag = styled.div<{ selected: boolean }>` - padding: 8px 16px; - background: ${({ selected }) => (selected ? theme.colors.sub_blue6 : theme.colors.sub_gray10)}; - color: ${({ selected }) => (selected ? theme.colors.sub_white : theme.colors.sub_gray6)}; - border-radius: 50px; -`; - -export const SearchInput = styled.input` - background: transparent; - border: none; - outline: none; - flex: 1; - color: white; - - &::placeholder { - ${theme.font.body16Medium} - color: ${theme.colors.sub_gray7}; - } -`; - -export const SearchIconWrapper = styled.div` - display: flex; - align-items: center; - justify-content: center; - color: ${theme.colors.sub_gray8}; -`; - -export const SearchBar = styled.div` - background: ${theme.colors.sub_gray11}; - color: white; - border-radius: 8px; - display: flex; - align-items: center; - padding: 10px 12px; -`; - -export const ToastStyle = styled.div` - ${theme.font.detail12Semibold} - color:${theme.colors.sub_gray2}; - position: fixed; - bottom: 100px; - left: 50%; - transform: translateX(-50%); - padding: 12px 16px; - background: rgba(0, 0, 0, 0.8); - border: 1px solid rgba(73, 80, 87, 0.5); - border-radius: 5px; - z-index: 1000; - - max-width: 80vw; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - - display: flex; - align-items: center; - justify-content: center; -`; - -export const Divider = styled.div` - background-color: ${theme.colors.sub_gray11}; - width: calc(100% + 48px); - border: none; - height: 4px; - margin: 24px -24px; -`; - -export const StatusTitle = styled.p` - ${theme.font.title20Medium} -`; diff --git a/src/components/Loading/Loading.Style.ts b/src/components/Loading/Loading.Style.ts new file mode 100644 index 00000000..e5d2d48c --- /dev/null +++ b/src/components/Loading/Loading.Style.ts @@ -0,0 +1,67 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const LoadingContainer = styled.div( + ({ top, bottom }: { top?: string; bottom?: string }) => ({ + top: top ?? 0, + bottom: bottom ?? 0, + }), + { + position: 'fixed', + bottom: '96px', + left: 0, + right: 0, + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + background: 'linear-gradient(180deg, rgba(16, 16, 16, 0.4) 0%, #101010DD 81.02%)', + backdropFilter: 'blur(2.5px)', // Note: backdrop-filter has minimal browser support + zIndex: 9999, + + ['>svg']: { + position: 'absolute', + width: '110%', + height: 'auto', + right: '0', + top: '0', + }, + }, +); + +const LoadingContent = styled.div({ + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + gap: '16px', + + ['>video']: { + width: '80px', + height: 'auto', + aspectRatio: '1 / 1', + }, + + ['>div']: { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + gap: '8px', + + ['>p']: { + margin: '0', + + ['&.title']: { + ...theme.font.title20Semibold, + color: theme.colors.sub_gray4, + }, + + ['&.desc']: { + ...theme.font.body16Regular, + color: theme.colors.sub_gray6, + }, + }, + }, +}); + +export { LoadingContainer, LoadingContent }; diff --git a/src/components/Loading/Loading.tsx b/src/components/Loading/Loading.tsx index bc4fe750..b4972fe2 100644 --- a/src/components/Loading/Loading.tsx +++ b/src/components/Loading/Loading.tsx @@ -1,70 +1,6 @@ -import styled from '@emotion/styled'; -import { theme } from '@styles/themes'; import LoadingWEBM from '@assets/Loading.webm'; import BackgroundSVG from '@assets/background.svg?react'; - -const LoadingContainer = styled.div( - ({ top, bottom }: { top?: string; bottom?: string }) => ({ - top: top ?? 0, - bottom: bottom ?? 0, - }), - { - position: 'fixed', - bottom: '96px', - left: 0, - right: 0, - display: 'flex', - justifyContent: 'center', - alignItems: 'center', - background: 'linear-gradient(180deg, rgba(16, 16, 16, 0.4) 0%, #101010DD 81.02%)', - backdropFilter: 'blur(2.5px)', // Note: backdrop-filter has minimal browser support - zIndex: 9999, - - ['>svg']: { - position: 'absolute', - width: '110%', - height: 'auto', - right: '0', - top: '0', - }, - }, -); - -const LoadingContent = styled.div({ - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - justifyContent: 'center', - gap: '16px', - - ['>video']: { - width: '80px', - height: 'auto', - aspectRatio: '1 / 1', - }, - - ['>div']: { - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - justifyContent: 'center', - gap: '8px', - - ['>p']: { - margin: '0', - - ['&.title']: { - ...theme.font.title20Semibold, - color: theme.colors.sub_gray4, - }, - - ['&.desc']: { - ...theme.font.body16Regular, - color: theme.colors.sub_gray6, - }, - }, - }, -}); +import { LoadingContainer, LoadingContent } from './Loading.Style'; const Loading = ({ isLoading, title, desc }: { isLoading?: boolean; title: string; desc?: string }) => { if (!isLoading) { diff --git a/src/components/Modal/AboutReportClass/AboutReportClass.Style.ts b/src/components/Modal/AboutReportClass/AboutReportClass.Style.ts new file mode 100644 index 00000000..bcbf9950 --- /dev/null +++ b/src/components/Modal/AboutReportClass/AboutReportClass.Style.ts @@ -0,0 +1,107 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const Container = styled.div({ + display: 'flex', + flexDirection: 'column', + gap: '16px', +}); + +const Header = styled.div({ + display: 'flex', + flexDirection: 'column', + gap: '4px', + padding: '14px 10px', + borderBottom: `1px solid ${theme.colors.sub_gray10}`, + margin: '0 20px', + + ['>p']: { + margin: '0', + wordBreak: 'keep-all', + + ['&.title']: { + ...theme.font.body18Semibold, + color: theme.colors.sub_gray1, + + ['>svg']: { + width: '24px', + height: 'auto', + aspectRatio: '1 / 1', + fill: theme.colors.sub_white, + flexShrink: '0', + verticalAlign: 'middle', + }, + }, + + ['&.description']: { + ...theme.font.body14Medium, + color: theme.colors.sub_gray7, + }, + }, +}); + +const TabContainer = styled.div({ + display: 'flex', + gap: '16px', + overflow: 'auto', + padding: '0 20px', + + msOverflowStyle: 'none', + ['&::-webkit-scrollbar']: { + display: 'none', + }, +}); + +const TabItem = styled.span( + ({ isSelected }: { isSelected?: boolean }) => ({ + background: isSelected ? theme.colors.sub_blue6 : theme.colors.sub_gray10, + color: isSelected ? theme.colors.sub_white : theme.colors.sub_gray6, + }), + { + position: 'relative', + ...theme.font.body14Medium, + whiteSpace: 'nowrap', + padding: '8px 16px', + borderRadius: '999px', + }, +); + +const Content = styled.div({ + display: 'flex', + flexDirection: 'column', + padding: '20px 10px 12px', + margin: '0 20px', + background: theme.colors.sub_gray11, + borderRadius: '4px', + gap: '20px', + + ['>span.divider']: { + width: '100%', + height: '1px', + background: theme.colors.sub_gray10, + }, +}); + +const ContentHeader = styled.div({ + display: 'flex', + flexDirection: 'column', + gap: '8px', + padding: '0 8px', + + ['>p']: { + margin: '0', + + ['&.title']: { + ...theme.font.body14Semibold, + color: theme.colors.sub_gray2, + }, + ['&.description']: { + ...theme.font.detail12Medium, + color: theme.colors.sub_gray5, + lineHeight: '175%', + whiteSpace: 'pre-line', + }, + }, +}); + +export { Container, Header, TabContainer, TabItem, Content, ContentHeader }; diff --git a/src/components/Modal/AboutReportClass/AboutReportClass.tsx b/src/components/Modal/AboutReportClass/AboutReportClass.tsx index 1ead78e8..601b0be6 100644 --- a/src/components/Modal/AboutReportClass/AboutReportClass.tsx +++ b/src/components/Modal/AboutReportClass/AboutReportClass.tsx @@ -1,4 +1,3 @@ -import styled from '@emotion/styled'; import { useState } from 'react'; import ReportClassChart from '@components/Lab/ReportClassChart/ReportClassChart'; import { @@ -6,111 +5,8 @@ import { reportClassList, reportClassMap, } from '@components/Lab/ReportClassChart/ReportClassChart.Type'; -import { theme } from '@styles/themes'; import QuestionMarkSVG from '@assets/icons/questionMark.svg?react'; - -const Container = styled.div({ - display: 'flex', - flexDirection: 'column', - gap: '16px', -}); - -const Header = styled.div({ - display: 'flex', - flexDirection: 'column', - gap: '4px', - padding: '14px 10px', - borderBottom: `1px solid ${theme.colors.sub_gray10}`, - margin: '0 20px', - - ['>p']: { - margin: '0', - wordBreak: 'keep-all', - - ['&.title']: { - ...theme.font.body18Semibold, - color: theme.colors.sub_gray1, - - ['>svg']: { - width: '24px', - height: 'auto', - aspectRatio: '1 / 1', - fill: theme.colors.sub_white, - flexShrink: '0', - verticalAlign: 'middle', - }, - }, - - ['&.description']: { - ...theme.font.body14Medium, - color: theme.colors.sub_gray7, - }, - }, -}); - -const TabContainer = styled.div({ - display: 'flex', - gap: '16px', - overflow: 'auto', - padding: '0 20px', - - msOverflowStyle: 'none', - ['&::-webkit-scrollbar']: { - display: 'none', - }, -}); - -const TabItem = styled.span( - ({ isSelected }: { isSelected?: boolean }) => ({ - background: isSelected ? theme.colors.sub_blue6 : theme.colors.sub_gray10, - color: isSelected ? theme.colors.sub_white : theme.colors.sub_gray6, - }), - { - position: 'relative', - ...theme.font.body14Medium, - whiteSpace: 'nowrap', - padding: '8px 16px', - borderRadius: '999px', - }, -); - -const Content = styled.div({ - display: 'flex', - flexDirection: 'column', - padding: '20px 10px 12px', - margin: '0 20px', - background: theme.colors.sub_gray11, - borderRadius: '4px', - gap: '20px', - - ['>span.divider']: { - width: '100%', - height: '1px', - background: theme.colors.sub_gray10, - }, -}); - -const ContentHeader = styled.div({ - display: 'flex', - flexDirection: 'column', - gap: '8px', - padding: '0 8px', - - ['>p']: { - margin: '0', - - ['&.title']: { - ...theme.font.body14Semibold, - color: theme.colors.sub_gray2, - }, - ['&.description']: { - ...theme.font.detail12Medium, - color: theme.colors.sub_gray5, - lineHeight: '175%', - whiteSpace: 'pre-line', - }, - }, -}); +import { Container, Content, ContentHeader, Header, TabContainer, TabItem } from './AboutReportClass.Style'; const AboutReportClass = () => { const [isSelected, setIsSelected] = useState('worst'); @@ -119,7 +15,7 @@ const AboutReportClass = () => {

- 다른 '인간지표' 유형은 뭐가 있어요? + 다른 '인간지표' 유형은 뭐가 있어요?

실험이 끝났을 때 수익률이 0이상인 실험을,
diff --git a/src/components/Modal/AboutReportPattern/AboutReportPattern.Style.ts b/src/components/Modal/AboutReportPattern/AboutReportPattern.Style.ts new file mode 100644 index 00000000..9c9c86d3 --- /dev/null +++ b/src/components/Modal/AboutReportPattern/AboutReportPattern.Style.ts @@ -0,0 +1,107 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const Container = styled.div({ + display: 'flex', + flexDirection: 'column', + gap: '16px', +}); + +const Header = styled.div({ + display: 'flex', + flexDirection: 'column', + gap: '16px', + padding: '14px 10px', + margin: '0 20px', + + ['>p']: { + margin: '0', + wordBreak: 'keep-all', + + ['&.title']: { + ...theme.font.body18Semibold, + color: theme.colors.sub_gray1, + + ['>svg']: { + width: '24px', + height: 'auto', + aspectRatio: '1 / 1', + fill: theme.colors.sub_white, + flexShrink: '0', + verticalAlign: 'middle', + }, + }, + }, + + ['>span.divider']: { + width: '100%', + height: '1px', + background: theme.colors.sub_gray10, + }, +}); + +const HeaderContents = styled.div({ + display: 'flex', + flexDirection: 'column', + gap: '8px', +}); + +const HeaderContentsItem = styled.div({ + display: 'flex', + alignItems: 'center', + gap: '16px', + + ['>span']: { + width: '72px', + padding: '4px', + borderRadius: '999px', + background: theme.colors.sub_gray11, + ...theme.font.body14Semibold, + textAlign: 'center', + + ['&.roi']: { + color: theme.colors.sub_blue6, + }, + ['&.score']: { + color: theme.colors.sub_red, + }, + }, + + ['>div']: { + display: 'flex', + flexDirection: 'column', + + ['>div']: { + display: 'flex', + alignItems: 'center', + gap: '10px', + + ['>span']: { + ...theme.font.body14Medium, + color: theme.colors.sub_gray5, + whiteSpace: 'nowrap', + ['&.condition']: { + width: '72px', + }, + }, + }, + }, +}); + +const Content = styled.div({ + display: 'flex', + flexDirection: 'column', + padding: '8px 10px 12px', + margin: '0 20px', + background: theme.colors.sub_gray11, + borderRadius: '4px', + gap: '20px', + + ['>span.divider']: { + width: '100%', + height: '1px', + background: theme.colors.sub_gray10, + }, +}); + +export { Container, Header, HeaderContents, HeaderContentsItem, Content }; diff --git a/src/components/Modal/AboutReportPattern/AboutReportPattern.tsx b/src/components/Modal/AboutReportPattern/AboutReportPattern.tsx index 6d02c438..4c225c38 100644 --- a/src/components/Modal/AboutReportPattern/AboutReportPattern.tsx +++ b/src/components/Modal/AboutReportPattern/AboutReportPattern.tsx @@ -1,110 +1,6 @@ -import styled from '@emotion/styled'; import ReportPatternChart from '@components/Lab/ReportPatternChart/ReportPatternChart'; -import { theme } from '@styles/themes'; import QuestionMarkSVG from '@assets/icons/questionMark.svg?react'; - -const Container = styled.div({ - display: 'flex', - flexDirection: 'column', - gap: '16px', -}); - -const Header = styled.div({ - display: 'flex', - flexDirection: 'column', - gap: '16px', - padding: '14px 10px', - margin: '0 20px', - - ['>p']: { - margin: '0', - wordBreak: 'keep-all', - - ['&.title']: { - ...theme.font.body18Semibold, - color: theme.colors.sub_gray1, - - ['>svg']: { - width: '24px', - height: 'auto', - aspectRatio: '1 / 1', - fill: theme.colors.sub_white, - flexShrink: '0', - verticalAlign: 'middle', - }, - }, - }, - - ['>span.divider']: { - width: '100%', - height: '1px', - background: theme.colors.sub_gray10, - }, -}); - -const HeaderContents = styled.div({ - display: 'flex', - flexDirection: 'column', - gap: '8px', -}); - -const HeaderContentsItem = styled.div({ - display: 'flex', - alignItems: 'center', - gap: '16px', - - ['>span']: { - width: '72px', - padding: '4px', - borderRadius: '999px', - background: theme.colors.sub_gray11, - ...theme.font.body14Semibold, - textAlign: 'center', - - ['&.roi']: { - color: theme.colors.sub_blue6, - }, - ['&.score']: { - color: theme.colors.sub_red, - }, - }, - - ['>div']: { - display: 'flex', - flexDirection: 'column', - - ['>div']: { - display: 'flex', - alignItems: 'center', - gap: '10px', - - ['>span']: { - ...theme.font.body14Medium, - color: theme.colors.sub_gray5, - whiteSpace: 'nowrap', - ['&.condition']: { - width: '72px', - }, - }, - }, - }, -}); - -const Content = styled.div({ - display: 'flex', - flexDirection: 'column', - padding: '8px 10px 12px', - margin: '0 20px', - background: theme.colors.sub_gray11, - borderRadius: '4px', - gap: '20px', - - ['>span.divider']: { - width: '100%', - height: '1px', - background: theme.colors.sub_gray10, - }, -}); +import { Container, Content, Header, HeaderContents, HeaderContentsItem } from './AboutReportPattern.Style'; const patternReads = [ { diff --git a/src/components/Modal/CenterTutorial/AboutAntVoice/AboutAntVoice.Style.ts b/src/components/Modal/CenterTutorial/AboutAntVoice/AboutAntVoice.Style.ts new file mode 100644 index 00000000..12baac10 --- /dev/null +++ b/src/components/Modal/CenterTutorial/AboutAntVoice/AboutAntVoice.Style.ts @@ -0,0 +1,21 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const AntVoiceImage = styled.img({ + width: 'auto', + objectFit: 'cover', + margin: '0 16px', + boxSizing: 'border-box', +}); + +const AntVoiceDescription = styled.div({ + ...theme.font.detail12Semibold, + color: theme.colors.sub_gray11, + padding: '16px 12px', + background: theme.colors.sub_white, + borderRadius: '8px', + margin: '0 16px', + wordBreak: 'keep-all', +}); + +export { AntVoiceImage, AntVoiceDescription }; diff --git a/src/components/Modal/CenterTutorial/AboutAntVoice/AboutAntVoice.tsx b/src/components/Modal/CenterTutorial/AboutAntVoice/AboutAntVoice.tsx index 41af8d7c..350ae44b 100644 --- a/src/components/Modal/CenterTutorial/AboutAntVoice/AboutAntVoice.tsx +++ b/src/components/Modal/CenterTutorial/AboutAntVoice/AboutAntVoice.tsx @@ -1,24 +1,6 @@ -import styled from '@emotion/styled'; -import { theme } from '@styles/themes'; import AntVoicePNG from '@assets/design/antVoice.png'; import { ModalContainer, ModalContent, ModalTitleContainer } from '../CenterTutotial.Style'; - -const AntVoiceImage = styled.img({ - width: 'auto', - objectFit: 'cover', - margin: '0 16px', - boxSizing: 'border-box', -}); - -const AntVoiceDescription = styled.div({ - ...theme.font.detail12Semibold, - color: theme.colors.sub_gray11, - padding: '16px 12px', - background: theme.colors.sub_white, - borderRadius: '8px', - margin: '0 16px', - wordBreak: 'keep-all', -}); +import { AntVoiceDescription, AntVoiceImage } from './AboutAntVoice.Style'; const AboutAntVoice = () => { return ( diff --git a/src/components/Modal/CenterTutorial/AboutHumanZipyo/AboutHumanZipyo.Style.ts b/src/components/Modal/CenterTutorial/AboutHumanZipyo/AboutHumanZipyo.Style.ts new file mode 100644 index 00000000..f29d1d0e --- /dev/null +++ b/src/components/Modal/CenterTutorial/AboutHumanZipyo/AboutHumanZipyo.Style.ts @@ -0,0 +1,151 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const HumanZipyoDescription = styled.div({ + ...theme.font.body14Semibold, + color: theme.colors.sub_gray10, + margin: '0 16px', + wordBreak: 'keep-all', +}); + +const HumanZipyoGuageChart = styled.div({ + gap: '8px', + display: 'flex', + flexDirection: 'column', + boxSizing: 'border-box', + justifyContent: 'center', + alignItems: 'center', + overflow: 'hidden', + + ['>div']: { + ['&.guage-chart']: { + width: '100%', + left: '50%', + marginTop: '-5%', + }, + + ['&.score-text']: { + display: 'flex', + padding: '0px 28px', + width: '100%', + boxSizing: 'border-box', + }, + + ['&.score-range']: { + display: 'flex', + gap: '4px', + padding: '0px 24px', + width: '100%', + boxSizing: 'border-box', + }, + }, +}); + +const HumanZipyoScoreText = styled.div( + ({ index }: { index: number }) => { + const backgroundColor = ['#11193E', '#121C46', '#141F53', '#1F359B', '#304CD1'][index]; + + return { + background: backgroundColor, + }; + }, + { + ...theme.font.detail10Medium, + color: theme.colors.sub_gray2, + textAlign: 'center', + width: '100%', + margin: '0px', + whiteSpace: 'nowrap', + minWidth: '0', + + ['@media (max-width: 360px)']: { + fontSize: '8px', + }, + }, +); + +const HumanZipyoScoreRange = styled.span({ + ...theme.font.detail10Medium, + color: theme.colors.sub_gray9, + textAlign: 'center', + width: '100%', + margin: '0px', + background: theme.colors.sub_white, + borderRadius: '2px', + position: 'relative', + whiteSpace: 'nowrap', + + ['::before']: { + content: '""', + position: 'absolute', + width: 0, + height: 0, + bottom: '100%', + left: '50%', + transform: 'translateX(-50%)', + + borderStyle: 'solid', + borderWidth: '0px 4px 6px 4px', + borderColor: `transparent transparent ${theme.colors.sub_white} transparent `, + }, +}); + +const HumanZipyoHowToContainer = styled.div({ + display: 'flex', + flexDirection: 'column', + gap: '8px', + padding: '16px 12px', + margin: '0px 16px', + background: theme.colors.sub_white, + borderRadius: '8px', + alignItems: 'flex-start', + + ['>div']: { + display: 'flex', + flexDirection: 'column', + gap: '4px', + + ['>p']: { + margin: '0px', + + ['&.title']: { + ...theme.font.detail12Semibold, + color: theme.colors.sub_gray11, + }, + + ['&.description']: { + ...theme.font.detail12Medium, + color: theme.colors.sub_gray10, + }, + }, + }, + + ['>button']: { + background: theme.colors.sub_blue5, + padding: '6px 10px', + borderRadius: '4px', + border: 'none', + + ...theme.font.detail12Semibold, + color: theme.colors.sub_gray1, + }, +}); + +const HumanZipyoSubText = styled.p({ + ...theme.font.detail12Semibold, + color: theme.colors.sub_blue7, + + margin: '0 16px', + width: '100%', + boxSizing: 'border-box', + whiteSpace: 'nowrap', +}); + +export { + HumanZipyoDescription, + HumanZipyoGuageChart, + HumanZipyoScoreText, + HumanZipyoScoreRange, + HumanZipyoHowToContainer, + HumanZipyoSubText, +}; diff --git a/src/components/Modal/CenterTutorial/AboutHumanZipyo/AboutHumanZipyo.tsx b/src/components/Modal/CenterTutorial/AboutHumanZipyo/AboutHumanZipyo.tsx index 341faf59..d0089fa0 100644 --- a/src/components/Modal/CenterTutorial/AboutHumanZipyo/AboutHumanZipyo.tsx +++ b/src/components/Modal/CenterTutorial/AboutHumanZipyo/AboutHumanZipyo.tsx @@ -1,150 +1,16 @@ -import styled from '@emotion/styled'; import { useNavigate } from 'react-router-dom'; import { webPath } from '@router/index'; import GuageChart from '@components/Search/GuageChart/GuageChart'; -import { theme } from '@styles/themes'; import LogoSVG from '@assets/logo_blue.svg?react'; import { ModalContainer, ModalContent, ModalTitleContainer } from '../CenterTutotial.Style'; - -const HumanZipyoDescription = styled.div({ - ...theme.font.body14Semibold, - color: theme.colors.sub_gray10, - margin: '0 16px', - wordBreak: 'keep-all', -}); - -const HumanZipyoGuageChart = styled.div({ - gap: '8px', - display: 'flex', - flexDirection: 'column', - boxSizing: 'border-box', - justifyContent: 'center', - alignItems: 'center', - overflow: 'hidden', - - ['>div']: { - ['&.guage-chart']: { - width: '100%', - left: '50%', - marginTop: '-5%', - }, - - ['&.score-text']: { - display: 'flex', - padding: '0px 28px', - width: '100%', - boxSizing: 'border-box', - }, - - ['&.score-range']: { - display: 'flex', - gap: '4px', - padding: '0px 24px', - width: '100%', - boxSizing: 'border-box', - }, - }, -}); - -const HumanZipyoScoreText = styled.div( - ({ index }: { index: number }) => { - const backgroundColor = ['#11193E', '#121C46', '#141F53', '#1F359B', '#304CD1'][index]; - - return { - background: backgroundColor, - }; - }, - { - ...theme.font.detail10Medium, - color: theme.colors.sub_gray2, - textAlign: 'center', - width: '100%', - margin: '0px', - whiteSpace: 'nowrap', - minWidth: '0', - - ['@media (max-width: 360px)']: { - fontSize: '8px', - }, - }, -); - -const HumanZipyoScoreRange = styled.span({ - ...theme.font.detail10Medium, - color: theme.colors.sub_gray9, - textAlign: 'center', - width: '100%', - margin: '0px', - background: theme.colors.sub_white, - borderRadius: '2px', - position: 'relative', - whiteSpace: 'nowrap', - - ['::before']: { - content: '""', - position: 'absolute', - width: 0, - height: 0, - bottom: '100%', - left: '50%', - transform: 'translateX(-50%)', - - borderStyle: 'solid', - borderWidth: '0px 4px 6px 4px', - borderColor: `transparent transparent ${theme.colors.sub_white} transparent `, - }, -}); - -const HumanZipyoHowToContainer = styled.div({ - display: 'flex', - flexDirection: 'column', - gap: '8px', - padding: '16px 12px', - margin: '0px 16px', - background: theme.colors.sub_white, - borderRadius: '8px', - alignItems: 'flex-start', - - ['>div']: { - display: 'flex', - flexDirection: 'column', - gap: '4px', - - ['>p']: { - margin: '0px', - - ['&.title']: { - ...theme.font.detail12Semibold, - color: theme.colors.sub_gray11, - }, - - ['&.description']: { - ...theme.font.detail12Medium, - color: theme.colors.sub_gray10, - }, - }, - }, - - ['>button']: { - background: theme.colors.sub_blue5, - padding: '6px 10px', - borderRadius: '4px', - border: 'none', - - ...theme.font.detail12Semibold, - color: theme.colors.sub_gray1, - }, -}); - -const HumanZipyoSubText = styled.p({ - ...theme.font.detail12Semibold, - color: theme.colors.sub_blue7, - - margin: '0 16px', - width: '100%', - boxSizing: 'border-box', - whiteSpace: 'nowrap', -}); +import { + HumanZipyoDescription, + HumanZipyoGuageChart, + HumanZipyoHowToContainer, + HumanZipyoScoreRange, + HumanZipyoScoreText, + HumanZipyoSubText, +} from './AboutHumanZipyo.Style'; const scoreText = ['대곰탕', '곰탕', '어?', '호황', '대호황']; const scoreRange = [ diff --git a/src/components/Modal/Common.Style.ts b/src/components/Modal/Common.Style.ts deleted file mode 100644 index 27e086e3..00000000 --- a/src/components/Modal/Common.Style.ts +++ /dev/null @@ -1,71 +0,0 @@ -import styled from '@emotion/styled'; -import { theme } from '@styles/themes'; - -export const Modal = styled.div` - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - display: flex; - align-items: center; - justify-content: center; - z-index: 1000; -`; - -export const ModalOverlay = styled.div` - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(0, 0, 0, 0.5); -`; - -export const ModalContent = styled.div` - background: ${theme.colors.sub_white}; - border-radius: 20px; - padding: 24px; - margin: 20px; - max-width: 324px; - width: 100%; - position: relative; - z-index: 1001; -`; - -export const ModalTitle = styled.h3` - ${theme.font.title20Semibold}; - color: ${theme.colors.sub_black}; - margin: 0 0 12px 0; - text-align: left; -`; - -export const ModalDescription = styled.p` - ${theme.font.body16Medium}; - color: ${theme.colors.sub_gray7}; - margin: 0 0 24px 0; - text-align: left; - line-height: 1.4; -`; - -export const ModalButtons = styled.div` - display: flex; - gap: 12px; -`; - -export const ModalButton = styled.button` - flex: 1; - background: ${theme.colors.sub_gray2}; - color: ${theme.colors.sub_gray8}; - border: none; - padding: 12px 0; - border-radius: 500px; - font-size: 18px; - font-weight: 700; - cursor: pointer; -`; - -export const ModalButtonPrimary = styled(ModalButton)` - background: ${theme.colors.sub_black}; - color: ${theme.colors.sub_white}; -`; diff --git a/src/components/Modal/Confirm/ConfirmModal.Style.ts b/src/components/Modal/Confirm/ConfirmModal.Style.ts new file mode 100644 index 00000000..ce20bd59 --- /dev/null +++ b/src/components/Modal/Confirm/ConfirmModal.Style.ts @@ -0,0 +1,78 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const ConfirmModalLayout = styled.div({ + display: 'flex', + position: 'fixed', + background: 'rgba(0, 0, 0, 0.7)', + width: '100%', + height: '100%', + zIndex: '100', + top: '0', + left: '50%', + transform: 'translateX(-50%)', + alignItems: 'center', + justifyContent: 'center', + padding: '32px', + boxSizing: 'border-box', + backdropFilter: 'blur(5px)', + maxWidth: '1280px', +}); + +const ConfirmModalContainer = styled.div({ + background: 'white', + display: 'flex', + flexDirection: 'column', + width: '100%', + borderRadius: '20px', + padding: '24px 20px 16px', + gap: '28px', + + ['>div']: { + display: 'flex', + gap: '12px', + + ['>button']: { + ...theme.font.body18Semibold, + width: '100%', + height: '48px', + padding: '8px 0', + border: 'none', + borderRadius: '999px', + + [':first-of-type']: { + background: '#E9ECEF', + color: '#495057', + }, + [':last-of-type']: { + background: '#1B1C1E', + color: '#E9ECEF', + }, + }, + }, +}); + +const ConfirmModalTextContainer = styled.div({ + display: 'flex', + flexDirection: 'column', + gap: '8px', + + ['>p']: { + margin: '0', + wordBreak: 'keep-all', + + ['&.title']: { + ...theme.font.title20Semibold, + color: theme.colors.sub_gray8, + }, + + ['&.desc']: { + ...theme.font.body16Medium, + color: theme.colors.sub_gray7, + whiteSpace: 'pre-wrap', + wordBreak: 'keep-all', + }, + }, +}); + +export { ConfirmModalLayout, ConfirmModalContainer, ConfirmModalTextContainer }; diff --git a/src/components/Modal/Confirm/ConfirmModal.tsx b/src/components/Modal/Confirm/ConfirmModal.tsx index d40a75f2..6236501a 100644 --- a/src/components/Modal/Confirm/ConfirmModal.tsx +++ b/src/components/Modal/Confirm/ConfirmModal.tsx @@ -1,80 +1,5 @@ -import styled from '@emotion/styled'; import { useEffect, useRef, useState } from 'react'; -import { theme } from '@styles/themes'; - -const ConfirmModalLayout = styled.div({ - display: 'flex', - position: 'fixed', - background: 'rgba(0, 0, 0, 0.7)', - width: '100%', - height: '100%', - zIndex: '100', - top: '0', - left: '50%', - transform: 'translateX(-50%)', - alignItems: 'center', - justifyContent: 'center', - padding: '32px', - boxSizing: 'border-box', - backdropFilter: 'blur(5px)', - maxWidth: '1280px', -}); - -const ConfirmModalContainer = styled.div({ - background: 'white', - display: 'flex', - flexDirection: 'column', - width: '100%', - borderRadius: '20px', - padding: '24px 20px 16px', - gap: '28px', - - ['>div']: { - display: 'flex', - gap: '12px', - - ['>button']: { - ...theme.font.body18Semibold, - width: '100%', - height: '48px', - padding: '8px 0', - border: 'none', - borderRadius: '999px', - - [':first-of-type']: { - background: '#E9ECEF', - color: '#495057', - }, - [':last-of-type']: { - background: '#1B1C1E', - color: '#E9ECEF', - }, - }, - }, -}); - -const ConfirmModalTextContainer = styled.div({ - display: 'flex', - flexDirection: 'column', - gap: '8px', - - ['>p']: { - margin: '0', - wordBreak: 'keep-all', - - ['&.title']: { - ...theme.font.title20Semibold, - color: theme.colors.sub_gray8, - }, - - ['&.desc']: { - ...theme.font.body16Medium, - color: theme.colors.sub_gray7, - whiteSpace: 'pre-wrap', - wordBreak: 'keep-all', - }, - }, -}); +import { ConfirmModalContainer, ConfirmModalLayout, ConfirmModalTextContainer } from './ConfirmModal.Style'; const ConfirmModal = ({ title, diff --git a/src/components/Modal/ExperimentDetail/ExperimentDetail.tsx b/src/components/Modal/ExperimentDetail/ExperimentDetail.tsx index 2c23aff0..10abf899 100644 --- a/src/components/Modal/ExperimentDetail/ExperimentDetail.tsx +++ b/src/components/Modal/ExperimentDetail/ExperimentDetail.tsx @@ -204,7 +204,6 @@ const ExperimentDetailChart = ({ if (loadChartStatusRef.current.time < fullTime + 10 && !noAnimation) { loadChartStatusRef.current.time++; loadChartFrameRef.current = requestAnimationFrame(() => drawChart()); - } else { } return; }; diff --git a/src/components/Modal/Layout/BottomUpCancel/BottomUpCancel.Style.ts b/src/components/Modal/Layout/BottomUpCancel/BottomUpCancel.Style.ts new file mode 100644 index 00000000..84e68ed7 --- /dev/null +++ b/src/components/Modal/Layout/BottomUpCancel/BottomUpCancel.Style.ts @@ -0,0 +1,58 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const ModalLayout = styled.div( + ({ isShowModal, showDelay }: { isShowModal: boolean; showDelay: number }) => ({ + background: isShowModal ? 'rgba(0, 0, 0, 0.5)' : 'rgba(0, 0, 0, 0)', + backdropFilter: isShowModal ? 'blur(2px)' : '', + transition: `all ${showDelay}ms ease-in-out`, + + ['>div']: { + transform: `translateY(${isShowModal ? '0' : '100%'})`, + transition: `all ${showDelay}ms ease-in-out`, + }, + }), + { + position: 'fixed', + width: '100%', + height: '100%', + top: 0, + left: '50%', + transform: 'translateX(-50%)', + right: 0, + bottom: 0, + zIndex: '100', + overflow: 'auto', + maxWidth: '1280px', + + display: 'flex', + flexDirection: 'column', + justifyContent: 'flex-end', + + ['>div']: { + background: theme.colors.sub_black, + width: '100%', + border: `1px solid ${theme.colors.sub_gray10}`, + borderRadius: '16px 16px 0 0', + boxSizing: 'border-box', + padding: '30px 0px 60px', + gap: '72px', + display: 'flex', + flexDirection: 'column', + overflow: 'auto', + overscrollBehavior: 'contain', + }, + }, +); + +const ModalCancelButton = styled.button({ + ...theme.font.body18Semibold, + color: theme.colors.sub_white, + background: theme.colors.sub_blue6, + borderRadius: '8px', + border: 'none', + padding: '10px 0px', + margin: '0px 20px', +}); + +export { ModalLayout, ModalCancelButton }; diff --git a/src/components/Modal/Layout/BottomUpCancel/BottomUpCancel.tsx b/src/components/Modal/Layout/BottomUpCancel/BottomUpCancel.tsx index db45ee48..4612786a 100644 --- a/src/components/Modal/Layout/BottomUpCancel/BottomUpCancel.tsx +++ b/src/components/Modal/Layout/BottomUpCancel/BottomUpCancel.tsx @@ -1,60 +1,5 @@ -import styled from '@emotion/styled'; import { ModalLayoutProps } from '@components/Modal/useModal'; -import { theme } from '@styles/themes'; - -const ModalLayout = styled.div( - ({ isShowModal, showDelay }: { isShowModal: boolean; showDelay: number }) => ({ - background: isShowModal ? 'rgba(0, 0, 0, 0.5)' : 'rgba(0, 0, 0, 0)', - backdropFilter: isShowModal ? 'blur(2px)' : '', - transition: `all ${showDelay}ms ease-in-out`, - - ['>div']: { - transform: `translateY(${isShowModal ? '0' : '100%'})`, - transition: `all ${showDelay}ms ease-in-out`, - }, - }), - { - position: 'fixed', - width: '100%', - height: '100%', - top: 0, - left: '50%', - transform: 'translateX(-50%)', - right: 0, - bottom: 0, - zIndex: '100', - overflow: 'auto', - maxWidth: '1280px', - - display: 'flex', - flexDirection: 'column', - justifyContent: 'flex-end', - - ['>div']: { - background: theme.colors.sub_black, - width: '100%', - border: `1px solid ${theme.colors.sub_gray10}`, - borderRadius: '16px 16px 0 0', - boxSizing: 'border-box', - padding: '30px 0px 60px', - gap: '72px', - display: 'flex', - flexDirection: 'column', - overflow: 'auto', - overscrollBehavior: 'contain', - }, - }, -); - -const ModalCancelButton = styled.button({ - ...theme.font.body18Semibold, - color: theme.colors.sub_white, - background: theme.colors.sub_blue6, - borderRadius: '8px', - border: 'none', - padding: '10px 0px', - margin: '0px 20px', -}); +import { ModalCancelButton, ModalLayout } from './BottomUpCancel.Style'; const BottomUpCancel = ({ children, diff --git a/src/components/MyPage/MyPageInput/MyPageInput.Style.ts b/src/components/MyPage/MyPageInput/MyPageInput.Style.ts new file mode 100644 index 00000000..bb193687 --- /dev/null +++ b/src/components/MyPage/MyPageInput/MyPageInput.Style.ts @@ -0,0 +1,67 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const MyPageInputContainer = styled.div( + ({ isError }: { isError: boolean }) => ({ + ['>p']: { + color: isError ? theme.colors.sub_red : theme.colors.sub_gray3, + }, + + ['>input']: { + outline: isError ? `1px solid ${theme.colors.sub_red}` : 'none', + }, + }), + { + display: 'flex', + flexDirection: 'column', + gap: '8px', + padding: '0 20px', + + ['>p']: { + margin: '0', + ...theme.font.body16Medium, + }, + + ['>input']: { + border: 'none', + padding: '20px 16px', + height: '48px', + boxSizing: 'border-box', + borderRadius: '5px', + background: theme.colors.sub_gray11, + color: theme.colors.sub_gray3, + ...theme.font.body16Medium, + + ['&::placeholder']: { + color: theme.colors.sub_gray8, + }, + }, + }, +); + +const MyPageInputSubContainer = styled.div({ + display: 'flex', + justifyContent: 'space-between', + height: '20px', + + ['>p']: { + margin: '0', + + ['&.error']: { + padding: '0 4px', + ...theme.font.body14Medium, + color: theme.colors.sub_red, + }, + + ['&.sub']: { + ...theme.font.body14Regular, + color: theme.colors.sub_gray3, + + ['>span']: { + ...theme.font.body14Semibold, + }, + }, + }, +}); + +export { MyPageInputContainer, MyPageInputSubContainer }; diff --git a/src/components/MyPage/MyPageInput/MyPageInput.tsx b/src/components/MyPage/MyPageInput/MyPageInput.tsx index 110972be..7f144bee 100644 --- a/src/components/MyPage/MyPageInput/MyPageInput.tsx +++ b/src/components/MyPage/MyPageInput/MyPageInput.tsx @@ -1,68 +1,4 @@ -import styled from '@emotion/styled'; -import { theme } from '@styles/themes'; - -const MyPageInputContainer = styled.div( - ({ isError }: { isError: boolean }) => ({ - ['>p']: { - color: isError ? theme.colors.sub_red : theme.colors.sub_gray3, - }, - - ['>input']: { - outline: isError ? `1px solid ${theme.colors.sub_red}` : 'none', - }, - }), - { - display: 'flex', - flexDirection: 'column', - gap: '8px', - padding: '0 20px', - - ['>p']: { - margin: '0', - ...theme.font.body16Medium, - }, - - ['>input']: { - border: 'none', - padding: '20px 16px', - height: '48px', - boxSizing: 'border-box', - borderRadius: '5px', - background: theme.colors.sub_gray11, - color: theme.colors.sub_gray3, - ...theme.font.body16Medium, - - ['&::placeholder']: { - color: theme.colors.sub_gray8, - }, - }, - }, -); - -const MyPageInputSubContainer = styled.div({ - display: 'flex', - justifyContent: 'space-between', - height: '20px', - - ['>p']: { - margin: '0', - - ['&.error']: { - padding: '0 4px', - ...theme.font.body14Medium, - color: theme.colors.sub_red, - }, - - ['&.sub']: { - ...theme.font.body14Regular, - color: theme.colors.sub_gray3, - - ['>span']: { - ...theme.font.body14Semibold, - }, - }, - }, -}); +import { MyPageInputContainer, MyPageInputSubContainer } from './MyPageInput.Style'; export interface MyPageInputProps { name: string; diff --git a/src/components/MyPage/ProfileCircle/ProfileCircle.Style.ts b/src/components/MyPage/ProfileCircle/ProfileCircle.Style.ts new file mode 100644 index 00000000..4e7d54b9 --- /dev/null +++ b/src/components/MyPage/ProfileCircle/ProfileCircle.Style.ts @@ -0,0 +1,42 @@ +import styled from '@emotion/styled'; + +const ProfileCircleContainer = styled.label( + ({ size }: { size: 'small' | 'medium' | 'large' }) => ({ + ['>img']: { + width: size === 'small' ? '48px' : size === 'medium' ? '64px' : '76px', + }, + + ['>svg']: { + width: size === 'small' ? '16px' : size === 'medium' ? '20px' : '24px', + }, + }), + { + display: 'flex', + position: 'relative', + + ['>img']: { + height: 'auto', + aspectRatio: '1 / 1', + objectFit: 'cover', + borderRadius: '999px', + flexShrink: '0', + }, + + ['>svg']: { + position: 'absolute', + bottom: '0', + right: '0', + height: 'auto', + aspectRatio: '1 / 1', + fill: '#ADB5BD', + background: '#495057', + borderRadius: '999px', + }, + + ['>input']: { + display: 'none', + }, + }, +); + +export { ProfileCircleContainer }; diff --git a/src/components/MyPage/ProfileCircle/ProfileCircle.tsx b/src/components/MyPage/ProfileCircle/ProfileCircle.tsx index 0732259f..b302891c 100644 --- a/src/components/MyPage/ProfileCircle/ProfileCircle.tsx +++ b/src/components/MyPage/ProfileCircle/ProfileCircle.tsx @@ -1,45 +1,6 @@ -import styled from '@emotion/styled'; import EditCircleSVG from '@assets/edit_circle.svg?react'; import ProfilePNG from '@assets/profile.png'; - -const ProfileCircleContainer = styled.label( - ({ size }: { size: 'small' | 'medium' | 'large' }) => ({ - ['>img']: { - width: size === 'small' ? '48px' : size === 'medium' ? '64px' : '76px', - }, - - ['>svg']: { - width: size === 'small' ? '16px' : size === 'medium' ? '20px' : '24px', - }, - }), - { - display: 'flex', - position: 'relative', - - ['>img']: { - height: 'auto', - aspectRatio: '1 / 1', - objectFit: 'cover', - borderRadius: '999px', - flexShrink: '0', - }, - - ['>svg']: { - position: 'absolute', - bottom: '0', - right: '0', - height: 'auto', - aspectRatio: '1 / 1', - fill: '#ADB5BD', - background: '#495057', - borderRadius: '999px', - }, - - ['>input']: { - display: 'none', - }, - }, -); +import { ProfileCircleContainer } from './ProfileCircle.Style'; const ProfileCircle = ({ profileImage, diff --git a/src/components/PopUp/PWAinfoPopUp/PWAInfoPopUp.tsx b/src/components/PopUp/PWAinfoPopUp/PWAInfoPopUp.tsx index 8575b612..bf9f2872 100644 --- a/src/components/PopUp/PWAinfoPopUp/PWAInfoPopUp.tsx +++ b/src/components/PopUp/PWAinfoPopUp/PWAInfoPopUp.tsx @@ -13,7 +13,7 @@ import { PWAInfoTextContainer, } from './PWAinfoPopUp.style'; -const PWAInfoPopUp = ({}: {}) => { +const PWAInfoPopUp = () => { const navigate = useNavigate(); const isMobile = useIsMobile(); const [lastVisit, setLastVisit] = useLocalStorageState('last_visit_page'); diff --git a/src/components/Search/SearchTitle/SearchTitle.Style.ts b/src/components/Search/SearchTitle/SearchTitle.Style.ts index 362f7de7..c7731b18 100644 --- a/src/components/Search/SearchTitle/SearchTitle.Style.ts +++ b/src/components/Search/SearchTitle/SearchTitle.Style.ts @@ -3,7 +3,7 @@ import { motion } from 'framer-motion'; import { deltaScoreToColor } from '@utils/ScoreConvert'; import { media, theme } from '@styles/themes'; -export const SearchTitleContainer = styled.div({ +const SearchTitleContainer = styled.div({ display: 'flex', flexDirection: 'column', gap: '32px', @@ -21,7 +21,7 @@ export const SearchTitleContainer = styled.div({ }, }); -export const SearchTitleHeaderContainer = styled.div({ +const SearchTitleHeaderContainer = styled.div({ display: 'flex', flexDirection: 'column', @@ -35,19 +35,19 @@ export const SearchTitleHeaderContainer = styled.div({ }, }); -export const SearchTitlePriceWrapper = styled.div({ +const SearchTitlePriceWrapper = styled.div({ display: 'flex', alignItems: 'center', gap: '12px', }); -export const SearchTitlePrice = styled.p({ +const SearchTitlePrice = styled.p({ ...theme.font.heading24Semibold, color: theme.colors.sub_white, margin: '0', }); -export const SearchTitleHeaderText = styled.div({ +const SearchTitleHeaderText = styled.div({ ...theme.font.heading24Semibold, position: 'relative', @@ -58,7 +58,7 @@ export const SearchTitleHeaderText = styled.div({ textOverflow: 'ellipsis', }); -export const SearchTitleHeaderTextAnimated = styled(motion.div)({ +const SearchTitleHeaderTextAnimated = styled(motion.div)({ willChange: 'transform', position: 'absolute', top: '0', @@ -68,7 +68,7 @@ export const SearchTitleHeaderTextAnimated = styled(motion.div)({ // -export const SearchTitleDetailContainer = styled.div( +const SearchTitleDetailContainer = styled.div( ({ delta }: { delta: number }) => ({ ['>span.price-diff']: { color: deltaScoreToColor(delta) ?? theme.colors.sub_gray7, @@ -104,7 +104,7 @@ export const SearchTitleDetailContainer = styled.div( }, ); -export const SearchTitleDetailSymbol = styled.span({ +const SearchTitleDetailSymbol = styled.span({ display: 'flex', alignItems: 'center', gap: '4px', @@ -120,7 +120,7 @@ export const SearchTitleDetailSymbol = styled.span({ }, }); -export const SearchTitleScoreBadge = styled.div({ +const SearchTitleScoreBadge = styled.div({ boxSizing: 'border-box', display: 'flex', flexDirection: 'row', @@ -141,7 +141,7 @@ export const SearchTitleScoreBadge = styled.div({ }, }); -// export const SearchTitleDescriptionContainer = styled.div( +// const SearchTitleDescriptionContainer = styled.div( // ({ showMoreDesc }: { showMoreDesc: boolean }) => ({ // WebkitLineClamp: showMoreDesc ? '' : '2', // ['>button']: { @@ -173,3 +173,15 @@ export const SearchTitleScoreBadge = styled.div({ // }, // }, // ); + +export { + SearchTitleContainer, + SearchTitleHeaderContainer, + SearchTitlePriceWrapper, + SearchTitlePrice, + SearchTitleHeaderText, + SearchTitleHeaderTextAnimated, + SearchTitleDetailContainer, + SearchTitleDetailSymbol, + SearchTitleScoreBadge, +}; diff --git a/src/components/Search/StockChart/StockChart.Style.ts b/src/components/Search/StockChart/StockChart.Style.ts index b35aeda5..c90c9901 100644 --- a/src/components/Search/StockChart/StockChart.Style.ts +++ b/src/components/Search/StockChart/StockChart.Style.ts @@ -1,7 +1,7 @@ import styled from '@emotion/styled'; import { media, theme, themeColor } from '@styles/themes'; -export const StockChartContainer = styled.div({ +const StockChartContainer = styled.div({ display: 'flex', flexDirection: 'column', gap: '18px', @@ -12,7 +12,7 @@ export const StockChartContainer = styled.div({ }, }); -export const StockChartHeader = styled.div({ +const StockChartHeader = styled.div({ display: 'flex', alignItems: 'center', justifyContent: 'space-between', @@ -24,7 +24,7 @@ export const StockChartHeader = styled.div({ }, }); -export const StockChartHeaderContents = styled.div({ +const StockChartHeaderContents = styled.div({ display: 'flex', gap: '8px', @@ -33,7 +33,7 @@ export const StockChartHeaderContents = styled.div({ }, }); -export const StockChartHeaderItem = styled.div( +const StockChartHeaderItem = styled.div( ({ background }: { background?: themeColor }) => ({ background: background ? theme.colors[background] : theme.colors.transparent, }), @@ -49,42 +49,7 @@ export const StockChartHeaderItem = styled.div( }, ); -export const StockChartStyledCanvas = styled.canvas({ - position: 'absolute', - - width: '100%', - height: '100%', -}); - -export const StockChartGridContainer = styled.div({ - display: 'grid', - gridTemplateRows: '600px 40px', - gridTemplateColumns: '42px auto 72px', - - fontSize: '15px', - - [media[0]]: { - gridTemplateRows: '400px 19px', - gridTemplateColumns: '28px auto 48px', - - fontSize: '11px', - }, - - '> div': { - position: 'relative', - - overflow: 'hidden', - }, - - [media[0]]: { - gridTemplateRows: '400px 19px', - gridTemplateColumns: '28px auto 48px', - - fontSize: '11px', - }, -}); - -export const ChartLabelBase = styled.span({ +const ChartLabelBase = styled.span({ boxSizing: 'border-box', padding: '4px 12px', @@ -101,7 +66,7 @@ export const ChartLabelBase = styled.span({ }, }); -export const ChartLabel = styled.span( +const ChartLabel = styled.span( { position: 'absolute', @@ -148,7 +113,7 @@ export const ChartLabel = styled.span( }), ); -export const ExtremeLabel = styled.span( +const ExtremeLabel = styled.span( { position: 'absolute', @@ -177,7 +142,7 @@ export const ExtremeLabel = styled.span( }), ); -export const StockChartCanvasRefContainer = styled.canvas({ +const StockChartCanvasRefContainer = styled.canvas({ position: 'absolute', top: 0, left: 0, @@ -186,7 +151,7 @@ export const StockChartCanvasRefContainer = styled.canvas({ height: '100%', }); -export const StockChartViewContainer = styled.div({ +const StockChartViewContainer = styled.div({ display: 'flex', flexGrow: '1', @@ -197,7 +162,7 @@ export const StockChartViewContainer = styled.div({ }, }); -export const StockChartItemContainer = styled.div( +const StockChartItemContainer = styled.div( { display: 'flex', flexDirection: 'column', @@ -210,7 +175,7 @@ export const StockChartItemContainer = styled.div( }, ); -export const StockChartItemContent = styled.div( +const StockChartItemContent = styled.div( { position: 'relative', @@ -247,7 +212,7 @@ export const StockChartItemContent = styled.div( }), ); -export const StockChartItemCanvasContainer = styled.div({ +const StockChartItemCanvasContainer = styled.div({ position: 'relative', display: 'flex', @@ -256,11 +221,11 @@ export const StockChartItemCanvasContainer = styled.div({ height: '100%', }); -export const StockInfoDeltaLabel = styled.span(({ delta }: { delta?: number }) => ({ +const StockInfoDeltaLabel = styled.span(({ delta }: { delta?: number }) => ({ color: theme.colors[!delta ? 'grayscale60' : delta > 0 ? 'red' : 'blue'], })); -export const StockChartInfoHeaderItem = styled.div({ +const StockChartInfoHeaderItem = styled.div({ display: 'flex', gap: '4px', width: 'auto', @@ -270,7 +235,7 @@ export const StockChartInfoHeaderItem = styled.div({ userSelect: 'none', }); -export const StockChartInfoHeader = styled.div({ +const StockChartInfoHeader = styled.div({ position: 'absolute', display: 'flex', @@ -279,3 +244,21 @@ export const StockChartInfoHeader = styled.div({ alignItems: 'start', padding: '8px', }); + +export { + StockChartContainer, + StockChartHeader, + StockChartHeaderContents, + StockChartHeaderItem, + ChartLabelBase, + ChartLabel, + ExtremeLabel, + StockChartCanvasRefContainer, + StockChartViewContainer, + StockChartItemContainer, + StockChartItemContent, + StockChartItemCanvasContainer, + StockInfoDeltaLabel, + StockChartInfoHeaderItem, + StockChartInfoHeader, +}; diff --git a/src/components/SearchBar/AutoComplete/Keywords/Keywords.tsx b/src/components/SearchBar/AutoComplete/Keywords/Keywords.tsx index 3270ccf3..1830e25b 100644 --- a/src/components/SearchBar/AutoComplete/Keywords/Keywords.tsx +++ b/src/components/SearchBar/AutoComplete/Keywords/Keywords.tsx @@ -29,7 +29,7 @@ const AutoCompleteKeywords = ({ searchValue }: { searchValue: string }) => { 검색결과 {matchedKeyword && (

- '{matchedKeyword}'이(가) 가장 많이 언급된 종목순으로 노출됩니다 + '{matchedKeyword}'이(가) 가장 많이 언급된 종목순으로 노출됩니다

)} @@ -48,7 +48,7 @@ const AutoCompleteKeywords = ({ searchValue }: { searchValue: string }) => { }) ) : ( -

'{searchValue}' 검색어에 해당하는 결과가 없어요 😭

+

'{searchValue}' 검색어에 해당하는 결과가 없어요 😭

다른 종목을 다시 검색해보세요

)} diff --git a/src/components/SearchBar/AutoComplete/Stocks/Stocks.tsx b/src/components/SearchBar/AutoComplete/Stocks/Stocks.tsx index 9f75d1df..64af1ac3 100644 --- a/src/components/SearchBar/AutoComplete/Stocks/Stocks.tsx +++ b/src/components/SearchBar/AutoComplete/Stocks/Stocks.tsx @@ -52,7 +52,7 @@ const AutoCompleteStocks = ({ searchValue }: { searchValue: string }) => { )) ) : ( -

'{searchValue}' 검색어에 해당하는 결과가 없어요 😭

+

'{searchValue}' 검색어에 해당하는 결과가 없어요 😭

다른 종목을 다시 검색해보세요

)} diff --git a/src/components/SearchBar/PopularKeywords/PopularKeywords.Style.ts b/src/components/SearchBar/PopularKeywords/PopularKeywords.Style.ts new file mode 100644 index 00000000..78329d7d --- /dev/null +++ b/src/components/SearchBar/PopularKeywords/PopularKeywords.Style.ts @@ -0,0 +1,40 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const Wrapper = styled.div({ + flexGrow: 1, + display: 'flex', + flexDirection: 'column', + gap: '20px', + + ['>p']: { + ...theme.font.body18Semibold, + color: theme.colors.sub_white, + margin: '0 20px', + }, +}); + +const PopularKeywordsContainer = styled.div({ + display: 'flex', + padding: '0 20px', + overflow: 'auto', + gap: '8px', + + msOverflowStyle: 'none', + ['::-webkit-scrollbar']: { + display: 'none', + }, + + ['>span']: { + whiteSpace: 'nowrap', + overflow: 'hidden', + flexShrink: '0', + padding: '8px 16px', + borderRadius: '999px', + ...theme.font.body16Medium, + color: theme.colors.sub_gray1, + border: `1px solid ${theme.colors.sub_gray9}`, + }, +}); + +export { Wrapper, PopularKeywordsContainer }; diff --git a/src/components/SearchBar/PopularKeywords/PopularKeywords.tsx b/src/components/SearchBar/PopularKeywords/PopularKeywords.tsx index f8efe70f..2fda262c 100644 --- a/src/components/SearchBar/PopularKeywords/PopularKeywords.tsx +++ b/src/components/SearchBar/PopularKeywords/PopularKeywords.tsx @@ -1,42 +1,5 @@ -import styled from '@emotion/styled'; import { useKeywordRankingsQuery } from '@controllers/stocks/query'; -import { theme } from '@styles/themes'; - -const Wrapper = styled.div({ - flexGrow: 1, - display: 'flex', - flexDirection: 'column', - gap: '20px', - - ['>p']: { - ...theme.font.body18Semibold, - color: theme.colors.sub_white, - margin: '0 20px', - }, -}); - -const PopularKeywordsContainer = styled.div({ - display: 'flex', - padding: '0 20px', - overflow: 'auto', - gap: '8px', - - msOverflowStyle: 'none', - ['::-webkit-scrollbar']: { - display: 'none', - }, - - ['>span']: { - whiteSpace: 'nowrap', - overflow: 'hidden', - flexShrink: '0', - padding: '8px 16px', - borderRadius: '999px', - ...theme.font.body16Medium, - color: theme.colors.sub_gray1, - border: `1px solid ${theme.colors.sub_gray9}`, - }, -}); +import { PopularKeywordsContainer, Wrapper } from './PopularKeywords.Style'; const PopularKeywords = ({ setSearchValue }: { setSearchValue: (value: string) => void }) => { const { data: keywordRankings } = useKeywordRankingsQuery(); diff --git a/src/components/SlideView/SlideView.Style.ts b/src/components/SlideView/SlideView.Style.ts index 72818715..3b2fb7a2 100644 --- a/src/components/SlideView/SlideView.Style.ts +++ b/src/components/SlideView/SlideView.Style.ts @@ -1,12 +1,12 @@ import styled from '@emotion/styled'; import { media, theme } from '@styles/themes'; -export const SlideContainer = styled.div({ +const SlideContainer = styled.div({ display: 'flex', flexDirection: 'column', }); -export const SlideItemContainer = styled.div({ +const SlideItemContainer = styled.div({ overflowX: 'scroll', overflowY: 'hidden', boxSizing: 'border-box', @@ -27,7 +27,7 @@ export const SlideItemContainer = styled.div({ }, }); -export const SlideItemContents = styled.div( +const SlideItemContents = styled.div( { position: 'relative', @@ -49,7 +49,7 @@ export const SlideItemContents = styled.div( }), ); -export const SlideItem = styled.div( +const SlideItem = styled.div( { position: 'absolute', top: 0, @@ -73,7 +73,7 @@ export const SlideItem = styled.div( }), ); -export const SlideArrowContainer = styled.div( +const SlideArrowContainer = styled.div( { position: 'relative', @@ -85,7 +85,7 @@ export const SlideArrowContainer = styled.div( }), ); -export const SlideArrowContents = styled.div( +const SlideArrowContents = styled.div( { position: 'absolute', top: '18px', @@ -121,3 +121,5 @@ export const SlideArrowContents = styled.div( }, }), ); + +export { SlideContainer, SlideItemContainer, SlideItemContents, SlideItem, SlideArrowContainer, SlideArrowContents }; diff --git a/src/components/SlideView/SlideView.tsx b/src/components/SlideView/SlideView.tsx index bfe905b3..a62d5662 100644 --- a/src/components/SlideView/SlideView.tsx +++ b/src/components/SlideView/SlideView.tsx @@ -27,6 +27,7 @@ const SlideView = ({ keyName, list, count }: { keyName: string; list: JSX.Elemen const itemConatinerRef = useRef(null); const [selected, setSelected] = useState(0); const [height, setHeight] = useState(0); + // eslint-disable-next-line @typescript-eslint/no-unused-vars const [_, setWidth, widthRef] = useStateRef(0); const isMobile = useIsMobile(); diff --git a/src/components/Toast/Toast.Style.ts b/src/components/Toast/Toast.Style.ts new file mode 100644 index 00000000..f5f6f87d --- /dev/null +++ b/src/components/Toast/Toast.Style.ts @@ -0,0 +1,59 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const ToastContent = styled.div({ + background: `${theme.colors.sub_blue6}CC`, + display: 'flex', + alignItems: 'center', + borderRadius: '5px', + border: '1px solid rgba(73, 80, 87, 0.5)', + boxSizing: 'border-box', + backdropFilter: 'blur(5px)', + boxShadow: '0px 4px 20px 0px rgba(0, 0, 0, 0.5)', + gap: '10px', + width: '100%', + padding: '12px 16px', + + ['>svg']: { + width: '20px', + height: 'auto', + aspectRatio: '1 / 1', + fill: theme.colors.sub_white, + }, + + ['>p']: { + margin: '0', + ...theme.font.detail12Semibold, + color: theme.colors.sub_gray2, + + ['&.cancel']: { + color: theme.colors.sub_gray5, + textDecoration: 'underline', + marginLeft: 'auto', + cursor: 'pointer', + }, + }, +}); + +const ToastContainer = styled.div( + ({ closing }: { closing: boolean }) => ({ + opacity: closing ? 0 : 1, + }), + { + transition: 'opacity 0.3s ease-in-out', + position: 'fixed', + bottom: '0px', + left: '50%', + transform: 'translateX(-50%)', + maxWidth: '1280px', + background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #101010 81.02%)', + width: '100%', + zIndex: '1000', + padding: '96px 20px', + display: 'flex', + justifyContent: 'center', + boxSizing: 'border-box', + }, +); + +export { ToastContent, ToastContainer }; diff --git a/src/components/Toast/Toast.tsx b/src/components/Toast/Toast.tsx index dedafb2f..f5642aa2 100644 --- a/src/components/Toast/Toast.tsx +++ b/src/components/Toast/Toast.tsx @@ -1,61 +1,5 @@ -import styled from '@emotion/styled'; import { ToastState } from '@hooks/useToast'; -import { theme } from '@styles/themes'; - -const ToastContent = styled.div({ - background: `${theme.colors.sub_blue6}CC`, - display: 'flex', - alignItems: 'center', - borderRadius: '5px', - border: '1px solid rgba(73, 80, 87, 0.5)', - boxSizing: 'border-box', - backdropFilter: 'blur(5px)', - boxShadow: '0px 4px 20px 0px rgba(0, 0, 0, 0.5)', - gap: '10px', - width: '100%', - padding: '12px 16px', - - ['>svg']: { - width: '20px', - height: 'auto', - aspectRatio: '1 / 1', - fill: theme.colors.sub_white, - }, - - ['>p']: { - margin: '0', - ...theme.font.detail12Semibold, - color: theme.colors.sub_gray2, - - ['&.cancel']: { - color: theme.colors.sub_gray5, - textDecoration: 'underline', - marginLeft: 'auto', - cursor: 'pointer', - }, - }, -}); - -const ToastContainer = styled.div( - ({ closing }: { closing: boolean }) => ({ - opacity: closing ? 0 : 1, - }), - { - transition: 'opacity 0.3s ease-in-out', - position: 'fixed', - bottom: '0px', - left: '50%', - transform: 'translateX(-50%)', - maxWidth: '1280px', - background: 'linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #101010 81.02%)', - width: '100%', - zIndex: '1000', - padding: '96px 20px', - display: 'flex', - justifyContent: 'center', - boxSizing: 'border-box', - }, -); +import { ToastContainer, ToastContent } from './Toast.Style'; const Toast = ({ toast, hideToast }: { toast: ToastState; hideToast: () => void }) => { const { message, enabled, closing } = toast; diff --git a/src/controllers/auth/api.ts b/src/controllers/auth/api.ts index 81f5cec8..3b51856c 100644 --- a/src/controllers/auth/api.ts +++ b/src/controllers/auth/api.ts @@ -4,22 +4,18 @@ export type ProviderKey = 'kakao' | 'google' | 'naver' | 'apple'; // GET /auth/nickname export const fetchAuthNickname = async (nickname: string) => { - try { - const url = `${baseURL}/auth/nickname?nickname=${nickname}`; - const res = await fetch(url, { - method: 'GET', - headers: { - ...Headers, - }, - }); - if (!res.ok) { - throw new Error(`${res.status} Error!!`); - } - await wait(0); - return await res.json(); - } catch (error) { - throw error; + const url = `${baseURL}/auth/nickname?nickname=${nickname}`; + const res = await fetch(url, { + method: 'GET', + headers: { + ...Headers, + }, + }); + if (!res.ok) { + throw new Error(`${res.status} Error!!`); } + await wait(0); + return await res.json(); }; export const fetchOAuth2Login = async (_code: string, _state: string, provider: ProviderKey) => { @@ -44,72 +40,64 @@ export const fetchAuthRegister = async ( marketingAgreement: boolean, provider: string, ) => { - try { - const formData = new FormData(); - formData.append('email', email); - formData.append('nickname', nickname); - formData.append('birth_date', birth_date); - formData.append('marketingAgreement', String(marketingAgreement)); - formData.append('provider', provider); - - if (imageBase64) { - const byteString = atob(imageBase64.split(',')[1]); - const mimeString = imageBase64.split(',')[0].split(':')[1].split(';')[0]; - - const ab = new ArrayBuffer(byteString.length); - const ia = new Uint8Array(ab); - for (let i = 0; i < byteString.length; i++) { - ia[i] = byteString.charCodeAt(i); - } - - const blob = new Blob([ab], { type: mimeString }); - const file = new File([blob], 'profile.png', { type: mimeString }); - formData.append('image', file); + const formData = new FormData(); + formData.append('email', email); + formData.append('nickname', nickname); + formData.append('birth_date', birth_date); + formData.append('marketingAgreement', String(marketingAgreement)); + formData.append('provider', provider); + + if (imageBase64) { + const byteString = atob(imageBase64.split(',')[1]); + const mimeString = imageBase64.split(',')[0].split(':')[1].split(';')[0]; + + const ab = new ArrayBuffer(byteString.length); + const ia = new Uint8Array(ab); + for (let i = 0; i < byteString.length; i++) { + ia[i] = byteString.charCodeAt(i); } - return fetchData( - '/auth/register', - { - method: 'POST', - body: formData, - }, - true, - ); - } catch (error) { - throw error; + const blob = new Blob([ab], { type: mimeString }); + const file = new File([blob], 'profile.png', { type: mimeString }); + formData.append('image', file); } + + return fetchData( + '/auth/register', + { + method: 'POST', + body: formData, + }, + true, + ); }; // PATCH /user/image export const fetchUpdateUserImage = async (imageBase64: string) => { - try { - const formData = new FormData(); - if (imageBase64) { - const byteString = atob(imageBase64.split(',')[1]); - const mimeString = imageBase64.split(',')[0].split(':')[1].split(';')[0]; - - const ab = new ArrayBuffer(byteString.length); - const ia = new Uint8Array(ab); - for (let i = 0; i < byteString.length; i++) { - ia[i] = byteString.charCodeAt(i); - } - - const blob = new Blob([ab], { type: mimeString }); - const file = new File([blob], 'profile.png', { type: mimeString }); - formData.append('image', file); + const formData = new FormData(); + if (imageBase64) { + const byteString = atob(imageBase64.split(',')[1]); + const mimeString = imageBase64.split(',')[0].split(':')[1].split(';')[0]; + + const ab = new ArrayBuffer(byteString.length); + const ia = new Uint8Array(ab); + for (let i = 0; i < byteString.length; i++) { + ia[i] = byteString.charCodeAt(i); } - return fetchAuthData( - '/user/image', - { - method: 'PATCH', - body: formData, - }, - true, - ); - } catch (error) { - throw error; + const blob = new Blob([ab], { type: mimeString }); + const file = new File([blob], 'profile.png', { type: mimeString }); + formData.append('image', file); } + + return fetchAuthData( + '/user/image', + { + method: 'PATCH', + body: formData, + }, + true, + ); }; // PATCH /user/profile diff --git a/src/controllers/common/base.ts b/src/controllers/common/base.ts index d9372f94..26088d73 100644 --- a/src/controllers/common/base.ts +++ b/src/controllers/common/base.ts @@ -8,108 +8,100 @@ const wait = (timeToDelay: number) => new Promise((resolve) => setTimeout(resolv const enableMock = false; const fetchData = async (path: string, init: RequestInit = {}, isFormData: boolean = false) => { - try { - const url = `${baseURL}${path}`; - const res = await fetch(url, { - method: 'GET', - ...init, + const url = `${baseURL}${path}`; + const res = await fetch(url, { + method: 'GET', + ...init, + headers: { + ...(isFormData ? {} : Headers), + ...init.headers, + }, + }); + + const data = await res.json(); + if (data.state) return data; + if (!res.ok) { + throw new Error(`${res.status} Error!!`); + } + await wait(0); + return data; +}; + +const fetchAuthData = async (path: string, init: RequestInit = {}, isFormData: boolean = false) => { + const url = `${baseURL}${path}`; + const token = localStorage.getItem('access_token'); + let res = await fetch(url, { + method: 'GET', + ...init, + headers: { + ...(isFormData ? {} : Headers), + ...(init.headers as any), + Authorization: `Bearer ${token}`, + }, + credentials: 'include', // 쿠키 포함 + }); + + if (res.status === 401) { + const refreshToken = localStorage.getItem('refresh_token'); + + const reissueRes = await fetch(`${baseURL}/auth/reissue`, { + method: 'POST', headers: { - ...(isFormData ? {} : Headers), - ...init.headers, + ...Headers, }, + body: JSON.stringify({ + refreshToken: refreshToken, + }), }); - const data = await res.json(); - if (data.state) return data; - if (!res.ok) { - throw new Error(`${res.status} Error!!`); + if (!reissueRes.ok) { + alert('토큰 재발급 실패. 재로그인 필요'); + + window.location.href = webPath.login(); + + throw new Error('토큰 재발급 실패. 재로그인 필요'); } - await wait(0); - return data; - } catch (error) { - throw error; - } -}; -const fetchAuthData = async (path: string, init: RequestInit = {}, isFormData: boolean = false) => { - try { - const url = `${baseURL}${path}`; - const token = localStorage.getItem('access_token'); - let res = await fetch(url, { + const { access_token, refresh_token: newRefreshToken } = await reissueRes.json(); + + // 새 토큰 저장 + localStorage.setItem('access_token', access_token); + localStorage.setItem('refresh_token', newRefreshToken); + + // localStorage 변경을 React state에 반영하기 위한 커스텀 이벤트 발생 + window.dispatchEvent(new CustomEvent('localStorageChange', { detail: { key: 'access_token' } })); + window.dispatchEvent(new CustomEvent('localStorageChange', { detail: { key: 'refresh_token' } })); + + (window as any).ReactNativeWebView?.postMessage(JSON.stringify({ type: 'TOKEN', token: access_token })); + // const token = localStorage.getItem('access_token'); + // if (token && window.ReactNativeWebView) { + // window.ReactNativeWebView.postMessage(JSON.stringify({ type: 'TOKEN', token })); + // } + // 원래 요청 재시도 + res = await fetch(url, { method: 'GET', ...init, headers: { - ...(isFormData ? {} : Headers), + ...Headers, ...(init.headers as any), - Authorization: `Bearer ${token}`, + Authorization: `Bearer ${access_token}`, }, - credentials: 'include', // 쿠키 포함 + credentials: 'include', }); + } - if (res.status === 401) { - const refreshToken = localStorage.getItem('refresh_token'); - - const reissueRes = await fetch(`${baseURL}/auth/reissue`, { - method: 'POST', - headers: { - ...Headers, - }, - body: JSON.stringify({ - refreshToken: refreshToken, - }), - }); - - if (!reissueRes.ok) { - alert('토큰 재발급 실패. 재로그인 필요'); - - window.location.href = webPath.login(); - - throw new Error('토큰 재발급 실패. 재로그인 필요'); - } - - const { access_token, refresh_token: newRefreshToken } = await reissueRes.json(); - - // 새 토큰 저장 - localStorage.setItem('access_token', access_token); - localStorage.setItem('refresh_token', newRefreshToken); - - // localStorage 변경을 React state에 반영하기 위한 커스텀 이벤트 발생 - window.dispatchEvent(new CustomEvent('localStorageChange', { detail: { key: 'access_token' } })); - window.dispatchEvent(new CustomEvent('localStorageChange', { detail: { key: 'refresh_token' } })); - - (window as any).ReactNativeWebView?.postMessage(JSON.stringify({ type: 'TOKEN', token: access_token })); - // const token = localStorage.getItem('access_token'); - // if (token && window.ReactNativeWebView) { - // window.ReactNativeWebView.postMessage(JSON.stringify({ type: 'TOKEN', token })); - // } - // 원래 요청 재시도 - res = await fetch(url, { - method: 'GET', - ...init, - headers: { - ...Headers, - ...(init.headers as any), - Authorization: `Bearer ${access_token}`, - }, - credentials: 'include', - }); - } - - if (!res.ok) { - throw new Error(`${res.status} Error!!`); - } - await wait(0); - - // 204 No Content 응답 처리 - if (res.status === 204) { - return null; - } + if (!res.ok) { + throw new Error(`${res.status} Error!!`); + } + await wait(0); - const data = await res.json(); - return data; - } catch (error) { - throw error; + // 204 No Content 응답 처리 + if (res.status === 204) { + return null; } + + const data = await res.json(); + return data; }; // function getCookie(name: string) { diff --git a/src/controllers/stocks/query.ts b/src/controllers/stocks/query.ts index 725f4184..8b1fefc2 100644 --- a/src/controllers/stocks/query.ts +++ b/src/controllers/stocks/query.ts @@ -238,8 +238,8 @@ export const useAutoComplete = ( if (!res.length) throw new Error('No results found'); setSearchState({ value: input, results: res.map((item) => ({ ...item, value: item[key].toUpperCase() })) }); }) - .catch((err) => { - err; + .catch(() => { + // Error handling - silently fail }); return; }; diff --git a/src/hooks/useCanvas.ts b/src/hooks/useCanvas.ts index b9e947e7..2fc6f94d 100644 --- a/src/hooks/useCanvas.ts +++ b/src/hooks/useCanvas.ts @@ -5,8 +5,8 @@ const useCanvas = (setCanvas: (canvas: HTMLCanvasElement) => void) => { useEffect(() => { const canvas = canvasRef.current; - canvas && setCanvas(canvas); - }, []); + if (canvas) setCanvas(canvas); + }, [setCanvas]); return canvasRef; }; diff --git a/src/hooks/useModal.Style.ts b/src/hooks/useModal.Style.ts new file mode 100644 index 00000000..567083d7 --- /dev/null +++ b/src/hooks/useModal.Style.ts @@ -0,0 +1,19 @@ +import styled from '@emotion/styled'; + +const ModalOverlay = styled.div({ + position: 'fixed', + top: 0, + left: 0, + width: '100%', + height: '100%', + background: 'rgba(0, 0, 0, 0.5)', + zIndex: 1000, + padding: '40px', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + boxSizing: 'border-box', + backdropFilter: 'blur(4px)', +}); + +export { ModalOverlay }; diff --git a/src/hooks/useModal.tsx b/src/hooks/useModal.tsx index 9c704208..46fa2206 100644 --- a/src/hooks/useModal.tsx +++ b/src/hooks/useModal.tsx @@ -1,21 +1,5 @@ -import styled from '@emotion/styled'; import { useRef, useState } from 'react'; - -const ModalOverlay = styled.div({ - position: 'fixed', - top: 0, - left: 0, - width: '100%', - height: '100%', - background: 'rgba(0, 0, 0, 0.5)', - zIndex: 1000, - padding: '40px', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - boxSizing: 'border-box', - backdropFilter: 'blur(4px)', -}); +import { ModalOverlay } from './useModal.Style'; const useModal = ({ Component }: { Component: ({ onClose }: { onClose: () => void }) => React.ReactNode }) => { const [isOpen, setIsOpen] = useState(false); diff --git a/src/hooks/useQueryComponent.tsx b/src/hooks/useQueryComponent.tsx index 8735ca45..12197126 100644 --- a/src/hooks/useQueryComponent.tsx +++ b/src/hooks/useQueryComponent.tsx @@ -15,8 +15,8 @@ export const useQueryComponent = ({ query }: { query: UseQueryResult }) = return () => clearTimeout(timeoutId); }, []); - if (isLoading) return [null, isDeferred && ] as const; - if (isError) return [null, ] as const; + if (isLoading) return [null, isDeferred && ] as const; + if (isError) return [null, ] as const; return [data] as const; }; diff --git a/src/hooks/useSocialAuth.ts b/src/hooks/useSocialAuth.ts index 8a97487a..9d8b6515 100644 --- a/src/hooks/useSocialAuth.ts +++ b/src/hooks/useSocialAuth.ts @@ -79,6 +79,7 @@ export const useSocialAuth = () => { ); const handleOAuthCallback = useCallback( + // eslint-disable-next-line @typescript-eslint/no-unused-vars async (code: string, provider: string, _state: string) => { clearAuthInfo(); setIsLoading(true); diff --git a/src/layout/BottomNavigation/BottomNavigation.Style.ts b/src/layout/BottomNavigation/BottomNavigation.Style.ts index 99bf8b56..544b2617 100644 --- a/src/layout/BottomNavigation/BottomNavigation.Style.ts +++ b/src/layout/BottomNavigation/BottomNavigation.Style.ts @@ -1,7 +1,7 @@ import styled from '@emotion/styled'; import { theme } from '@styles/themes'; -export const NavContainer = styled('nav')({ +const NavContainer = styled('nav')({ display: 'flex', position: 'fixed', bottom: 0, @@ -16,7 +16,7 @@ export const NavContainer = styled('nav')({ boxShadow: '0px -2px 10px 0px rgba(255, 255, 255, 0.05)', }); -export const NavItem = styled('div')<{ isActive: boolean }>(({ isActive }) => ({ +const NavItem = styled('div')<{ isActive: boolean }>(({ isActive }) => ({ display: 'flex', flexDirection: 'column', alignItems: 'center', @@ -28,3 +28,5 @@ export const NavItem = styled('div')<{ isActive: boolean }>(({ isActive }) => ({ fill: isActive ? theme.colors.sub_white : '', }, })); + +export { NavContainer, NavItem }; diff --git a/src/layout/Mainlayout/Mainlayout.Style.ts b/src/layout/Mainlayout/Mainlayout.Style.ts index 7b8c53cb..82936809 100644 --- a/src/layout/Mainlayout/Mainlayout.Style.ts +++ b/src/layout/Mainlayout/Mainlayout.Style.ts @@ -2,7 +2,7 @@ import styled from '@emotion/styled'; // 추후에 반응형 수정 -export const StyledMainlayout = styled.div({ +const StyledMainlayout = styled.div({ display: 'flex', flexDirection: 'column', alignItems: 'center', @@ -12,7 +12,7 @@ export const StyledMainlayout = styled.div({ maxWidth: '1280px', }); -export const MainContent = styled.div( +const MainContent = styled.div( ({ isNavActive }: { isNavActive: boolean }) => ({ marginBottom: isNavActive ? '96px' : '0px', }), @@ -25,14 +25,4 @@ export const MainContent = styled.div( }, ); -export const BackButton = styled('img')({ - position: 'absolute', - top: '20px', - left: '20px', - zIndex: 100, - background: 'none', - border: 'none', - fontSize: '24px', - width: '30px', - height: '30px', -}); +export { StyledMainlayout, MainContent }; diff --git a/src/layout/SearchHeader/SearchHeader.Style.ts b/src/layout/SearchHeader/SearchHeader.Style.ts new file mode 100644 index 00000000..d38e31af --- /dev/null +++ b/src/layout/SearchHeader/SearchHeader.Style.ts @@ -0,0 +1,47 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const SearchHeaderWrapper = styled.header({ + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + width: '100%', + padding: '8px 20px', + boxSizing: 'border-box', + marginBottom: '8px', + + ['>svg']: { + fill: theme.colors.sub_gray5, + width: '32px', + height: 'auto', + aspectRatio: '1 / 1', + }, +}); + +const RightSection = styled.div({ + display: 'flex', + alignItems: 'center', + gap: '12px', +}); + +const IconButton = styled.button( + ({ isActive }: { isActive?: boolean }) => ({ + ['>svg']: { + fill: isActive ? theme.colors.sub_blue6 : theme.colors.sub_gray7, + width: '36px', + height: 'auto', + aspectRatio: '1 / 1', + }, + }), + { + background: 'none', + border: 'none', + padding: '0', + cursor: 'pointer', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + }, +); + +export { SearchHeaderWrapper, RightSection, IconButton }; diff --git a/src/layout/SearchHeader/SearchHeader.tsx b/src/layout/SearchHeader/SearchHeader.tsx index cf2fbc12..2fcae567 100644 --- a/src/layout/SearchHeader/SearchHeader.tsx +++ b/src/layout/SearchHeader/SearchHeader.tsx @@ -1,4 +1,3 @@ -import styled from '@emotion/styled'; import { useNavigate } from 'react-router-dom'; import useAuthInfo from '@hooks/useAuthInfo'; import useToast from '@hooks/useToast'; @@ -11,56 +10,13 @@ import { useToggleNotificationMutation, } from '@controllers/preference/query'; import { StockDetailInfo } from '@controllers/stocks/types'; -import { theme } from '@styles/themes'; import BackIcon from '@assets/icons/arrowLeft.svg?react'; import BellSVG from '@assets/icons/bell.svg?react'; import HeartIcon from '@assets/icons/heart.svg?react'; import ToastBellSVG from '@assets/icons/toast/bell.svg?react'; import ToastBellCrossSVG from '@assets/icons/toast/bell_cross.svg?react'; import ToastHeartSVG from '@assets/icons/toast/heart.svg?react'; - -const SearchHeaderWrapper = styled.header({ - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center', - width: '100%', - padding: '8px 20px', - boxSizing: 'border-box', - marginBottom: '8px', - - ['>svg']: { - fill: theme.colors.sub_gray5, - width: '32px', - height: 'auto', - aspectRatio: '1 / 1', - }, -}); - -const RightSection = styled.div({ - display: 'flex', - alignItems: 'center', - gap: '12px', -}); - -const IconButton = styled.button( - ({ isActive }: { isActive?: boolean }) => ({ - ['>svg']: { - fill: isActive ? theme.colors.sub_blue6 : theme.colors.sub_gray7, - width: '36px', - height: 'auto', - aspectRatio: '1 / 1', - }, - }), - { - background: 'none', - border: 'none', - padding: '0', - cursor: 'pointer', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - }, -); +import { IconButton, RightSection, SearchHeaderWrapper } from './SearchHeader.Style'; const SearchHeader = ({ stockInfo }: { stockInfo: StockDetailInfo }) => { const navigate = useNavigate(); diff --git a/src/pages/Lab/Step/Tutorial/Tutorial.tsx b/src/pages/Lab/Step/Tutorial/Tutorial.tsx index 5723bff3..82b466db 100644 --- a/src/pages/Lab/Step/Tutorial/Tutorial.tsx +++ b/src/pages/Lab/Step/Tutorial/Tutorial.tsx @@ -72,7 +72,7 @@ const LabTutorial = () => { {labTutorialList.map((e, i) => ( - +

STEP {i + 1}

@@ -84,7 +84,7 @@ const LabTutorial = () => { ))}

(주의) 본 기능은 실제 투자가 아닌 - "가상"으로 진행되는 모의매수 기능입니다. + "가상"으로 진행되는 모의매수 기능입니다.

diff --git a/src/pages/Login/Login.tsx b/src/pages/Login/Login.tsx index ed8a361f..75e357b6 100644 --- a/src/pages/Login/Login.tsx +++ b/src/pages/Login/Login.tsx @@ -54,7 +54,7 @@ const Login = () => { -

당신은 '인간지표'인가요?

+

당신은 '인간지표'인가요?

주식투자 심리도우미 인간지표에
diff --git a/src/pages/MyPage/Done/Done.Style.ts b/src/pages/MyPage/Done/Done.Style.ts new file mode 100644 index 00000000..b057d1ee --- /dev/null +++ b/src/pages/MyPage/Done/Done.Style.ts @@ -0,0 +1,55 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const DoneContainer = styled.div({ + display: 'flex', + flexDirection: 'column', + width: '100%', + alignItems: 'center', + flexGrow: '1', + padding: '32px 20px', + boxSizing: 'border-box', +}); + +const DoneContents = styled.div({ + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + gap: '10px', + flexGrow: '1', + justifyContent: 'center', + + ['>svg']: { + width: '72px', + height: 'auto', + aspectRatio: '1 / 1', + fill: theme.colors.sub_blue6, + }, + + ['>p']: { + textAlign: 'center', + margin: '0', + + ['&.title']: { + ...theme.font.title20Semibold, + color: theme.colors.sub_gray2, + }, + + ['&.description']: { + ...theme.font.body14Medium, + color: theme.colors.sub_gray4, + }, + }, +}); + +const DoneButton = styled.button({ + ...theme.font.body18Semibold, + width: '100%', + borderRadius: '8px', + padding: '10px 0px', + border: 'none', + background: theme.colors.sub_blue6, + color: theme.colors.sub_white, +}); + +export { DoneContainer, DoneContents, DoneButton }; diff --git a/src/pages/MyPage/Done/Done.tsx b/src/pages/MyPage/Done/Done.tsx index 3d707606..572a5124 100644 --- a/src/pages/MyPage/Done/Done.tsx +++ b/src/pages/MyPage/Done/Done.tsx @@ -1,59 +1,7 @@ -import styled from '@emotion/styled'; import { useNavigate } from 'react-router-dom'; import { webPath } from '@router/index'; -import { theme } from '@styles/themes'; import BlueCheckSVG from '@assets/checkCircle.svg?react'; - -const DoneContainer = styled.div({ - display: 'flex', - flexDirection: 'column', - width: '100%', - alignItems: 'center', - flexGrow: '1', - padding: '32px 20px', - boxSizing: 'border-box', -}); - -const DoneContents = styled.div({ - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - gap: '10px', - flexGrow: '1', - justifyContent: 'center', - - ['>svg']: { - width: '72px', - height: 'auto', - aspectRatio: '1 / 1', - fill: theme.colors.sub_blue6, - }, - - ['>p']: { - textAlign: 'center', - margin: '0', - - ['&.title']: { - ...theme.font.title20Semibold, - color: theme.colors.sub_gray2, - }, - - ['&.description']: { - ...theme.font.body14Medium, - color: theme.colors.sub_gray4, - }, - }, -}); - -const DoneButton = styled.button({ - ...theme.font.body18Semibold, - width: '100%', - borderRadius: '8px', - padding: '10px 0px', - border: 'none', - background: theme.colors.sub_blue6, - color: theme.colors.sub_white, -}); +import { DoneButton, DoneContainer, DoneContents } from './Done.Style'; const Done = ({ title, description }: { title: string; description: string | React.ReactNode }) => { const navigate = useNavigate(); diff --git a/src/pages/MyPage/Edit/Edit.Style.ts b/src/pages/MyPage/Edit/Edit.Style.ts new file mode 100644 index 00000000..8c731c44 --- /dev/null +++ b/src/pages/MyPage/Edit/Edit.Style.ts @@ -0,0 +1,54 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const RegisterContainer = styled.div({ + display: 'flex', + flexDirection: 'column', + width: '100%', + flexGrow: '1', + padding: '32px 0px', + gap: '24px', +}); + +const RegisterContent = styled.div({ + width: '100%', + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + gap: '24px', + boxSizing: 'border-box', + flexGrow: '1', +}); + +const EditProfileValueContainer = styled.div({ + display: 'flex', + flexDirection: 'column', + gap: '16px', + width: '100%', + + ['>hr']: { + background: '#1D1E1F', + width: '100%', + height: '4px', + border: 'none', + margin: '0', + }, +}); + +const EditProfileButton = styled.button({ + margin: '0 20px', + + padding: '10px 0px', + border: 'none', + borderRadius: '8px', + background: theme.colors.sub_blue6, + color: theme.colors.sub_white, + ...theme.font.body18Semibold, + + ['&:disabled']: { + background: theme.colors.sub_gray8, + color: theme.colors.sub_black, + }, +}); + +export { RegisterContainer, RegisterContent, EditProfileValueContainer, EditProfileButton }; diff --git a/src/pages/MyPage/Edit/Edit.tsx b/src/pages/MyPage/Edit/Edit.tsx index cd5e72ca..c3f2b497 100644 --- a/src/pages/MyPage/Edit/Edit.tsx +++ b/src/pages/MyPage/Edit/Edit.tsx @@ -1,4 +1,3 @@ -import styled from '@emotion/styled'; import { ChangeEvent, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import useAuthInfo from '@hooks/useAuthInfo'; @@ -6,58 +5,8 @@ import { webPath } from '@router/index'; import MyPageInput, { MyPageInputProps } from '@components/MyPage/MyPageInput/MyPageInput'; import ProfileCircle from '@components/MyPage/ProfileCircle/ProfileCircle'; import { fetchAuthNickname, fetchUpdateUserImage, fetchUpdateUserProfile } from '@controllers/auth/api'; -import { theme } from '@styles/themes'; import ProfilePNG from '@assets/profile.png'; - -const RegisterContainer = styled.div({ - display: 'flex', - flexDirection: 'column', - width: '100%', - flexGrow: '1', - padding: '32px 0px', - gap: '24px', -}); - -const RegisterContent = styled.div({ - width: '100%', - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - gap: '24px', - boxSizing: 'border-box', - flexGrow: '1', -}); - -const EditProfileValueContainer = styled.div({ - display: 'flex', - flexDirection: 'column', - gap: '16px', - width: '100%', - - ['>hr']: { - background: '#1D1E1F', - width: '100%', - height: '4px', - border: 'none', - margin: '0', - }, -}); - -const EditProfileButton = styled.button({ - margin: '0 20px', - - padding: '10px 0px', - border: 'none', - borderRadius: '8px', - background: theme.colors.sub_blue6, - color: theme.colors.sub_white, - ...theme.font.body18Semibold, - - ['&:disabled']: { - background: theme.colors.sub_gray8, - color: theme.colors.sub_black, - }, -}); +import { EditProfileButton, EditProfileValueContainer, RegisterContainer, RegisterContent } from './Edit.Style'; const EditProfile = () => { const navigate = useNavigate(); @@ -115,10 +64,11 @@ const EditProfile = () => { errors.email = '이메일을 입력해주세요'; } else if (!emailRegex.test(values.email)) { errors.email = '이메일 형식을 확인해주세요'; - } else if (false) { - // 이메일 중복 API - errors.email = '이미 가입된 이메일입니다'; } + // else if (false) { + // // 이메일 중복 API + // errors.email = '이미 가입된 이메일입니다'; + // } if (values.birth) { if (!birthRegex.test(values.birth)) { @@ -138,9 +88,9 @@ const EditProfile = () => { errors.birth = '수정된 내용이 없습니다.'; } - if (false) { - errors.system = '서버와의 연결에 문제가 있습니다. 잠시 후 다시 시도해주세요.'; - } + // if (false) { + // errors.system = '서버와의 연결에 문제가 있습니다. 잠시 후 다시 시도해주세요.'; + // } return errors; }; diff --git a/src/pages/MyPage/Profile/Profile.Style.ts b/src/pages/MyPage/Profile/Profile.Style.ts new file mode 100644 index 00000000..df3609c5 --- /dev/null +++ b/src/pages/MyPage/Profile/Profile.Style.ts @@ -0,0 +1,45 @@ +import styled from '@emotion/styled'; +import { theme } from '@styles/themes'; + +const ProfileContainer = styled.div({ + background: 'linear-gradient(180deg, #3457FD 0%, #5270FF 100%)', + display: 'flex', + alignItems: 'end', + padding: '25dvh 24px 24px', + boxSizing: 'border-box', + gap: '12px', +}); + +const ProfileContents = styled.div({ + gap: '4px', + flexGrow: '1', + display: 'flex', + flexDirection: 'column', + + ['>p']: { + margin: '0', + ...theme.font.title20Semibold, + color: theme.colors.sub_white, + }, + + ['>button']: { + display: 'flex', + gap: '6px', + justifyContent: 'space-between', + alignItems: 'center', + background: 'none', + border: 'none', + padding: '0', + + ...theme.font.body16Medium, + color: theme.colors.sub_blue1, + + ['>svg']: { + width: '28px', + height: 'auto', + aspectRatio: '1 / 1', + }, + }, +}); + +export { ProfileContainer, ProfileContents }; diff --git a/src/pages/MyPage/Profile/Profile.tsx b/src/pages/MyPage/Profile/Profile.tsx index fa997089..65ff7c97 100644 --- a/src/pages/MyPage/Profile/Profile.tsx +++ b/src/pages/MyPage/Profile/Profile.tsx @@ -1,53 +1,11 @@ -import styled from '@emotion/styled'; import { useNavigate } from 'react-router-dom'; import useAuthInfo from '@hooks/useAuthInfo'; import { webPath } from '@router/index'; import ProfileCircle from '@components/MyPage/ProfileCircle/ProfileCircle'; import { fetchUpdateUserImage } from '@controllers/auth/api'; -import { theme } from '@styles/themes'; import ProfilePNG from '@assets/profile.png'; import RightArrowThickSVG from '@assets/right_arrow_thick.svg?react'; - -const ProfileContainer = styled.div({ - background: 'linear-gradient(180deg, #3457FD 0%, #5270FF 100%)', - display: 'flex', - alignItems: 'end', - padding: '25dvh 24px 24px', - boxSizing: 'border-box', - gap: '12px', -}); - -const ProfileContents = styled.div({ - gap: '4px', - flexGrow: '1', - display: 'flex', - flexDirection: 'column', - - ['>p']: { - margin: '0', - ...theme.font.title20Semibold, - color: theme.colors.sub_white, - }, - - ['>button']: { - display: 'flex', - gap: '6px', - justifyContent: 'space-between', - alignItems: 'center', - background: 'none', - border: 'none', - padding: '0', - - ...theme.font.body16Medium, - color: theme.colors.sub_blue1, - - ['>svg']: { - width: '28px', - height: 'auto', - aspectRatio: '1 / 1', - }, - }, -}); +import { ProfileContainer, ProfileContents } from './Profile.Style'; const MyPageProfile = () => { const navigate = useNavigate(); diff --git a/src/pages/Register/Register.tsx b/src/pages/Register/Register.tsx index 24c793a5..70830e48 100644 --- a/src/pages/Register/Register.tsx +++ b/src/pages/Register/Register.tsx @@ -156,10 +156,11 @@ const Register = () => { errors.email = '이메일을 입력해주세요'; } else if (!emailRegex.test(values.email)) { errors.email = '이메일 형식을 확인해주세요'; - } else if (false) { - // 이메일 중복 API - errors.email = '이미 가입된 이메일입니다'; } + // else if (false) { + // // 이메일 중복 API + // errors.email = '이미 가입된 이메일입니다'; + // } if (values.birth) { if (!birthRegex.test(values.birth)) { @@ -179,9 +180,9 @@ const Register = () => { errors.termsAgreed = '필수 약관에 동의해야 가입할 수 있습니다'; } - if (false) { - errors.system = '서버와의 연결에 문제가 있습니다. 잠시 후 다시 시도해주세요.'; - } + // if (false) { + // errors.system = '서버와의 연결에 문제가 있습니다. 잠시 후 다시 시도해주세요.'; + // } return errors; }; diff --git a/src/pages/Term/Term.tsx b/src/pages/Term/Term.tsx index e010490f..3b2a9c56 100644 --- a/src/pages/Term/Term.tsx +++ b/src/pages/Term/Term.tsx @@ -19,8 +19,8 @@ const RegisterTermList = ({ termItem }: { termItem: TermItem }) => { {termItem.text} {termItem.list && ( - {termItem.list.map((item) => ( -

  • + {termItem.list.map((item, index) => ( +
  • ))} @@ -47,8 +47,8 @@ const RegisterTerm = () => {

    {name}

    - {contents.map((content) => ( - + {contents.map((content, index) => ( + {content.title} diff --git a/src/pages/Withdraw/Withdraw.Style.ts b/src/pages/Withdraw/Withdraw.Style.ts new file mode 100644 index 00000000..c6200257 --- /dev/null +++ b/src/pages/Withdraw/Withdraw.Style.ts @@ -0,0 +1,171 @@ +import styled from '@emotion/styled'; + +const WithdrawTitleContainer = styled.div({ + display: 'flex', + gap: '10px', + width: '100%', + alignItems: 'center', + padding: '0px 20px', + boxSizing: 'border-box', + + ['>img']: { + width: '90px', + height: 'auto', + aspectRatio: '1 / 1', + borderRadius: '999px', + }, + + ['>div']: { + display: 'flex', + flexDirection: 'column', + gap: '4px', + width: '100%', + + ['>p']: { + margin: '0', + + ['&.title']: { + color: '#F0F0F1', + fontSize: '20px', + fontWeight: '600', + }, + ['&.desc']: { + color: '#9A9C9E', + fontSize: '14px', + fontWeight: '500', + }, + }, + }, +}); + +const WithdrawButtonContainer = styled.div({ + display: 'flex', + flexDirection: 'column', + gap: '20px', + padding: '0px 20px', + boxSizing: 'border-box', + width: '100%', + + ['>button']: { + background: '#1D1E1F', + borderRadius: '10px', + border: 'none', + display: 'flex', + alignItems: 'center', + gap: '8px', + padding: '10px 20px', + + ['>svg']: { + width: '28px', + height: 'auto', + aspectRatio: '1 / 1', + }, + }, +}); + +const WithdrawContent = styled.div({ + width: '100%', + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + gap: '16px', + padding: '32px 0px', + boxSizing: 'border-box', + flexGrow: '1', + + ['>hr']: { + background: '#1D1E1F', + height: '4px', + width: '100%', + border: 'none', + }, + + ['>p']: { + margin: '0', + padding: '0 20px', + width: '100%', + boxSizing: 'border-box', + fontsize: '16px', + fontWeight: '500', + }, +}); + +const RegisterButtonContainer = styled.div({ + padding: '0px 24px 24px', + width: '100%', + boxSizing: 'border-box', + gap: '16px', + display: 'flex', + flexDirection: 'column', +}); + +const RegisterButton = styled.button( + ({ color }: { color: 'primary' | 'secondary' }) => ({ + background: color === 'primary' ? '#3457FD' : '#525658', + color: color === 'primary' ? 'white' : '#101010', + }), + { + width: '100%', + fontSize: '18px', + fontWeight: '600', + height: '48px', + borderRadius: '8px', + padding: '10px 0px', + border: 'none', + }, +); + +const RegisterContainer = styled.div({ + display: 'flex', + flexDirection: 'column', + width: '100%', + alignItems: 'center', + flexGrow: '1', +}); + +const RegisterHeaderContainer = styled.div({ + display: 'flex', + flexDirection: 'column', + width: '100%', + gap: '9px', + + ['>div']: { + display: 'flex', + width: '100%', + justifyContent: 'center', + alignItems: 'center', + padding: '8px 20px', + boxSizing: 'border-box', + gap: '12px', + + ['>svg,>span']: { + width: '32px', + height: 'auto', + aspectRatio: '1 / 1', + }, + + ['>p']: { + margin: '0', + fontSize: '18px', + fontWeight: '600', + color: '#FFFFFF', + flexGrow: '1', + textAlign: 'center', + }, + }, + + ['>span.divider']: { + background: '#1D1E1F', + height: '4px', + }, +}); + +export { + WithdrawTitleContainer, + WithdrawButtonContainer, + WithdrawContent, + RegisterButtonContainer, + RegisterButton, + RegisterContainer, + RegisterHeaderContainer, +}; diff --git a/src/pages/Withdraw/Withdraw.tsx b/src/pages/Withdraw/Withdraw.tsx index 44057e17..50cc48cc 100644 --- a/src/pages/Withdraw/Withdraw.tsx +++ b/src/pages/Withdraw/Withdraw.tsx @@ -1,4 +1,3 @@ -import styled from '@emotion/styled'; import { useNavigate } from 'react-router-dom'; import useAuthInfo from '@hooks/useAuthInfo'; import { webPath } from '@router/index'; @@ -10,6 +9,15 @@ import HeartSVG from '@assets/heart.svg?react'; import LabSVG from '@assets/lab.svg?react'; import ShortViewSVG from '@assets/shortView.svg?react'; import WithdrawPNG from '@assets/withdraw.png'; +import { + RegisterButton, + RegisterButtonContainer, + RegisterContainer, + RegisterHeaderContainer, + WithdrawButtonContainer, + WithdrawContent, + WithdrawTitleContainer, +} from './Withdraw.Style'; const Withdraw = () => { const navigate = useNavigate(); @@ -57,8 +65,8 @@ const Withdraw = () => {
    - {UserService.map((e) => ( - @@ -89,163 +97,4 @@ const Withdraw = () => { ); }; -const WithdrawTitleContainer = styled.div({ - display: 'flex', - gap: '10px', - width: '100%', - alignItems: 'center', - padding: '0px 20px', - boxSizing: 'border-box', - - ['>img']: { - width: '90px', - height: 'auto', - aspectRatio: '1 / 1', - borderRadius: '999px', - }, - - ['>div']: { - display: 'flex', - flexDirection: 'column', - gap: '4px', - width: '100%', - - ['>p']: { - margin: '0', - - ['&.title']: { - color: '#F0F0F1', - fontSize: '20px', - fontWeight: '600', - }, - ['&.desc']: { - color: '#9A9C9E', - fontSize: '14px', - fontWeight: '500', - }, - }, - }, -}); - -const WithdrawButtonContainer = styled.div({ - display: 'flex', - flexDirection: 'column', - gap: '20px', - padding: '0px 20px', - boxSizing: 'border-box', - width: '100%', - - ['>button']: { - background: '#1D1E1F', - borderRadius: '10px', - border: 'none', - display: 'flex', - alignItems: 'center', - gap: '8px', - padding: '10px 20px', - - ['>svg']: { - width: '28px', - height: 'auto', - aspectRatio: '1 / 1', - }, - }, -}); - -const WithdrawContent = styled.div({ - width: '100%', - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - gap: '16px', - padding: '32px 0px', - boxSizing: 'border-box', - flexGrow: '1', - - ['>hr']: { - background: '#1D1E1F', - height: '4px', - width: '100%', - border: 'none', - }, - - ['>p']: { - margin: '0', - padding: '0 20px', - width: '100%', - boxSizing: 'border-box', - fontsize: '16px', - fontWeight: '500', - }, -}); -const RegisterButtonContainer = styled.div({ - padding: '0px 24px 24px', - width: '100%', - boxSizing: 'border-box', - gap: '16px', - display: 'flex', - flexDirection: 'column', -}); - -const RegisterButton = styled.button( - ({ color }: { color: 'primary' | 'secondary' }) => ({ - background: color === 'primary' ? '#3457FD' : '#525658', - color: color === 'primary' ? 'white' : '#101010', - }), - { - width: '100%', - fontSize: '18px', - fontWeight: '600', - height: '48px', - borderRadius: '8px', - padding: '10px 0px', - border: 'none', - }, -); - -const RegisterContainer = styled.div({ - display: 'flex', - flexDirection: 'column', - width: '100%', - alignItems: 'center', - flexGrow: '1', -}); - -const RegisterHeaderContainer = styled.div({ - display: 'flex', - flexDirection: 'column', - width: '100%', - gap: '9px', - - ['>div']: { - display: 'flex', - width: '100%', - justifyContent: 'center', - alignItems: 'center', - padding: '8px 20px', - boxSizing: 'border-box', - gap: '12px', - - ['>svg,>span']: { - width: '32px', - height: 'auto', - aspectRatio: '1 / 1', - }, - - ['>p']: { - margin: '0', - fontSize: '18px', - fontWeight: '600', - color: '#FFFFFF', - flexGrow: '1', - textAlign: 'center', - }, - }, - - ['>span.divider']: { - background: '#1D1E1F', - height: '4px', - }, -}); - export default Withdraw; diff --git a/src/pages/WithdrawDone/WithdrawDone.Style.ts b/src/pages/WithdrawDone/WithdrawDone.Style.ts new file mode 100644 index 00000000..1b2d1901 --- /dev/null +++ b/src/pages/WithdrawDone/WithdrawDone.Style.ts @@ -0,0 +1,64 @@ +import styled from '@emotion/styled'; + +const RegisterContainer = styled.div({ + display: 'flex', + flexDirection: 'column', + width: '100%', + alignItems: 'center', + flexGrow: '1', +}); + +const RegisterDoneContents = styled.div({ + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + gap: '10px', + flexGrow: '1', + justifyContent: 'center', + + ['>svg']: { + width: '72px', + height: 'auto', + aspectRatio: '1 / 1', + fill: '#3457FD', + }, + + ['>p']: { + margin: '0', + textAlign: 'center', + + ['&.title']: { + fontSize: '20px', + fontWeight: '600', + }, + + ['&.desc']: { + fontSize: '14px', + fontWeight: '500', + color: '#CED4DA', + }, + }, +}); + +const RegisterButtonContainer = styled.div({ + padding: '0px 24px 24px', + width: '100%', + boxSizing: 'border-box', +}); + +const RegisterButton = styled.button({ + width: '100%', + fontSize: '18px', + fontWeight: '600', + height: '48px', + borderRadius: '8px', + padding: '10px 0px', + border: 'none', + background: '#3457FD', + color: 'white', + [':disabled']: { + color: '#101010', + }, +}); + +export { RegisterContainer, RegisterDoneContents, RegisterButtonContainer, RegisterButton }; diff --git a/src/pages/WithdrawDone/WithdrawDone.tsx b/src/pages/WithdrawDone/WithdrawDone.tsx index e81995c9..48619235 100644 --- a/src/pages/WithdrawDone/WithdrawDone.tsx +++ b/src/pages/WithdrawDone/WithdrawDone.tsx @@ -1,67 +1,6 @@ -import styled from '@emotion/styled'; import { useNavigate } from 'react-router-dom'; import BlueCheckSVG from '@assets/checkCircle.svg?react'; - -const RegisterContainer = styled.div({ - display: 'flex', - flexDirection: 'column', - width: '100%', - alignItems: 'center', - flexGrow: '1', -}); - -const RegisterDoneContents = styled.div({ - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - gap: '10px', - flexGrow: '1', - justifyContent: 'center', - - ['>svg']: { - width: '72px', - height: 'auto', - aspectRatio: '1 / 1', - fill: '#3457FD', - }, - - ['>p']: { - margin: '0', - textAlign: 'center', - - ['&.title']: { - fontSize: '20px', - fontWeight: '600', - }, - - ['&.desc']: { - fontSize: '14px', - fontWeight: '500', - color: '#CED4DA', - }, - }, -}); - -const RegisterButtonContainer = styled.div({ - padding: '0px 24px 24px', - width: '100%', - boxSizing: 'border-box', -}); - -const RegisterButton = styled.button({ - width: '100%', - fontSize: '18px', - fontWeight: '600', - height: '48px', - borderRadius: '8px', - padding: '10px 0px', - border: 'none', - background: '#3457FD', - color: 'white', - [':disabled']: { - color: '#101010', - }, -}); +import { RegisterButton, RegisterButtonContainer, RegisterContainer, RegisterDoneContents } from './WithdrawDone.Style'; const WithdrawDone = () => { const navigate = useNavigate(); diff --git a/src/utils/getBusinessDaysLater.ts b/src/utils/getBusinessDaysLater.ts index 30bdd39a..1ef0d020 100644 --- a/src/utils/getBusinessDaysLater.ts +++ b/src/utils/getBusinessDaysLater.ts @@ -39,7 +39,7 @@ const isHoliday = (date: Date, country: string): boolean => { export const getBusinessDaysLater = (startDate: Date, days: number, country: string): string => { let count = 0; - let current = new Date(startDate); + const current = new Date(startDate); while (count < days) { current.setDate(current.getDate() + 1); diff --git a/tsconfig.app.tsbuildinfo b/tsconfig.app.tsbuildinfo index c2b3baa1..a27f3258 100644 --- a/tsconfig.app.tsbuildinfo +++ b/tsconfig.app.tsbuildinfo @@ -1 +1 @@ -{"root":["./src/app.tsx","./src/main.tsx","./src/queryclient.ts","./src/vite-env.d.ts","./src/components/cardlist/cardlist.style.ts","./src/components/cardlist/cardlist.tsx","./src/components/cardlist/stockcard/stockcard.style.ts","./src/components/cardlist/stockcard/stockcard.tsx","./src/components/common/button.ts","./src/components/common/common.props.ts","./src/components/common/common.type.ts","./src/components/common/common.tsx","./src/components/common/contentsitem.style.ts","./src/components/common/errorcomponent.tsx","./src/components/common/header.tsx","./src/components/common/loadingcomponent.tsx","./src/components/common/stockimage.tsx","./src/components/common/scrolltopbutton/scrolltopbutton.tsx","./src/components/event/disquiet.style.ts","./src/components/event/disquiet.tsx","./src/components/home/banner/banner.style.ts","./src/components/home/banner/banner.tsx","./src/components/home/indexscore/homeinfo.style.ts","./src/components/home/indexscore/homeinfo.tsx","./src/components/home/keywords/keywords.style.tsx","./src/components/home/keywords/keywords.tsx","./src/components/home/stocktable/stocktable.style.ts","./src/components/home/stocktable/stocktable.tsx","./src/components/home/title/title.style.ts","./src/components/lab/common.style.ts","./src/components/lab/experimentitem/experimentitem.style.ts","./src/components/lab/experimentitem/experimentitem.tsx","./src/components/lab/reportclasschart/reportclasschart.style.ts","./src/components/lab/reportclasschart/reportclasschart.type.tsx","./src/components/lab/reportclasschart/reportclasschart.tsx","./src/components/lab/reportpatternchart/reportpatternchart.style.ts","./src/components/lab/reportpatternchart/reportpatternchart.type.tsx","./src/components/lab/reportpatternchart/reportpatternchart.tsx","./src/components/loading/loading.tsx","./src/components/modal/common.style.ts","./src/components/modal/usemodal.tsx","./src/components/modal/aboutreportclass/aboutreportclass.tsx","./src/components/modal/aboutreportclass/useaboutreportclass.ts","./src/components/modal/aboutreportpattern/aboutreportpattern.tsx","./src/components/modal/aboutreportpattern/useaboutreportpattern.ts","./src/components/modal/centertutorial/centertutotial.style.ts","./src/components/modal/centertutorial/layout.tsx","./src/components/modal/centertutorial/aboutantvoice/aboutantvoice.tsx","./src/components/modal/centertutorial/aboutantvoice/useaboutantvoice.tsx","./src/components/modal/centertutorial/abouthumanzipyo/abouthumanzipyo.tsx","./src/components/modal/centertutorial/abouthumanzipyo/useabouthumanzipyo.tsx","./src/components/modal/confirm/confirmmodal.tsx","./src/components/modal/experimentdetail/experimentdetail.style.ts","./src/components/modal/experimentdetail/experimentdetail.tsx","./src/components/modal/experimentdetail/useexperimentdetail.ts","./src/components/modal/layout/bottomupcancel/bottomupcancel.tsx","./src/components/mypage/mypage.style.ts","./src/components/mypage/mypageinput/mypageinput.tsx","./src/components/mypage/profilecircle/profilecircle.tsx","./src/components/nologinwrapper/nologinwrapper.style.ts","./src/components/nologinwrapper/nologinwrapper.tsx","./src/components/popup/commonpopup.style.ts","./src/components/popup/commonpopup.tsx","./src/components/popup/descentpopup/descentpopup.tsx","./src/components/popup/fearpopup/fearpopup.tsx","./src/components/popup/hotpopup/hotpopup.tsx","./src/components/popup/keywordpopup/keywordpopup.tsx","./src/components/popup/pwainfopopup/pwainfopopup.tsx","./src/components/popup/pwainfopopup/pwainfopopup.style.ts","./src/components/popup/risingpopup/risingpopup.tsx","./src/components/search/guagechart/guagechart.style.ts","./src/components/search/guagechart/guagechart.tsx","./src/components/search/searchtitle/searchtitle.style.ts","./src/components/search/searchtitle/searchtitle.tsx","./src/components/search/stockchart/stockchart.style.ts","./src/components/search/stockchart/stockchart.tsx","./src/components/search/stockwordcloud/stockwordcloud.style.ts","./src/components/search/stockwordcloud/stockwordcloud.tsx","./src/components/searchbar/searchbar.style.ts","./src/components/searchbar/searchbar.tsx","./src/components/searchbar/autocomplete/autocomplete.style.ts","./src/components/searchbar/autocomplete/keywords/keywords.tsx","./src/components/searchbar/autocomplete/stocks/stocks.style.ts","./src/components/searchbar/autocomplete/stocks/stocks.tsx","./src/components/searchbar/popularkeywords/popularkeywords.tsx","./src/components/searchbar/popularstocks/popularstocks.style.ts","./src/components/searchbar/popularstocks/popularstocks.tsx","./src/components/searchbar/recentstocks/recentstocks.style.ts","./src/components/searchbar/recentstocks/recentstocks.tsx","./src/components/shortview/tutorial/tutorial.style.ts","./src/components/shortview/tutorial/tutorial.tsx","./src/components/slideview/slideview.style.ts","./src/components/slideview/slideview.tsx","./src/components/text/text.props.ts","./src/components/text/text.ts","./src/components/toast/toast.tsx","./src/config/oauth.ts","./src/config/webview.ts","./src/constants/patterntypes.ts","./src/constants/stockscore.ts","./src/controllers/auth/api.ts","./src/controllers/common/base.ts","./src/controllers/common/query.ts","./src/controllers/experiment/api.ts","./src/controllers/experiment/query.ts","./src/controllers/notification/api.ts","./src/controllers/notification/mock.ts","./src/controllers/notification/query.ts","./src/controllers/preference/api.ts","./src/controllers/preference/query.ts","./src/controllers/score/api.ts","./src/controllers/score/mock.ts","./src/controllers/score/query.ts","./src/controllers/shortview/api.ts","./src/controllers/shortview/mock.ts","./src/controllers/shortview/query.ts","./src/controllers/stocks/api.ts","./src/controllers/stocks/mock.ts","./src/controllers/stocks/query.ts","./src/controllers/stocks/types.ts","./src/hooks/useauthinfo.ts","./src/hooks/usecanvas.ts","./src/hooks/useismobile.ts","./src/hooks/uselocalstoragestate.ts","./src/hooks/usemodal.tsx","./src/hooks/usepreventscroll.ts","./src/hooks/usequerycomponent.tsx","./src/hooks/userecentstocks.ts","./src/hooks/usesnapindex.ts","./src/hooks/usesocialauth.ts","./src/hooks/usetoast.tsx","./src/hooks/useworker.ts","./src/layout/bottomnavigation/bottomnavigation.style.ts","./src/layout/bottomnavigation/bottomnavigation.tsx","./src/layout/footer/footer.style.ts","./src/layout/footer/footer.tsx","./src/layout/header/header.style.ts","./src/layout/header/header.tsx","./src/layout/mainlayout/mainlayout.props.ts","./src/layout/mainlayout/mainlayout.style.ts","./src/layout/mainlayout/mainlayout.tsx","./src/layout/searchheader/searchheader.tsx","./src/pages/about/about.style.ts","./src/pages/about/about.tsx","./src/pages/about/howto/howto.style.ts","./src/pages/about/howto/howto.tsx","./src/pages/favorites/favorites.style.ts","./src/pages/favorites/favorites.tsx","./src/pages/home/home.style.ts","./src/pages/home/home.tsx","./src/pages/lab/lab.style.ts","./src/pages/lab/lab.tsx","./src/pages/lab/labcurrent/labcurrent.style.ts","./src/pages/lab/labcurrent/labcurrent.tsx","./src/pages/lab/labresult/labresult.style.ts","./src/pages/lab/labresult/labresult.tsx","./src/pages/lab/recordsheet/recordsheet.style.ts","./src/pages/lab/recordsheet/recordsheet.tsx","./src/pages/lab/step/step.style.ts","./src/pages/lab/step/step.tsx","./src/pages/lab/step/country/country.style.ts","./src/pages/lab/step/country/country.tsx","./src/pages/lab/step/done/done.style.ts","./src/pages/lab/step/done/done.tsx","./src/pages/lab/step/purchase/purchase.style.ts","./src/pages/lab/step/purchase/purchase.tsx","./src/pages/lab/step/search/search.style.ts","./src/pages/lab/step/search/search.tsx","./src/pages/lab/step/tutorial/tutorial.style.ts","./src/pages/lab/step/tutorial/tutorial.tsx","./src/pages/login/login.style.ts","./src/pages/login/login.tsx","./src/pages/mypage/mypage.style.ts","./src/pages/mypage/mypage.tsx","./src/pages/mypage/done/done.tsx","./src/pages/mypage/edit/edit.tsx","./src/pages/mypage/profile/profile.tsx","./src/pages/notification/notification.style.ts","./src/pages/notification/notification.tsx","./src/pages/oauthcallback/oauthcallback.style.ts","./src/pages/oauthcallback/oauthcallback.tsx","./src/pages/register/register.style.ts","./src/pages/register/register.tsx","./src/pages/search/search.style.ts","./src/pages/search/search.tsx","./src/pages/shortview/shortview.style.ts","./src/pages/shortview/shortview.tsx","./src/pages/shortview/tindercard/tindercard.style.ts","./src/pages/shortview/tindercard/tindercard.tsx","./src/pages/term/term.style.ts","./src/pages/term/term.tsx","./src/pages/usage/usage.style.ts","./src/pages/usage/usage.tsx","./src/pages/withdraw/withdraw.tsx","./src/pages/withdrawdone/withdrawdone.tsx","./src/router/index.tsx","./src/styles/keyframes.ts","./src/styles/themes.ts","./src/ts/constants.ts","./src/ts/enums.ts","./src/ts/interfaces.ts","./src/ts/searchcategory.ts","./src/ts/stockcountry.ts","./src/ts/stocksector.ts","./src/ts/term.ts","./src/ts/types.ts","./src/utils/canvas.ts","./src/utils/date.ts","./src/utils/delta.ts","./src/utils/detector.ts","./src/utils/scoreconvert.ts","./src/utils/chunkarray.ts","./src/utils/dateformatter.ts","./src/utils/extractmatchedsegments.ts","./src/utils/getbusinessdayslater.ts","./src/utils/getframerate.ts","./src/utils/humanindexutils.ts","./src/utils/notificationmapper.ts","./src/utils/stockimage.ts","./src/utils/wasm/wordcloudwasm.ts","./src/utils/wasm/wordcloud.wasm.d.ts","./src/utils/worker/generatewordcloud.ts"],"version":"5.9.3"} \ No newline at end of file +{"root":["./src/app.tsx","./src/main.tsx","./src/queryclient.ts","./src/vite-env.d.ts","./src/components/cardlist/cardlist.style.ts","./src/components/cardlist/cardlist.tsx","./src/components/cardlist/stockcard/stockcard.style.ts","./src/components/cardlist/stockcard/stockcard.tsx","./src/components/common/button.ts","./src/components/common/common.props.ts","./src/components/common/common.style.ts","./src/components/common/common.type.ts","./src/components/common/common.tsx","./src/components/common/errorcomponent.tsx","./src/components/common/header.style.ts","./src/components/common/header.tsx","./src/components/common/loadingcomponent.tsx","./src/components/common/stockimage.tsx","./src/components/common/scrolltopbutton/scrolltopbutton.style.ts","./src/components/common/scrolltopbutton/scrolltopbutton.tsx","./src/components/event/disquiet.style.ts","./src/components/event/disquiet.tsx","./src/components/home/banner/banner.style.ts","./src/components/home/banner/banner.tsx","./src/components/home/indexscore/homeinfo.style.ts","./src/components/home/indexscore/homeinfo.tsx","./src/components/home/keywords/keywords.style.tsx","./src/components/home/keywords/keywords.tsx","./src/components/home/stocktable/stocktable.style.ts","./src/components/home/stocktable/stocktable.tsx","./src/components/home/title/title.style.ts","./src/components/lab/experimentitem/experimentitem.style.ts","./src/components/lab/experimentitem/experimentitem.tsx","./src/components/lab/reportclasschart/reportclasschart.style.ts","./src/components/lab/reportclasschart/reportclasschart.type.tsx","./src/components/lab/reportclasschart/reportclasschart.tsx","./src/components/lab/reportpatternchart/reportpatternchart.style.ts","./src/components/lab/reportpatternchart/reportpatternchart.type.tsx","./src/components/lab/reportpatternchart/reportpatternchart.tsx","./src/components/loading/loading.style.ts","./src/components/loading/loading.tsx","./src/components/modal/usemodal.tsx","./src/components/modal/aboutreportclass/aboutreportclass.style.ts","./src/components/modal/aboutreportclass/aboutreportclass.tsx","./src/components/modal/aboutreportclass/useaboutreportclass.ts","./src/components/modal/aboutreportpattern/aboutreportpattern.style.ts","./src/components/modal/aboutreportpattern/aboutreportpattern.tsx","./src/components/modal/aboutreportpattern/useaboutreportpattern.ts","./src/components/modal/centertutorial/centertutotial.style.ts","./src/components/modal/centertutorial/layout.tsx","./src/components/modal/centertutorial/aboutantvoice/aboutantvoice.style.ts","./src/components/modal/centertutorial/aboutantvoice/aboutantvoice.tsx","./src/components/modal/centertutorial/aboutantvoice/useaboutantvoice.tsx","./src/components/modal/centertutorial/abouthumanzipyo/abouthumanzipyo.style.ts","./src/components/modal/centertutorial/abouthumanzipyo/abouthumanzipyo.tsx","./src/components/modal/centertutorial/abouthumanzipyo/useabouthumanzipyo.tsx","./src/components/modal/confirm/confirmmodal.style.ts","./src/components/modal/confirm/confirmmodal.tsx","./src/components/modal/experimentdetail/experimentdetail.style.ts","./src/components/modal/experimentdetail/experimentdetail.tsx","./src/components/modal/experimentdetail/useexperimentdetail.ts","./src/components/modal/layout/bottomupcancel/bottomupcancel.style.ts","./src/components/modal/layout/bottomupcancel/bottomupcancel.tsx","./src/components/mypage/mypage.style.ts","./src/components/mypage/mypageinput/mypageinput.style.ts","./src/components/mypage/mypageinput/mypageinput.tsx","./src/components/mypage/profilecircle/profilecircle.style.ts","./src/components/mypage/profilecircle/profilecircle.tsx","./src/components/nologinwrapper/nologinwrapper.style.ts","./src/components/nologinwrapper/nologinwrapper.tsx","./src/components/popup/commonpopup.style.ts","./src/components/popup/commonpopup.tsx","./src/components/popup/descentpopup/descentpopup.tsx","./src/components/popup/fearpopup/fearpopup.tsx","./src/components/popup/hotpopup/hotpopup.tsx","./src/components/popup/keywordpopup/keywordpopup.tsx","./src/components/popup/pwainfopopup/pwainfopopup.tsx","./src/components/popup/pwainfopopup/pwainfopopup.style.ts","./src/components/popup/risingpopup/risingpopup.tsx","./src/components/search/guagechart/guagechart.style.ts","./src/components/search/guagechart/guagechart.tsx","./src/components/search/searchtitle/searchtitle.style.ts","./src/components/search/searchtitle/searchtitle.tsx","./src/components/search/stockchart/stockchart.style.ts","./src/components/search/stockchart/stockchart.tsx","./src/components/search/stockwordcloud/stockwordcloud.style.ts","./src/components/search/stockwordcloud/stockwordcloud.tsx","./src/components/searchbar/searchbar.style.ts","./src/components/searchbar/searchbar.tsx","./src/components/searchbar/autocomplete/autocomplete.style.ts","./src/components/searchbar/autocomplete/keywords/keywords.tsx","./src/components/searchbar/autocomplete/stocks/stocks.style.ts","./src/components/searchbar/autocomplete/stocks/stocks.tsx","./src/components/searchbar/popularkeywords/popularkeywords.style.ts","./src/components/searchbar/popularkeywords/popularkeywords.tsx","./src/components/searchbar/popularstocks/popularstocks.style.ts","./src/components/searchbar/popularstocks/popularstocks.tsx","./src/components/searchbar/recentstocks/recentstocks.style.ts","./src/components/searchbar/recentstocks/recentstocks.tsx","./src/components/shortview/tutorial/tutorial.style.ts","./src/components/shortview/tutorial/tutorial.tsx","./src/components/slideview/slideview.style.ts","./src/components/slideview/slideview.tsx","./src/components/text/text.props.ts","./src/components/text/text.ts","./src/components/toast/toast.style.ts","./src/components/toast/toast.tsx","./src/config/oauth.ts","./src/config/webview.ts","./src/constants/patterntypes.ts","./src/constants/stockscore.ts","./src/controllers/auth/api.ts","./src/controllers/common/base.ts","./src/controllers/common/query.ts","./src/controllers/experiment/api.ts","./src/controllers/experiment/query.ts","./src/controllers/notification/api.ts","./src/controllers/notification/mock.ts","./src/controllers/notification/query.ts","./src/controllers/preference/api.ts","./src/controllers/preference/query.ts","./src/controllers/score/api.ts","./src/controllers/score/mock.ts","./src/controllers/score/query.ts","./src/controllers/shortview/api.ts","./src/controllers/shortview/mock.ts","./src/controllers/shortview/query.ts","./src/controllers/stocks/api.ts","./src/controllers/stocks/mock.ts","./src/controllers/stocks/query.ts","./src/controllers/stocks/types.ts","./src/hooks/useauthinfo.ts","./src/hooks/usecanvas.ts","./src/hooks/useismobile.ts","./src/hooks/uselocalstoragestate.ts","./src/hooks/usemodal.style.ts","./src/hooks/usemodal.tsx","./src/hooks/usepreventscroll.ts","./src/hooks/usequerycomponent.tsx","./src/hooks/userecentstocks.ts","./src/hooks/usesnapindex.ts","./src/hooks/usesocialauth.ts","./src/hooks/usetoast.tsx","./src/hooks/useworker.ts","./src/layout/bottomnavigation/bottomnavigation.style.ts","./src/layout/bottomnavigation/bottomnavigation.tsx","./src/layout/footer/footer.style.ts","./src/layout/footer/footer.tsx","./src/layout/header/header.style.ts","./src/layout/header/header.tsx","./src/layout/mainlayout/mainlayout.props.ts","./src/layout/mainlayout/mainlayout.style.ts","./src/layout/mainlayout/mainlayout.tsx","./src/layout/searchheader/searchheader.style.ts","./src/layout/searchheader/searchheader.tsx","./src/pages/about/about.style.ts","./src/pages/about/about.tsx","./src/pages/about/howto/howto.style.ts","./src/pages/about/howto/howto.tsx","./src/pages/favorites/favorites.style.ts","./src/pages/favorites/favorites.tsx","./src/pages/home/home.style.ts","./src/pages/home/home.tsx","./src/pages/lab/lab.style.ts","./src/pages/lab/lab.tsx","./src/pages/lab/labcurrent/labcurrent.style.ts","./src/pages/lab/labcurrent/labcurrent.tsx","./src/pages/lab/labresult/labresult.style.ts","./src/pages/lab/labresult/labresult.tsx","./src/pages/lab/recordsheet/recordsheet.style.ts","./src/pages/lab/recordsheet/recordsheet.tsx","./src/pages/lab/step/step.style.ts","./src/pages/lab/step/step.tsx","./src/pages/lab/step/country/country.style.ts","./src/pages/lab/step/country/country.tsx","./src/pages/lab/step/done/done.style.ts","./src/pages/lab/step/done/done.tsx","./src/pages/lab/step/purchase/purchase.style.ts","./src/pages/lab/step/purchase/purchase.tsx","./src/pages/lab/step/search/search.style.ts","./src/pages/lab/step/search/search.tsx","./src/pages/lab/step/tutorial/tutorial.style.ts","./src/pages/lab/step/tutorial/tutorial.tsx","./src/pages/login/login.style.ts","./src/pages/login/login.tsx","./src/pages/mypage/mypage.style.ts","./src/pages/mypage/mypage.tsx","./src/pages/mypage/done/done.style.ts","./src/pages/mypage/done/done.tsx","./src/pages/mypage/edit/edit.style.ts","./src/pages/mypage/edit/edit.tsx","./src/pages/mypage/profile/profile.style.ts","./src/pages/mypage/profile/profile.tsx","./src/pages/notification/notification.style.ts","./src/pages/notification/notification.tsx","./src/pages/oauthcallback/oauthcallback.style.ts","./src/pages/oauthcallback/oauthcallback.tsx","./src/pages/register/register.style.ts","./src/pages/register/register.tsx","./src/pages/search/search.style.ts","./src/pages/search/search.tsx","./src/pages/shortview/shortview.style.ts","./src/pages/shortview/shortview.tsx","./src/pages/shortview/tindercard/tindercard.style.ts","./src/pages/shortview/tindercard/tindercard.tsx","./src/pages/term/term.style.ts","./src/pages/term/term.tsx","./src/pages/usage/usage.style.ts","./src/pages/usage/usage.tsx","./src/pages/withdraw/withdraw.style.ts","./src/pages/withdraw/withdraw.tsx","./src/pages/withdrawdone/withdrawdone.style.ts","./src/pages/withdrawdone/withdrawdone.tsx","./src/router/index.tsx","./src/styles/keyframes.ts","./src/styles/themes.ts","./src/ts/constants.ts","./src/ts/enums.ts","./src/ts/interfaces.ts","./src/ts/searchcategory.ts","./src/ts/stockcountry.ts","./src/ts/stocksector.ts","./src/ts/term.ts","./src/ts/types.ts","./src/utils/canvas.ts","./src/utils/date.ts","./src/utils/delta.ts","./src/utils/detector.ts","./src/utils/scoreconvert.ts","./src/utils/chunkarray.ts","./src/utils/dateformatter.ts","./src/utils/extractmatchedsegments.ts","./src/utils/getbusinessdayslater.ts","./src/utils/getframerate.ts","./src/utils/humanindexutils.ts","./src/utils/notificationmapper.ts","./src/utils/stockimage.ts","./src/utils/wasm/wordcloudwasm.ts","./src/utils/wasm/wordcloud.wasm.d.ts","./src/utils/worker/generatewordcloud.ts"],"version":"5.9.3"} \ No newline at end of file diff --git a/tsconfig.node.tsbuildinfo b/tsconfig.node.tsbuildinfo index c77c415d..463952ad 100644 --- a/tsconfig.node.tsbuildinfo +++ b/tsconfig.node.tsbuildinfo @@ -1 +1 @@ -{"root":["./src/app.tsx","./src/main.tsx","./src/queryclient.ts","./src/vite-env.d.ts","./src/components/cardlist/cardlist.style.ts","./src/components/cardlist/cardlist.tsx","./src/components/cardlist/stockcard/stockcard.style.ts","./src/components/cardlist/stockcard/stockcard.tsx","./src/components/common/button.ts","./src/components/common/common.props.ts","./src/components/common/common.type.ts","./src/components/common/common.tsx","./src/components/common/contentsitem.style.ts","./src/components/common/errorcomponent.tsx","./src/components/common/header.tsx","./src/components/common/loadingcomponent.tsx","./src/components/common/stockimage.tsx","./src/components/common/scrolltopbutton/scrolltopbutton.tsx","./src/components/event/disquiet.style.ts","./src/components/event/disquiet.tsx","./src/components/home/banner/banner.style.ts","./src/components/home/banner/banner.tsx","./src/components/home/indexscore/homeinfo.style.ts","./src/components/home/indexscore/homeinfo.tsx","./src/components/home/keywords/keywords.style.tsx","./src/components/home/keywords/keywords.tsx","./src/components/home/stocktable/stocktable.style.ts","./src/components/home/stocktable/stocktable.tsx","./src/components/home/title/title.style.ts","./src/components/lab/common.style.ts","./src/components/lab/experimentitem/experimentitem.style.ts","./src/components/lab/experimentitem/experimentitem.tsx","./src/components/lab/reportclasschart/reportclasschart.style.ts","./src/components/lab/reportclasschart/reportclasschart.type.tsx","./src/components/lab/reportclasschart/reportclasschart.tsx","./src/components/lab/reportpatternchart/reportpatternchart.style.ts","./src/components/lab/reportpatternchart/reportpatternchart.type.tsx","./src/components/lab/reportpatternchart/reportpatternchart.tsx","./src/components/loading/loading.tsx","./src/components/modal/common.style.ts","./src/components/modal/usemodal.tsx","./src/components/modal/aboutreportclass/aboutreportclass.tsx","./src/components/modal/aboutreportclass/useaboutreportclass.ts","./src/components/modal/aboutreportpattern/aboutreportpattern.tsx","./src/components/modal/aboutreportpattern/useaboutreportpattern.ts","./src/components/modal/centertutorial/centertutotial.style.ts","./src/components/modal/centertutorial/layout.tsx","./src/components/modal/centertutorial/aboutantvoice/aboutantvoice.tsx","./src/components/modal/centertutorial/aboutantvoice/useaboutantvoice.tsx","./src/components/modal/centertutorial/abouthumanzipyo/abouthumanzipyo.tsx","./src/components/modal/centertutorial/abouthumanzipyo/useabouthumanzipyo.tsx","./src/components/modal/confirm/confirmmodal.tsx","./src/components/modal/experimentdetail/experimentdetail.style.ts","./src/components/modal/experimentdetail/experimentdetail.tsx","./src/components/modal/experimentdetail/useexperimentdetail.ts","./src/components/modal/layout/bottomupcancel/bottomupcancel.tsx","./src/components/mypage/mypage.style.ts","./src/components/mypage/mypageinput/mypageinput.tsx","./src/components/mypage/profilecircle/profilecircle.tsx","./src/components/nologinwrapper/nologinwrapper.style.ts","./src/components/nologinwrapper/nologinwrapper.tsx","./src/components/popup/commonpopup.style.ts","./src/components/popup/commonpopup.tsx","./src/components/popup/descentpopup/descentpopup.tsx","./src/components/popup/fearpopup/fearpopup.tsx","./src/components/popup/hotpopup/hotpopup.tsx","./src/components/popup/keywordpopup/keywordpopup.tsx","./src/components/popup/pwainfopopup/pwainfopopup.tsx","./src/components/popup/pwainfopopup/pwainfopopup.style.ts","./src/components/popup/risingpopup/risingpopup.tsx","./src/components/search/guagechart/guagechart.style.ts","./src/components/search/guagechart/guagechart.tsx","./src/components/search/searchtitle/searchtitle.style.ts","./src/components/search/searchtitle/searchtitle.tsx","./src/components/search/stockchart/stockchart.style.ts","./src/components/search/stockchart/stockchart.tsx","./src/components/search/stockwordcloud/stockwordcloud.style.ts","./src/components/search/stockwordcloud/stockwordcloud.tsx","./src/components/searchbar/searchbar.style.ts","./src/components/searchbar/searchbar.tsx","./src/components/searchbar/autocomplete/autocomplete.style.ts","./src/components/searchbar/autocomplete/keywords/keywords.tsx","./src/components/searchbar/autocomplete/stocks/stocks.style.ts","./src/components/searchbar/autocomplete/stocks/stocks.tsx","./src/components/searchbar/popularkeywords/popularkeywords.tsx","./src/components/searchbar/popularstocks/popularstocks.style.ts","./src/components/searchbar/popularstocks/popularstocks.tsx","./src/components/searchbar/recentstocks/recentstocks.style.ts","./src/components/searchbar/recentstocks/recentstocks.tsx","./src/components/shortview/tutorial/tutorial.style.ts","./src/components/shortview/tutorial/tutorial.tsx","./src/components/slideview/slideview.style.ts","./src/components/slideview/slideview.tsx","./src/components/text/text.props.ts","./src/components/text/text.ts","./src/components/toast/toast.tsx","./src/config/oauth.ts","./src/config/webview.ts","./src/constants/patterntypes.ts","./src/constants/stockscore.ts","./src/controllers/auth/api.ts","./src/controllers/common/base.ts","./src/controllers/common/query.ts","./src/controllers/experiment/api.ts","./src/controllers/experiment/query.ts","./src/controllers/notification/api.ts","./src/controllers/notification/mock.ts","./src/controllers/notification/query.ts","./src/controllers/preference/api.ts","./src/controllers/preference/query.ts","./src/controllers/score/api.ts","./src/controllers/score/mock.ts","./src/controllers/score/query.ts","./src/controllers/shortview/api.ts","./src/controllers/shortview/mock.ts","./src/controllers/shortview/query.ts","./src/controllers/stocks/api.ts","./src/controllers/stocks/mock.ts","./src/controllers/stocks/query.ts","./src/controllers/stocks/types.ts","./src/hooks/useauthinfo.ts","./src/hooks/usecanvas.ts","./src/hooks/useismobile.ts","./src/hooks/uselocalstoragestate.ts","./src/hooks/usemodal.tsx","./src/hooks/usepreventscroll.ts","./src/hooks/usequerycomponent.tsx","./src/hooks/userecentstocks.ts","./src/hooks/usesnapindex.ts","./src/hooks/usesocialauth.ts","./src/hooks/usetoast.tsx","./src/hooks/useworker.ts","./src/layout/bottomnavigation/bottomnavigation.style.ts","./src/layout/bottomnavigation/bottomnavigation.tsx","./src/layout/footer/footer.style.ts","./src/layout/footer/footer.tsx","./src/layout/header/header.style.ts","./src/layout/header/header.tsx","./src/layout/mainlayout/mainlayout.props.ts","./src/layout/mainlayout/mainlayout.style.ts","./src/layout/mainlayout/mainlayout.tsx","./src/layout/searchheader/searchheader.tsx","./src/pages/about/about.style.ts","./src/pages/about/about.tsx","./src/pages/about/howto/howto.style.ts","./src/pages/about/howto/howto.tsx","./src/pages/favorites/favorites.style.ts","./src/pages/favorites/favorites.tsx","./src/pages/home/home.style.ts","./src/pages/home/home.tsx","./src/pages/lab/lab.style.ts","./src/pages/lab/lab.tsx","./src/pages/lab/labcurrent/labcurrent.style.ts","./src/pages/lab/labcurrent/labcurrent.tsx","./src/pages/lab/labresult/labresult.style.ts","./src/pages/lab/labresult/labresult.tsx","./src/pages/lab/recordsheet/recordsheet.style.ts","./src/pages/lab/recordsheet/recordsheet.tsx","./src/pages/lab/step/step.style.ts","./src/pages/lab/step/step.tsx","./src/pages/lab/step/country/country.style.ts","./src/pages/lab/step/country/country.tsx","./src/pages/lab/step/done/done.style.ts","./src/pages/lab/step/done/done.tsx","./src/pages/lab/step/purchase/purchase.style.ts","./src/pages/lab/step/purchase/purchase.tsx","./src/pages/lab/step/search/search.style.ts","./src/pages/lab/step/search/search.tsx","./src/pages/lab/step/tutorial/tutorial.style.ts","./src/pages/lab/step/tutorial/tutorial.tsx","./src/pages/login/login.style.ts","./src/pages/login/login.tsx","./src/pages/mypage/mypage.style.ts","./src/pages/mypage/mypage.tsx","./src/pages/mypage/done/done.tsx","./src/pages/mypage/edit/edit.tsx","./src/pages/mypage/profile/profile.tsx","./src/pages/notification/notification.style.ts","./src/pages/notification/notification.tsx","./src/pages/oauthcallback/oauthcallback.style.ts","./src/pages/oauthcallback/oauthcallback.tsx","./src/pages/register/register.style.ts","./src/pages/register/register.tsx","./src/pages/search/search.style.ts","./src/pages/search/search.tsx","./src/pages/shortview/shortview.style.ts","./src/pages/shortview/shortview.tsx","./src/pages/shortview/tindercard/tindercard.style.ts","./src/pages/shortview/tindercard/tindercard.tsx","./src/pages/term/term.style.ts","./src/pages/term/term.tsx","./src/pages/usage/usage.style.ts","./src/pages/usage/usage.tsx","./src/pages/withdraw/withdraw.tsx","./src/pages/withdrawdone/withdrawdone.tsx","./src/router/index.tsx","./src/styles/keyframes.ts","./src/styles/themes.ts","./src/ts/constants.ts","./src/ts/enums.ts","./src/ts/interfaces.ts","./src/ts/searchcategory.ts","./src/ts/stockcountry.ts","./src/ts/stocksector.ts","./src/ts/term.ts","./src/ts/types.ts","./src/utils/canvas.ts","./src/utils/date.ts","./src/utils/delta.ts","./src/utils/detector.ts","./src/utils/scoreconvert.ts","./src/utils/chunkarray.ts","./src/utils/dateformatter.ts","./src/utils/extractmatchedsegments.ts","./src/utils/getbusinessdayslater.ts","./src/utils/getframerate.ts","./src/utils/humanindexutils.ts","./src/utils/notificationmapper.ts","./src/utils/stockimage.ts","./src/utils/wasm/wordcloudwasm.ts","./src/utils/wasm/wordcloud.wasm.d.ts","./src/utils/worker/generatewordcloud.ts","./vite.config.ts"],"version":"5.9.3"} \ No newline at end of file +{"root":["./src/app.tsx","./src/main.tsx","./src/queryclient.ts","./src/vite-env.d.ts","./src/components/cardlist/cardlist.style.ts","./src/components/cardlist/cardlist.tsx","./src/components/cardlist/stockcard/stockcard.style.ts","./src/components/cardlist/stockcard/stockcard.tsx","./src/components/common/button.ts","./src/components/common/common.props.ts","./src/components/common/common.style.ts","./src/components/common/common.type.ts","./src/components/common/common.tsx","./src/components/common/errorcomponent.tsx","./src/components/common/header.style.ts","./src/components/common/header.tsx","./src/components/common/loadingcomponent.tsx","./src/components/common/stockimage.tsx","./src/components/common/scrolltopbutton/scrolltopbutton.style.ts","./src/components/common/scrolltopbutton/scrolltopbutton.tsx","./src/components/event/disquiet.style.ts","./src/components/event/disquiet.tsx","./src/components/home/banner/banner.style.ts","./src/components/home/banner/banner.tsx","./src/components/home/indexscore/homeinfo.style.ts","./src/components/home/indexscore/homeinfo.tsx","./src/components/home/keywords/keywords.style.tsx","./src/components/home/keywords/keywords.tsx","./src/components/home/stocktable/stocktable.style.ts","./src/components/home/stocktable/stocktable.tsx","./src/components/home/title/title.style.ts","./src/components/lab/experimentitem/experimentitem.style.ts","./src/components/lab/experimentitem/experimentitem.tsx","./src/components/lab/reportclasschart/reportclasschart.style.ts","./src/components/lab/reportclasschart/reportclasschart.type.tsx","./src/components/lab/reportclasschart/reportclasschart.tsx","./src/components/lab/reportpatternchart/reportpatternchart.style.ts","./src/components/lab/reportpatternchart/reportpatternchart.type.tsx","./src/components/lab/reportpatternchart/reportpatternchart.tsx","./src/components/loading/loading.style.ts","./src/components/loading/loading.tsx","./src/components/modal/usemodal.tsx","./src/components/modal/aboutreportclass/aboutreportclass.style.ts","./src/components/modal/aboutreportclass/aboutreportclass.tsx","./src/components/modal/aboutreportclass/useaboutreportclass.ts","./src/components/modal/aboutreportpattern/aboutreportpattern.style.ts","./src/components/modal/aboutreportpattern/aboutreportpattern.tsx","./src/components/modal/aboutreportpattern/useaboutreportpattern.ts","./src/components/modal/centertutorial/centertutotial.style.ts","./src/components/modal/centertutorial/layout.tsx","./src/components/modal/centertutorial/aboutantvoice/aboutantvoice.style.ts","./src/components/modal/centertutorial/aboutantvoice/aboutantvoice.tsx","./src/components/modal/centertutorial/aboutantvoice/useaboutantvoice.tsx","./src/components/modal/centertutorial/abouthumanzipyo/abouthumanzipyo.style.ts","./src/components/modal/centertutorial/abouthumanzipyo/abouthumanzipyo.tsx","./src/components/modal/centertutorial/abouthumanzipyo/useabouthumanzipyo.tsx","./src/components/modal/confirm/confirmmodal.style.ts","./src/components/modal/confirm/confirmmodal.tsx","./src/components/modal/experimentdetail/experimentdetail.style.ts","./src/components/modal/experimentdetail/experimentdetail.tsx","./src/components/modal/experimentdetail/useexperimentdetail.ts","./src/components/modal/layout/bottomupcancel/bottomupcancel.style.ts","./src/components/modal/layout/bottomupcancel/bottomupcancel.tsx","./src/components/mypage/mypage.style.ts","./src/components/mypage/mypageinput/mypageinput.style.ts","./src/components/mypage/mypageinput/mypageinput.tsx","./src/components/mypage/profilecircle/profilecircle.style.ts","./src/components/mypage/profilecircle/profilecircle.tsx","./src/components/nologinwrapper/nologinwrapper.style.ts","./src/components/nologinwrapper/nologinwrapper.tsx","./src/components/popup/commonpopup.style.ts","./src/components/popup/commonpopup.tsx","./src/components/popup/descentpopup/descentpopup.tsx","./src/components/popup/fearpopup/fearpopup.tsx","./src/components/popup/hotpopup/hotpopup.tsx","./src/components/popup/keywordpopup/keywordpopup.tsx","./src/components/popup/pwainfopopup/pwainfopopup.tsx","./src/components/popup/pwainfopopup/pwainfopopup.style.ts","./src/components/popup/risingpopup/risingpopup.tsx","./src/components/search/guagechart/guagechart.style.ts","./src/components/search/guagechart/guagechart.tsx","./src/components/search/searchtitle/searchtitle.style.ts","./src/components/search/searchtitle/searchtitle.tsx","./src/components/search/stockchart/stockchart.style.ts","./src/components/search/stockchart/stockchart.tsx","./src/components/search/stockwordcloud/stockwordcloud.style.ts","./src/components/search/stockwordcloud/stockwordcloud.tsx","./src/components/searchbar/searchbar.style.ts","./src/components/searchbar/searchbar.tsx","./src/components/searchbar/autocomplete/autocomplete.style.ts","./src/components/searchbar/autocomplete/keywords/keywords.tsx","./src/components/searchbar/autocomplete/stocks/stocks.style.ts","./src/components/searchbar/autocomplete/stocks/stocks.tsx","./src/components/searchbar/popularkeywords/popularkeywords.style.ts","./src/components/searchbar/popularkeywords/popularkeywords.tsx","./src/components/searchbar/popularstocks/popularstocks.style.ts","./src/components/searchbar/popularstocks/popularstocks.tsx","./src/components/searchbar/recentstocks/recentstocks.style.ts","./src/components/searchbar/recentstocks/recentstocks.tsx","./src/components/shortview/tutorial/tutorial.style.ts","./src/components/shortview/tutorial/tutorial.tsx","./src/components/slideview/slideview.style.ts","./src/components/slideview/slideview.tsx","./src/components/text/text.props.ts","./src/components/text/text.ts","./src/components/toast/toast.style.ts","./src/components/toast/toast.tsx","./src/config/oauth.ts","./src/config/webview.ts","./src/constants/patterntypes.ts","./src/constants/stockscore.ts","./src/controllers/auth/api.ts","./src/controllers/common/base.ts","./src/controllers/common/query.ts","./src/controllers/experiment/api.ts","./src/controllers/experiment/query.ts","./src/controllers/notification/api.ts","./src/controllers/notification/mock.ts","./src/controllers/notification/query.ts","./src/controllers/preference/api.ts","./src/controllers/preference/query.ts","./src/controllers/score/api.ts","./src/controllers/score/mock.ts","./src/controllers/score/query.ts","./src/controllers/shortview/api.ts","./src/controllers/shortview/mock.ts","./src/controllers/shortview/query.ts","./src/controllers/stocks/api.ts","./src/controllers/stocks/mock.ts","./src/controllers/stocks/query.ts","./src/controllers/stocks/types.ts","./src/hooks/useauthinfo.ts","./src/hooks/usecanvas.ts","./src/hooks/useismobile.ts","./src/hooks/uselocalstoragestate.ts","./src/hooks/usemodal.style.ts","./src/hooks/usemodal.tsx","./src/hooks/usepreventscroll.ts","./src/hooks/usequerycomponent.tsx","./src/hooks/userecentstocks.ts","./src/hooks/usesnapindex.ts","./src/hooks/usesocialauth.ts","./src/hooks/usetoast.tsx","./src/hooks/useworker.ts","./src/layout/bottomnavigation/bottomnavigation.style.ts","./src/layout/bottomnavigation/bottomnavigation.tsx","./src/layout/footer/footer.style.ts","./src/layout/footer/footer.tsx","./src/layout/header/header.style.ts","./src/layout/header/header.tsx","./src/layout/mainlayout/mainlayout.props.ts","./src/layout/mainlayout/mainlayout.style.ts","./src/layout/mainlayout/mainlayout.tsx","./src/layout/searchheader/searchheader.style.ts","./src/layout/searchheader/searchheader.tsx","./src/pages/about/about.style.ts","./src/pages/about/about.tsx","./src/pages/about/howto/howto.style.ts","./src/pages/about/howto/howto.tsx","./src/pages/favorites/favorites.style.ts","./src/pages/favorites/favorites.tsx","./src/pages/home/home.style.ts","./src/pages/home/home.tsx","./src/pages/lab/lab.style.ts","./src/pages/lab/lab.tsx","./src/pages/lab/labcurrent/labcurrent.style.ts","./src/pages/lab/labcurrent/labcurrent.tsx","./src/pages/lab/labresult/labresult.style.ts","./src/pages/lab/labresult/labresult.tsx","./src/pages/lab/recordsheet/recordsheet.style.ts","./src/pages/lab/recordsheet/recordsheet.tsx","./src/pages/lab/step/step.style.ts","./src/pages/lab/step/step.tsx","./src/pages/lab/step/country/country.style.ts","./src/pages/lab/step/country/country.tsx","./src/pages/lab/step/done/done.style.ts","./src/pages/lab/step/done/done.tsx","./src/pages/lab/step/purchase/purchase.style.ts","./src/pages/lab/step/purchase/purchase.tsx","./src/pages/lab/step/search/search.style.ts","./src/pages/lab/step/search/search.tsx","./src/pages/lab/step/tutorial/tutorial.style.ts","./src/pages/lab/step/tutorial/tutorial.tsx","./src/pages/login/login.style.ts","./src/pages/login/login.tsx","./src/pages/mypage/mypage.style.ts","./src/pages/mypage/mypage.tsx","./src/pages/mypage/done/done.style.ts","./src/pages/mypage/done/done.tsx","./src/pages/mypage/edit/edit.style.ts","./src/pages/mypage/edit/edit.tsx","./src/pages/mypage/profile/profile.style.ts","./src/pages/mypage/profile/profile.tsx","./src/pages/notification/notification.style.ts","./src/pages/notification/notification.tsx","./src/pages/oauthcallback/oauthcallback.style.ts","./src/pages/oauthcallback/oauthcallback.tsx","./src/pages/register/register.style.ts","./src/pages/register/register.tsx","./src/pages/search/search.style.ts","./src/pages/search/search.tsx","./src/pages/shortview/shortview.style.ts","./src/pages/shortview/shortview.tsx","./src/pages/shortview/tindercard/tindercard.style.ts","./src/pages/shortview/tindercard/tindercard.tsx","./src/pages/term/term.style.ts","./src/pages/term/term.tsx","./src/pages/usage/usage.style.ts","./src/pages/usage/usage.tsx","./src/pages/withdraw/withdraw.style.ts","./src/pages/withdraw/withdraw.tsx","./src/pages/withdrawdone/withdrawdone.style.ts","./src/pages/withdrawdone/withdrawdone.tsx","./src/router/index.tsx","./src/styles/keyframes.ts","./src/styles/themes.ts","./src/ts/constants.ts","./src/ts/enums.ts","./src/ts/interfaces.ts","./src/ts/searchcategory.ts","./src/ts/stockcountry.ts","./src/ts/stocksector.ts","./src/ts/term.ts","./src/ts/types.ts","./src/utils/canvas.ts","./src/utils/date.ts","./src/utils/delta.ts","./src/utils/detector.ts","./src/utils/scoreconvert.ts","./src/utils/chunkarray.ts","./src/utils/dateformatter.ts","./src/utils/extractmatchedsegments.ts","./src/utils/getbusinessdayslater.ts","./src/utils/getframerate.ts","./src/utils/humanindexutils.ts","./src/utils/notificationmapper.ts","./src/utils/stockimage.ts","./src/utils/wasm/wordcloudwasm.ts","./src/utils/wasm/wordcloud.wasm.d.ts","./src/utils/worker/generatewordcloud.ts","./vite.config.ts"],"version":"5.9.3"} \ No newline at end of file