diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4e5d830..aab48ac 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,10 +13,10 @@ importers: version: 2.2.0(react@18.3.1) '@reduxjs/toolkit': specifier: ^2.4.0 - version: 2.4.0(react-redux@9.1.2(@types/react@18.3.14)(react@18.3.1)(redux@5.0.1))(react@18.3.1) + version: 2.5.0(react-redux@9.2.0(@types/react@18.3.17)(react@18.3.1)(redux@5.0.1))(react@18.3.1) '@tanstack/react-query': specifier: ^5.62.2 - version: 5.62.2(react@18.3.1) + version: 5.62.8(react@18.3.1) '@types/quill': specifier: ^2.0.14 version: 2.0.14 @@ -46,7 +46,7 @@ importers: version: 2.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-redux: specifier: ^9.1.2 - version: 9.1.2(@types/react@18.3.14)(react@18.3.1)(redux@5.0.1) + version: 9.2.0(@types/react@18.3.17)(react@18.3.1)(redux@5.0.1) react-router: specifier: ^7.0.2 version: 7.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -62,10 +62,10 @@ importers: version: 3.2.2(react@18.3.1)(storybook@8.4.7) '@eslint/js': specifier: ^9.15.0 - version: 9.16.0 + version: 9.17.0 '@storybook/addon-essentials': specifier: ^8.4.7 - version: 8.4.7(@types/react@18.3.14)(storybook@8.4.7) + version: 8.4.7(@types/react@18.3.17)(storybook@8.4.7) '@storybook/addon-interactions': specifier: ^8.4.7 version: 8.4.7(storybook@8.4.7) @@ -80,7 +80,7 @@ importers: version: 8.4.7(@storybook/test@8.4.7(storybook@8.4.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.6.3) '@storybook/react-vite': specifier: ^8.4.7 - version: 8.4.7(@storybook/test@8.4.7(storybook@8.4.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7)(typescript@5.6.3)(vite@6.0.3(@types/node@22.10.2)) + version: 8.4.7(@storybook/test@8.4.7(storybook@8.4.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.1)(storybook@8.4.7)(typescript@5.6.3)(vite@6.0.3(@types/node@22.10.2)) '@storybook/test': specifier: ^8.4.7 version: 8.4.7(storybook@8.4.7) @@ -89,10 +89,10 @@ importers: version: 3.1.0 '@types/react': specifier: ^18.3.14 - version: 18.3.14 + version: 18.3.17 '@types/react-dom': specifier: ^18.3.2 - version: 18.3.2 + version: 18.3.5(@types/react@18.3.17) '@types/redux-persist': specifier: ^4.3.1 version: 4.3.1(react@18.3.1)(redux@5.0.1) @@ -101,25 +101,25 @@ importers: version: 4.3.4(vite@6.0.3(@types/node@22.10.2)) eslint: specifier: ^9.15.0 - version: 9.16.0 + version: 9.17.0 eslint-plugin-react-hooks: specifier: ^5.0.0 - version: 5.1.0(eslint@9.16.0) + version: 5.1.0(eslint@9.17.0) eslint-plugin-react-refresh: specifier: ^0.4.14 - version: 0.4.16(eslint@9.16.0) + version: 0.4.16(eslint@9.17.0) eslint-plugin-storybook: specifier: ^0.11.1 - version: 0.11.1(eslint@9.16.0)(typescript@5.6.3) + version: 0.11.1(eslint@9.17.0)(typescript@5.6.3) globals: specifier: ^15.12.0 - version: 15.13.0 + version: 15.14.0 husky: specifier: ^9.1.7 version: 9.1.7 msw: specifier: ^2.6.8 - version: 2.6.8(@types/node@22.10.2)(typescript@5.6.3) + version: 2.7.0(@types/node@22.10.2)(typescript@5.6.3) storybook: specifier: ^8.4.7 version: 8.4.7 @@ -128,16 +128,16 @@ importers: version: 5.6.3 typescript-eslint: specifier: ^8.15.0 - version: 8.17.0(eslint@9.16.0)(typescript@5.6.3) + version: 8.18.1(eslint@9.17.0)(typescript@5.6.3) vite: specifier: ^6.0.3 version: 6.0.3(@types/node@22.10.2) vite-plugin-svgr: specifier: ^4.3.0 - version: 4.3.0(rollup@4.28.0)(typescript@5.6.3)(vite@6.0.3(@types/node@22.10.2)) + version: 4.3.0(rollup@4.28.1)(typescript@5.6.3)(vite@6.0.3(@types/node@22.10.2)) vitest: specifier: ^2.1.8 - version: 2.1.8(@types/node@22.10.2)(msw@2.6.8(@types/node@22.10.2)(typescript@5.6.3)) + version: 2.1.8(@types/node@22.10.2)(msw@2.7.0(@types/node@22.10.2)(typescript@5.6.3)) packages: @@ -559,8 +559,8 @@ packages: resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.16.0': - resolution: {integrity: sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==} + '@eslint/js@9.17.0': + resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.5': @@ -625,8 +625,8 @@ packages: typescript: optional: true - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} '@jridgewell/resolve-uri@3.1.2': @@ -674,10 +674,10 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@reduxjs/toolkit@2.4.0': - resolution: {integrity: sha512-wJZEuSKj14tvNfxiIiJws0tQN77/rDqucBq528ApebMIRHyWpCanJVQRxQ8WWZC19iCDKxDsGlbAir3F1layxA==} + '@reduxjs/toolkit@2.5.0': + resolution: {integrity: sha512-awNe2oTodsZ6LmRqmkFhtb/KH03hUhxOamEQy411m3Njj3BbFvoBovxo4Q1cBWnV1ErprVj9MlF0UPXkng0eyg==} peerDependencies: - react: ^16.9.0 || ^17.0.0 || ^18 + react: ^16.9.0 || ^17.0.0 || ^18 || ^19 react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 peerDependenciesMeta: react: @@ -685,8 +685,8 @@ packages: react-redux: optional: true - '@rollup/pluginutils@5.1.3': - resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} + '@rollup/pluginutils@5.1.4': + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -694,93 +694,98 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.28.0': - resolution: {integrity: sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==} + '@rollup/rollup-android-arm-eabi@4.28.1': + resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.28.0': - resolution: {integrity: sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==} + '@rollup/rollup-android-arm64@4.28.1': + resolution: {integrity: sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.28.0': - resolution: {integrity: sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==} + '@rollup/rollup-darwin-arm64@4.28.1': + resolution: {integrity: sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.28.0': - resolution: {integrity: sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==} + '@rollup/rollup-darwin-x64@4.28.1': + resolution: {integrity: sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.28.0': - resolution: {integrity: sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==} + '@rollup/rollup-freebsd-arm64@4.28.1': + resolution: {integrity: sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.28.0': - resolution: {integrity: sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==} + '@rollup/rollup-freebsd-x64@4.28.1': + resolution: {integrity: sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.28.0': - resolution: {integrity: sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==} + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': + resolution: {integrity: sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.28.0': - resolution: {integrity: sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==} + '@rollup/rollup-linux-arm-musleabihf@4.28.1': + resolution: {integrity: sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.28.0': - resolution: {integrity: sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==} + '@rollup/rollup-linux-arm64-gnu@4.28.1': + resolution: {integrity: sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.28.0': - resolution: {integrity: sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==} + '@rollup/rollup-linux-arm64-musl@4.28.1': + resolution: {integrity: sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': - resolution: {integrity: sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==} + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': + resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': + resolution: {integrity: sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.28.0': - resolution: {integrity: sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==} + '@rollup/rollup-linux-riscv64-gnu@4.28.1': + resolution: {integrity: sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.28.0': - resolution: {integrity: sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==} + '@rollup/rollup-linux-s390x-gnu@4.28.1': + resolution: {integrity: sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.28.0': - resolution: {integrity: sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==} + '@rollup/rollup-linux-x64-gnu@4.28.1': + resolution: {integrity: sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.28.0': - resolution: {integrity: sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==} + '@rollup/rollup-linux-x64-musl@4.28.1': + resolution: {integrity: sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.28.0': - resolution: {integrity: sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==} + '@rollup/rollup-win32-arm64-msvc@4.28.1': + resolution: {integrity: sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.28.0': - resolution: {integrity: sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==} + '@rollup/rollup-win32-ia32-msvc@4.28.1': + resolution: {integrity: sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.28.0': - resolution: {integrity: sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==} + '@rollup/rollup-win32-x64-msvc@4.28.1': + resolution: {integrity: sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==} cpu: [x64] os: [win32] @@ -1017,11 +1022,11 @@ packages: peerDependencies: '@svgr/core': '*' - '@tanstack/query-core@5.62.2': - resolution: {integrity: sha512-LcwVcC5qpsDpHcqlXUUL5o9SaOBwhNkGeV+B06s0GBoyBr8FqXPuXT29XzYXR36lchhnerp6XO+CWc84/vh7Zg==} + '@tanstack/query-core@5.62.8': + resolution: {integrity: sha512-4fV31vDsUyvNGrKIOUNPrZztoyL187bThnoQOvAXEVlZbSiuPONpfx53634MKKdvsDir5NyOGm80ShFaoHS/mw==} - '@tanstack/react-query@5.62.2': - resolution: {integrity: sha512-fkTpKKfwTJtVPKVR+ag7YqFgG/7TRVVPzduPAUF9zRCiiA8Wu305u+KJl8rCrh98Qce77vzIakvtUyzWLtaPGA==} + '@tanstack/react-query@5.62.8': + resolution: {integrity: sha512-8TUstKxF/fysHonZsWg/hnlDVgasTdHx6Q+f1/s/oPKJBJbKUWPZEHwLTMOZgrZuroLMiqYKJ9w69Abm8mWP0Q==} peerDependencies: react: ^18 || ^19 @@ -1088,14 +1093,16 @@ packages: '@types/quill@2.0.14': resolution: {integrity: sha512-zvoXCRnc2Dl8g+7/9VSAmRWPN6oH+MVhTPizmCR+GJCITplZ5VRVzMs4+a/nOE3yzNwEZqylJJrMB07bwbM1/g==} - '@types/react-dom@18.3.2': - resolution: {integrity: sha512-Fqp+rcvem9wEnGr3RY8dYNvSQ8PoLqjZ9HLgaPUOjJJD120uDyOxOjc/39M4Kddp9JQCxpGQbnhVQF0C0ncYVg==} + '@types/react-dom@18.3.5': + resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} + peerDependencies: + '@types/react': ^18.0.0 '@types/react-redux@7.1.34': resolution: {integrity: sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ==} - '@types/react@18.3.14': - resolution: {integrity: sha512-NzahNKvjNhVjuPBQ+2G7WlxstQ+47kXZNHlUvFakDViuIEfGY926GqhMueQFZ7woG+sPiQKlF36XfrIUVSUfFg==} + '@types/react@18.3.17': + resolution: {integrity: sha512-opAQ5no6LqJNo9TqnxBKsgnkIYHozW9KSTlFVoSUJYh1Fl/sswkEoqIugRSm7tbh6pABtYjGAjW+GOS23j8qbw==} '@types/redux-persist@4.3.1': resolution: {integrity: sha512-YkMnMUk+4//wPtiSTMfsxST/F9Gh9sPWX0LVxHuOidGjojHtMdpep2cYvQgfiDMnj34orXyZI+QJCQMZDlafKA==} @@ -1113,72 +1120,57 @@ packages: '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - '@types/use-sync-external-store@0.0.3': - resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==} + '@types/use-sync-external-store@0.0.6': + resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} '@types/uuid@9.0.8': resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@typescript-eslint/eslint-plugin@8.17.0': - resolution: {integrity: sha512-HU1KAdW3Tt8zQkdvNoIijfWDMvdSweFYm4hWh+KwhPstv+sCmWb89hCIP8msFm9N1R/ooh9honpSuvqKWlYy3w==} + '@typescript-eslint/eslint-plugin@8.18.1': + resolution: {integrity: sha512-Ncvsq5CT3Gvh+uJG0Lwlho6suwDfUXH0HztslDf5I+F2wAFAZMRwYLEorumpKLzmO2suAXZ/td1tBg4NZIi9CQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@8.17.0': - resolution: {integrity: sha512-Drp39TXuUlD49F7ilHHCG7TTg8IkA+hxCuULdmzWYICxGXvDXmDmWEjJYZQYgf6l/TFfYNE167m7isnc3xlIEg==} + '@typescript-eslint/parser@8.18.1': + resolution: {integrity: sha512-rBnTWHCdbYM2lh7hjyXqxk70wvon3p2FyaniZuey5TrcGBpfhVp0OxOa6gxr9Q9YhZFKyfbEnxc24ZnVbbUkCA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@8.17.0': - resolution: {integrity: sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==} + '@typescript-eslint/scope-manager@8.18.1': + resolution: {integrity: sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.17.0': - resolution: {integrity: sha512-q38llWJYPd63rRnJ6wY/ZQqIzPrBCkPdpIsaCfkR3Q4t3p6sb422zougfad4TFW9+ElIFLVDzWGiGAfbb/v2qw==} + '@typescript-eslint/type-utils@8.18.1': + resolution: {integrity: sha512-jAhTdK/Qx2NJPNOTxXpMwlOiSymtR2j283TtPqXkKBdH8OAMmhiUfP0kJjc/qSE51Xrq02Gj9NY7MwK+UxVwHQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/types@8.17.0': - resolution: {integrity: sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==} + '@typescript-eslint/types@8.18.1': + resolution: {integrity: sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.17.0': - resolution: {integrity: sha512-JqkOopc1nRKZpX+opvKqnM3XUlM7LpFMD0lYxTqOTKQfCWAmxw45e3qlOCsEqEB2yuacujivudOFpCnqkBDNMw==} + '@typescript-eslint/typescript-estree@8.18.1': + resolution: {integrity: sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.17.0': - resolution: {integrity: sha512-bQC8BnEkxqG8HBGKwG9wXlZqg37RKSMY7v/X8VEWD8JG2JuTHuNK0VFvMPMUKQcbk6B+tf05k+4AShAEtCtJ/w==} + '@typescript-eslint/utils@8.18.1': + resolution: {integrity: sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/visitor-keys@8.17.0': - resolution: {integrity: sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==} + '@typescript-eslint/visitor-keys@8.18.1': + resolution: {integrity: sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vitejs/plugin-react@4.3.4': @@ -1309,8 +1301,8 @@ packages: browser-assert@1.2.1: resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} - browserslist@4.24.2: - resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + browserslist@4.24.3: + resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1318,10 +1310,6 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} - call-bind-apply-helpers@1.0.0: - resolution: {integrity: sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ==} - engines: {node: '>= 0.4'} - call-bind-apply-helpers@1.0.1: resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} engines: {node: '>= 0.4'} @@ -1345,8 +1333,8 @@ packages: camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - caniuse-lite@1.0.30001686: - resolution: {integrity: sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==} + caniuse-lite@1.0.30001690: + resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} chai@5.1.2: resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} @@ -1364,8 +1352,8 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} - chromatic@11.20.0: - resolution: {integrity: sha512-Btdli1qoAI01UKmk3Iqe6vKhAhePRXqNI/2uKKy2R16q7SN/5kLTqhd1JI20LFOZSnH3xSJaUXeJ2xZOJB//3A==} + chromatic@11.20.2: + resolution: {integrity: sha512-c+M3HVl5Y60c7ipGTZTyeWzWubRW70YsJ7PPDpO1D735ib8+Lu3yGF90j61pvgkXGngpkTPHZyBw83lcu2JMxA==} hasBin: true peerDependencies: '@chromatic-com/cypress': ^0.*.* || ^1.0.0 @@ -1439,8 +1427,8 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1492,12 +1480,12 @@ packages: dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dunder-proto@1.0.0: - resolution: {integrity: sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - electron-to-chromium@1.5.71: - resolution: {integrity: sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==} + electron-to-chromium@1.5.74: + resolution: {integrity: sha512-ck3//9RC+6oss/1Bh9tiAVFy5vfSKbRHAFh7Z3/eTRkEqJeWgymloShB17Vg3Z4nmDNp35vAd1BZ6CMW4Wt6Iw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1576,8 +1564,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.16.0: - resolution: {integrity: sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==} + eslint@9.17.0: + resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1710,10 +1698,6 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.5: - resolution: {integrity: sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg==} - engines: {node: '>= 0.4'} - get-intrinsic@1.2.6: resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==} engines: {node: '>= 0.4'} @@ -1734,8 +1718,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.13.0: - resolution: {integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==} + globals@15.14.0: + resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} engines: {node: '>=18'} gopd@1.2.0: @@ -1748,8 +1732,8 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - graphql@16.9.0: - resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==} + graphql@16.10.0: + resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} has-flag@4.0.0: @@ -1804,8 +1788,8 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} engines: {node: '>= 0.4'} is-arrayish@0.2.1: @@ -1815,8 +1799,8 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + is-core-module@2.16.0: + resolution: {integrity: sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==} engines: {node: '>= 0.4'} is-date-object@1.1.0: @@ -1855,8 +1839,8 @@ packages: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} - is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} is-wsl@2.2.0: @@ -1877,8 +1861,8 @@ packages: resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} engines: {node: '>=12.0.0'} - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} hasBin: true @@ -1956,8 +1940,8 @@ packages: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} - magic-string@0.30.14: - resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} map-or-similar@1.5.0: resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} @@ -2002,8 +1986,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.6.8: - resolution: {integrity: sha512-nxXxnH6WALZ9a7rsQp4HU2AaD4iGAiouMmE/MY4al7pXTibgA6OZOuKhmN2WBIM6w9qMKwRtX8p2iOb45B2M/Q==} + msw@2.7.0: + resolution: {integrity: sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -2027,8 +2011,8 @@ packages: no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} object-is@1.1.6: resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} @@ -2207,11 +2191,11 @@ packages: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 - react-redux@9.1.2: - resolution: {integrity: sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==} + react-redux@9.2.0: + resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} peerDependencies: - '@types/react': ^18.2.25 - react: ^18.0 + '@types/react': ^18.2.25 || ^19 + react: ^18.0 || ^19 redux: ^5.0.0 peerDependenciesMeta: '@types/react': @@ -2286,16 +2270,16 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + resolve@1.22.9: + resolution: {integrity: sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A==} hasBin: true reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@4.28.0: - resolution: {integrity: sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==} + rollup@4.28.1: + resolution: {integrity: sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2471,6 +2455,9 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + turbo-stream@2.4.0: resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} @@ -2489,19 +2476,16 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.30.0: - resolution: {integrity: sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==} + type-fest@4.30.2: + resolution: {integrity: sha512-UJShLPYi1aWqCdq9HycOL/gwsuqda1OISdBO3t8RlXQC4QvtuIz4b5FCfe2dQIWEpmlRExKmcTBfP1r9bhY7ig==} engines: {node: '>=16'} - typescript-eslint@8.17.0: - resolution: {integrity: sha512-409VXvFd/f1br1DCbuKNFqQpXICoTB+V51afcwG1pn1a3Cp92MqAUges3YjwEdQ0cMUoCIodjVDAYzyD8h3SYA==} + typescript-eslint@8.18.1: + resolution: {integrity: sha512-Mlaw6yxuaDEPQvb/2Qwu3/TfgeBHy9iTJ3mTwe7OvpPmF6KPQjVOfGyEJpPv6Ez2C34OODChhXrzYw/9phI0MQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' typescript@5.6.3: resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} @@ -2656,8 +2640,8 @@ packages: webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - which-typed-array@1.1.16: - resolution: {integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==} + which-typed-array@1.1.18: + resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} engines: {node: '>= 0.4'} which@2.0.2: @@ -2723,7 +2707,7 @@ snapshots: '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 '@babel/code-frame@7.26.2': @@ -2747,7 +2731,7 @@ snapshots: '@babel/traverse': 7.26.4 '@babel/types': 7.26.3 convert-source-map: 2.0.0 - debug: 4.3.7 + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -2758,15 +2742,15 @@ snapshots: dependencies: '@babel/parser': 7.26.3 '@babel/types': 7.26.3 - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 + jsesc: 3.1.0 '@babel/helper-compilation-targets@7.25.9': dependencies: '@babel/compat-data': 7.26.3 '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.2 + browserslist: 4.24.3 lru-cache: 5.1.1 semver: 6.3.1 @@ -2830,7 +2814,7 @@ snapshots: '@babel/parser': 7.26.3 '@babel/template': 7.25.9 '@babel/types': 7.26.3 - debug: 4.3.7 + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -2855,7 +2839,7 @@ snapshots: '@chromatic-com/storybook@3.2.2(react@18.3.1)(storybook@8.4.7)': dependencies: - chromatic: 11.20.0 + chromatic: 11.20.2 filesize: 10.1.6 jsonfile: 6.1.0 react-confetti: 6.1.0(react@18.3.1) @@ -3015,9 +2999,9 @@ snapshots: '@esbuild/win32-x64@0.24.0': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.16.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0)': dependencies: - eslint: 9.16.0 + eslint: 9.17.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -3025,7 +3009,7 @@ snapshots: '@eslint/config-array@0.19.1': dependencies: '@eslint/object-schema': 2.1.5 - debug: 4.3.7 + debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -3037,7 +3021,7 @@ snapshots: '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 - debug: 4.3.7 + debug: 4.4.0 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 @@ -3048,7 +3032,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.16.0': {} + '@eslint/js@9.17.0': {} '@eslint/object-schema@2.1.5': {} @@ -3107,7 +3091,7 @@ snapshots: optionalDependencies: typescript: 5.6.3 - '@jridgewell/gen-mapping@0.3.5': + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 @@ -3124,10 +3108,10 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@mdx-js/react@3.1.0(@types/react@18.3.14)(react@18.3.1)': + '@mdx-js/react@3.1.0(@types/react@18.3.17)(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.14 + '@types/react': 18.3.17 react: 18.3.1 '@mswjs/interceptors@0.37.3': @@ -3160,7 +3144,7 @@ snapshots: '@open-draft/until@2.1.0': {} - '@reduxjs/toolkit@2.4.0(react-redux@9.1.2(@types/react@18.3.14)(react@18.3.1)(redux@5.0.1))(react@18.3.1)': + '@reduxjs/toolkit@2.5.0(react-redux@9.2.0(@types/react@18.3.17)(react@18.3.1)(redux@5.0.1))(react@18.3.1)': dependencies: immer: 10.1.1 redux: 5.0.1 @@ -3168,68 +3152,71 @@ snapshots: reselect: 5.1.1 optionalDependencies: react: 18.3.1 - react-redux: 9.1.2(@types/react@18.3.14)(react@18.3.1)(redux@5.0.1) + react-redux: 9.2.0(@types/react@18.3.17)(react@18.3.1)(redux@5.0.1) - '@rollup/pluginutils@5.1.3(rollup@4.28.0)': + '@rollup/pluginutils@5.1.4(rollup@4.28.1)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.28.0 + rollup: 4.28.1 + + '@rollup/rollup-android-arm-eabi@4.28.1': + optional: true - '@rollup/rollup-android-arm-eabi@4.28.0': + '@rollup/rollup-android-arm64@4.28.1': optional: true - '@rollup/rollup-android-arm64@4.28.0': + '@rollup/rollup-darwin-arm64@4.28.1': optional: true - '@rollup/rollup-darwin-arm64@4.28.0': + '@rollup/rollup-darwin-x64@4.28.1': optional: true - '@rollup/rollup-darwin-x64@4.28.0': + '@rollup/rollup-freebsd-arm64@4.28.1': optional: true - '@rollup/rollup-freebsd-arm64@4.28.0': + '@rollup/rollup-freebsd-x64@4.28.1': optional: true - '@rollup/rollup-freebsd-x64@4.28.0': + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.28.0': + '@rollup/rollup-linux-arm-musleabihf@4.28.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.28.0': + '@rollup/rollup-linux-arm64-gnu@4.28.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.28.0': + '@rollup/rollup-linux-arm64-musl@4.28.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.28.0': + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.28.0': + '@rollup/rollup-linux-riscv64-gnu@4.28.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.28.0': + '@rollup/rollup-linux-s390x-gnu@4.28.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.28.0': + '@rollup/rollup-linux-x64-gnu@4.28.1': optional: true - '@rollup/rollup-linux-x64-musl@4.28.0': + '@rollup/rollup-linux-x64-musl@4.28.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.28.0': + '@rollup/rollup-win32-arm64-msvc@4.28.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.28.0': + '@rollup/rollup-win32-ia32-msvc@4.28.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.28.0': + '@rollup/rollup-win32-x64-msvc@4.28.1': optional: true '@storybook/addon-actions@8.4.7(storybook@8.4.7)': @@ -3255,9 +3242,9 @@ snapshots: storybook: 8.4.7 ts-dedent: 2.2.0 - '@storybook/addon-docs@8.4.7(@types/react@18.3.14)(storybook@8.4.7)': + '@storybook/addon-docs@8.4.7(@types/react@18.3.17)(storybook@8.4.7)': dependencies: - '@mdx-js/react': 3.1.0(@types/react@18.3.14)(react@18.3.1) + '@mdx-js/react': 3.1.0(@types/react@18.3.17)(react@18.3.1) '@storybook/blocks': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7) '@storybook/csf-plugin': 8.4.7(storybook@8.4.7) '@storybook/react-dom-shim': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7) @@ -3268,12 +3255,12 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@storybook/addon-essentials@8.4.7(@types/react@18.3.14)(storybook@8.4.7)': + '@storybook/addon-essentials@8.4.7(@types/react@18.3.17)(storybook@8.4.7)': dependencies: '@storybook/addon-actions': 8.4.7(storybook@8.4.7) '@storybook/addon-backgrounds': 8.4.7(storybook@8.4.7) '@storybook/addon-controls': 8.4.7(storybook@8.4.7) - '@storybook/addon-docs': 8.4.7(@types/react@18.3.14)(storybook@8.4.7) + '@storybook/addon-docs': 8.4.7(@types/react@18.3.17)(storybook@8.4.7) '@storybook/addon-highlight': 8.4.7(storybook@8.4.7) '@storybook/addon-measure': 8.4.7(storybook@8.4.7) '@storybook/addon-outline': 8.4.7(storybook@8.4.7) @@ -3402,18 +3389,18 @@ snapshots: react-dom: 18.3.1(react@18.3.1) storybook: 8.4.7 - '@storybook/react-vite@8.4.7(@storybook/test@8.4.7(storybook@8.4.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.0)(storybook@8.4.7)(typescript@5.6.3)(vite@6.0.3(@types/node@22.10.2))': + '@storybook/react-vite@8.4.7(@storybook/test@8.4.7(storybook@8.4.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.28.1)(storybook@8.4.7)(typescript@5.6.3)(vite@6.0.3(@types/node@22.10.2))': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.6.3)(vite@6.0.3(@types/node@22.10.2)) - '@rollup/pluginutils': 5.1.3(rollup@4.28.0) + '@rollup/pluginutils': 5.1.4(rollup@4.28.1) '@storybook/builder-vite': 8.4.7(storybook@8.4.7)(vite@6.0.3(@types/node@22.10.2)) '@storybook/react': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7)(typescript@5.6.3) find-up: 5.0.0 - magic-string: 0.30.14 + magic-string: 0.30.17 react: 18.3.1 react-docgen: 7.1.0 react-dom: 18.3.1(react@18.3.1) - resolve: 1.22.8 + resolve: 1.22.9 storybook: 8.4.7 tsconfig-paths: 4.2.0 vite: 6.0.3(@types/node@22.10.2) @@ -3524,11 +3511,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/query-core@5.62.2': {} + '@tanstack/query-core@5.62.8': {} - '@tanstack/react-query@5.62.2(react@18.3.1)': + '@tanstack/react-query@5.62.8(react@18.3.1)': dependencies: - '@tanstack/query-core': 5.62.2 + '@tanstack/query-core': 5.62.8 react: 18.3.1 '@testing-library/dom@10.4.0': @@ -3587,7 +3574,7 @@ snapshots: '@types/hoist-non-react-statics@3.3.6': dependencies: - '@types/react': 18.3.14 + '@types/react': 18.3.17 hoist-non-react-statics: 3.3.2 '@types/json-schema@7.0.15': {} @@ -3613,18 +3600,18 @@ snapshots: parchment: 1.1.4 quill-delta: 5.1.0 - '@types/react-dom@18.3.2': + '@types/react-dom@18.3.5(@types/react@18.3.17)': dependencies: - '@types/react': 18.3.14 + '@types/react': 18.3.17 '@types/react-redux@7.1.34': dependencies: '@types/hoist-non-react-statics': 3.3.6 - '@types/react': 18.3.14 + '@types/react': 18.3.17 hoist-non-react-statics: 3.3.2 redux: 4.2.1 - '@types/react@18.3.14': + '@types/react@18.3.17': dependencies: '@types/prop-types': 15.7.14 csstype: 3.1.3 @@ -3644,90 +3631,85 @@ snapshots: '@types/tough-cookie@4.0.5': {} - '@types/use-sync-external-store@0.0.3': {} + '@types/use-sync-external-store@0.0.6': {} '@types/uuid@9.0.8': {} - '@typescript-eslint/eslint-plugin@8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.3))(eslint@9.16.0)(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0)(typescript@5.6.3))(eslint@9.17.0)(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.17.0(eslint@9.16.0)(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.17.0 - '@typescript-eslint/type-utils': 8.17.0(eslint@9.16.0)(typescript@5.6.3) - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0)(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.17.0 - eslint: 9.16.0 + '@typescript-eslint/parser': 8.18.1(eslint@9.17.0)(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.18.1 + '@typescript-eslint/type-utils': 8.18.1(eslint@9.17.0)(typescript@5.6.3) + '@typescript-eslint/utils': 8.18.1(eslint@9.17.0)(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.18.1 + eslint: 9.17.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 ts-api-utils: 1.4.3(typescript@5.6.3) - optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.3)': + '@typescript-eslint/parser@8.18.1(eslint@9.17.0)(typescript@5.6.3)': dependencies: - '@typescript-eslint/scope-manager': 8.17.0 - '@typescript-eslint/types': 8.17.0 - '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.17.0 - debug: 4.3.7 - eslint: 9.16.0 - optionalDependencies: + '@typescript-eslint/scope-manager': 8.18.1 + '@typescript-eslint/types': 8.18.1 + '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.18.1 + debug: 4.4.0 + eslint: 9.17.0 typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.17.0': + '@typescript-eslint/scope-manager@8.18.1': dependencies: - '@typescript-eslint/types': 8.17.0 - '@typescript-eslint/visitor-keys': 8.17.0 + '@typescript-eslint/types': 8.18.1 + '@typescript-eslint/visitor-keys': 8.18.1 - '@typescript-eslint/type-utils@8.17.0(eslint@9.16.0)(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.18.1(eslint@9.17.0)(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0)(typescript@5.6.3) - debug: 4.3.7 - eslint: 9.16.0 + '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.6.3) + '@typescript-eslint/utils': 8.18.1(eslint@9.17.0)(typescript@5.6.3) + debug: 4.4.0 + eslint: 9.17.0 ts-api-utils: 1.4.3(typescript@5.6.3) - optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.17.0': {} + '@typescript-eslint/types@8.18.1': {} - '@typescript-eslint/typescript-estree@8.17.0(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@8.18.1(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 8.17.0 - '@typescript-eslint/visitor-keys': 8.17.0 - debug: 4.3.7 + '@typescript-eslint/types': 8.18.1 + '@typescript-eslint/visitor-keys': 8.18.1 + debug: 4.4.0 fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 ts-api-utils: 1.4.3(typescript@5.6.3) - optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.17.0(eslint@9.16.0)(typescript@5.6.3)': + '@typescript-eslint/utils@8.18.1(eslint@9.17.0)(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0) - '@typescript-eslint/scope-manager': 8.17.0 - '@typescript-eslint/types': 8.17.0 - '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.6.3) - eslint: 9.16.0 - optionalDependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) + '@typescript-eslint/scope-manager': 8.18.1 + '@typescript-eslint/types': 8.18.1 + '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.6.3) + eslint: 9.17.0 typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.17.0': + '@typescript-eslint/visitor-keys@8.18.1': dependencies: - '@typescript-eslint/types': 8.17.0 + '@typescript-eslint/types': 8.18.1 eslint-visitor-keys: 4.2.0 '@vitejs/plugin-react@4.3.4(vite@6.0.3(@types/node@22.10.2))': @@ -3755,13 +3737,13 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.8(msw@2.6.8(@types/node@22.10.2)(typescript@5.6.3))(vite@5.4.11(@types/node@22.10.2))': + '@vitest/mocker@2.1.8(msw@2.7.0(@types/node@22.10.2)(typescript@5.6.3))(vite@5.4.11(@types/node@22.10.2))': dependencies: '@vitest/spy': 2.1.8 estree-walker: 3.0.3 - magic-string: 0.30.14 + magic-string: 0.30.17 optionalDependencies: - msw: 2.6.8(@types/node@22.10.2)(typescript@5.6.3) + msw: 2.7.0(@types/node@22.10.2)(typescript@5.6.3) vite: 5.4.11(@types/node@22.10.2) '@vitest/pretty-format@2.0.5': @@ -3780,7 +3762,7 @@ snapshots: '@vitest/snapshot@2.1.8': dependencies: '@vitest/pretty-format': 2.1.8 - magic-string: 0.30.14 + magic-string: 0.30.17 pathe: 1.1.2 '@vitest/spy@2.0.5': @@ -3843,7 +3825,7 @@ snapshots: ast-types@0.16.1: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 asynckit@0.4.0: {} @@ -3880,20 +3862,15 @@ snapshots: browser-assert@1.2.1: {} - browserslist@4.24.2: + browserslist@4.24.3: dependencies: - caniuse-lite: 1.0.30001686 - electron-to-chromium: 1.5.71 - node-releases: 2.0.18 - update-browserslist-db: 1.1.1(browserslist@4.24.2) + caniuse-lite: 1.0.30001690 + electron-to-chromium: 1.5.74 + node-releases: 2.0.19 + update-browserslist-db: 1.1.1(browserslist@4.24.3) cac@6.7.14: {} - call-bind-apply-helpers@1.0.0: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - call-bind-apply-helpers@1.0.1: dependencies: es-errors: 1.3.0 @@ -3901,9 +3878,9 @@ snapshots: call-bind@1.0.8: dependencies: - call-bind-apply-helpers: 1.0.0 + call-bind-apply-helpers: 1.0.1 es-define-property: 1.0.1 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 set-function-length: 1.2.2 call-bound@1.0.3: @@ -3917,7 +3894,7 @@ snapshots: camelize@1.0.1: {} - caniuse-lite@1.0.30001686: {} + caniuse-lite@1.0.30001690: {} chai@5.1.2: dependencies: @@ -3939,7 +3916,7 @@ snapshots: check-error@2.1.1: {} - chromatic@11.20.0: {} + chromatic@11.20.2: {} cli-width@4.1.0: {} @@ -3996,7 +3973,7 @@ snapshots: csstype@3.1.3: {} - debug@4.3.7: + debug@4.4.0: dependencies: ms: 2.1.3 @@ -4004,7 +3981,7 @@ snapshots: deep-equal@1.1.2: dependencies: - is-arguments: 1.1.1 + is-arguments: 1.2.0 is-date-object: 1.1.0 is-regex: 1.2.1 object-is: 1.1.6 @@ -4042,15 +4019,15 @@ snapshots: dot-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 - dunder-proto@1.0.0: + dunder-proto@1.0.1: dependencies: - call-bind-apply-helpers: 1.0.0 + call-bind-apply-helpers: 1.0.1 es-errors: 1.3.0 gopd: 1.2.0 - electron-to-chromium@1.5.71: {} + electron-to-chromium@1.5.74: {} emoji-regex@8.0.0: {} @@ -4072,7 +4049,7 @@ snapshots: esbuild-register@3.6.0(esbuild@0.24.0): dependencies: - debug: 4.3.7 + debug: 4.4.0 esbuild: 0.24.0 transitivePeerDependencies: - supports-color @@ -4134,19 +4111,19 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-plugin-react-hooks@5.1.0(eslint@9.16.0): + eslint-plugin-react-hooks@5.1.0(eslint@9.17.0): dependencies: - eslint: 9.16.0 + eslint: 9.17.0 - eslint-plugin-react-refresh@0.4.16(eslint@9.16.0): + eslint-plugin-react-refresh@0.4.16(eslint@9.17.0): dependencies: - eslint: 9.16.0 + eslint: 9.17.0 - eslint-plugin-storybook@0.11.1(eslint@9.16.0)(typescript@5.6.3): + eslint-plugin-storybook@0.11.1(eslint@9.17.0)(typescript@5.6.3): dependencies: '@storybook/csf': 0.1.12 - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0)(typescript@5.6.3) - eslint: 9.16.0 + '@typescript-eslint/utils': 8.18.1(eslint@9.17.0)(typescript@5.6.3) + eslint: 9.17.0 ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color @@ -4161,14 +4138,14 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.16.0: + eslint@9.17.0: dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.19.1 '@eslint/core': 0.9.1 '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.16.0 + '@eslint/js': 9.17.0 '@eslint/plugin-kit': 0.2.4 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -4178,7 +4155,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.3.7 + debug: 4.4.0 escape-string-regexp: 4.0.0 eslint-scope: 8.2.0 eslint-visitor-keys: 4.2.0 @@ -4301,21 +4278,10 @@ snapshots: get-caller-file@2.0.5: {} - get-intrinsic@1.2.5: - dependencies: - call-bind-apply-helpers: 1.0.0 - dunder-proto: 1.0.0 - es-define-property: 1.0.1 - es-errors: 1.3.0 - function-bind: 1.1.2 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - get-intrinsic@1.2.6: dependencies: call-bind-apply-helpers: 1.0.1 - dunder-proto: 1.0.0 + dunder-proto: 1.0.1 es-define-property: 1.0.1 es-errors: 1.3.0 es-object-atoms: 1.0.0 @@ -4337,7 +4303,7 @@ snapshots: globals@14.0.0: {} - globals@15.13.0: {} + globals@15.14.0: {} gopd@1.2.0: {} @@ -4346,7 +4312,7 @@ snapshots: graphemer@1.4.0: {} - graphql@16.9.0: {} + graphql@16.10.0: {} has-flag@4.0.0: {} @@ -4387,16 +4353,16 @@ snapshots: inherits@2.0.4: {} - is-arguments@1.1.1: + is-arguments@1.2.0: dependencies: - call-bind: 1.0.8 + call-bound: 1.0.3 has-tostringtag: 1.0.2 is-arrayish@0.2.1: {} is-callable@1.2.7: {} - is-core-module@2.15.1: + is-core-module@2.16.0: dependencies: hasown: 2.0.2 @@ -4430,9 +4396,9 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - is-typed-array@1.1.13: + is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.16 + which-typed-array: 1.1.18 is-wsl@2.2.0: dependencies: @@ -4448,7 +4414,7 @@ snapshots: jsdoc-type-pratt-parser@4.1.0: {} - jsesc@3.0.2: {} + jsesc@3.1.0: {} json-buffer@3.0.1: {} @@ -4501,7 +4467,7 @@ snapshots: lower-case@2.0.2: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 lru-cache@5.1.1: dependencies: @@ -4513,7 +4479,7 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - magic-string@0.30.14: + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -4552,7 +4518,7 @@ snapshots: ms@2.1.3: {} - msw@2.6.8(@types/node@22.10.2)(typescript@5.6.3): + msw@2.7.0(@types/node@22.10.2)(typescript@5.6.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 @@ -4563,14 +4529,14 @@ snapshots: '@open-draft/until': 2.1.0 '@types/cookie': 0.6.0 '@types/statuses': 2.0.5 - chalk: 4.1.2 - graphql: 16.9.0 + graphql: 16.10.0 headers-polyfill: 4.0.3 is-node-process: 1.2.0 outvariant: 1.4.3 path-to-regexp: 6.3.0 + picocolors: 1.1.1 strict-event-emitter: 0.5.1 - type-fest: 4.30.0 + type-fest: 4.30.2 yargs: 17.7.2 optionalDependencies: typescript: 5.6.3 @@ -4586,9 +4552,9 @@ snapshots: no-case@3.0.4: dependencies: lower-case: 2.0.2 - tslib: 2.6.2 + tslib: 2.8.1 - node-releases@2.0.18: {} + node-releases@2.0.19: {} object-is@1.1.6: dependencies: @@ -4746,7 +4712,7 @@ snapshots: '@types/doctrine': 0.0.9 '@types/resolve': 1.20.6 doctrine: 3.0.0 - resolve: 1.22.8 + resolve: 1.22.9 strip-indent: 4.0.0 transitivePeerDependencies: - supports-color @@ -4773,13 +4739,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-redux@9.1.2(@types/react@18.3.14)(react@18.3.1)(redux@5.0.1): + react-redux@9.2.0(@types/react@18.3.17)(react@18.3.1)(redux@5.0.1): dependencies: - '@types/use-sync-external-store': 0.0.3 + '@types/use-sync-external-store': 0.0.6 react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) optionalDependencies: - '@types/react': 18.3.14 + '@types/react': 18.3.17 redux: 5.0.1 react-refresh@0.14.2: {} @@ -4804,7 +4770,7 @@ snapshots: esprima: 4.0.1 source-map: 0.6.1 tiny-invariant: 1.3.3 - tslib: 2.6.2 + tslib: 2.8.1 redent@3.0.0: dependencies: @@ -4844,36 +4810,37 @@ snapshots: resolve-from@4.0.0: {} - resolve@1.22.8: + resolve@1.22.9: dependencies: - is-core-module: 2.15.1 + is-core-module: 2.16.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 reusify@1.0.4: {} - rollup@4.28.0: + rollup@4.28.1: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.28.0 - '@rollup/rollup-android-arm64': 4.28.0 - '@rollup/rollup-darwin-arm64': 4.28.0 - '@rollup/rollup-darwin-x64': 4.28.0 - '@rollup/rollup-freebsd-arm64': 4.28.0 - '@rollup/rollup-freebsd-x64': 4.28.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.28.0 - '@rollup/rollup-linux-arm-musleabihf': 4.28.0 - '@rollup/rollup-linux-arm64-gnu': 4.28.0 - '@rollup/rollup-linux-arm64-musl': 4.28.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.28.0 - '@rollup/rollup-linux-riscv64-gnu': 4.28.0 - '@rollup/rollup-linux-s390x-gnu': 4.28.0 - '@rollup/rollup-linux-x64-gnu': 4.28.0 - '@rollup/rollup-linux-x64-musl': 4.28.0 - '@rollup/rollup-win32-arm64-msvc': 4.28.0 - '@rollup/rollup-win32-ia32-msvc': 4.28.0 - '@rollup/rollup-win32-x64-msvc': 4.28.0 + '@rollup/rollup-android-arm-eabi': 4.28.1 + '@rollup/rollup-android-arm64': 4.28.1 + '@rollup/rollup-darwin-arm64': 4.28.1 + '@rollup/rollup-darwin-x64': 4.28.1 + '@rollup/rollup-freebsd-arm64': 4.28.1 + '@rollup/rollup-freebsd-x64': 4.28.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.28.1 + '@rollup/rollup-linux-arm-musleabihf': 4.28.1 + '@rollup/rollup-linux-arm64-gnu': 4.28.1 + '@rollup/rollup-linux-arm64-musl': 4.28.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.28.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.28.1 + '@rollup/rollup-linux-riscv64-gnu': 4.28.1 + '@rollup/rollup-linux-s390x-gnu': 4.28.1 + '@rollup/rollup-linux-x64-gnu': 4.28.1 + '@rollup/rollup-linux-x64-musl': 4.28.1 + '@rollup/rollup-win32-arm64-msvc': 4.28.1 + '@rollup/rollup-win32-ia32-msvc': 4.28.1 + '@rollup/rollup-win32-x64-msvc': 4.28.1 fsevents: 2.3.3 run-parallel@1.2.0: @@ -4895,7 +4862,7 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 gopd: 1.2.0 has-property-descriptors: 1.0.2 @@ -4921,7 +4888,7 @@ snapshots: snake-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 source-map-js@1.2.1: {} @@ -5030,6 +4997,8 @@ snapshots: tslib@2.6.2: {} + tslib@2.8.1: {} + turbo-stream@2.4.0: {} tween-functions@1.2.0: {} @@ -5042,15 +5011,14 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.30.0: {} + type-fest@4.30.2: {} - typescript-eslint@8.17.0(eslint@9.16.0)(typescript@5.6.3): + typescript-eslint@8.18.1(eslint@9.17.0)(typescript@5.6.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.3))(eslint@9.16.0)(typescript@5.6.3) - '@typescript-eslint/parser': 8.17.0(eslint@9.16.0)(typescript@5.6.3) - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0)(typescript@5.6.3) - eslint: 9.16.0 - optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0)(typescript@5.6.3))(eslint@9.17.0)(typescript@5.6.3) + '@typescript-eslint/parser': 8.18.1(eslint@9.17.0)(typescript@5.6.3) + '@typescript-eslint/utils': 8.18.1(eslint@9.17.0)(typescript@5.6.3) + eslint: 9.17.0 typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -5068,9 +5036,9 @@ snapshots: acorn: 8.14.0 webpack-virtual-modules: 0.6.2 - update-browserslist-db@1.1.1(browserslist@4.24.2): + update-browserslist-db@1.1.1(browserslist@4.24.3): dependencies: - browserslist: 4.24.2 + browserslist: 4.24.3 escalade: 3.2.0 picocolors: 1.1.1 @@ -5090,17 +5058,17 @@ snapshots: util@0.12.5: dependencies: inherits: 2.0.4 - is-arguments: 1.1.1 + is-arguments: 1.2.0 is-generator-function: 1.0.10 - is-typed-array: 1.1.13 - which-typed-array: 1.1.16 + is-typed-array: 1.1.15 + which-typed-array: 1.1.18 uuid@9.0.1: {} vite-node@2.1.8(@types/node@22.10.2): dependencies: cac: 6.7.14 - debug: 4.3.7 + debug: 4.4.0 es-module-lexer: 1.5.4 pathe: 1.1.2 vite: 5.4.11(@types/node@22.10.2) @@ -5115,9 +5083,9 @@ snapshots: - supports-color - terser - vite-plugin-svgr@4.3.0(rollup@4.28.0)(typescript@5.6.3)(vite@6.0.3(@types/node@22.10.2)): + vite-plugin-svgr@4.3.0(rollup@4.28.1)(typescript@5.6.3)(vite@6.0.3(@types/node@22.10.2)): dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.28.0) + '@rollup/pluginutils': 5.1.4(rollup@4.28.1) '@svgr/core': 8.1.0(typescript@5.6.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.6.3)) vite: 6.0.3(@types/node@22.10.2) @@ -5130,7 +5098,7 @@ snapshots: dependencies: esbuild: 0.21.5 postcss: 8.4.49 - rollup: 4.28.0 + rollup: 4.28.1 optionalDependencies: '@types/node': 22.10.2 fsevents: 2.3.3 @@ -5139,24 +5107,24 @@ snapshots: dependencies: esbuild: 0.24.0 postcss: 8.4.49 - rollup: 4.28.0 + rollup: 4.28.1 optionalDependencies: '@types/node': 22.10.2 fsevents: 2.3.3 - vitest@2.1.8(@types/node@22.10.2)(msw@2.6.8(@types/node@22.10.2)(typescript@5.6.3)): + vitest@2.1.8(@types/node@22.10.2)(msw@2.7.0(@types/node@22.10.2)(typescript@5.6.3)): dependencies: '@vitest/expect': 2.1.8 - '@vitest/mocker': 2.1.8(msw@2.6.8(@types/node@22.10.2)(typescript@5.6.3))(vite@5.4.11(@types/node@22.10.2)) + '@vitest/mocker': 2.1.8(msw@2.7.0(@types/node@22.10.2)(typescript@5.6.3))(vite@5.4.11(@types/node@22.10.2)) '@vitest/pretty-format': 2.1.8 '@vitest/runner': 2.1.8 '@vitest/snapshot': 2.1.8 '@vitest/spy': 2.1.8 '@vitest/utils': 2.1.8 chai: 5.1.2 - debug: 4.3.7 + debug: 4.4.0 expect-type: 1.1.0 - magic-string: 0.30.14 + magic-string: 0.30.17 pathe: 1.1.2 std-env: 3.8.0 tinybench: 2.9.0 @@ -5181,10 +5149,11 @@ snapshots: webpack-virtual-modules@0.6.2: {} - which-typed-array@1.1.16: + which-typed-array@1.1.18: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 + call-bound: 1.0.3 for-each: 0.3.3 gopd: 1.2.0 has-tostringtag: 1.0.2 diff --git a/src/apis/content.api.ts b/src/apis/content.api.ts new file mode 100644 index 0000000..0f017e3 --- /dev/null +++ b/src/apis/content.api.ts @@ -0,0 +1,46 @@ +import { IContent } from '@/types/content'; +import { httpClient } from './http.api'; + +export interface FetchContentParams { + content_id: string | undefined; +} + +export const fetchContent = async ({ content_id }: FetchContentParams) => { + try { + const response = await httpClient.get(`/api/posts/${content_id}`); + return response.data; + } catch (e) { + console.log('에러났어', e); + } +}; + +export const fetchLikedPost = async ({ content_id }: FetchContentParams) => { + try { + const response = await httpClient.post(`/api/posts/${content_id}/like`); + return response.data; + } catch (e) { + console.log('에러났어', e); + } +}; + +export const fetchSolved = async ({ content_id }: FetchContentParams) => { + try { + const response = await httpClient.post( + `api/posts/${content_id}/solved` + ); + return response.data; + } catch (e) { + console.log('에러났어', e); + } +}; + +export const fetchContentDelete = async ({ + content_id, +}: FetchContentParams) => { + try { + const response = await httpClient.delete(`api/posts/${content_id}`); + return response.data; + } catch (e) { + console.log('에러났어', e); + } +}; diff --git a/src/components/content-detail/QuestionComment.tsx b/src/components/content-detail/QuestionComment.tsx new file mode 100644 index 0000000..a5abfb4 --- /dev/null +++ b/src/components/content-detail/QuestionComment.tsx @@ -0,0 +1,47 @@ +import { useRef } from 'react'; +import styled from 'styled-components'; + +export default function QuestionComment() { + const textRef = useRef(null); + + const handleInput = () => { + if (textRef.current) { + textRef.current.style.height = 'auto'; + textRef.current.style.height = `${textRef.current.scrollHeight}px`; + } + }; + + return ( + +

답변

+
+ +
+
+ ); +} + +const QuestionCommentStyle = styled.div` + .commentTitle { + font-size: 1rem; + font-weight: bold; + } + + .commentInput { + textarea { + resize: none; + width: 100%; + max-height: 220px; + font-size: 1rem; + margin-top: 1rem; + padding: 1rem 1.5rem; + border: 1px solid #727272; + border-radius: 20px; + outline: none; + } + + textarea::-webkit-scrollbar { + display: none; + } + } +`; diff --git a/src/components/content-detail/QuestionContent.tsx b/src/components/content-detail/QuestionContent.tsx new file mode 100644 index 0000000..efd7216 --- /dev/null +++ b/src/components/content-detail/QuestionContent.tsx @@ -0,0 +1,13 @@ +import styled from 'styled-components'; + +interface Props { + content: string | undefined; +} + +export default function QuestionContent({ content }: Props) { + return {content}; +} + +const QuestionContentStyle = styled.div` + font-size: 15px; +`; diff --git a/src/components/content-detail/QuestionFooter.tsx b/src/components/content-detail/QuestionFooter.tsx new file mode 100644 index 0000000..c69f4f8 --- /dev/null +++ b/src/components/content-detail/QuestionFooter.tsx @@ -0,0 +1,182 @@ +import { useLiked } from '@/hooks/useLiked'; +import { HeartIcon } from '@heroicons/react/24/outline'; +import styled from 'styled-components'; + +interface Props { + solve: boolean | undefined; + nicknameCheck: string | undefined; + handleSolvedClick(): void; +} + +export default function QuestionFooter({ + solve, + nicknameCheck, + handleSolvedClick, +}: Props) { + const { like, post, handleHeartClick } = useLiked(); + + return ( + +
+ {post?.tags && + post?.tags.split(',').map((tag) => ( +
+ {tag} +
+ ))} +
+
+
+ + + + {post?.like_count} +
+
+ {post?.nickname === nicknameCheck && ( +
+
+
+ {solve ? ( +
해결된 질문이에요!
+ ) : ( + <> +
질문이 해결 되었나요?
+
해결되었다면 상태를 변경해주세요.
+ + )} +
+
+ +
+
+
+ )} +
+ ); +} + +const QuestionFooterStyle = styled.div` + display: flex; + flex-direction: column; + gap: 12px; + font-size: 15px; + + .tags { + display: flex; + flex-wrap: wrap; + gap: 10px; + .tag { + background-color: #deffe2; + color: #858585; + font-family: 'Pretendard-Light', Helvetica; + font-size: 12px; + padding: 8px 16px; + border-radius: 12px; + } + } + + .footerWrap { + display: flex; + line-height: 24px; + gap: 20px; + .likes { + display: flex; + cursor: pointer; + + .likeHeart { + width: 24px; + } + .likeFill { + fill: #ff9bd2; + stroke: #ff9bd2; + } + } + + .scrapped { + display: flex; + cursor: pointer; + + .scrapIcon { + svg { + width: 24px; + } + + .fill { + fill: #575757; + stroke: #575757; + } + } + } + + .scrapped:active, + .likes:active { + transform: translateY(5px); + } + } + + .solvedWrap { + width: 100%; + border-radius: 20px; + .solvedStatus { + padding: 2.5rem 3.5rem; + display: flex; + justify-content: space-between; + font-size: 1.3rem; + + .left { + display: flex; + flex-direction: column; + gap: 20px; + + .solvedTitle { + font-size: 2rem; + } + } + .right { + display: flex; + align-items: center; + .solveButton { + cursor: pointer; + border: 1px solid #e6e6e6; + font-size: 1.5rem; + height: fit-content; + padding: 1rem 1.5rem; + border-radius: 50px; + } + + .solveButton:hover { + scale: 1.1; + transition: all 50ms ease-in-out; + } + } + } + } + + .solve { + background-color: #c9ffcf; + + .right { + .solveButton { + background-color: #f7f7f7; + } + } + } + + .problem { + background-color: #f7f7f7; + + .right { + .solveButton { + background-color: #c9ffcf; + } + } + } +`; diff --git a/src/components/content-detail/QuestionHeader.tsx b/src/components/content-detail/QuestionHeader.tsx new file mode 100644 index 0000000..2c047d1 --- /dev/null +++ b/src/components/content-detail/QuestionHeader.tsx @@ -0,0 +1,122 @@ +import styled from 'styled-components'; +import { EllipsisVerticalIcon, EyeIcon } from '@heroicons/react/24/outline'; +import { useState } from 'react'; +import { useNavigate, useParams } from 'react-router'; +import { useContent } from '@/hooks/useContent'; +import { fetchContentDelete } from '@/apis/content.api'; + +interface Props { + solve: boolean | undefined; + nicknameCheck: string | undefined; +} + +export default function QuestionHeader({ solve, nicknameCheck }: Props) { + const navigate = useNavigate(); + const { content_id } = useParams(); + const { posts } = useContent({ content_id }); + + const [dropDown, setDropDown] = useState(false); + + const handleDropDownClick = () => { + setDropDown((prev) => !prev); + }; + + const handleContentUpdateClick = () => { + navigate(`/posts/${content_id}/edit`); + }; + + const handleContentDeleteClick = async () => { + await fetchContentDelete({ content_id }); + navigate('/'); + }; + + return ( + +
{posts?.title}
+
+
{solve ? 'solve' : 'problem'}
+
{posts?.nickname}
+
{posts?.created_at} 작성
+ {posts?.updated_at && ( +
{posts?.updated_at} 수정
+ )} +
+
+ +
+
{posts?.view}
+
+ {posts?.nickname === nicknameCheck && ( +
+
+ +
+ {dropDown && ( +
+
    +
  • 수정하기
  • +
  • 삭제하기
  • +
+
+ )} +
+ )} +
+
+ ); +} + +const QuestionHeaderStyle = styled.div` + display: flex; + flex-direction: column; + gap: 12px; + + .title { + font-size: 30px; + } + .panel { + display: flex; + line-height: 1.1rem; + color: #727272; + gap: 12px; + font-size: 15px; + + .viewsWrap { + display: flex; + gap: 5px; + + .viewIcon { + width: 20px; + } + } + .dropDownWrap { + position: relative; + + .dropDownIcon { + display: flex; + width: 20px; + height: 20px; + border: 1px solid #727272; + border-radius: 100%; + } + + .dropDown { + position: absolute; + border: 0.1rem solid #bbbbbb; + border-radius: 5px; + width: 5rem; + transform: translate(-1.8rem, 0.5rem); + + ul { + li { + cursor: pointer; + padding: 0.2rem 0.5rem; + } + li:hover { + background-color: #f3f3f3; + } + } + } + } + } +`; diff --git a/src/hooks/useContent.ts b/src/hooks/useContent.ts new file mode 100644 index 0000000..03d638f --- /dev/null +++ b/src/hooks/useContent.ts @@ -0,0 +1,13 @@ +import { fetchContent, FetchContentParams } from '@/apis/content.api'; +import { IPost } from '@/types/content'; +import { useQuery } from '@tanstack/react-query'; + +export const useContent = ({ content_id }: FetchContentParams) => { + const { data } = useQuery({ + queryKey: ['content', content_id], + queryFn: async () => await fetchContent({ content_id }), + enabled: !!content_id, + }); + const posts: IPost | undefined = data?.post[0]; + return { posts }; +}; diff --git a/src/hooks/useLiked.ts b/src/hooks/useLiked.ts new file mode 100644 index 0000000..66e1cf9 --- /dev/null +++ b/src/hooks/useLiked.ts @@ -0,0 +1,64 @@ +import { fetchLikedPost } from '@/apis/content.api'; +import { useContent } from './useContent'; +import { useSelector } from 'react-redux'; +import { RootState } from '@/store/rootReducer'; +import { useLocation, useNavigate, useParams } from 'react-router'; +import { IPost } from '@/types/content'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { useEffect, useState } from 'react'; + +export const useLiked = () => { + const isLoggedIn = useSelector((state: RootState) => state.user.isLoggedIn); + const queryClient = useQueryClient(); + const navigate = useNavigate(); + const location = useLocation(); + const { content_id } = useParams(); + const { posts } = useContent({ content_id }); + const [post, setPost] = useState(); + const [like, setLike] = useState(false); + + useEffect(() => { + setLike(!!post?.liked); + }, [post?.liked]); + + useEffect(() => { + setPost(posts); + }, [posts]); + + const toggleLikeMutation = useMutation< + void, + Error, + { content_id: string | undefined } + >({ + mutationFn: async ({ content_id }) => { + if (!content_id || !post) return; + await fetchLikedPost({ content_id }); + setPost({ + ...post, + liked: post?.liked, + like_count: post?.liked ? post?.like_count - 1 : post?.like_count + 1, + }); + }, + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: ['content', content_id], + }); + }, + }); + + const handleHeartClick = async () => { + if (!isLoggedIn) { + const loginRequest = confirm( + '로그인 후 이용할 수 있는 기능입니다.\n로그인 하시겠습니까??' + ); + if (loginRequest) { + navigate('/login', { state: { from: location.pathname } }); + } + + return; + } + toggleLikeMutation.mutate({ content_id }); + }; + + return { like, post, handleHeartClick }; +}; diff --git a/src/hooks/useSolved.ts b/src/hooks/useSolved.ts new file mode 100644 index 0000000..f5e274c --- /dev/null +++ b/src/hooks/useSolved.ts @@ -0,0 +1,49 @@ +import { fetchSolved } from '@/apis/content.api'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; + +import { useEffect, useState } from 'react'; +import { useContent } from './useContent'; +import { IPost } from '@/types/content'; +import { useParams } from 'react-router'; +import { RootState } from '@/store/rootReducer'; +import { useSelector } from 'react-redux'; + +export const useSolved = () => { + const { content_id } = useParams(); + const { posts } = useContent({ content_id }); + const queryClient = useQueryClient(); + const [post, setPost] = useState(); + const nicknameCheck = useSelector( + (state: RootState) => state.user.userInfo?.nickname + ); + + useEffect(() => { + setPost(posts); + }, [posts]); + + const toggleSolvedMutation = useMutation< + void, + Error, + { content_id: string | undefined } + >({ + mutationFn: async ({ content_id }) => { + if (!content_id || !post) return; + await fetchSolved({ content_id }); + setPost({ + ...post, + solved: post.solved, + }); + }, + onSuccess: () => { + queryClient.invalidateQueries({ + queryKey: ['content', content_id], + }); + }, + }); + + const handleSolvedClick = () => { + toggleSolvedMutation.mutate({ content_id }); + }; + + return { content_id, nicknameCheck, post, handleSolvedClick }; +}; diff --git a/src/pages/ContentDetailPage.tsx b/src/pages/ContentDetailPage.tsx new file mode 100644 index 0000000..6d1026c --- /dev/null +++ b/src/pages/ContentDetailPage.tsx @@ -0,0 +1,38 @@ +import styled from 'styled-components'; +import QuestionContent from '@/components/content-detail/QuestionContent'; +import QuestionFooter from '@/components/content-detail/QuestionFooter'; +import QuestionHeader from '@/components/content-detail/QuestionHeader'; +import QuestionComment from '@/components/content-detail/QuestionComment'; +import { useSolved } from '@/hooks/useSolved'; +import { useContent } from '@/hooks/useContent'; +export default function ContentDetailPage() { + const { content_id, nicknameCheck, post, handleSolvedClick } = useSolved(); + const { posts } = useContent({ content_id }); + + // 존재하지 않는 페이지일때의 처리 + if (!posts) return; + + return ( + + + + +
+ +
+ ); +} + +const ContentDetailPageStyle = styled.div` + display: flex; + flex-direction: column; + gap: 50px; + + .border { + border: 0.3px solid #d9d9d9; + } +`; diff --git a/src/pages/UpdateContentPage.tsx b/src/pages/UpdateContentPage.tsx new file mode 100644 index 0000000..e0df177 --- /dev/null +++ b/src/pages/UpdateContentPage.tsx @@ -0,0 +1,11 @@ +import styled from 'styled-components'; + +export default function UpdateContentPage() { + return ( + +

UpdateContentPage

+
+ ); +} + +const UpdateContentPageStyle = styled.div``; diff --git a/src/routes/router.tsx b/src/routes/router.tsx index 8c37bd5..e6a34c9 100644 --- a/src/routes/router.tsx +++ b/src/routes/router.tsx @@ -9,6 +9,8 @@ import LoginPage from '@/pages/LoginPage'; import MyPage from '@/pages/MyPage'; import ProtectedRoute from '@/admin/AdminRoute'; import BoardWritePage from '@/pages/BoardWritePage'; +import ContentDetailPage from '@/pages/ContentDetailPage'; +import UpdateContentPage from '@/pages/UpdateContentPage'; const router = [ { @@ -41,6 +43,14 @@ const router = [ }, ], }, + { + path: '/posts/:content_id', + element: , + }, + { + path: '/posts/:content_id/edit', + element: , + }, { path: '/adminpage', element: ( diff --git a/src/types/content.ts b/src/types/content.ts new file mode 100644 index 0000000..fff561a --- /dev/null +++ b/src/types/content.ts @@ -0,0 +1,27 @@ +export interface IPost { + id: number; + title: string; + content: string; + tags: string | null; + nickname: string; + created_at: string; + updated_at: string | null; + view: number; + like_count: number; + solved: number; // boolean + liked: number; // boolean +} + +export interface IComments { + id: number; + nickname: string; + parent_id: string | null; + content: string; + created_at: string; + updated_at: string | null; +} + +export interface IContent { + post: IPost[]; + comments: IComments[]; +}