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/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.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/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/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
-
실험이 끝났을 때 수익률이 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 1f76b74e..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