Spaces:
No application file
No application file
| /** | |
| * User Profile Store | |
| * Persists avatar, nickname & bio to localStorage | |
| */ | |
| import { create } from 'zustand'; | |
| import { persist } from 'zustand/middleware'; | |
| /** Predefined avatar options */ | |
| export const AVATAR_OPTIONS = [ | |
| '/avatars/user.png', | |
| '/avatars/teacher-2.png', | |
| '/avatars/assist-2.png', | |
| '/avatars/clown-2.png', | |
| '/avatars/curious-2.png', | |
| '/avatars/note-taker-2.png', | |
| '/avatars/thinker-2.png', | |
| ] as const; | |
| export interface UserProfileState { | |
| /** Local avatar path or data-URL (for custom uploads) */ | |
| avatar: string; | |
| nickname: string; | |
| bio: string; | |
| setAvatar: (avatar: string) => void; | |
| setNickname: (nickname: string) => void; | |
| setBio: (bio: string) => void; | |
| } | |
| export const useUserProfileStore = create<UserProfileState>()( | |
| persist( | |
| (set) => ({ | |
| avatar: AVATAR_OPTIONS[0], | |
| nickname: '', | |
| bio: '', | |
| setAvatar: (avatar) => set({ avatar }), | |
| setNickname: (nickname) => set({ nickname }), | |
| setBio: (bio) => set({ bio }), | |
| }), | |
| { | |
| name: 'user-profile-storage', | |
| }, | |
| ), | |
| ); | |