diff --git a/frontend/package.json b/frontend/package.json index 451d6f5..d61444d 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -47,7 +47,7 @@ "react": "18.2.0", "react-dom": "18.2.0", "react-hot-toast": "2.4.1", - "reactflow": "11.10.2", + "reactflow": "11.11.1", "sharp": "0.32.6", "tailwind-merge": "1.14.0", "tailwindcss": "3.3.3", diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx index 54b273c..f5b11dc 100644 --- a/frontend/src/app/layout.tsx +++ b/frontend/src/app/layout.tsx @@ -3,11 +3,9 @@ import "./globals.css"; // self-host google font, served from deployment domain, not per request import type { Metadata } from "next"; import { Inter } from "next/font/google"; -import { cookies } from "next/headers"; import React from "react"; -import { FetchUser } from "../components/authentication/FetchUser"; -import { userLoader } from "../lib/services/authentication/userloader"; import Providers from "./providers"; +import { UserProvider } from "@frontend/components/authentication/UserProvider"; // only consider or include the Latin subset of characters const inter = Inter({ subsets: ["latin"] }); @@ -24,10 +22,6 @@ export default async function RootLayout({ }: { children: React.ReactNode; }) { - const session = cookies().get("auth_session")?.value; - - const user = await userLoader(session); - return ( {/* children prop refers to the page component that the client sees atm */} @@ -38,7 +32,7 @@ export default async function RootLayout({ enableSystem disableTransitionOnChange > - {children} + {children} {/* condition needed to check the authentication status */} diff --git a/frontend/src/app/login/page.tsx b/frontend/src/app/login/page.tsx index 7c0293b..4d8bd9c 100644 --- a/frontend/src/app/login/page.tsx +++ b/frontend/src/app/login/page.tsx @@ -1,4 +1,6 @@ "use client"; +import { FormField } from "@frontend/components/authentication/FormField"; +import { Header } from "@frontend/components/layout/Header"; import { Button } from "@frontend/components/ui/button"; import { Card, @@ -6,12 +8,13 @@ import { CardHeader, CardTitle, } from "@frontend/components/ui/card"; -import { FormField } from "@frontend/components/authentication/FormField"; +import { useUserStore } from "@frontend/lib/services/authentication/userStore"; import * as Tabs from "@radix-ui/react-tabs"; import { Form, Formik } from "formik"; import { useRouter } from "next/navigation"; import { useLoginUser } from "../../lib/services/authentication/useLoginUser"; import { useRegisterUser } from "../../lib/services/authentication/useRegisterUser"; +import { TitleHeader } from "@frontend/components/ui/title-header"; export default function Login() { const register = useRegisterUser(); @@ -19,7 +22,10 @@ export default function Login() { const router = useRouter(); return ( -
+
+
Welcome to rememberry} + />
diff --git a/frontend/src/app/logout/TestLogout.tsx b/frontend/src/app/logout/TestLogout.tsx deleted file mode 100644 index 55259a8..0000000 --- a/frontend/src/app/logout/TestLogout.tsx +++ /dev/null @@ -1,20 +0,0 @@ -"use client"; -import { useRouter } from "next/navigation"; -import { useLogoutUser } from "../../lib/services/authentication/useLogoutUser"; - -export const TestLogout = () => { - const router = useRouter(); - const logout = useLogoutUser(); - const onClickLogout = async () => { - const [error, _success] = await logout(); - - if (error) return; - - router.push("/login"); - }; - return ( -
- -
- ); -}; diff --git a/frontend/src/app/logout/page.tsx b/frontend/src/app/logout/page.tsx deleted file mode 100644 index 3f82c4a..0000000 --- a/frontend/src/app/logout/page.tsx +++ /dev/null @@ -1,14 +0,0 @@ -"use client"; - -import { useUserStore } from "../../lib/services/authentication/userStore"; -import { TestLogout } from "./TestLogout"; - -export default function Logout() { - const userStore = useUserStore(); - return ( -
- {userStore.user &&

{userStore.user.username}

} - -
- ); -} diff --git a/frontend/src/app/map/[id]/page.tsx b/frontend/src/app/map/[id]/page.tsx index 5608aef..4482541 100644 --- a/frontend/src/app/map/[id]/page.tsx +++ b/frontend/src/app/map/[id]/page.tsx @@ -34,6 +34,9 @@ import ReactFlow, { useStoreApi, } from "reactflow"; import "reactflow/dist/style.css"; +import { Card, CardContent } from "@frontend/components/ui/card"; +import { DifficultyPicker } from "@frontend/components/layout/DifficultyPicker"; +import { TitleHeader } from "@frontend/components/ui/title-header"; const nodeTypes = { node: NodeMemo, @@ -247,10 +250,8 @@ const Map: FC = ({ nodesProp, edgesProp, mapId, mapName }) => { className="flex flex-col justify-items-center" >
setIsSidebarOpen(!isSidebarOpen)} - isOpen={isSidebarOpen} - toggleSidebar={toggleSidebar} + middleHeaderItems={{mapName}} + rightHeaderItems={} /> @@ -285,7 +286,6 @@ const Map: FC = ({ nodesProp, edgesProp, mapId, mapName }) => { > {/* */} -
- +
diff --git a/frontend/src/app/profile/page.tsx b/frontend/src/app/profile/page.tsx new file mode 100644 index 0000000..232d432 --- /dev/null +++ b/frontend/src/app/profile/page.tsx @@ -0,0 +1,84 @@ +"use client"; +import { FormField } from "@frontend/components/authentication/FormField"; +import { Header } from "@frontend/components/layout/Header"; +import { Button } from "@frontend/components/ui/button"; +import { + Card, + CardContent, + CardHeader, + CardTitle, +} from "@frontend/components/ui/card"; +import { TitleHeader } from "@frontend/components/ui/title-header"; +import { Form, Formik } from "formik"; +import { useState } from "react"; +import { useUserStore } from "../../lib/services/authentication/userStore"; + +export default function Profile() { + const { user } = useUserStore(); + + const [initialValues, _setInitialValues] = useState({ + username: user?.username || "", + email: user?.email || "", + password: "", + }); + + const handleUpdate = async () => {}; + + return ( +
+
Hello {user?.username}} + /> +
+
+ + {({ isSubmitting }) => ( +
+ + + Do you want to do some changes? 🫐 + + +
+ + + + +
+ +
+
+
+ )} +
+
+
+
+ ); +} diff --git a/frontend/src/app/settings/page.tsx b/frontend/src/app/settings/page.tsx deleted file mode 100644 index 2d8ed81..0000000 --- a/frontend/src/app/settings/page.tsx +++ /dev/null @@ -1,89 +0,0 @@ -"use client"; -import { Button } from "@frontend/components/ui/button"; -import { - Card, - CardContent, - CardHeader, - CardTitle, -} from "@frontend/components/ui/card"; -import { FormField } from "@frontend/components/authentication/FormField"; -import { Form, Formik } from "formik"; -import { useState } from "react"; -import { useUserStore } from "../../lib/services/authentication/userStore"; - -export default function Settings() { - const { user } = useUserStore(); - - const [initialValues, _setInitialValues] = useState({ - username: user?.username || "", - email: user?.email || "", - password: "", // Passwords are not usually provided for security reasons - }); - - const handleUpdate = async () => { - // Call your API to update the user details here - // For example: await updateUserDetails(values); - console.log("Update values"); - // After updating, you can use actions.setUser to update the state - // actions.setUser(updatedUserDetails); - }; - - return ( -
-
-
-
- - {({ isSubmitting }) => ( -
- - - - Do you want to do some juicy changes? 🫐 - - - -
- - - - -
- -
-
-
- )} -
-
-
-
-
- ); -} diff --git a/frontend/src/components/authentication/FetchUser.tsx b/frontend/src/components/authentication/FetchUser.tsx index 38e3e06..63f0f36 100644 --- a/frontend/src/components/authentication/FetchUser.tsx +++ b/frontend/src/components/authentication/FetchUser.tsx @@ -1,11 +1,7 @@ "use client"; -import Loading from "@frontend/app/loading"; -import { useRouter } from "next/navigation"; -import { FC, ReactNode, useEffect, useState } from "react"; -import { - User, - useUserStore, -} from "../../lib/services/authentication/userStore"; +import { FC, ReactNode } from "react"; +import { User } from "../../lib/services/authentication/userStore"; +import { useFetchUser } from "./useFetchUser"; type FetchUserProps = { user: User | null; @@ -13,22 +9,7 @@ type FetchUserProps = { }; export const FetchUser: FC = ({ user, children }) => { - const router = useRouter(); - const [isLoading, setIsLoading] = useState(true); - - const userStore = useUserStore(); - - useEffect(() => { - if (!user) { - router.push("/login"); - userStore.actions.deleteUser(); - } else { - userStore.actions.setUser(user); - } - setIsLoading(false); - }, [user, router, userStore.actions, isLoading]); - - if (isLoading) return ; - + const { isLoading } = useFetchUser({ user }); + if (isLoading) return null; return <>{children}; }; diff --git a/frontend/src/components/authentication/UserProvider.tsx b/frontend/src/components/authentication/UserProvider.tsx new file mode 100644 index 0000000..51e76db --- /dev/null +++ b/frontend/src/components/authentication/UserProvider.tsx @@ -0,0 +1,15 @@ +import { userLoader } from "@frontend/lib/services/authentication/userloader"; +import { cookies } from "next/headers"; +import { FC, ReactNode } from "react"; +import { FetchUser } from "./FetchUser"; + +type UserProviderProps = { + children: ReactNode; +}; + +export const UserProvider: FC = async ({ children }) => { + const session = cookies().get("auth_session")?.value; + const user = await userLoader(session); + + return {children}; +}; diff --git a/frontend/src/components/authentication/useFetchUser.ts b/frontend/src/components/authentication/useFetchUser.ts new file mode 100644 index 0000000..c24d621 --- /dev/null +++ b/frontend/src/components/authentication/useFetchUser.ts @@ -0,0 +1,29 @@ +import { useRouter } from "next/navigation"; +import { useEffect, useState } from "react"; +import { + User, + useUserStore, +} from "../../lib/services/authentication/userStore"; + +type FetchUserProps = { + user: User | null; +}; + +export const useFetchUser = ({ user }: FetchUserProps) => { + const router = useRouter(); + const [isLoading, setIsLoading] = useState(true); + + const userStore = useUserStore(); + + useEffect(() => { + if (!user) { + router.push("/login"); + userStore.actions.deleteUser(); + } else { + userStore.actions.setUser(user); + } + setIsLoading(false); + }, [user, router, userStore.actions, isLoading]); + + return { isLoading }; +}; diff --git a/frontend/src/components/layout/Header.tsx b/frontend/src/components/layout/Header.tsx index 56b61a1..65c10e8 100644 --- a/frontend/src/components/layout/Header.tsx +++ b/frontend/src/components/layout/Header.tsx @@ -1,90 +1,40 @@ -import { DifficultyPicker } from "@frontend/components/layout/DifficultyPicker"; import { DarkWhiteModeToggle } from "@frontend/components/layout/DarkWhiteModeToggle"; -import { SidebarButton } from "@frontend/components/layout/SidebarButton"; -import { Button } from "@frontend/components/ui/button"; -import { Card } from "@frontend/components/ui/card"; -import { useGetMapByUserId } from "@frontend/lib/services/maps/useGetMapsByUserId"; +import { buttonVariants } from "@frontend/components/ui/button"; import Link from "next/link"; import { Panel } from "reactflow"; -import { FC } from "react"; +import { FC, ReactNode } from "react"; +import { ProfileDropdown } from "./ProfileDropdown"; type HeaderProps = { - isOpen: boolean; - mapName: string; - toggleSidebar: () => void; - openHandler: () => void; + leftHeaderItems?: ReactNode; + middleHeaderItems?: ReactNode; + rightHeaderItems?: ReactNode; }; -export const Header: FC = ({ isOpen, mapName, openHandler }) => { - //Todo: on sidebar open, show maps - - const { isLoading, maps } = useGetMapByUserId(); - if (isLoading) { - return null; - } - - const sortedMaps = maps.sort( - (a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(), - ); - +export const Header: FC = ({ + leftHeaderItems, + middleHeaderItems, + rightHeaderItems, +}) => { + const headerItemsClassName = "flex gap-5"; return ( -
-
-
+
+ -
-

- Learn another map: -

- {sortedMaps.map((map) => ( - - -
-

{map.name}

-

{map.description}

-
-

- {map.updatedAt.toDateString().split(" ").slice(1).join(" ")} -

-
- - ))} -
-
- -
-
+

🫐

+

Home

+ + {leftHeaderItems} +
+
{middleHeaderItems}
+
+ {rightHeaderItems} + +
- -
-
- - - - -
-
- - -
-
-
); }; diff --git a/frontend/src/components/layout/ProfileDropdown.tsx b/frontend/src/components/layout/ProfileDropdown.tsx new file mode 100644 index 0000000..0ab8654 --- /dev/null +++ b/frontend/src/components/layout/ProfileDropdown.tsx @@ -0,0 +1,57 @@ +import { Button } from "@frontend/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@frontend/components/ui/dropdown-menu"; +import { useLogoutUser } from "@frontend/lib/services/authentication/useLogoutUser"; +import { useUserStore } from "@frontend/lib/services/authentication/userStore"; +import { LogOut, User } from "lucide-react"; +import { useRouter } from "next/navigation"; + +export const ProfileDropdown = () => { + const userStore = useUserStore(); + const router = useRouter(); + const logout = useLogoutUser(); + + if (!userStore.user) return null; + + const handleLogout = async () => { + router.push("/login"); + + const [error, _success] = await logout(); + + //TODO: handle error + if (error) return; + }; + return ( + + + + + + + {userStore.user.username}'s Account + + + router.push("/profile")}> + + Profile Page + + + + Log Out + + + + ); +}; diff --git a/frontend/src/components/ui/card.tsx b/frontend/src/components/ui/card.tsx index e27b08a..f0caadf 100644 --- a/frontend/src/components/ui/card.tsx +++ b/frontend/src/components/ui/card.tsx @@ -9,7 +9,7 @@ const Card = React.forwardRef<
= ({ children }) => ( +

{children}

+); diff --git a/frontend/src/lib/services/authentication/userStore.ts b/frontend/src/lib/services/authentication/userStore.ts index 11920ef..15e3624 100644 --- a/frontend/src/lib/services/authentication/userStore.ts +++ b/frontend/src/lib/services/authentication/userStore.ts @@ -10,22 +10,14 @@ export type User = { interface UserStore { user: User | null; - isLoading: boolean; - - isLoggedIn: boolean; - actions: { setUser: (user: RegisterUserOutput) => RegisterUserOutput; deleteUser: () => void; - setLoading: (loading: boolean) => void; - setLoggedIn: (loggedIn: boolean) => void; }; } export const useUserStore = create((set) => ({ user: null, - isLoading: false, - isLoggedIn: false, actions: { setUser: (user): RegisterUserOutput => { set(() => ({ @@ -38,15 +30,5 @@ export const useUserStore = create((set) => ({ user: null, })); }, - setLoading(loading) { - set(() => ({ - isLoading: loading, - })); - }, - setLoggedIn(loggedIn) { - set(() => ({ - isLoggedIn: loggedIn, - })); - }, }, })); diff --git a/frontend/src/lib/services/maps/useGetMapsByUserId.ts b/frontend/src/lib/services/maps/useGetMapsByUserId.ts index c9c9b79..7ddcdff 100644 --- a/frontend/src/lib/services/maps/useGetMapsByUserId.ts +++ b/frontend/src/lib/services/maps/useGetMapsByUserId.ts @@ -3,7 +3,9 @@ import { MapGetMapsOutput, mapRouter } from "./map.types"; export const useGetMapByUserId = () => { const userId = useUserStore((state) => { + console.log("hallo cih hure"); if (state.user) return state.user.id; + console.log("hallo es ist schleches ist schlecht"); return null; }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0b278a6..a7a7622 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -208,8 +208,8 @@ importers: specifier: 2.4.1 version: 2.4.1(csstype@3.1.3)(react-dom@18.2.0)(react@18.2.0) reactflow: - specifier: 11.10.2 - version: 11.10.2(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + specifier: 11.11.1 + version: 11.11.1(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) sharp: specifier: 0.32.6 version: 0.32.6 @@ -736,26 +736,26 @@ packages: /@internationalized/date@3.5.2: resolution: {integrity: sha512-vo1yOMUt2hzp63IutEaTUxROdvQg1qlMRsbCvbay2AK2Gai7wIgCyK5weEX3nHkiLgo4qCXHijFNC/ILhlRpOQ==} dependencies: - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 dev: false /@internationalized/message@3.1.2: resolution: {integrity: sha512-MHAWsZWz8jf6jFPZqpTudcCM361YMtPIRu9CXkYmKjJ/0R3pQRScV5C0zS+Qi50O5UAm8ecKhkXx6mWDDcF6/g==} dependencies: - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 intl-messageformat: 10.5.11 dev: false /@internationalized/number@3.5.1: resolution: {integrity: sha512-N0fPU/nz15SwR9IbfJ5xaS9Ss/O5h1sVXMZf43vc9mxEG48ovglvvzBjF53aHlq20uoR6c+88CrIXipU/LSzwg==} dependencies: - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 dev: false /@internationalized/string@3.2.1: resolution: {integrity: sha512-vWQOvRIauvFMzOO+h7QrdsJmtN1AXAFVcaLWP9AseRN2o7iHceZ6bIXhBD4teZl8i91A3gxKnWBlGgjCwU6MFQ==} dependencies: - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 dev: false /@ioredis/commands@1.2.0: @@ -3731,7 +3731,7 @@ packages: '@react-stately/toggle': 3.7.2(react@18.2.0) '@react-types/button': 3.9.2(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -3750,7 +3750,7 @@ packages: '@react-stately/toggle': 3.7.2(react@18.2.0) '@react-types/checkbox': 3.7.1(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -3765,7 +3765,7 @@ packages: '@react-aria/utils': 3.23.2(react@18.2.0) '@react-types/dialog': 3.5.8(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -3778,7 +3778,7 @@ packages: '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/utils': 3.23.2(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 clsx: 2.0.0 react: 18.2.0 dev: false @@ -3792,7 +3792,7 @@ packages: '@react-aria/utils': 3.23.2(react@18.2.0) '@react-stately/form': 3.0.1(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -3815,7 +3815,7 @@ packages: '@react-types/checkbox': 3.7.1(react@18.2.0) '@react-types/grid': 3.2.4(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -3832,7 +3832,7 @@ packages: '@react-aria/ssr': 3.9.2(react@18.2.0) '@react-aria/utils': 3.23.2(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -3844,7 +3844,7 @@ packages: '@react-aria/ssr': 3.9.2(react@18.2.0) '@react-aria/utils': 3.23.2(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -3855,7 +3855,7 @@ packages: dependencies: '@react-aria/utils': 3.23.2(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -3869,7 +3869,7 @@ packages: '@react-aria/utils': 3.23.2(react@18.2.0) '@react-types/link': 3.5.3(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -3887,7 +3887,7 @@ packages: '@react-stately/list': 3.10.3(react@18.2.0) '@react-types/listbox': 3.4.7(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -3895,7 +3895,7 @@ packages: /@react-aria/live-announcer@3.3.2: resolution: {integrity: sha512-aOyPcsfyY9tLCBhuUaYCruwcd1IrYLc47Ou+J7wMzjeN9v4lsaEfiN12WFl8pDqOwfy6/7It2wmlm5hOuZY8wQ==} dependencies: - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 dev: false /@react-aria/menu@3.13.1(react-dom@18.2.0)(react@18.2.0): @@ -3916,7 +3916,7 @@ packages: '@react-types/button': 3.9.2(react@18.2.0) '@react-types/menu': 3.9.7(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -3937,7 +3937,7 @@ packages: '@react-types/button': 3.9.2(react@18.2.0) '@react-types/overlays': 3.8.5(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -3952,7 +3952,7 @@ packages: '@react-aria/utils': 3.23.2(react@18.2.0) '@react-types/progress': 3.5.2(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -3970,7 +3970,7 @@ packages: '@react-stately/radio': 3.10.2(react@18.2.0) '@react-types/radio': 3.7.1(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -3986,7 +3986,7 @@ packages: '@react-aria/utils': 3.23.2(react@18.2.0) '@react-stately/selection': 3.14.3(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -3997,7 +3997,7 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4009,7 +4009,7 @@ packages: '@react-aria/toggle': 3.10.2(react@18.2.0) '@react-stately/toggle': 3.7.2(react@18.2.0) '@react-types/switch': 3.5.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4034,7 +4034,7 @@ packages: '@react-types/grid': 3.2.4(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) '@react-types/table': 3.9.3(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -4052,7 +4052,7 @@ packages: '@react-stately/tabs': 3.6.4(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) '@react-types/tabs': 3.3.5(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -4070,7 +4070,7 @@ packages: '@react-stately/utils': 3.9.1(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) '@react-types/textfield': 3.9.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4084,7 +4084,7 @@ packages: '@react-aria/utils': 3.23.2(react@18.2.0) '@react-stately/toggle': 3.7.2(react@18.2.0) '@react-types/checkbox': 3.7.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4099,7 +4099,7 @@ packages: '@react-stately/tooltip': 3.4.7(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) '@react-types/tooltip': 3.4.7(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4111,7 +4111,7 @@ packages: '@react-aria/ssr': 3.9.2(react@18.2.0) '@react-stately/utils': 3.9.1(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 clsx: 2.0.0 react: 18.2.0 dev: false @@ -4124,7 +4124,7 @@ packages: '@react-aria/interactions': 3.21.1(react@18.2.0) '@react-aria/utils': 3.23.2(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4137,7 +4137,7 @@ packages: '@react-stately/utils': 3.9.1(react@18.2.0) '@react-types/checkbox': 3.7.1(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4147,7 +4147,7 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4163,7 +4163,7 @@ packages: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4176,7 +4176,7 @@ packages: '@react-stately/selection': 3.14.3(react@18.2.0) '@react-types/grid': 3.2.4(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4189,7 +4189,7 @@ packages: '@react-stately/selection': 3.14.3(react@18.2.0) '@react-stately/utils': 3.9.1(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4201,7 +4201,7 @@ packages: '@react-stately/overlays': 3.6.5(react@18.2.0) '@react-types/menu': 3.9.7(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4212,7 +4212,7 @@ packages: dependencies: '@react-stately/utils': 3.9.1(react@18.2.0) '@react-types/overlays': 3.8.5(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4225,7 +4225,7 @@ packages: '@react-stately/utils': 3.9.1(react@18.2.0) '@react-types/radio': 3.7.1(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4237,7 +4237,7 @@ packages: '@react-stately/collections': 3.10.5(react@18.2.0) '@react-stately/utils': 3.9.1(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4254,7 +4254,7 @@ packages: '@react-types/grid': 3.2.4(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) '@react-types/table': 3.9.3(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4266,7 +4266,7 @@ packages: '@react-stately/list': 3.10.3(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) '@react-types/tabs': 3.3.5(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4277,7 +4277,7 @@ packages: dependencies: '@react-stately/utils': 3.9.1(react@18.2.0) '@react-types/checkbox': 3.7.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4288,7 +4288,7 @@ packages: dependencies: '@react-stately/overlays': 3.6.5(react@18.2.0) '@react-types/tooltip': 3.4.7(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4301,7 +4301,7 @@ packages: '@react-stately/selection': 3.14.3(react@18.2.0) '@react-stately/utils': 3.9.1(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4310,7 +4310,7 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4321,7 +4321,7 @@ packages: dependencies: '@react-aria/utils': 3.23.2(react@18.2.0) '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.8 + '@swc/helpers': 0.5.9 react: 18.2.0 dev: false @@ -4490,13 +4490,13 @@ packages: react: 18.2.0 dev: false - /@reactflow/background@11.3.7(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-PhkvoFtO/NXJgFtBvfbPwdR/6/dl25egQlFhKWS3T4aYa7rh80dvf6dF3t6+JXJS4q5ToYJizD2/n8/qylo1yQ==} + /@reactflow/background@11.3.11(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-27ahQyHuX2YTc1lABvAPpd5JWBH5P3qTHLGOO+Qfqq4mbicwQ0UGQ2bVDWDwoHOyep2EuMuphrLttaMr0hiviw==} peerDependencies: react: '>=17' react-dom: '>=17' dependencies: - '@reactflow/core': 11.10.2(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/core': 11.11.1(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) classcat: 5.0.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4506,13 +4506,13 @@ packages: - immer dev: false - /@reactflow/controls@11.2.7(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-mugzVALH/SuKlVKk+JCRm1OXQ+p8e9+k8PCTIaqL+nBl+lPF8KA4uMm8ApsOvhuSAb2A80ezewpyvYHr0qSYVA==} + /@reactflow/controls@11.2.11(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-FyqQv5pWEc2ycEGgIaLPmD5ezW3chsNwqMCjBMETxRj45R4uy6j+gDNi5EgURCan7T12uvoFeQopSZ96JL8XDQ==} peerDependencies: react: '>=17' react-dom: '>=17' dependencies: - '@reactflow/core': 11.10.2(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/core': 11.11.1(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) classcat: 5.0.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4522,8 +4522,8 @@ packages: - immer dev: false - /@reactflow/core@11.10.2(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-/cbTxtFpfkIGReSVkcnQhS4Jx4VFY2AhPlJ5n0sbPtnR7OWowF9zodh5Yyzr4j1NOUoBgJ9h+UqGEwwY2dbAlw==} + /@reactflow/core@11.11.1(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-O9f/q9SZ+29am/XdoZgm/LTdkgQdypcVj9a1yZZgcS6rVDkij1yIiOT3nkGxwnNkJz0rwCn2xtL5SkK038AQ7w==} peerDependencies: react: '>=17' react-dom: '>=17' @@ -4544,13 +4544,13 @@ packages: - immer dev: false - /@reactflow/minimap@11.7.7(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Pwqw31tJ663cJur6ypqyJU33nPckvTepmz96erdQZoHsfOyLmFj4nXT7afC30DJ48lp0nfNsw+028mlf7f/h4g==} + /@reactflow/minimap@11.7.11(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-zXxv+IExvWuaZ+gmRIfmU09A+slG9rMKTVfjqd+ewFV4LFcCyMNMIx3gZybdLZtgUDKIOoU/hAWIY+FbU7GTKw==} peerDependencies: react: '>=17' react-dom: '>=17' dependencies: - '@reactflow/core': 11.10.2(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/core': 11.11.1(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@types/d3-selection': 3.0.10 '@types/d3-zoom': 3.0.8 classcat: 5.0.4 @@ -4564,13 +4564,13 @@ packages: - immer dev: false - /@reactflow/node-resizer@2.2.7(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-BMBstmWNiklHnnAjHu8irkiPQ8/k8nnjzqlTql4acbVhD6Tsdxx/t/saOkELmfQODqGZNiPw9+pHcAHgtE6oNQ==} + /@reactflow/node-resizer@2.2.11(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-g/5iLo5vPBoFozU+2WXub+mbpNkQhR+PRX9o0YvH/lYs1pS7JYFSzCOHdHpLHAImoCGrKY1XN5scYly36jWkDw==} peerDependencies: react: '>=17' react-dom: '>=17' dependencies: - '@reactflow/core': 11.10.2(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/core': 11.11.1(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) classcat: 5.0.4 d3-drag: 3.0.0 d3-selection: 3.0.0 @@ -4582,13 +4582,13 @@ packages: - immer dev: false - /@reactflow/node-toolbar@1.3.7(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-75moEQKg23YKA3A2DNSFhq719ZPmby5mpwOD+NO7ZffJ88oMS/2eY8l8qpA3hvb1PTBHDxyKazhJirW+f4t0Wg==} + /@reactflow/node-toolbar@1.3.11(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-PKcTrtC88WZjNQz4ACnPgbNDBprsLJVDxyV1x8drGMNRePPrErkUNxsbhrr49L8ffmIavd4kxW5XVNOx8Kswmw==} peerDependencies: react: '>=17' react-dom: '>=17' dependencies: - '@reactflow/core': 11.10.2(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/core': 11.11.1(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) classcat: 5.0.4 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4598,8 +4598,8 @@ packages: - immer dev: false - /@rushstack/eslint-patch@1.10.1: - resolution: {integrity: sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==} + /@rushstack/eslint-patch@1.10.2: + resolution: {integrity: sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==} dev: false /@swc/helpers@0.4.14: @@ -4621,8 +4621,8 @@ packages: tslib: 2.6.2 dev: false - /@swc/helpers@0.5.8: - resolution: {integrity: sha512-lruDGw3pnfM3wmZHeW7JuhkGQaJjPyiKjxeGhdmfoOT53Ic9qb5JLDNaK2HUdl1zLDeX28H221UvKjfdvSLVMg==} + /@swc/helpers@0.5.9: + resolution: {integrity: sha512-XI76sLwMJoLjJTOK5RblBZkouOJG3X3hjxLCzLnyN1ifAiKQc6Hck3uvnU4Z/dV/Dyk36Ffj8FLvDLV2oWvKTw==} dependencies: tslib: 2.6.2 dev: false @@ -5389,7 +5389,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001607 + caniuse-lite: 1.0.30001609 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -5491,8 +5491,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001607 - electron-to-chromium: 1.4.730 + caniuse-lite: 1.0.30001609 + electron-to-chromium: 1.4.735 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) dev: false @@ -5545,8 +5545,8 @@ packages: engines: {node: '>=14.16'} dev: true - /caniuse-lite@1.0.30001607: - resolution: {integrity: sha512-WcvhVRjXLKFB/kmOFVwELtMxyhq3iM/MvmXcyCe2PNf166c39mptscOc/45TTS96n2gpNV2z7+NakArTWZCQ3w==} + /caniuse-lite@1.0.30001609: + resolution: {integrity: sha512-JFPQs34lHKx1B5t1EpQpWH4c+29zIyn/haGsbpfq3suuV9v56enjFt23zqijxGTMwy1p/4H2tjnQMY+p1WoAyA==} dev: false /chalk@4.1.2: @@ -6050,8 +6050,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: false - /electron-to-chromium@1.4.730: - resolution: {integrity: sha512-oJRPo82XEqtQAobHpJIR3zW5YO3sSRRkPz2an4yxi1UvqhsGm54vR/wzTFV74a3soDOJ8CKW7ajOOX5ESzddwg==} + /electron-to-chromium@1.4.735: + resolution: {integrity: sha512-pkYpvwg8VyOTQAeBqZ7jsmpCjko1Qc6We1ZtZCjRyYbT5v4AIUKDy5cQTRotQlSSZmMr8jqpEt6JtOj5k7lR7A==} dev: false /emoji-regex@8.0.0: @@ -6287,7 +6287,7 @@ packages: optional: true dependencies: '@next/eslint-plugin-next': 14.0.4 - '@rushstack/eslint-patch': 1.10.1 + '@rushstack/eslint-patch': 1.10.2 '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.4.3) eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 @@ -7623,7 +7623,7 @@ packages: '@next/env': 14.0.4 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001607 + caniuse-lite: 1.0.30001609 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.2.0 @@ -8231,18 +8231,18 @@ packages: loose-envify: 1.4.0 dev: false - /reactflow@11.10.2(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-tqQJfPEiIkXonT3piVYf+F9CvABI5e28t5I6rpaLTnO8YVCAOh1h0f+ziDKz0Bx9Y2B/mFgyz+H7LZeUp/+lhQ==} + /reactflow@11.11.1(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2GEh0bTkYR7rzAV3qdeN6C1o4qumtETZl7yQv1GVrfgr3c77nCUAOKsv5hetRejOGNnJudRwn6axeWFAY+IjNg==} peerDependencies: react: '>=17' react-dom: '>=17' dependencies: - '@reactflow/background': 11.3.7(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@reactflow/controls': 11.2.7(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@reactflow/core': 11.10.2(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@reactflow/minimap': 11.7.7(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@reactflow/node-resizer': 2.2.7(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@reactflow/node-toolbar': 1.3.7(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/background': 11.3.11(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/controls': 11.2.11(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/core': 11.11.1(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/minimap': 11.7.11(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/node-resizer': 2.2.11(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@reactflow/node-toolbar': 1.3.11(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: