diff --git a/apps/login/src/app/(login)/accounts/page.tsx b/apps/login/src/app/(login)/accounts/page.tsx index 8ba2e32d89b..fc50d2846bf 100644 --- a/apps/login/src/app/(login)/accounts/page.tsx +++ b/apps/login/src/app/(login)/accounts/page.tsx @@ -1,7 +1,7 @@ +import { DynamicTheme } from "@/components/dynamic-theme"; +import { SessionsList } from "@/components/sessions-list"; import { getAllSessionCookieIds } from "@/lib/cookies"; import { getBrandingSettings, listSessions } from "@/lib/zitadel"; -import DynamicTheme from "@/ui/DynamicTheme"; -import SessionsList from "@/ui/SessionsList"; import { UserPlusIcon } from "@heroicons/react/24/outline"; import Link from "next/link"; diff --git a/apps/login/src/app/(login)/error.tsx b/apps/login/src/app/(login)/error.tsx index 47b2e505ce7..0053f6ed71a 100644 --- a/apps/login/src/app/(login)/error.tsx +++ b/apps/login/src/app/(login)/error.tsx @@ -1,11 +1,11 @@ "use client"; -import { Boundary } from "@/ui/Boundary"; -import { Button } from "@/ui/Button"; -import React from "react"; +import { Boundary } from "@/components/boundary"; +import { Button } from "@/components/button"; +import { useEffect } from "react"; export default function Error({ error, reset }: any) { - React.useEffect(() => { + useEffect(() => { console.log("logging error:", error); }, [error]); diff --git a/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx b/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx index 2be2c54b019..237feebecc3 100644 --- a/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx +++ b/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx @@ -1,5 +1,5 @@ +import { DynamicTheme } from "@/components/dynamic-theme"; import { getBrandingSettings } from "@/lib/zitadel"; -import DynamicTheme from "@/ui/DynamicTheme"; import { IdentityProviderType } from "@zitadel/proto/zitadel/settings/v2/login_settings_pb"; // This configuration shows the given name in the respective IDP button as fallback diff --git a/apps/login/src/app/(login)/idp/[provider]/success/page.tsx b/apps/login/src/app/(login)/idp/[provider]/success/page.tsx index e8c4f9a2cc2..1c8039def60 100644 --- a/apps/login/src/app/(login)/idp/[provider]/success/page.tsx +++ b/apps/login/src/app/(login)/idp/[provider]/success/page.tsx @@ -1,3 +1,6 @@ +import { Alert, AlertType } from "@/components/alert"; +import { DynamicTheme } from "@/components/dynamic-theme"; +import { IdpSignin } from "@/components/idp-signin"; import { idpTypeToIdentityProviderType, PROVIDER_MAPPING } from "@/lib/idp"; import { addIDPLink, @@ -7,9 +10,6 @@ import { listUsers, retrieveIDPIntent, } from "@/lib/zitadel"; -import Alert, { AlertType } from "@/ui/Alert"; -import DynamicTheme from "@/ui/DynamicTheme"; -import IdpSignin from "@/ui/IdpSignin"; import { AutoLinkingOption } from "@zitadel/proto/zitadel/idp/v2/idp_pb"; export default async function Page({ diff --git a/apps/login/src/app/(login)/idp/page.tsx b/apps/login/src/app/(login)/idp/page.tsx index a41fad781d7..8a2d65f380a 100644 --- a/apps/login/src/app/(login)/idp/page.tsx +++ b/apps/login/src/app/(login)/idp/page.tsx @@ -1,6 +1,6 @@ +import { DynamicTheme } from "@/components/dynamic-theme"; +import { SignInWithIdp } from "@/components/sign-in-with-idp"; import { getBrandingSettings, settingsService } from "@/lib/zitadel"; -import DynamicTheme from "@/ui/DynamicTheme"; -import { SignInWithIDP } from "@/ui/SignInWithIDP"; import { makeReqCtx } from "@zitadel/client/v2"; function getIdentityProviders(orgId?: string) { @@ -36,12 +36,12 @@ export default async function Page({

{identityProviders && ( - + > )} diff --git a/apps/login/src/app/(login)/loginname/page.tsx b/apps/login/src/app/(login)/loginname/page.tsx index 7c87474cd15..e1847cbcf83 100644 --- a/apps/login/src/app/(login)/loginname/page.tsx +++ b/apps/login/src/app/(login)/loginname/page.tsx @@ -1,12 +1,12 @@ +import { DynamicTheme } from "@/components/dynamic-theme"; +import { SignInWithIdp } from "@/components/sign-in-with-idp"; +import { UsernameForm } from "@/components/username-form"; import { getBrandingSettings, getLegalAndSupportSettings, getLoginSettings, settingsService, } from "@/lib/zitadel"; -import DynamicTheme from "@/ui/DynamicTheme"; -import { SignInWithIDP } from "@/ui/SignInWithIDP"; -import UsernameForm from "@/ui/UsernameForm"; import { makeReqCtx } from "@zitadel/client/v2"; function getIdentityProviders(orgId?: string) { @@ -52,12 +52,12 @@ export default async function Page({ allowRegister={!!loginSettings?.allowRegister} > {legal && identityProviders && process.env.ZITADEL_API_URL && ( - + > )} diff --git a/apps/login/src/app/(login)/me/change-password/page.tsx b/apps/login/src/app/(login)/me/change-password/page.tsx index febd9e0b995..d87f184ac99 100644 --- a/apps/login/src/app/(login)/me/change-password/page.tsx +++ b/apps/login/src/app/(login)/me/change-password/page.tsx @@ -1,13 +1,13 @@ +import { Alert } from "@/components/alert"; +import { ChangePasswordForm } from "@/components/change-password-form"; +import { DynamicTheme } from "@/components/dynamic-theme"; +import { UserAvatar } from "@/components/user-avatar"; import { getSessionCookieById } from "@/lib/cookies"; import { getBrandingSettings, getPasswordComplexitySettings, getSession, } from "@/lib/zitadel"; -import Alert from "@/ui/Alert"; -import ChangePasswordForm from "@/ui/ChangePasswordForm"; -import DynamicTheme from "@/ui/DynamicTheme"; -import UserAvatar from "@/ui/UserAvatar"; export default async function Page({ searchParams, diff --git a/apps/login/src/app/(login)/mfa/page.tsx b/apps/login/src/app/(login)/mfa/page.tsx index f469fbf38b3..4186311fd39 100644 --- a/apps/login/src/app/(login)/mfa/page.tsx +++ b/apps/login/src/app/(login)/mfa/page.tsx @@ -1,3 +1,8 @@ +import { Alert } from "@/components/alert"; +import { BackButton } from "@/components/back-button"; +import { ChooseSecondFactor } from "@/components/choose-second-factor"; +import { DynamicTheme } from "@/components/dynamic-theme"; +import { UserAvatar } from "@/components/user-avatar"; import { getSessionCookieById } from "@/lib/cookies"; import { loadMostRecentSession } from "@/lib/session"; import { @@ -5,11 +10,6 @@ import { getSession, listAuthenticationMethodTypes, } from "@/lib/zitadel"; -import Alert from "@/ui/Alert"; -import BackButton from "@/ui/BackButton"; -import ChooseSecondFactor from "@/ui/ChooseSecondFactor"; -import DynamicTheme from "@/ui/DynamicTheme"; -import UserAvatar from "@/ui/UserAvatar"; 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 1e1c13fc9a3..5696c724bd1 100644 --- a/apps/login/src/app/(login)/mfa/set/page.tsx +++ b/apps/login/src/app/(login)/mfa/set/page.tsx @@ -1,3 +1,8 @@ +import { Alert } from "@/components/alert"; +import { BackButton } from "@/components/back-button"; +import { ChooseSecondFactorToSetup } from "@/components/choose-second-factor-to-setup"; +import { DynamicTheme } from "@/components/dynamic-theme"; +import { UserAvatar } from "@/components/user-avatar"; import { getSessionCookieById } from "@/lib/cookies"; import { loadMostRecentSession } from "@/lib/session"; import { @@ -7,11 +12,6 @@ import { getUserByID, listAuthenticationMethodTypes, } from "@/lib/zitadel"; -import Alert from "@/ui/Alert"; -import BackButton from "@/ui/BackButton"; -import ChooseSecondFactorToSetup from "@/ui/ChooseSecondFactorToSetup"; -import DynamicTheme from "@/ui/DynamicTheme"; -import UserAvatar from "@/ui/UserAvatar"; import { Timestamp, timestampDate } from "@zitadel/client"; import { Session } from "@zitadel/proto/zitadel/session/v2/session_pb"; diff --git a/apps/login/src/app/(login)/otp/[method]/page.tsx b/apps/login/src/app/(login)/otp/[method]/page.tsx index 55af60f66bb..db1efa2a003 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 { Alert } from "@/components/alert"; +import { DynamicTheme } from "@/components/dynamic-theme"; +import { LoginOTP } from "@/components/login-otp"; +import { UserAvatar } from "@/components/user-avatar"; import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings } from "@/lib/zitadel"; -import Alert from "@/ui/Alert"; -import DynamicTheme from "@/ui/DynamicTheme"; -import LoginOTP from "@/ui/LoginOTP"; -import UserAvatar from "@/ui/UserAvatar"; 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 ee657c5737a..3e1b4dca8b4 100644 --- a/apps/login/src/app/(login)/otp/[method]/set/page.tsx +++ b/apps/login/src/app/(login)/otp/[method]/set/page.tsx @@ -1,3 +1,9 @@ +import { Alert } from "@/components/alert"; +import { BackButton } from "@/components/back-button"; +import { Button, ButtonVariants } from "@/components/button"; +import { DynamicTheme } from "@/components/dynamic-theme"; +import { TotpRegister } from "@/components/totp-register"; +import { UserAvatar } from "@/components/user-avatar"; import { loadMostRecentSession } from "@/lib/session"; import { addOTPEmail, @@ -5,12 +11,6 @@ import { getBrandingSettings, registerTOTP, } from "@/lib/zitadel"; -import Alert from "@/ui/Alert"; -import BackButton from "@/ui/BackButton"; -import { Button, ButtonVariants } from "@/ui/Button"; -import DynamicTheme from "@/ui/DynamicTheme"; -import TOTPRegister from "@/ui/TOTPRegister"; -import UserAvatar from "@/ui/UserAvatar"; import { RegisterTOTPResponse } from "@zitadel/proto/zitadel/user/v2/user_service_pb"; import Link from "next/link"; import { redirect } from "next/navigation"; @@ -129,7 +129,7 @@ export default async function Page({ Scan the QR Code or navigate to the URL manually.

- + >
{" "} ) : ( diff --git a/apps/login/src/app/(login)/passkey/page.tsx b/apps/login/src/app/(login)/passkey/page.tsx index eec5389f709..6cb3e43b84b 100644 --- a/apps/login/src/app/(login)/passkey/page.tsx +++ b/apps/login/src/app/(login)/passkey/page.tsx @@ -1,10 +1,10 @@ +import { Alert } from "@/components/alert"; +import { DynamicTheme } from "@/components/dynamic-theme"; +import { LoginPasskey } from "@/components/login-passkey"; +import { UserAvatar } from "@/components/user-avatar"; import { getSessionCookieById } from "@/lib/cookies"; import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings, getSession } from "@/lib/zitadel"; -import Alert from "@/ui/Alert"; -import DynamicTheme from "@/ui/DynamicTheme"; -import LoginPasskey from "@/ui/LoginPasskey"; -import UserAvatar from "@/ui/UserAvatar"; const title = "Authenticate with a passkey"; const description = diff --git a/apps/login/src/app/(login)/passkey/set/page.tsx b/apps/login/src/app/(login)/passkey/set/page.tsx index 15aaa6436a9..140f1d74e29 100644 --- a/apps/login/src/app/(login)/passkey/set/page.tsx +++ b/apps/login/src/app/(login)/passkey/set/page.tsx @@ -1,9 +1,9 @@ +import { Alert, AlertType } from "@/components/alert"; +import { DynamicTheme } from "@/components/dynamic-theme"; +import { RegisterPasskey } from "@/components/register-passkey"; +import { UserAvatar } from "@/components/user-avatar"; import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings } from "@/lib/zitadel"; -import Alert, { AlertType } from "@/ui/Alert"; -import DynamicTheme from "@/ui/DynamicTheme"; -import RegisterPasskey from "@/ui/RegisterPasskey"; -import UserAvatar from "@/ui/UserAvatar"; export default async function Page({ searchParams, diff --git a/apps/login/src/app/(login)/password/page.tsx b/apps/login/src/app/(login)/password/page.tsx index 81e6ba240af..5da2bd6016a 100644 --- a/apps/login/src/app/(login)/password/page.tsx +++ b/apps/login/src/app/(login)/password/page.tsx @@ -1,9 +1,9 @@ +import { Alert } from "@/components/alert"; +import { DynamicTheme } from "@/components/dynamic-theme"; +import { PasswordForm } from "@/components/password-form"; +import { UserAvatar } from "@/components/user-avatar"; import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings, getLoginSettings } from "@/lib/zitadel"; -import Alert from "@/ui/Alert"; -import DynamicTheme from "@/ui/DynamicTheme"; -import PasswordForm from "@/ui/PasswordForm"; -import UserAvatar from "@/ui/UserAvatar"; import { PasskeysType } from "@zitadel/proto/zitadel/settings/v2/login_settings_pb"; export default async function Page({ diff --git a/apps/login/src/app/(login)/register/page.tsx b/apps/login/src/app/(login)/register/page.tsx index 700173e9dc7..ab8a8eddfba 100644 --- a/apps/login/src/app/(login)/register/page.tsx +++ b/apps/login/src/app/(login)/register/page.tsx @@ -1,11 +1,11 @@ +import { DynamicTheme } from "@/components/dynamic-theme"; +import { RegisterFormWithoutPassword } from "@/components/register-form-without-password"; +import { SetPasswordForm } from "@/components/set-password-form"; import { getBrandingSettings, getLegalAndSupportSettings, getPasswordComplexitySettings, } from "@/lib/zitadel"; -import DynamicTheme from "@/ui/DynamicTheme"; -import RegisterFormWithoutPassword from "@/ui/RegisterFormWithoutPassword"; -import SetPasswordForm from "@/ui/SetPasswordForm"; 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 13715c2c02f..da65d60eccb 100644 --- a/apps/login/src/app/(login)/signedin/page.tsx +++ b/apps/login/src/app/(login)/signedin/page.tsx @@ -1,8 +1,8 @@ +import { DynamicTheme } from "@/components/dynamic-theme"; +import { SelfServiceMenu } from "@/components/self-service-menu"; +import { UserAvatar } from "@/components/user-avatar"; import { getMostRecentCookieWithLoginname } from "@/lib/cookies"; import { createCallback, getBrandingSettings, getSession } from "@/lib/zitadel"; -import DynamicTheme from "@/ui/DynamicTheme"; -import SelfServiceMenu from "@/ui/SelfServiceMenu"; -import UserAvatar from "@/ui/UserAvatar"; import { create } from "@zitadel/client"; import { CreateCallbackRequestSchema, diff --git a/apps/login/src/app/(login)/u2f/page.tsx b/apps/login/src/app/(login)/u2f/page.tsx index 0390f1c50f8..77a1e6e9a25 100644 --- a/apps/login/src/app/(login)/u2f/page.tsx +++ b/apps/login/src/app/(login)/u2f/page.tsx @@ -1,10 +1,10 @@ +import { Alert } from "@/components/alert"; +import { DynamicTheme } from "@/components/dynamic-theme"; +import { LoginPasskey } from "@/components/login-passkey"; +import { UserAvatar } from "@/components/user-avatar"; import { getSessionCookieById } from "@/lib/cookies"; import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings, getSession } from "@/lib/zitadel"; -import Alert from "@/ui/Alert"; -import DynamicTheme from "@/ui/DynamicTheme"; -import LoginPasskey from "@/ui/LoginPasskey"; -import UserAvatar from "@/ui/UserAvatar"; 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 ccd99dcb1bf..97120424e1c 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 { Alert } from "@/components/alert"; +import { DynamicTheme } from "@/components/dynamic-theme"; +import { RegisterU2f } from "@/components/register-u2f"; +import { UserAvatar } from "@/components/user-avatar"; import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings } from "@/lib/zitadel"; -import Alert from "@/ui/Alert"; -import DynamicTheme from "@/ui/DynamicTheme"; -import RegisterU2F from "@/ui/RegisterU2F"; -import UserAvatar from "@/ui/UserAvatar"; export default async function Page({ searchParams, @@ -48,7 +48,7 @@ export default async function Page({ )} {sessionFactors?.id && ( - { const response = await listSessions( ids.filter((id: string | undefined) => !!id), diff --git a/apps/login/src/ui/AddressBar.tsx b/apps/login/src/components/address-bar.tsx similarity index 93% rename from apps/login/src/ui/AddressBar.tsx rename to apps/login/src/components/address-bar.tsx index e749bcb67a6..7e7bda6bd05 100644 --- a/apps/login/src/ui/AddressBar.tsx +++ b/apps/login/src/components/address-bar.tsx @@ -1,7 +1,7 @@ "use client"; import { usePathname } from "next/navigation"; -import React from "react"; +import { Fragment } from "react"; type Props = { domain: string; @@ -39,7 +39,7 @@ export function AddressBar({ domain }: Props) { .filter((s) => !!s) .map((segment) => { return ( - + / - + ); })} diff --git a/apps/login/src/ui/Alert.tsx b/apps/login/src/components/alert.tsx similarity index 88% rename from apps/login/src/ui/Alert.tsx rename to apps/login/src/components/alert.tsx index b6a093bab02..417e67934eb 100644 --- a/apps/login/src/ui/Alert.tsx +++ b/apps/login/src/components/alert.tsx @@ -2,10 +2,11 @@ import { ExclamationTriangleIcon, InformationCircleIcon, } from "@heroicons/react/24/outline"; -import clsx from "clsx"; +import { clsx } from "clsx"; +import { ReactNode } from "react"; type Props = { - children: React.ReactNode; + children: ReactNode; type?: AlertType; }; @@ -21,7 +22,7 @@ const red = const neutral = "border-divider-light dark:border-divider-dark bg-black/5 text-gray-600 dark:bg-white/10 dark:text-gray-200"; -export default function Alert({ children, type = AlertType.ALERT }: Props) { +export function Alert({ children, type = AlertType.ALERT }: Props) { return (
clsx( diff --git a/apps/login/src/ui/AuthenticationMethodRadio.tsx b/apps/login/src/components/authentication-method-radio.tsx similarity index 98% rename from apps/login/src/ui/AuthenticationMethodRadio.tsx rename to apps/login/src/components/authentication-method-radio.tsx index 1eb12ce6685..d5c52068ec7 100644 --- a/apps/login/src/ui/AuthenticationMethodRadio.tsx +++ b/apps/login/src/components/authentication-method-radio.tsx @@ -13,7 +13,7 @@ export const methods = [ }, ]; -export default function AuthenticationMethodRadio({ +export function AuthenticationMethodRadio({ selected, selectionChanged, }: { diff --git a/apps/login/src/ui/Avatar.tsx b/apps/login/src/components/avatar.tsx similarity index 97% rename from apps/login/src/ui/Avatar.tsx rename to apps/login/src/components/avatar.tsx index e42e6017af7..3f340e09b70 100644 --- a/apps/login/src/ui/Avatar.tsx +++ b/apps/login/src/components/avatar.tsx @@ -1,6 +1,6 @@ "use client"; -import { ColorShade, getColorHash } from "@/utils/colors"; +import { ColorShade, getColorHash } from "@/helpers/colors"; import { useTheme } from "next-themes"; import Image from "next/image"; diff --git a/apps/login/src/ui/BackButton.tsx b/apps/login/src/components/back-button.tsx similarity index 73% rename from apps/login/src/ui/BackButton.tsx rename to apps/login/src/components/back-button.tsx index b2f04ad5844..5697877bd58 100644 --- a/apps/login/src/ui/BackButton.tsx +++ b/apps/login/src/components/back-button.tsx @@ -1,9 +1,9 @@ "use client"; import { useRouter } from "next/navigation"; -import { Button, ButtonVariants } from "./Button"; +import { Button, ButtonVariants } from "./button"; -export default function BackButton() { +export function BackButton() { const router = useRouter(); return (