diff --git a/packages/competition/index.html b/packages/competition/index.html index e0d1c84..04556f6 100644 --- a/packages/competition/index.html +++ b/packages/competition/index.html @@ -1,10 +1,10 @@ - + - + - Vite + React + TS + SASTOJ
diff --git a/packages/competition/package.json b/packages/competition/package.json index 1c2f032..f651d83 100644 --- a/packages/competition/package.json +++ b/packages/competition/package.json @@ -13,10 +13,12 @@ }, "dependencies": { "@sast/oj-ui": "workspace:^", + "axios": "^1.6.7", "localforage": "^1.10.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.21.0", + "swr": "^2.2.5", "zustand": "^4.4.7" }, "devDependencies": { diff --git a/packages/competition/public/LogoNoText.svg b/packages/competition/public/LogoNoText.svg new file mode 100644 index 0000000..84f05b1 --- /dev/null +++ b/packages/competition/public/LogoNoText.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/competition/public/vite.svg b/packages/competition/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/packages/competition/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/competition/src/App.css b/packages/competition/src/App.css deleted file mode 100644 index 89432a7..0000000 --- a/packages/competition/src/App.css +++ /dev/null @@ -1,70 +0,0 @@ -@import url("./reset.css"); - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} - -.border { - height: 200px; - width: 200px; - border: 1px solid black; - position: relative; -} - -.border::after { - content: "hello"; - position: absolute; - left: 5px; - top: -10px; - mask-image: linear-gradient(transparent, transparent); -} - -.span { - position: absolute; - left: 5px; - top: -10px; - font-size: 16px; -} - -.item { - height: 400px; - width: 400px; - background-color: aqua; -} -.container { - display: flex; - gap: 10px; - flex-wrap: wrap; -} diff --git a/packages/competition/src/App.scss b/packages/competition/src/App.scss new file mode 100644 index 0000000..311c240 --- /dev/null +++ b/packages/competition/src/App.scss @@ -0,0 +1,50 @@ +@import url("./reset.css"); + +* { + // color variables + --primary-color: #0078d4; + --primary-color-rgb: 0, 120, 212; + --primary-color-background-rgb: 219, 236, 249; + --secondary-color: #71afe5; + --danger-color: #ff0000; + --danger-color-rgb: 255, 0, 0; + --danger-color-background-rgb: 255, 245, 245; + --warning-color: #ffb900; + --warning-color-rgb: 255, 185, 0; + --warning-color-background-rgb: 255, 252, 245; + --success-color: #00c853; + --success-color-rgb: 0, 200, 83; + --success-color-background-rgb: 245, 253, 248; + --white-color: #ffffff; + --black-color: #121212; + --black-color-rgb: 18, 18, 18; + --title-shadow: #f3f3f3; + --shadow-color: rgb(128, 128, 128); + --shadow-color-rgb: 128, 128, 128; + --dark-color: rgb(30, 30, 30); + --small-font-size: 12px; + --medium-font-size: 16px; + --large-font-size: 20px; + font-family: sans-serif; + --background-blue: #ecf2ff; + --border-white: #f1f1f1; + --pale-white: #fcfcfc; + --divider-color: #d9d9d9; +} + +::-webkit-scrollbar { + all: unset; + width: 4px; +} +::-webkit-scrollbar-thumb { + background: var(--shadow-color); + border-radius: 2px; +} + +::-webkit-scrollbar-track { + margin: 5px; +} + +.stopMove { + overflow: hidden; +} diff --git a/packages/competition/src/App.tsx b/packages/competition/src/App.tsx index bb3be1c..28c78c8 100644 --- a/packages/competition/src/App.tsx +++ b/packages/competition/src/App.tsx @@ -1,23 +1,10 @@ -import { useState } from "react"; -import { Button, Sheet, SheetWrapper } from "../../ui/dist"; -import "./App.css"; - +import { RouterProvider } from "react-router-dom"; +import "./App.scss"; +import router from "./utils/router"; function App() { - const [visible, setVisible] = useState(false); return ( <> - -
- {/*
*/} - -
-
-
- setVisible(false)} - width={500} - > + ); } diff --git a/packages/competition/src/_variables.scss b/packages/competition/src/_variables.scss new file mode 100644 index 0000000..d49b040 --- /dev/null +++ b/packages/competition/src/_variables.scss @@ -0,0 +1,16 @@ +//absolute center +@mixin absolute-center { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +//flex center +@mixin flex-center { + display: flex; + justify-content: center; + align-items: center; +} + +$cubic-bezier: cubic-bezier(0.215, 0.61, 0.355, 1); diff --git a/packages/competition/src/assets/404.png b/packages/competition/src/assets/404.png new file mode 100644 index 0000000..1b19c1c Binary files /dev/null and b/packages/competition/src/assets/404.png differ diff --git a/packages/competition/src/assets/logo.svg b/packages/competition/src/assets/logo.svg new file mode 100644 index 0000000..143ef7e --- /dev/null +++ b/packages/competition/src/assets/logo.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/competition/src/assets/react.svg b/packages/competition/src/assets/react.svg deleted file mode 100644 index 6c87de9..0000000 --- a/packages/competition/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/competition/src/components/login/loginCard/index.module.scss b/packages/competition/src/components/login/loginCard/index.module.scss new file mode 100644 index 0000000..c848168 --- /dev/null +++ b/packages/competition/src/components/login/loginCard/index.module.scss @@ -0,0 +1,45 @@ +.card { + background-color: transparent !important; + background: linear-gradient(to bottom right, var(--white-color), transparent); + background-position: 50% 50%; + background-size: 2000% 2000%; + box-shadow: + inset -5px -5px 240px 0px rgba(255, 255, 255, 0.02), + inset 5px 5px 4px 0px rgba(255, 255, 255, 0.35) !important; + backdrop-filter: blur(42px); + border: 1px solid var(--divider-color); + .header-container { + display: flex; + flex-direction: column; + font-weight: bolder; + gap: 10px; + font-size: 16px; + color: var(--shadow-color); + } + .footer-container { + width: 100%; + .divider-container { + padding: 12px 0; + display: flex; + flex-direction: row; + align-items: center; + gap: 12px; + color: var(--shadow-color); + div { + flex-grow: 1; + height: 1px; + background-color: var(--divider-color); + } + } + .other-way-container { + display: flex; + flex-direction: row; + gap: 50px; + button { + flex-grow: 1; + height: 50px; + font-weight: 1000; + } + } + } +} diff --git a/packages/competition/src/components/login/loginCard/index.tsx b/packages/competition/src/components/login/loginCard/index.tsx new file mode 100644 index 0000000..a90539c --- /dev/null +++ b/packages/competition/src/components/login/loginCard/index.tsx @@ -0,0 +1,48 @@ +import { Button, Card } from "@sast/oj-ui"; +import Logo from "../../logo"; +import styles from "./index.module.scss"; +import LoginCardContent from "./loginCardContent"; + +const LoginCard = () => { + return ( + <> + +
+ + LOGIN HERE +
+ + } + mainContent={} + footer={ + <> +
+
+
+ Or continue with +
+
+
+ + + +
+
+ + } + > + + ); +}; + +export default LoginCard; diff --git a/packages/competition/src/components/login/loginCard/loginCardContent/icon/error.tsx b/packages/competition/src/components/login/loginCard/loginCardContent/icon/error.tsx new file mode 100644 index 0000000..c84dc0b --- /dev/null +++ b/packages/competition/src/components/login/loginCard/loginCardContent/icon/error.tsx @@ -0,0 +1,37 @@ +import styles from "./icon.module.scss"; +const Error = () => { + return ( + <> + + + + + + ); +}; + +export default Error; diff --git a/packages/competition/src/components/login/loginCard/loginCardContent/icon/icon.module.scss b/packages/competition/src/components/login/loginCard/loginCardContent/icon/icon.module.scss new file mode 100644 index 0000000..0ed5b7d --- /dev/null +++ b/packages/competition/src/components/login/loginCard/loginCardContent/icon/icon.module.scss @@ -0,0 +1,30 @@ +@use "../../../../../variables" as *; +$animation-duration: 300ms; +$animation-delay: 500ms; +@mixin svg-animation($delay) { + stroke-dasharray: 24; + stroke-dashoffset: 24; + animation: draw-success-icon $animation-duration linear forwards; + animation-delay: $delay; +} +.icon { + @include absolute-center; + .success { + @include svg-animation($animation-delay); + } + .cross1 { + @include svg-animation($animation-delay); + } + .cross2 { + @include svg-animation($animation-delay * 2); + } +} + +@keyframes draw-success-icon { + 50% { + stroke-dashoffset: 18; + } + 100% { + stroke-dashoffset: 0; + } +} diff --git a/packages/competition/src/components/login/loginCard/loginCardContent/icon/success.tsx b/packages/competition/src/components/login/loginCard/loginCardContent/icon/success.tsx new file mode 100644 index 0000000..d543f4e --- /dev/null +++ b/packages/competition/src/components/login/loginCard/loginCardContent/icon/success.tsx @@ -0,0 +1,26 @@ +import styles from "./icon.module.scss"; +const Success = () => { + return ( + <> + + + + + ); +}; + +export default Success; diff --git a/packages/competition/src/components/login/loginCard/loginCardContent/index.module.scss b/packages/competition/src/components/login/loginCard/loginCardContent/index.module.scss new file mode 100644 index 0000000..bf88bf5 --- /dev/null +++ b/packages/competition/src/components/login/loginCard/loginCardContent/index.module.scss @@ -0,0 +1,62 @@ +@use "../../../../variables" as *; +$rotate-duration: 1000ms; +$transition-duration: 200ms; +.main-content-container { + margin-top: 15px; + display: flex; + flex-direction: column; + gap: 12px; + .button-container { + display: flex; + flex-direction: row-reverse; + .sign-in-button { + width: 100%; + margin-top: 15px; + height: 40px; + position: relative; + transition: all $transition-duration $cubic-bezier; + &.clicked { + background-color: var(--white-color); + height: 40px; + width: 40px; + border-radius: 50%; + } + &.clicked::before { + content: ""; + box-sizing: border-box; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + border: 6px solid; + border-radius: 50%; + border-color: transparent transparent var(--primary-color) transparent; + animation-name: rotate; + animation-duration: $rotate-duration; + animation-timing-function: $cubic-bezier; + animation-iteration-count: infinite; + animation-delay: $transition-duration; + } + &.error::before { + border: unset; + animation: none; + background-color: var(--danger-color); + } + &.success::before { + border: unset; + animation: none; + background-color: var(--success-color); + } + } + } +} + +@keyframes rotate { + from { + transform: rotate(0); + } + to { + transform: rotate(360deg); + } +} diff --git a/packages/competition/src/components/login/loginCard/loginCardContent/index.tsx b/packages/competition/src/components/login/loginCard/loginCardContent/index.tsx new file mode 100644 index 0000000..b7980c4 --- /dev/null +++ b/packages/competition/src/components/login/loginCard/loginCardContent/index.tsx @@ -0,0 +1,56 @@ +import { Input, Button, showToast } from "@sast/oj-ui"; +import styles from "./index.module.scss"; +import { useState } from "react"; +import Success from "./icon/success"; +import Error from "./icon/error"; + +const LoginCardContent = () => { + const [isClicked, setIsClicked] = useState(false); + const [isSignError, setIsSignError] = useState(false); + const [isSignSuccess, setIsSignSuccess] = useState(false); + + const test = () => { + setIsClicked(true); + //这里模仿实际的请求,在2000ms之后登录失败 + setTimeout(() => { + setIsSignError(true); + // showToast({ type: "error", content: "昵称或者密码错误" }); + setTimeout(() => { + setIsSignError(false); + setIsClicked(false); + }, 2000); + }, 2000); + //这里模仿请求,在2000ms之后登录成功 + // setTimeout(() => { + // setIsSignSuccess(true); + // }, 4000); + }; + return ( +
+ + +
+ +
+
+ ); +}; + +export default LoginCardContent; diff --git a/packages/competition/src/components/logo/index.tsx b/packages/competition/src/components/logo/index.tsx new file mode 100644 index 0000000..79485f3 --- /dev/null +++ b/packages/competition/src/components/logo/index.tsx @@ -0,0 +1,26 @@ +import { CSSProperties } from "react"; +import logo from "../../assets/logo.svg"; + +interface LogoProps { + width?: number; + height?: number; + className?: string; + style?: CSSProperties; +} + +const Logo = ({ width, height, className, style }: LogoProps) => { + return ( + <> + logo + + ); +}; + +export default Logo; diff --git a/packages/competition/src/index.css b/packages/competition/src/index.css index fb4dede..7329e14 100644 --- a/packages/competition/src/index.css +++ b/packages/competition/src/index.css @@ -24,10 +24,6 @@ a:hover { body { margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; } h1 { diff --git a/packages/competition/src/pages/about/page.tsx b/packages/competition/src/pages/about/page.tsx new file mode 100644 index 0000000..8b32003 --- /dev/null +++ b/packages/competition/src/pages/about/page.tsx @@ -0,0 +1,5 @@ +const About = () => { + return <>this is About!; +}; + +export default About; diff --git a/packages/competition/src/pages/error/page.module.scss b/packages/competition/src/pages/error/page.module.scss new file mode 100644 index 0000000..90815c5 --- /dev/null +++ b/packages/competition/src/pages/error/page.module.scss @@ -0,0 +1,47 @@ +@use "../../variables" as *; +@import url("https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@700&display=swap"); +@mixin font() { + font-family: "Roboto Mono", monospace; + font-weight: bolder; +} +.error-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 10px; + width: 100vw; + margin-top: 35px; + .error-span-1 { + @include font(); + font-size: 60px; + } + .error-span-2 { + @include font(); + font-size: 20px; + } + .error-img-container { + width: 500px; + height: 400px; + position: relative; + overflow: hidden; + img { + @include absolute-center(); + width: 800px; + } + } + .error-button { + margin-top: 25px; + @include flex-center(); + gap: 8px; + svg { + path { + stroke: var(--primary-color); + } + } + span { + font-size: 20px; + font-weight: bold; + } + } +} diff --git a/packages/competition/src/pages/error/page.tsx b/packages/competition/src/pages/error/page.tsx new file mode 100644 index 0000000..8a21aa0 --- /dev/null +++ b/packages/competition/src/pages/error/page.tsx @@ -0,0 +1,45 @@ +import styles from "./page.module.scss"; +import error404 from "../../assets/404.png"; +import { Button } from "@sast/oj-ui"; +import { useNavigate } from "react-router-dom"; +const Error = () => { + const navigate = useNavigate(); + return ( + <> +
+

Oops!

+

You are lost!

+
+ 404 +
+ +
+ + ); +}; + +export default Error; diff --git a/packages/competition/src/pages/home/page.tsx b/packages/competition/src/pages/home/page.tsx new file mode 100644 index 0000000..d6d5ae7 --- /dev/null +++ b/packages/competition/src/pages/home/page.tsx @@ -0,0 +1,12 @@ +import { Outlet } from "react-router-dom"; + +const Home = () => { + return ( + <> + This is Home + + + ); +}; + +export default Home; diff --git a/packages/competition/src/pages/library/page.tsx b/packages/competition/src/pages/library/page.tsx new file mode 100644 index 0000000..bb0389c --- /dev/null +++ b/packages/competition/src/pages/library/page.tsx @@ -0,0 +1,5 @@ +const Library = () => { + return <>this is library!; +}; + +export default Library; diff --git a/packages/competition/src/pages/login/page.module.scss b/packages/competition/src/pages/login/page.module.scss new file mode 100644 index 0000000..9c7dabc --- /dev/null +++ b/packages/competition/src/pages/login/page.module.scss @@ -0,0 +1,11 @@ +@use "../../variables" as *; +.login-background { + background: radial-gradient(circle at 30% 30%, #20afff, transparent), + radial-gradient(circle at 65% 35%, #ffce20, transparent), + radial-gradient(circle at 25% 85%, #ff8b20, transparent), + radial-gradient(circle at 65% 100%, #20ffd7, transparent); + background-blend-mode: screen; position: relative; + height: 100vh; + width: 100vw; + @include flex-center(); +} diff --git a/packages/competition/src/pages/login/page.tsx b/packages/competition/src/pages/login/page.tsx new file mode 100644 index 0000000..b641cfb --- /dev/null +++ b/packages/competition/src/pages/login/page.tsx @@ -0,0 +1,16 @@ +import LoginCard from "../../components/login/loginCard"; +import styles from "./page.module.scss"; + +const Login = () => { + return ( + <> +
+
+ +
+
+ + ); +}; + +export default Login; diff --git a/packages/competition/src/pages/page1.tsx b/packages/competition/src/pages/page1.tsx deleted file mode 100644 index d5d6833..0000000 --- a/packages/competition/src/pages/page1.tsx +++ /dev/null @@ -1 +0,0 @@ -// consyt \ No newline at end of file diff --git a/packages/competition/src/pages/problems/page.tsx b/packages/competition/src/pages/problems/page.tsx new file mode 100644 index 0000000..ec69476 --- /dev/null +++ b/packages/competition/src/pages/problems/page.tsx @@ -0,0 +1,12 @@ +import { Outlet } from "react-router-dom"; + +const Problems = () => { + return ( + <> + this is problems + + + ); +}; + +export default Problems; diff --git a/packages/competition/src/pages/problems/problemContent/page.tsx b/packages/competition/src/pages/problems/problemContent/page.tsx new file mode 100644 index 0000000..bd25b18 --- /dev/null +++ b/packages/competition/src/pages/problems/problemContent/page.tsx @@ -0,0 +1,9 @@ +import { useParams } from "react-router-dom"; + +const ProblemContent = () => { + const routerParams = useParams(); + + return <>this is problem content{routerParams.problemId}; +}; + +export default ProblemContent; diff --git a/packages/competition/src/pages/rank/page.tsx b/packages/competition/src/pages/rank/page.tsx new file mode 100644 index 0000000..36ce349 --- /dev/null +++ b/packages/competition/src/pages/rank/page.tsx @@ -0,0 +1,5 @@ +const Rank = () => { + return <>This is Rank!; +}; + +export default Rank; diff --git a/packages/competition/src/pages/select/page.tsx b/packages/competition/src/pages/select/page.tsx new file mode 100644 index 0000000..f9c9610 --- /dev/null +++ b/packages/competition/src/pages/select/page.tsx @@ -0,0 +1,5 @@ +const Select = () => { + return <>This is Select; +}; + +export default Select; diff --git a/packages/competition/src/utils/router/index.tsx b/packages/competition/src/utils/router/index.tsx new file mode 100644 index 0000000..a5c5dce --- /dev/null +++ b/packages/competition/src/utils/router/index.tsx @@ -0,0 +1,58 @@ +import { createBrowserRouter } from "react-router-dom"; +import Home from "../../pages/home/page"; +import Library from "../../pages/library/page"; +import Login from "../../pages/login/page"; +import Rank from "../../pages/rank/page"; +import Select from "../../pages/select/page"; +import About from "../../pages/about/page"; +import Error from "../../pages/error/page"; +import Problems from "../../pages/problems/page"; +import ProblemContent from "../../pages/problems/problemContent/page"; +import loader from "./loader"; + +const routes = [ + { + path: "/login", + element: , + }, + { + path: "/", + element: , + errorElement: , + loader: loader, + children: [ + { + path: "/about", + element: , + }, + { + path: "/library", + element: , + }, + { + path: "/rank", + element: , + }, + ], + }, + { + path: "/select", + element:
{!options.length ? ( diff --git a/packages/ui/lib/_variables.scss b/packages/ui/lib/_variables.scss index ee7ec78..1882034 100644 --- a/packages/ui/lib/_variables.scss +++ b/packages/ui/lib/_variables.scss @@ -68,6 +68,7 @@ $font-size-8: 8px; $font-size-10: 10px; $font-size-12: 12px; $font-size-14: 14px; +$font-size-16: 16px; //disabled @mixin disabled { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e8143a9..729d15a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,6 +53,9 @@ importers: '@sast/oj-ui': specifier: workspace:^ version: link:../ui + axios: + specifier: ^1.6.7 + version: 1.6.7 localforage: specifier: ^1.10.0 version: 1.10.0 @@ -65,6 +68,9 @@ importers: react-router-dom: specifier: ^6.21.0 version: 6.21.0(react-dom@18.2.0)(react@18.2.0) + swr: + specifier: ^2.2.5 + version: 2.2.5(react@18.2.0) zustand: specifier: ^4.4.7 version: 4.4.7(@types/react@18.2.43)(react@18.2.0) @@ -5850,7 +5856,7 @@ packages: vite: ^4 || ^5 dependencies: '@swc/core': 1.3.101 - vite: 5.0.8(@types/node@20.10.4)(sass@1.69.5) + vite: 5.0.8(@types/node@18.19.3)(sass@1.69.5) transitivePeerDependencies: - '@swc/helpers' dev: true @@ -6555,6 +6561,16 @@ packages: - debug dev: false + /axios@1.6.7: + resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} + dependencies: + follow-redirects: 1.15.5 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + /babel-core@7.0.0-bridge.0(@babel/core@7.23.6): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: @@ -6983,6 +6999,10 @@ packages: engines: {node: '>= 10'} dev: true + /client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + dev: false + /clone-deep@0.2.4: resolution: {integrity: sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==} engines: {node: '>=0.10.0'} @@ -8742,6 +8762,16 @@ packages: optional: true dev: false + /follow-redirects@1.15.5: + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -14200,6 +14230,16 @@ packages: picocolors: 1.0.0 dev: false + /swr@2.2.5(react@18.2.0): + resolution: {integrity: sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==} + peerDependencies: + react: ^16.11.0 || ^17.0.0 || ^18.0.0 + dependencies: + client-only: 0.0.1 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}