diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 18038ed32b3..1b4e0b5bd88 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -84,10 +84,9 @@ The application is now available at `http://localhost:3000` You can execute the following commands `pnpm test` for a single test run or `pnpm test:watch` in the following directories: - apps/login +- packages/zitadel-proto - packages/zitadel-client -- packages/zitadel-server -- packages/zitadel-react -- packages/zitadel-next +- packages/zitadel-node - The projects root directory: all tests in the project are executed In apps/login, these commands also spin up the application and a ZITADEL gRPC API mock server to run integration tests using [Cypress](https://www.cypress.io/) against them. diff --git a/README.md b/README.md index cfe1f022fb0..9393dafe5a1 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,6 @@ We think the easiest path of getting up and running, is the following: - `@zitadel/node`: core components for establishing node client connection, grpc stub - `@zitadel/client`: shared client utilities - `@zitadel/proto`: shared protobuf types -- `@zitadel/react`: shared React utilities and components built with tailwindcss -- `@zitadel/next`: shared Next.js utilities - `@zitadel/tsconfig`: shared `tsconfig.json`s used throughout the monorepo - `eslint-config-zitadel`: ESLint preset diff --git a/apps/login/package.json b/apps/login/package.json index 83991432166..6878332d547 100644 --- a/apps/login/package.json +++ b/apps/login/package.json @@ -37,10 +37,8 @@ "@tailwindcss/forms": "0.5.7", "@vercel/analytics": "^1.2.2", "@zitadel/client": "workspace:*", - "@zitadel/next": "workspace:*", "@zitadel/node": "workspace:*", "@zitadel/proto": "workspace:*", - "@zitadel/react": "workspace:*", "clsx": "1.2.1", "copy-to-clipboard": "^3.3.3", "moment": "^2.29.4", @@ -57,7 +55,7 @@ "devDependencies": { "@bufbuild/buf": "^1.36.0", "@testing-library/jest-dom": "^6.4.5", - "@testing-library/react": "^16.0.0", + "@testing-library/react": "^16.0.1", "@types/ms": "0.7.34", "@types/node": "22.1.0", "@types/react": "18.3.3", @@ -65,7 +63,7 @@ "@types/tinycolor2": "1.4.3", "@types/uuid": "^10.0.0", "@vercel/git-hooks": "1.0.0", - "@zitadel/prettier-config": "workspace:*", + "@zitadel/prettier-config": "workspace:^", "@zitadel/tsconfig": "workspace:*", "autoprefixer": "10.4.20", "concurrently": "^8.1.0", diff --git a/apps/login/src/app/(login)/accounts/page.tsx b/apps/login/src/app/(login)/accounts/page.tsx index 164dbae5bc4..24bfd44bcd5 100644 --- a/apps/login/src/app/(login)/accounts/page.tsx +++ b/apps/login/src/app/(login)/accounts/page.tsx @@ -1,9 +1,9 @@ import { getBrandingSettings, listSessions } from "@/lib/zitadel"; -import { getAllSessionCookieIds } from "@zitadel/next"; import { UserPlusIcon } from "@heroicons/react/24/outline"; import Link from "next/link"; import SessionsList from "@/ui/SessionsList"; import DynamicTheme from "@/ui/DynamicTheme"; +import { getAllSessionCookieIds } from "@/lib/cookies"; async function loadSessions() { const ids = await getAllSessionCookieIds(); diff --git a/apps/login/src/app/(login)/mfa/page.tsx b/apps/login/src/app/(login)/mfa/page.tsx index 38eedc47634..f556db5f48f 100644 --- a/apps/login/src/app/(login)/mfa/page.tsx +++ b/apps/login/src/app/(login)/mfa/page.tsx @@ -1,3 +1,5 @@ +import { getSessionCookieById } from "@/lib/cookies"; +import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings, getSession, @@ -9,7 +11,6 @@ import BackButton from "@/ui/BackButton"; import ChooseSecondFactor from "@/ui/ChooseSecondFactor"; import DynamicTheme from "@/ui/DynamicTheme"; import UserAvatar from "@/ui/UserAvatar"; -import { getSessionCookieById, loadMostRecentSession } from "@zitadel/next"; export default async function Page({ searchParams, diff --git a/apps/login/src/app/(login)/mfa/set/page.tsx b/apps/login/src/app/(login)/mfa/set/page.tsx index accfba7dc3f..6b66b85d326 100644 --- a/apps/login/src/app/(login)/mfa/set/page.tsx +++ b/apps/login/src/app/(login)/mfa/set/page.tsx @@ -1,3 +1,5 @@ +import { getSessionCookieById } from "@/lib/cookies"; +import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings, getLoginSettings, @@ -11,7 +13,6 @@ import BackButton from "@/ui/BackButton"; import ChooseSecondFactorToSetup from "@/ui/ChooseSecondFactorToSetup"; import DynamicTheme from "@/ui/DynamicTheme"; import UserAvatar from "@/ui/UserAvatar"; -import { getSessionCookieById, loadMostRecentSession } from "@zitadel/next"; export default async function Page({ searchParams, diff --git a/apps/login/src/app/(login)/otp/[method]/page.tsx b/apps/login/src/app/(login)/otp/[method]/page.tsx index 965d6af0207..e737a031b47 100644 --- a/apps/login/src/app/(login)/otp/[method]/page.tsx +++ b/apps/login/src/app/(login)/otp/[method]/page.tsx @@ -1,9 +1,9 @@ +import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings, sessionService } from "@/lib/zitadel"; import Alert from "@/ui/Alert"; import DynamicTheme from "@/ui/DynamicTheme"; import LoginOTP from "@/ui/LoginOTP"; import UserAvatar from "@/ui/UserAvatar"; -import { loadMostRecentSession } from "@zitadel/next"; export default async function Page({ searchParams, diff --git a/apps/login/src/app/(login)/otp/[method]/set/page.tsx b/apps/login/src/app/(login)/otp/[method]/set/page.tsx index dbd0afa8b06..7d7f0fb2543 100644 --- a/apps/login/src/app/(login)/otp/[method]/set/page.tsx +++ b/apps/login/src/app/(login)/otp/[method]/set/page.tsx @@ -13,7 +13,7 @@ import TOTPRegister from "@/ui/TOTPRegister"; import UserAvatar from "@/ui/UserAvatar"; import Link from "next/link"; import { RegisterTOTPResponse } from "@zitadel/proto/zitadel/user/v2/user_service_pb"; -import { loadMostRecentSession } from "@zitadel/next"; +import { loadMostRecentSession } from "@/lib/session"; export default async function Page({ searchParams, diff --git a/apps/login/src/app/(login)/passkey/add/page.tsx b/apps/login/src/app/(login)/passkey/add/page.tsx index 93f75c0ff3f..b3332839b3a 100644 --- a/apps/login/src/app/(login)/passkey/add/page.tsx +++ b/apps/login/src/app/(login)/passkey/add/page.tsx @@ -1,9 +1,9 @@ +import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings, sessionService } from "@/lib/zitadel"; import Alert, { AlertType } from "@/ui/Alert"; import DynamicTheme from "@/ui/DynamicTheme"; import RegisterPasskey from "@/ui/RegisterPasskey"; import UserAvatar from "@/ui/UserAvatar"; -import { loadMostRecentSession } from "@zitadel/next"; export default async function Page({ searchParams, diff --git a/apps/login/src/app/(login)/passkey/login/page.tsx b/apps/login/src/app/(login)/passkey/login/page.tsx index 66dcc7427c9..5b3e2e97270 100644 --- a/apps/login/src/app/(login)/passkey/login/page.tsx +++ b/apps/login/src/app/(login)/passkey/login/page.tsx @@ -1,9 +1,10 @@ +import { getSessionCookieById } from "@/lib/cookies"; +import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings, getSession, sessionService } from "@/lib/zitadel"; import Alert from "@/ui/Alert"; import DynamicTheme from "@/ui/DynamicTheme"; import LoginPasskey from "@/ui/LoginPasskey"; import UserAvatar from "@/ui/UserAvatar"; -import { getSessionCookieById, loadMostRecentSession } from "@zitadel/next"; const title = "Authenticate with a passkey"; const description = diff --git a/apps/login/src/app/(login)/password/page.tsx b/apps/login/src/app/(login)/password/page.tsx index f843c5be9ed..a486697db0c 100644 --- a/apps/login/src/app/(login)/password/page.tsx +++ b/apps/login/src/app/(login)/password/page.tsx @@ -1,3 +1,4 @@ +import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings, getLoginSettings, @@ -7,7 +8,6 @@ import Alert from "@/ui/Alert"; import DynamicTheme from "@/ui/DynamicTheme"; import PasswordForm from "@/ui/PasswordForm"; import UserAvatar from "@/ui/UserAvatar"; -import { loadMostRecentSession } from "@zitadel/next"; export default async function Page({ searchParams, diff --git a/apps/login/src/app/(login)/signedin/page.tsx b/apps/login/src/app/(login)/signedin/page.tsx index 6ab7f7a3862..5bca185b7d7 100644 --- a/apps/login/src/app/(login)/signedin/page.tsx +++ b/apps/login/src/app/(login)/signedin/page.tsx @@ -2,12 +2,12 @@ import { createCallback, getBrandingSettings, getSession } from "@/lib/zitadel"; import DynamicTheme from "@/ui/DynamicTheme"; import UserAvatar from "@/ui/UserAvatar"; import { create } from "@zitadel/client"; -import { getMostRecentCookieWithLoginname } from "@zitadel/next"; import { redirect } from "next/navigation"; import { CreateCallbackRequestSchema, SessionSchema, } from "@zitadel/proto/zitadel/oidc/v2/oidc_service_pb"; +import { getMostRecentCookieWithLoginname } from "@/lib/cookies"; async function loadSession(loginName: string, authRequestId?: string) { const recent = await getMostRecentCookieWithLoginname({ loginName }); diff --git a/apps/login/src/app/(login)/u2f/page.tsx b/apps/login/src/app/(login)/u2f/page.tsx index 7685a782198..27216e0c80c 100644 --- a/apps/login/src/app/(login)/u2f/page.tsx +++ b/apps/login/src/app/(login)/u2f/page.tsx @@ -1,9 +1,10 @@ +import { getSessionCookieById } from "@/lib/cookies"; +import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings, getSession, sessionService } from "@/lib/zitadel"; import Alert from "@/ui/Alert"; import DynamicTheme from "@/ui/DynamicTheme"; import LoginPasskey from "@/ui/LoginPasskey"; import UserAvatar from "@/ui/UserAvatar"; -import { getSessionCookieById, loadMostRecentSession } from "@zitadel/next"; export default async function Page({ searchParams, diff --git a/apps/login/src/app/(login)/u2f/set/page.tsx b/apps/login/src/app/(login)/u2f/set/page.tsx index 8fcd5c0ed26..9530bf206fb 100644 --- a/apps/login/src/app/(login)/u2f/set/page.tsx +++ b/apps/login/src/app/(login)/u2f/set/page.tsx @@ -1,9 +1,9 @@ +import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings, sessionService } from "@/lib/zitadel"; import Alert from "@/ui/Alert"; import DynamicTheme from "@/ui/DynamicTheme"; import RegisterU2F from "@/ui/RegisterU2F"; import UserAvatar from "@/ui/UserAvatar"; -import { loadMostRecentSession } from "@zitadel/next"; export default async function Page({ searchParams, diff --git a/apps/login/src/app/login/route.ts b/apps/login/src/app/login/route.ts index 5b992cbebe6..92c5d0f1238 100644 --- a/apps/login/src/app/login/route.ts +++ b/apps/login/src/app/login/route.ts @@ -15,7 +15,6 @@ import { listSessions, startIdentityProviderFlow, } from "@/lib/zitadel"; -import { getAllSessions } from "@zitadel/next"; import { NextRequest, NextResponse } from "next/server"; import { Session } from "@zitadel/proto/zitadel/session/v2/session_pb"; import { @@ -25,6 +24,7 @@ import { import { IdentityProviderType } from "@zitadel/proto/zitadel/settings/v2/login_settings_pb"; import { idpTypeToSlug } from "@/lib/idp"; import { create } from "@zitadel/client"; +import { getAllSessions } from "@/lib/cookies"; async function loadSessions(ids: string[]): Promise { const response = await listSessions( diff --git a/apps/login/src/app/sessions/route.ts b/apps/login/src/app/sessions/route.ts index 062a5696dfc..9f7655664d6 100644 --- a/apps/login/src/app/sessions/route.ts +++ b/apps/login/src/app/sessions/route.ts @@ -1,5 +1,5 @@ +import { getAllSessions } from "@/lib/cookies"; import { listSessions } from "@/lib/zitadel"; -import { getAllSessions } from "@zitadel/next"; import { Session } from "@zitadel/proto/zitadel/session/v2/session_pb"; import { NextRequest, NextResponse } from "next/server"; diff --git a/packages/zitadel-next/src/utils/cookies.ts b/apps/login/src/lib/cookies.ts similarity index 100% rename from packages/zitadel-next/src/utils/cookies.ts rename to apps/login/src/lib/cookies.ts diff --git a/apps/login/src/lib/server-actions.ts b/apps/login/src/lib/server-actions.ts index b806f94e4d6..39f61c30b76 100644 --- a/apps/login/src/lib/server-actions.ts +++ b/apps/login/src/lib/server-actions.ts @@ -1,6 +1,6 @@ "use server"; -import { loadMostRecentSession } from "@zitadel/next"; +import { loadMostRecentSession } from "./session"; import { sessionService, verifyTOTPRegistration } from "./zitadel"; export async function verifyTOTP( diff --git a/apps/login/src/lib/server/otp.ts b/apps/login/src/lib/server/otp.ts index 12410c1f6a0..6c3c28292ce 100644 --- a/apps/login/src/lib/server/otp.ts +++ b/apps/login/src/lib/server/otp.ts @@ -1,18 +1,17 @@ "use server"; -import { - getMostRecentSessionCookie, - getSessionCookieById, - getSessionCookieByLoginName, -} from "@zitadel/next"; import { setSessionAndUpdateCookie } from "@/utils/session"; -import { NextRequest, NextResponse } from "next/server"; import { CheckOTPSchema, ChecksSchema, CheckTOTPSchema, } from "@zitadel/proto/zitadel/session/v2/session_service_pb"; import { create } from "@zitadel/client"; +import { + getMostRecentSessionCookie, + getSessionCookieById, + getSessionCookieByLoginName, +} from "../cookies"; export type SetOTPCommand = { loginName?: string; diff --git a/apps/login/src/lib/server/passkeys.ts b/apps/login/src/lib/server/passkeys.ts index 6fa64899f21..88d82f6d07a 100644 --- a/apps/login/src/lib/server/passkeys.ts +++ b/apps/login/src/lib/server/passkeys.ts @@ -6,12 +6,12 @@ import { registerPasskey, verifyPasskeyRegistration, } from "@/lib/zitadel"; -import { getSessionCookieById } from "@zitadel/next"; import { userAgent } from "next/server"; import { create } from "@zitadel/client"; import { VerifyPasskeyRegistrationRequestSchema } from "@zitadel/proto/zitadel/user/v2/user_service_pb"; import { headers } from "next/headers"; import { RegisterPasskeyResponse } from "@zitadel/proto/zitadel/user/v2/user_service_pb"; +import { getSessionCookieById } from "../cookies"; type VerifyPasskeyCommand = { passkeyId: string; diff --git a/apps/login/src/lib/server/session.ts b/apps/login/src/lib/server/session.ts index 811708b5268..b3f490ef1a5 100644 --- a/apps/login/src/lib/server/session.ts +++ b/apps/login/src/lib/server/session.ts @@ -6,12 +6,6 @@ import { getUserByID, listAuthenticationMethodTypes, } from "@/lib/zitadel"; -import { - getMostRecentSessionCookie, - getSessionCookieById, - getSessionCookieByLoginName, - removeSessionFromCookie, -} from "@zitadel/next"; import { createSessionAndUpdateCookie, createSessionForIdpAndUpdateCookie, @@ -24,6 +18,12 @@ import { RequestChallengesSchema, } from "@zitadel/proto/zitadel/session/v2/challenge_pb"; import { create } from "@zitadel/client"; +import { + getMostRecentSessionCookie, + getSessionCookieById, + getSessionCookieByLoginName, + removeSessionFromCookie, +} from "../cookies"; type CreateNewSessionCommand = { userId: string; diff --git a/apps/login/src/lib/server/u2f.ts b/apps/login/src/lib/server/u2f.ts index 8aa4d8f04e1..01ddab6cbe8 100644 --- a/apps/login/src/lib/server/u2f.ts +++ b/apps/login/src/lib/server/u2f.ts @@ -1,11 +1,11 @@ "use server"; import { getSession, registerU2F, verifyU2FRegistration } from "@/lib/zitadel"; -import { getSessionCookieById } from "@zitadel/next"; import { userAgent } from "next/server"; import { VerifyU2FRegistrationRequestSchema } from "@zitadel/proto/zitadel/user/v2/user_service_pb"; import { create } from "@zitadel/client"; import { headers } from "next/headers"; +import { getSessionCookieById } from "../cookies"; type RegisterU2FCommand = { sessionId: string; diff --git a/packages/zitadel-next/src/utils/session.ts b/apps/login/src/lib/session.ts similarity index 100% rename from packages/zitadel-next/src/utils/session.ts rename to apps/login/src/lib/session.ts diff --git a/apps/login/src/styles/globals.scss b/apps/login/src/styles/globals.scss index bb028d1db6f..662e4743aae 100755 --- a/apps/login/src/styles/globals.scss +++ b/apps/login/src/styles/globals.scss @@ -1,5 +1,4 @@ // include styles from the ui package -@import "@zitadel/react/styles.css"; @import "./vars.scss"; @tailwind base; diff --git a/apps/login/src/ui/DynamicTheme.tsx b/apps/login/src/ui/DynamicTheme.tsx index 10e3b736f11..89cfde9fbec 100644 --- a/apps/login/src/ui/DynamicTheme.tsx +++ b/apps/login/src/ui/DynamicTheme.tsx @@ -3,7 +3,6 @@ import React from "react"; import { Logo } from "@/ui/Logo"; import ThemeWrapper from "./ThemeWrapper"; -import { LayoutProviders } from "./LayoutProviders"; import { BrandingSettings } from "@zitadel/proto/zitadel/settings/v2/branding_settings_pb"; export default function DynamicTheme({ @@ -15,29 +14,25 @@ export default function DynamicTheme({ }) { return ( - {/* */} - -
-
-
-
- {branding && ( - - )} -
- -
{children}
-
+
+
+
+
+ {branding && ( + + )}
+ +
{children}
+
- - {/* */} +
); } diff --git a/apps/login/src/ui/LayoutProviders.tsx b/apps/login/src/ui/LayoutProviders.tsx index 4c877593765..319ba1ef89e 100644 --- a/apps/login/src/ui/LayoutProviders.tsx +++ b/apps/login/src/ui/LayoutProviders.tsx @@ -1,6 +1,5 @@ "use client"; -import { ZitadelReactProvider } from "@zitadel/react"; import { useTheme } from "next-themes"; type Props = { @@ -12,8 +11,6 @@ export function LayoutProviders({ children }: Props) { const isDark = resolvedTheme === "dark"; return ( -
- {children} -
+
{children}
); } diff --git a/apps/login/src/ui/SignInWithIDP.tsx b/apps/login/src/ui/SignInWithIDP.tsx index dd555331d7d..fc00d34ab19 100644 --- a/apps/login/src/ui/SignInWithIDP.tsx +++ b/apps/login/src/ui/SignInWithIDP.tsx @@ -1,18 +1,16 @@ "use client"; import { ReactNode, useState } from "react"; -import { - SignInWithGitlab, - SignInWithAzureAD, - SignInWithGoogle, - SignInWithGithub, -} from "@zitadel/react"; import { useRouter } from "next/navigation"; import Alert from "./Alert"; import { IdentityProvider } from "@zitadel/proto/zitadel/settings/v2/login_settings_pb"; import { idpTypeToSlug } from "@/lib/idp"; import { IdentityProviderType } from "@zitadel/proto/zitadel/settings/v2/login_settings_pb"; import { startIDPFlow } from "@/lib/server/idp"; +import { SignInWithGithub } from "./idps/SignInWithGithub"; +import { SignInWithAzureAD } from "./idps/SignInWithAzureAD"; +import { SignInWithGoogle } from "./idps/SignInWithGoogle"; +import { SignInWithGitlab } from "./idps/SignInWithGitlab"; export interface SignInWithIDPProps { children?: ReactNode; diff --git a/apps/login/src/ui/idps/SignInWithAzureAD.tsx b/apps/login/src/ui/idps/SignInWithAzureAD.tsx new file mode 100644 index 00000000000..38f1b55b109 --- /dev/null +++ b/apps/login/src/ui/idps/SignInWithAzureAD.tsx @@ -0,0 +1,40 @@ +"use client"; + +import { ReactNode, forwardRef } from "react"; +import { IdpButtonClasses, SignInWithIdentityProviderProps } from "./classes"; + +export const SignInWithAzureAD = forwardRef< + HTMLButtonElement, + SignInWithIdentityProviderProps +>( + ({ children, className = "", name = "", ...props }, ref): ReactNode => ( + + ), +); + +SignInWithAzureAD.displayName = "SignInWithAzureAD"; diff --git a/packages/zitadel-react/src/components/SignInWithGithub.tsx b/apps/login/src/ui/idps/SignInWithGithub.tsx similarity index 81% rename from packages/zitadel-react/src/components/SignInWithGithub.tsx rename to apps/login/src/ui/idps/SignInWithGithub.tsx index 435459def55..c0d1130b60c 100644 --- a/packages/zitadel-react/src/components/SignInWithGithub.tsx +++ b/apps/login/src/ui/idps/SignInWithGithub.tsx @@ -1,20 +1,27 @@ "use client"; import { ReactNode, forwardRef } from "react"; -import { SignInWithIdentityProviderProps } from "./SignInWith"; -import { IdpButtonClasses } from "./classes"; +import { IdpButtonClasses, SignInWithIdentityProviderProps } from "./classes"; -export const SignInWithGithub = forwardRef( +export const SignInWithGithub = forwardRef< + HTMLButtonElement, + SignInWithIdentityProviderProps +>( ({ children, className = "", name = "", ...props }, ref): ReactNode => ( - ), ); diff --git a/packages/zitadel-react/src/components/SignInWithGitlab.test.tsx b/apps/login/src/ui/idps/SignInWithGitlab.test.tsx similarity index 100% rename from packages/zitadel-react/src/components/SignInWithGitlab.test.tsx rename to apps/login/src/ui/idps/SignInWithGitlab.test.tsx diff --git a/packages/zitadel-react/src/components/SignInWithGitlab.tsx b/apps/login/src/ui/idps/SignInWithGitlab.tsx similarity index 64% rename from packages/zitadel-react/src/components/SignInWithGitlab.tsx rename to apps/login/src/ui/idps/SignInWithGitlab.tsx index ffb1d09c49c..4fcd5bf0496 100644 --- a/packages/zitadel-react/src/components/SignInWithGitlab.tsx +++ b/apps/login/src/ui/idps/SignInWithGitlab.tsx @@ -1,12 +1,26 @@ -import { ReactNode, forwardRef } from "react"; -import { SignInWithIdentityProviderProps } from "./SignInWith"; -import { IdpButtonClasses } from "./classes"; +"use client"; -export const SignInWithGitlab = forwardRef( +import { ReactNode, forwardRef } from "react"; +import { IdpButtonClasses, SignInWithIdentityProviderProps } from "./classes"; + +export const SignInWithGitlab = forwardRef< + HTMLButtonElement, + SignInWithIdentityProviderProps +>( ({ children, className = "", name = "", ...props }, ref): ReactNode => ( - ), ); diff --git a/packages/zitadel-react/src/components/SignInWithGoogle.test.tsx b/apps/login/src/ui/idps/SignInWithGoogle.test.tsx similarity index 100% rename from packages/zitadel-react/src/components/SignInWithGoogle.test.tsx rename to apps/login/src/ui/idps/SignInWithGoogle.test.tsx diff --git a/packages/zitadel-react/src/components/SignInWithGoogle.tsx b/apps/login/src/ui/idps/SignInWithGoogle.tsx similarity index 77% rename from packages/zitadel-react/src/components/SignInWithGoogle.tsx rename to apps/login/src/ui/idps/SignInWithGoogle.tsx index af2dc40d26d..94caa3759aa 100644 --- a/packages/zitadel-react/src/components/SignInWithGoogle.tsx +++ b/apps/login/src/ui/idps/SignInWithGoogle.tsx @@ -1,12 +1,26 @@ -import { ReactNode, forwardRef } from "react"; -import { SignInWithIdentityProviderProps } from "./SignInWith"; -import { IdpButtonClasses } from "./classes"; +"use client"; -export const SignInWithGoogle = forwardRef( +import { ReactNode, forwardRef } from "react"; +import { IdpButtonClasses, SignInWithIdentityProviderProps } from "./classes"; + +export const SignInWithGoogle = forwardRef< + HTMLButtonElement, + SignInWithIdentityProviderProps +>( ({ children, className = "", name = "", ...props }, ref): ReactNode => ( - ), ); diff --git a/apps/login/src/ui/idps/classes.tsx b/apps/login/src/ui/idps/classes.tsx new file mode 100644 index 00000000000..f0bf32c1ed3 --- /dev/null +++ b/apps/login/src/ui/idps/classes.tsx @@ -0,0 +1,17 @@ +import { ButtonHTMLAttributes, DetailedHTMLProps } from "react"; + +export const IdpButtonClasses = + "transition-all w-full cursor-pointer flex flex-row items-center bg-background-light-400 text-text-light-500 dark:bg-background-dark-500 dark:text-text-dark-500 border border-divider-light hover:border-black dark:border-divider-dark hover:dark:border-white focus:border-primary-light-500 focus:dark:border-primary-dark-500 outline-none rounded-md px-4 text-sm"; + +export interface SignInWithIDPProps { + children?: React.ReactNode; + orgId?: string; +} + +export type SignInWithIdentityProviderProps = DetailedHTMLProps< + ButtonHTMLAttributes, + HTMLButtonElement +> & { + name?: string; + e2e?: string; +}; diff --git a/apps/login/src/utils/session.ts b/apps/login/src/utils/session.ts index a192b758392..2d4e9f52b3b 100644 --- a/apps/login/src/utils/session.ts +++ b/apps/login/src/utils/session.ts @@ -6,7 +6,6 @@ import { getSession, setSession, } from "@/lib/zitadel"; -import { addSessionToCookie, updateSessionCookie } from "@zitadel/next"; import { Challenges, RequestChallenges, @@ -18,6 +17,7 @@ import { } from "@zitadel/proto/zitadel/session/v2/session_service_pb"; import { timestampDate, toDate } from "@zitadel/client"; import { create } from "@zitadel/client"; +import { addSessionToCookie, updateSessionCookie } from "@/lib/cookies"; type CustomCookieData = { id: string; diff --git a/apps/login/turbo.json b/apps/login/turbo.json index 20ad9b2492a..8d03cac2be2 100644 --- a/apps/login/turbo.json +++ b/apps/login/turbo.json @@ -6,36 +6,16 @@ "dependsOn": ["^build"] }, "test": { - "dependsOn": [ - "@zitadel/node#build", - "@zitadel/client#build", - "@zitadel/react#build", - "@zitadel/next#build" - ] + "dependsOn": ["@zitadel/node#build", "@zitadel/client#build"] }, "test:integration": { - "dependsOn": [ - "@zitadel/node#build", - "@zitadel/client#build", - "@zitadel/react#build", - "@zitadel/next#build" - ] + "dependsOn": ["@zitadel/node#build", "@zitadel/client#build"] }, "test:unit": { - "dependsOn": [ - "@zitadel/node#build", - "@zitadel/client#build", - "@zitadel/react#build", - "@zitadel/next#build" - ] + "dependsOn": ["@zitadel/node#build", "@zitadel/client#build"] }, "test:watch": { - "dependsOn": [ - "@zitadel/node#build", - "@zitadel/client#build", - "@zitadel/react#build", - "@zitadel/next#build" - ] + "dependsOn": ["@zitadel/node#build", "@zitadel/client#build"] } } } diff --git a/packages/zitadel-next/.eslintrc.cjs b/packages/zitadel-next/.eslintrc.cjs deleted file mode 100644 index 8e247ab3c27..00000000000 --- a/packages/zitadel-next/.eslintrc.cjs +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ["zitadel"], -}; diff --git a/packages/zitadel-next/package.json b/packages/zitadel-next/package.json deleted file mode 100644 index 4bd3b413731..00000000000 --- a/packages/zitadel-next/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "@zitadel/next", - "version": "0.0.0", - "sideEffects": false, - "license": "MIT", - "type": "module", - "exports": { - ".": { - "import": "./dist/index.js", - "types": "./dist/index.d.ts" - } - }, - "files": [ - "dist/**" - ], - "publishConfig": { - "access": "public" - }, - "scripts": { - "build": "tsup", - "test": "pnpm test:unit", - "test:watch": "pnpm test:unit:watch", - "test:unit": "vitest", - "test:unit:watch": "vitest --watch", - "dev": "tsup --watch", - "lint": "eslint \"src/**/*.ts*\"", - "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist" - }, - "peerDependencies": { - "@zitadel/node": "workspace:*", - "@zitadel/react": "workspace:*", - "@zitadel/client": "workspace:*", - "@zitadel/proto": "workspace:*", - "next": "^14.2.5", - "react": "^18.3.1" - }, - "dependencies": { - "next": "^14.2.5" - }, - "devDependencies": { - "@types/react": "^18.3.3", - "@zitadel/tsconfig": "workspace:*", - "eslint-config-zitadel": "workspace:*", - "postcss": "8.4.41", - "tailwindcss": "3.4.9", - "zitadel-tailwind-config": "workspace:*" - } -} diff --git a/packages/zitadel-next/postcss.config.cjs b/packages/zitadel-next/postcss.config.cjs deleted file mode 100644 index 07aa434b2bf..00000000000 --- a/packages/zitadel-next/postcss.config.cjs +++ /dev/null @@ -1,9 +0,0 @@ -// If you want to use other PostCSS plugins, see the following: -// https://tailwindcss.com/docs/using-with-preprocessors - -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/packages/zitadel-next/src/components/ZitadelNextProvider.tsx b/packages/zitadel-next/src/components/ZitadelNextProvider.tsx deleted file mode 100644 index 1ff78ee76e4..00000000000 --- a/packages/zitadel-next/src/components/ZitadelNextProvider.tsx +++ /dev/null @@ -1,8 +0,0 @@ -export type ZitadelNextProps = { - dark: boolean; - children: React.ReactNode; -}; - -export function ZitadelNextProvider({ dark, children }: ZitadelNextProps) { - return
{children}
; -} diff --git a/packages/zitadel-next/src/index.tsx b/packages/zitadel-next/src/index.tsx deleted file mode 100644 index 2ff89e0ddd2..00000000000 --- a/packages/zitadel-next/src/index.tsx +++ /dev/null @@ -1,5 +0,0 @@ -// import "./styles.css"; - -export { ZitadelNextProvider, type ZitadelNextProps } from "./components/ZitadelNextProvider"; -export * from "./utils/cookies"; -export { loadMostRecentSession } from "./utils/session"; diff --git a/packages/zitadel-next/src/styles.css b/packages/zitadel-next/src/styles.css deleted file mode 100644 index b5c61c95671..00000000000 --- a/packages/zitadel-next/src/styles.css +++ /dev/null @@ -1,3 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; diff --git a/packages/zitadel-next/tailwind.config.mjs b/packages/zitadel-next/tailwind.config.mjs deleted file mode 100644 index 666dc993a29..00000000000 --- a/packages/zitadel-next/tailwind.config.mjs +++ /dev/null @@ -1,9 +0,0 @@ -const sharedConfig = require("zitadel-tailwind-config/tailwind.config.mjs"); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - presets: [sharedConfig], - prefix: "ztdl-next-", - darkMode: "class", - content: [`src/**/*.{js,ts,jsx,tsx}`], -}; diff --git a/packages/zitadel-next/tsconfig.json b/packages/zitadel-next/tsconfig.json deleted file mode 100644 index 460eef71f56..00000000000 --- a/packages/zitadel-next/tsconfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "@zitadel/tsconfig/react-library.json", - "include": ["."], - "exclude": ["dist", "build", "node_modules"] -} diff --git a/packages/zitadel-next/tsup.config.ts b/packages/zitadel-next/tsup.config.ts deleted file mode 100644 index 8a2f312e51e..00000000000 --- a/packages/zitadel-next/tsup.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { defineConfig, Options } from "tsup"; - -export default defineConfig((options: Options) => ({ - treeshake: true, - splitting: true, - publicDir: true, - entry: ["src/**/*.tsx"], - format: ["esm"], - dts: true, - minify: true, - clean: true, - external: ["react"], - ...options, -})); diff --git a/packages/zitadel-next/turbo.json b/packages/zitadel-next/turbo.json deleted file mode 100644 index 3e82b759f92..00000000000 --- a/packages/zitadel-next/turbo.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": ["//"], - "tasks": { - "build": { - "outputs": ["dist/**"], - "dependsOn": ["@zitadel/client#build", "@zitadel/react#build"] - } - } -} diff --git a/packages/zitadel-react/.eslintrc.cjs b/packages/zitadel-react/.eslintrc.cjs deleted file mode 100644 index 8e247ab3c27..00000000000 --- a/packages/zitadel-react/.eslintrc.cjs +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: ["zitadel"], -}; diff --git a/packages/zitadel-react/README.md b/packages/zitadel-react/README.md deleted file mode 100644 index 0d2b62c8d6d..00000000000 --- a/packages/zitadel-react/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# How to use - -### Install - -```sh -npm install @zitadel/react -``` - -or - -```sh -yarn add @zitadel/react -``` - -### Import styles file - -To get the styles, import them in `_app.tsx` or global styling file - -``` -import "@zitadel/react/styles.css"; -``` - -### Setup Dark mode - -to set dark theme, wrap your components in a `ui-dark` class. - -### Use components - -```tsx -import { SignInWithGoogle } from "@zitadel/react"; - -export default function IdentityProviders() { - return ( -
- -
- ); -} -``` diff --git a/packages/zitadel-react/package.json b/packages/zitadel-react/package.json deleted file mode 100644 index 13924573939..00000000000 --- a/packages/zitadel-react/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "@zitadel/react", - "version": "0.0.0", - "types": "./dist/index.d.ts", - "sideEffects": [ - "**/*.css" - ], - "license": "MIT", - "exports": { - ".": { - "import": "./dist/index.mjs", - "require": "./dist/index.cjs" - }, - "./styles.css": "./dist/index.css", - "./assets/*": "./dist/assets/*" - }, - "publishConfig": { - "access": "public" - }, - "scripts": { - "build": "tsup", - "test": "pnpm test:unit", - "test:watch": "pnpm test:unit:watch", - "test:unit": "vitest", - "test:unit:watch": "vitest --watch", - "dev": "tsup --watch", - "lint": "eslint \"src/**/*.ts*\"", - "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist", - "copy-files": "cp -R ./src/public/ ./dist/" - }, - "peerDependencies": { - "react": "^18.3.1" - }, - "devDependencies": { - "@testing-library/jest-dom": "^6.4.5", - "@testing-library/react": "^16.0.0", - "@types/react": "^18.3.3", - "@types/react-dom": "^18.3.0", - "@zitadel/tsconfig": "workspace:*", - "autoprefixer": "10.4.20", - "eslint-config-zitadel": "workspace:*", - "jsdom": "^24.0.0", - "postcss": "8.4.41", - "sass": "^1.77.1", - "tailwindcss": "3.4.9", - "zitadel-tailwind-config": "workspace:*" - } -} diff --git a/packages/zitadel-react/postcss.config.cjs b/packages/zitadel-react/postcss.config.cjs deleted file mode 100644 index 07aa434b2bf..00000000000 --- a/packages/zitadel-react/postcss.config.cjs +++ /dev/null @@ -1,9 +0,0 @@ -// If you want to use other PostCSS plugins, see the following: -// https://tailwindcss.com/docs/using-with-preprocessors - -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/packages/zitadel-react/src/components/SignInWith.tsx b/packages/zitadel-react/src/components/SignInWith.tsx deleted file mode 100644 index 933d8577a5d..00000000000 --- a/packages/zitadel-react/src/components/SignInWith.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { ButtonHTMLAttributes, DetailedHTMLProps } from "react"; - -export type SignInWithIdentityProviderProps = DetailedHTMLProps< - ButtonHTMLAttributes, - HTMLButtonElement -> & { - name?: string; - e2e?: string; -}; diff --git a/packages/zitadel-react/src/components/SignInWithAzureAD.tsx b/packages/zitadel-react/src/components/SignInWithAzureAD.tsx deleted file mode 100644 index 38acc645912..00000000000 --- a/packages/zitadel-react/src/components/SignInWithAzureAD.tsx +++ /dev/null @@ -1,23 +0,0 @@ -"use client"; - -import { ReactNode, forwardRef } from "react"; -import { SignInWithIdentityProviderProps } from "./SignInWith"; -import { IdpButtonClasses } from "./classes"; - -export const SignInWithAzureAD = forwardRef( - ({ children, className = "", name = "", ...props }, ref): ReactNode => ( - - ), -); - -SignInWithAzureAD.displayName = "SignInWithAzureAD"; diff --git a/packages/zitadel-react/src/components/SignInWithIDP.tsx b/packages/zitadel-react/src/components/SignInWithIDP.tsx deleted file mode 100644 index eddcda928c2..00000000000 --- a/packages/zitadel-react/src/components/SignInWithIDP.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import * as React from "react"; - -export interface SignInWithIDPProps { - children?: React.ReactNode; - orgId?: string; -} - -export function SignInWithIDP(props: SignInWithIDPProps) { - return ( -
-
- {props.children} -
- ); -} - -SignInWithIDP.displayName = "SignInWithIDP"; diff --git a/packages/zitadel-react/src/components/ZitadelReactProvider.tsx b/packages/zitadel-react/src/components/ZitadelReactProvider.tsx deleted file mode 100644 index 34226e5b296..00000000000 --- a/packages/zitadel-react/src/components/ZitadelReactProvider.tsx +++ /dev/null @@ -1,8 +0,0 @@ -export type ZitadelReactProps = { - dark: boolean; - children: React.ReactNode; -}; - -export function ZitadelReactProvider({ dark, children }: ZitadelReactProps) { - return
{children}
; -} diff --git a/packages/zitadel-react/src/components/classes.ts b/packages/zitadel-react/src/components/classes.ts deleted file mode 100644 index 11216a561c4..00000000000 --- a/packages/zitadel-react/src/components/classes.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const IdpButtonClasses = - "transition-all ztdl-w-full ztdl-cursor-pointer ztdl-flex ztdl-flex-row ztdl-items-center bg-background-light-400 text-text-light-500 dark:bg-background-dark-500 dark:text-text-dark-500 border border-divider-light hover:border-black dark:border-divider-dark hover:dark:border-white focus:border-primary-light-500 focus:dark:border-primary-dark-500 outline-none rounded-md px-4 text-sm"; diff --git a/packages/zitadel-react/src/index.tsx b/packages/zitadel-react/src/index.tsx deleted file mode 100644 index e65655d6c8a..00000000000 --- a/packages/zitadel-react/src/index.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import "./styles.css"; - -export { SignInWithGoogle } from "./components/SignInWithGoogle"; - -export { SignInWithGitlab } from "./components/SignInWithGitlab"; - -export { SignInWithAzureAD } from "./components/SignInWithAzureAD"; - -export { SignInWithGithub } from "./components/SignInWithGithub"; - -export { ZitadelReactProvider, type ZitadelReactProps } from "./components/ZitadelReactProvider"; - -export { SignInWithIDP, type SignInWithIDPProps } from "./components/SignInWithIDP"; diff --git a/packages/zitadel-react/src/styles.css b/packages/zitadel-react/src/styles.css deleted file mode 100644 index b5c61c95671..00000000000 --- a/packages/zitadel-react/src/styles.css +++ /dev/null @@ -1,3 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; diff --git a/packages/zitadel-react/tailwind.config.mjs b/packages/zitadel-react/tailwind.config.mjs deleted file mode 100644 index 8f267f92747..00000000000 --- a/packages/zitadel-react/tailwind.config.mjs +++ /dev/null @@ -1,9 +0,0 @@ -const sharedConfig = require("zitadel-tailwind-config/tailwind.config.mjs"); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - presets: [sharedConfig], - prefix: "ztdl-", - darkMode: "class", - content: [`src/**/*.{js,ts,jsx,tsx}`], -}; diff --git a/packages/zitadel-react/tsconfig.json b/packages/zitadel-react/tsconfig.json deleted file mode 100644 index 2200a65a4b6..00000000000 --- a/packages/zitadel-react/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@zitadel/tsconfig/react-library.json", - "include": ["."], - "exclude": ["dist", "build", "node_modules"], - "compilerOptions": { - "types": ["@testing-library/jest-dom"] - } -} diff --git a/packages/zitadel-react/tsup.config.ts b/packages/zitadel-react/tsup.config.ts deleted file mode 100644 index 730147e6c14..00000000000 --- a/packages/zitadel-react/tsup.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { defineConfig, Options } from "tsup"; - -export default defineConfig((options: Options) => ({ - entry: ["src/index.tsx"], - format: ["esm", "cjs"], - dts: true, - external: ["react"], - ...options, -})); diff --git a/packages/zitadel-react/turbo.json b/packages/zitadel-react/turbo.json deleted file mode 100644 index 52e8c763f0a..00000000000 --- a/packages/zitadel-react/turbo.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": [ - "//" - ], - "tasks": { - "build": { - "outputs": [ - "dist/**" - ] - } - } -} diff --git a/packages/zitadel-react/vitest.config.mts b/packages/zitadel-react/vitest.config.mts deleted file mode 100644 index a0ee71ace87..00000000000 --- a/packages/zitadel-react/vitest.config.mts +++ /dev/null @@ -1,11 +0,0 @@ -import { defineConfig } from "vitest/config"; -import react from "@vitejs/plugin-react"; - -export default defineConfig({ - plugins: [react()], - test: { - include: ['src/**/*.test.ts', 'src/**/*.test.tsx'], - environment: "jsdom", - setupFiles: ["@testing-library/jest-dom/vitest"], - }, -}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 244d6526976..fce6beabbc5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,18 +62,12 @@ importers: '@zitadel/client': specifier: workspace:* version: link:../../packages/zitadel-client - '@zitadel/next': - specifier: workspace:* - version: link:../../packages/zitadel-next '@zitadel/node': specifier: workspace:* version: link:../../packages/zitadel-node '@zitadel/proto': specifier: workspace:* version: link:../../packages/zitadel-proto - '@zitadel/react': - specifier: workspace:* - version: link:../../packages/zitadel-react clsx: specifier: 1.2.1 version: 1.2.1 @@ -118,7 +112,7 @@ importers: specifier: ^6.4.5 version: 6.5.0 '@testing-library/react': - specifier: ^16.0.0 + specifier: ^16.0.1 version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@types/ms': specifier: 0.7.34 @@ -142,7 +136,7 @@ importers: specifier: 1.0.0 version: 1.0.0 '@zitadel/prettier-config': - specifier: workspace:* + specifier: workspace:^ version: link:../../packages/zitadel-prettier-config '@zitadel/tsconfig': specifier: workspace:* @@ -239,46 +233,6 @@ importers: specifier: workspace:* version: link:../eslint-config-zitadel - packages/zitadel-next: - dependencies: - '@zitadel/client': - specifier: workspace:* - version: link:../zitadel-client - '@zitadel/node': - specifier: workspace:* - version: link:../zitadel-node - '@zitadel/proto': - specifier: workspace:* - version: link:../zitadel-proto - '@zitadel/react': - specifier: workspace:* - version: link:../zitadel-react - next: - specifier: ^14.2.5 - version: 14.2.5(@babel/core@7.25.2)(react-dom@18.3.1)(react@18.3.1)(sass@1.77.8) - react: - specifier: ^18.3.1 - version: 18.3.1 - devDependencies: - '@types/react': - specifier: ^18.3.3 - version: 18.3.3 - '@zitadel/tsconfig': - specifier: workspace:* - version: link:../zitadel-tsconfig - eslint-config-zitadel: - specifier: workspace:* - version: link:../eslint-config-zitadel - postcss: - specifier: 8.4.41 - version: 8.4.41 - tailwindcss: - specifier: 3.4.9 - version: 3.4.9 - zitadel-tailwind-config: - specifier: workspace:* - version: link:../zitadel-tailwind-config - packages/zitadel-node: dependencies: '@connectrpc/connect-node': @@ -316,49 +270,6 @@ importers: specifier: ^1.36.0 version: 1.39.0 - packages/zitadel-react: - dependencies: - react: - specifier: ^18.3.1 - version: 18.3.1 - devDependencies: - '@testing-library/jest-dom': - specifier: ^6.4.5 - version: 6.5.0 - '@testing-library/react': - specifier: ^16.0.0 - version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) - '@types/react': - specifier: ^18.3.3 - version: 18.3.3 - '@types/react-dom': - specifier: ^18.3.0 - version: 18.3.0 - '@zitadel/tsconfig': - specifier: workspace:* - version: link:../zitadel-tsconfig - autoprefixer: - specifier: 10.4.20 - version: 10.4.20(postcss@8.4.41) - eslint-config-zitadel: - specifier: workspace:* - version: link:../eslint-config-zitadel - jsdom: - specifier: ^24.0.0 - version: 24.1.3 - postcss: - specifier: 8.4.41 - version: 8.4.41 - sass: - specifier: ^1.77.1 - version: 1.77.8 - tailwindcss: - specifier: 3.4.9 - version: 3.4.9 - zitadel-tailwind-config: - specifier: workspace:* - version: link:../zitadel-tailwind-config - packages/zitadel-tailwind-config: devDependencies: '@tailwindcss/forms': @@ -2189,15 +2100,6 @@ packages: - supports-color dev: true - /agent-base@7.1.1: - resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} - engines: {node: '>= 14'} - dependencies: - debug: 4.3.6(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: true - /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -2914,13 +2816,6 @@ packages: engines: {node: '>=4'} hasBin: true - /cssstyle@4.0.1: - resolution: {integrity: sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==} - engines: {node: '>=18'} - dependencies: - rrweb-cssom: 0.6.0 - dev: true - /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} dev: true @@ -2986,14 +2881,6 @@ packages: assert-plus: 1.0.0 dev: true - /data-urls@5.0.0: - resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} - engines: {node: '>=18'} - dependencies: - whatwg-mimetype: 4.0.0 - whatwg-url: 14.0.0 - dev: true - /data-view-buffer@1.0.1: resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} engines: {node: '>= 0.4'} @@ -3086,10 +2973,6 @@ packages: engines: {node: '>=10'} dev: true - /decimal.js@10.4.3: - resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - dev: true - /deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -3285,11 +3168,6 @@ packages: strip-ansi: 6.0.1 dev: true - /entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - dev: true - /env-cmd@10.1.0: resolution: {integrity: sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==} engines: {node: '>=8.0.0'} @@ -4400,23 +4278,6 @@ packages: lru-cache: 6.0.0 dev: true - /html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} - dependencies: - whatwg-encoding: 3.1.1 - dev: true - - /http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.1 - debug: 4.3.6(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: true - /http-signature@1.3.6: resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==} engines: {node: '>=0.10'} @@ -4436,16 +4297,6 @@ packages: - supports-color dev: true - /https-proxy-agent@7.0.5: - resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.1 - debug: 4.3.6(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: true - /human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} dev: true @@ -4472,13 +4323,6 @@ packages: safer-buffer: 2.1.2 dev: true - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: true - /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true @@ -4711,10 +4555,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: true - /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -4887,42 +4727,6 @@ packages: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} dev: true - /jsdom@24.1.3: - resolution: {integrity: sha512-MyL55p3Ut3cXbeBEG7Hcv0mVM8pp8PBNWxRqchZnSfAiES1v1mRnMeFfaHWIPULpwsYfvO+ZmMZz5tGCnjzDUQ==} - engines: {node: '>=18'} - peerDependencies: - canvas: ^2.11.2 - peerDependenciesMeta: - canvas: - optional: true - dependencies: - cssstyle: 4.0.1 - data-urls: 5.0.0 - decimal.js: 10.4.3 - form-data: 4.0.0 - html-encoding-sniffer: 4.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.5 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.12 - parse5: 7.1.2 - rrweb-cssom: 0.7.1 - saxes: 6.0.0 - symbol-tree: 3.2.4 - tough-cookie: 4.1.4 - w3c-xmlserializer: 5.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 3.1.1 - whatwg-mimetype: 4.0.0 - whatwg-url: 14.0.0 - ws: 8.18.0 - xml-name-validator: 5.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} @@ -5562,10 +5366,6 @@ packages: set-blocking: 2.0.0 dev: true - /nwsapi@2.2.12: - resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} - dev: true - /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -5764,12 +5564,6 @@ packages: lines-and-columns: 1.2.4 dev: true - /parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} - dependencies: - entities: 4.5.0 - dev: true - /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -6395,14 +6189,6 @@ packages: fsevents: 2.3.3 dev: true - /rrweb-cssom@0.6.0: - resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} - dev: true - - /rrweb-cssom@0.7.1: - resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} - dev: true - /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -6450,13 +6236,6 @@ packages: immutable: 4.3.7 source-map-js: 1.2.0 - /saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} - dependencies: - xmlchars: 2.2.0 - dev: true - /scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} dependencies: @@ -6912,10 +6691,6 @@ packages: use-sync-external-store: 1.2.2(react@18.3.1) dev: false - /symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - dev: true - /tailwindcss@3.4.9: resolution: {integrity: sha512-1SEOvRr6sSdV5IDf9iC+NU4dhwdqzF4zKKq3sAbasUWHEM6lsMhX+eNN5gkPx1BvLFEnZQEUFbXnGj8Qlp83Pg==} engines: {node: '>=14.0.0'} @@ -7064,13 +6839,6 @@ packages: punycode: 2.3.1 dev: true - /tr46@5.0.0: - resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} - engines: {node: '>=18'} - dependencies: - punycode: 2.3.1 - dev: true - /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -7556,13 +7324,6 @@ packages: - terser dev: true - /w3c-xmlserializer@5.0.0: - resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} - engines: {node: '>=18'} - dependencies: - xml-name-validator: 5.0.0 - dev: true - /wait-on@7.2.0(debug@4.3.6): resolution: {integrity: sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==} engines: {node: '>=12.0.0'} @@ -7585,31 +7346,6 @@ packages: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true - /webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - dev: true - - /whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - dependencies: - iconv-lite: 0.6.3 - dev: true - - /whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - dev: true - - /whatwg-url@14.0.0: - resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} - engines: {node: '>=18'} - dependencies: - tr46: 5.0.0 - webidl-conversions: 7.0.0 - dev: true - /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -7752,28 +7488,6 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - - /xml-name-validator@5.0.0: - resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} - engines: {node: '>=18'} - dev: true - - /xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - dev: true - /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'}