import { Copy, Pencil, Plus, Trash2, Upload } from 'lucide-react' import { motion } from 'motion/react' import { Button } from '@/components/ui/button' import { Menu, MenuContent, MenuItem, MenuTrigger } from '@/components/ui/menu' import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuTrigger, } from '@/components/ui/context-menu' import { defaultAvatarEyes } from '@/features/avatar/avatars' import { ExpressionPreview } from '@/features/avatar/components/ExpressionWorkspace' import { defaultExpression } from '@/features/avatar/presets' import type { StudioController } from '@/features/studio/useStudioController' export function AvatarPage({ controller }: { controller: StudioController }) { const { activateAvatar, activeAvatarId, avatarDragOrigin, avatarDragPreview, avatars, avatarsRef, cancelAvatarMove, commitAvatarMove, avatarImportRef, createNewAvatar, draggedAvatarId, draggingAvatarId, duplicateAvatar, expressions, prepareStudioProjectImport, previewAvatarMove, projectImportError, reduceMotion, setDeleteAvatarOpen, setDraggingAvatarId, setFocusAvatarName, t, } = controller return (
{t('Double-clic pour modifier')} {avatars.length}
{avatars.map(avatar => ( { avatarDragOrigin.current = avatarsRef.current avatarDragPreview.current = avatarsRef.current draggedAvatarId.current = avatar.id setDraggingAvatarId(avatar.id) event.dataTransfer.effectAllowed = 'move' }} onDragEnter={() => previewAvatarMove(avatar.id)} onDragOver={event => { event.preventDefault() event.dataTransfer.dropEffect = 'move' }} onDrop={event => { event.preventDefault() commitAvatarMove(avatar.id) }} onDragEnd={cancelAvatarMove} onClick={() => activateAvatar(avatar.id, false, true)} onDoubleClick={() => { setFocusAvatarName(false) activateAvatar(avatar.id, true) }} > {avatar.name} } /> { setFocusAvatarName(false) activateAvatar(avatar.id, true) }} > {t('Modifier')} duplicateAvatar(avatar)}> {t('Dupliquer')} { activateAvatar(avatar.id, false, true) setDeleteAvatarOpen(true) }} > {t('Supprimer')} ))} } /> {t('Nouvel avatar')} avatarImportRef.current?.click()}> {t('Importer un .avatar.json')} { prepareStudioProjectImport(event.currentTarget.files?.[0]) event.currentTarget.value = '' }} />
{projectImportError && (

{projectImportError}

)}
) }