"use client"; import { useOnboarding } from "@onboardjs/react"; import { useTheme } from "next-themes"; import { Button } from "@/components/ui/button"; import { cn } from "@/lib/utils"; import { authClient } from "@/lib/auth/auth-client"; import type { OnboardingAccountData } from "@/features/onboarding/types"; import { ThemeKey, ThemeSelector } from "@/components/common/theme-selector"; const AVATAR_COLORS = [ { name: "indigo", hex: "#4f46e5" }, { name: "violet", hex: "#7c3aed" }, { name: "rose", hex: "#e11d48" }, { name: "orange", hex: "#ea580c" }, { name: "amber", hex: "#d97706" }, { name: "emerald", hex: "#059669" }, { name: "cyan", hex: "#0891b2" }, { name: "zinc", hex: "#52525b" }, ]; export const StepPreferences = () => { const { next, updateContext, state } = useOnboarding(); const { theme: currentTheme, setTheme } = useTheme(); const preferences = state?.context.flowData.preferences ?? { theme: (currentTheme ?? "system") as ThemeKey, }; const account = state?.context.flowData.account as | OnboardingAccountData | undefined; const initials = account ? `${account.firstName[0] ?? ""}${account.lastName[0] ?? ""}`.toUpperCase() : "PB"; const selectedAvatarUrl = preferences.avatarUrl; const selectAvatar = async (color: string) => { const url = `/api/avatar?initials=${initials}&color=${encodeURIComponent(color)}`; await updateContext({ flowData: { ...state?.context.flowData, preferences: { ...preferences, avatarUrl: url }, }, }); }; const selectTheme = async (theme: ThemeKey) => { setTheme(theme); await authClient.updateUser({ theme }); await updateContext({ flowData: { ...state?.context.flowData, preferences: { ...preferences, theme }, }, }); }; const onContinue = async () => { if (selectedAvatarUrl) { await authClient.updateUser({ image: selectedAvatarUrl }); } await next(); }; return (

Your preferences

Optional — personalise your workspace.

Theme

Avatar

{AVATAR_COLORS.map((c) => { const url = `/api/avatar?initials=${initials}&color=${encodeURIComponent(c.hex)}`; const isSelected = selectedAvatarUrl === url; return ( ); })}
); };