370 lines
9.4 KiB
Markdown
370 lines
9.4 KiB
Markdown
# ✅ Atualizações: Ícone Câmera + Avatares Profissionais + Correção Upload
|
||
|
||
## 🔧 Correções Implementadas:
|
||
|
||
### 1️⃣ **Erro de Upload Corrigido** ✅
|
||
**Problema:** `Cannot read properties of undefined (reading 'getUrl')`
|
||
|
||
**Causa:**
|
||
- Tentativa de usar `client.storage.getUrl()` que não existe no cliente
|
||
- Era necessário obter a URL através do backend
|
||
|
||
**Solução:**
|
||
```typescript
|
||
// ANTES (com erro):
|
||
const urlFoto = await client.storage.getUrl(storageId);
|
||
|
||
// DEPOIS (funcionando):
|
||
await client.mutation(api.usuarios.atualizarPerfil, {
|
||
fotoPerfil: storageId,
|
||
avatar: undefined,
|
||
});
|
||
|
||
// Atualizar authStore para obter a URL
|
||
await authStore.refresh();
|
||
|
||
// Usar URL do authStore
|
||
if (authStore.usuario?.fotoPerfilUrl) {
|
||
fotoPerfilLocal = authStore.usuario.fotoPerfilUrl;
|
||
avatarLocal = null;
|
||
}
|
||
```
|
||
|
||
**Status:** ✅ Upload de foto agora funciona perfeitamente!
|
||
|
||
---
|
||
|
||
### 2️⃣ **Ícone da Câmera Atualizado** 📝
|
||
|
||
**Mudança:** Trocado de ícone de câmera fotográfica para ícone de **edição/lápis**
|
||
|
||
**Antes:**
|
||
```svelte
|
||
<!-- Ícone de câmera fotográfica -->
|
||
<svg>
|
||
<path d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22..." />
|
||
<path d="M15 13a3 3 0 11-6 0 3 3 0 016 0z" />
|
||
</svg>
|
||
```
|
||
|
||
**Depois:**
|
||
```svelte
|
||
<!-- Ícone de edição/lápis (mais moderno e intuitivo) -->
|
||
<svg class="h-5 w-5" stroke-width="2">
|
||
<path d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" />
|
||
</svg>
|
||
```
|
||
|
||
**Vantagens:**
|
||
- ✅ Mais intuitivo (edição em vez de foto)
|
||
- ✅ Mais moderno e clean
|
||
- ✅ Maior clareza de propósito
|
||
- ✅ Tamanho aumentado (h-5 w-5 em vez de h-4 w-4)
|
||
|
||
---
|
||
|
||
### 3️⃣ **Avatares Profissionais** 👔
|
||
|
||
**Mudança Completa da Galeria de Avatares**
|
||
|
||
#### **Estilos Atualizados:**
|
||
|
||
**ANTES (Casual/Divertido):**
|
||
- `adventurer` - Aventureiros felizes
|
||
- `big-smile` - Sorrisos grandes
|
||
- `fun-emoji` - Emojis divertidos
|
||
- `lorelei` - Estilo artístico
|
||
- `micah` - Personagens modernos
|
||
- `open-peeps` - Pessoas abertas
|
||
|
||
**DEPOIS (Profissional/Formal):**
|
||
- `avataaars-neutral` - Estilo corporativo neutro
|
||
- `bottts-neutral` - Robôs profissionais
|
||
- `personas` - Personas formais
|
||
- `notionists` - Estilo Notion (muito profissional)
|
||
- `initials` - Iniciais simples e elegantes
|
||
|
||
#### **Seeds/Nomes Atualizados:**
|
||
|
||
**ANTES (Nomes de Animais):**
|
||
```typescript
|
||
'Felix', 'Bandit', 'Bear', 'Buster', 'Cookie', 'Fluffy',
|
||
'Gizmo', 'Lucky', 'Midnight', 'Princess', 'Tiger', etc.
|
||
```
|
||
|
||
**DEPOIS (Nomes Profissionais Brasileiros):**
|
||
```typescript
|
||
// Masculinos:
|
||
'Alexandre', 'Bruno', 'Carlos', 'Daniel', 'Eduardo', 'Fernando',
|
||
'Gabriel', 'Henrique', 'Igor', 'João', 'Leonardo', 'Marcelo',
|
||
'Nicolas', 'Otávio', 'Paulo', 'Rafael', 'Rodrigo', 'Samuel',
|
||
'Thiago', 'Victor', 'William', 'Pedro', 'André', 'Diego'
|
||
|
||
// Femininos:
|
||
'Ana', 'Beatriz', 'Camila', 'Daniela', 'Eduarda', 'Fernanda',
|
||
'Gabriela', 'Helena', 'Isabela', 'Juliana', 'Larissa', 'Mariana',
|
||
'Natália', 'Olivia', 'Patricia', 'Rafaela', 'Sofia', 'Tatiana',
|
||
'Valentina', 'Yasmin', 'Carolina', 'Leticia', 'Amanda', 'Barbara'
|
||
```
|
||
|
||
#### **Cores Atualizadas:**
|
||
|
||
**ANTES (Colorido/Vibrante):**
|
||
```typescript
|
||
'b6e3f4', 'c0aede', 'd1d4f9', 'ffd5dc', 'ffdfbf',
|
||
'a8e6cf', 'dcedc1', 'ffd3b6', 'ffaaa5', 'ff8b94'
|
||
```
|
||
|
||
**DEPOIS (Neutro/Profissional):**
|
||
```typescript
|
||
// Tons pastéis neutros e elegantes
|
||
'E8EAF6', // Índigo claro
|
||
'F3E5F5', // Púrpura claro
|
||
'E1F5FE', // Azul claro
|
||
'E0F2F1', // Verde-água claro
|
||
'F1F8E9', // Verde claro
|
||
'FFF3E0', // Laranja claro
|
||
'FBE9E7', // Rosa claro
|
||
'EFEBE9', // Cinza quente
|
||
'ECEFF1', // Cinza azulado
|
||
'F5F5F5', // Cinza claro
|
||
'E3F2FD', // Azul muito claro
|
||
'E8F5E9', // Verde muito claro
|
||
'FFF9C4', // Amarelo claro
|
||
'FFE0B2', // Pêssego
|
||
'FFCCBC' // Coral claro
|
||
```
|
||
|
||
#### **Interface Atualizada:**
|
||
|
||
**ANTES:**
|
||
```
|
||
"Escolha um avatar feliz e colorido para seu perfil! 😊"
|
||
```
|
||
|
||
**DEPOIS:**
|
||
```
|
||
"Escolha um avatar profissional para seu perfil"
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 Comparação Visual:
|
||
|
||
### **Antes:**
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ 😊 😁 🙂 😃 😄 😊 😁 🙂 │
|
||
│ Avatares coloridos e divertidos │
|
||
│ Expressões animadas │
|
||
│ Cores vibrantes │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
### **Depois:**
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ 👔 👤 👔 👤 👔 👤 👔 👤 │
|
||
│ Avatares corporativos │
|
||
│ Estilo minimalista │
|
||
│ Cores neutras e elegantes │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 Benefícios das Mudanças:
|
||
|
||
### **Avatares Profissionais:**
|
||
- ✅ Adequado para ambiente corporativo/governamental
|
||
- ✅ Aparência séria e profissional
|
||
- ✅ Nomes reais brasileiros (facilita identificação)
|
||
- ✅ Cores neutras e elegantes
|
||
- ✅ Estilos minimalistas
|
||
- ✅ Diversidade de gênero equilibrada (24 masc. + 24 fem.)
|
||
|
||
### **Ícone de Edição:**
|
||
- ✅ Mais intuitivo que câmera
|
||
- ✅ Indica "editar perfil" claramente
|
||
- ✅ Moderno e profissional
|
||
- ✅ Maior visibilidade (tamanho aumentado)
|
||
|
||
### **Upload Corrigido:**
|
||
- ✅ Não apresenta mais erro
|
||
- ✅ Foto carrega corretamente
|
||
- ✅ Preview atualiza instantaneamente
|
||
- ✅ Toast de sucesso funciona
|
||
|
||
---
|
||
|
||
## 🔧 Detalhes Técnicos:
|
||
|
||
### **Arquivo: `apps/web/src/lib/utils/avatars.ts`**
|
||
|
||
**Variáveis alteradas:**
|
||
- `happySeeds` → `professionalSeeds`
|
||
- `backgroundColors` → `professionalColors`
|
||
- `friendlyStyles` → `professionalStyles`
|
||
|
||
**Função atualizada:**
|
||
```typescript
|
||
export function generateAvatarGallery(count: number = 48): Avatar[] {
|
||
const avatars: Avatar[] = [];
|
||
|
||
const professionalStyles = [
|
||
'avataaars-neutral',
|
||
'bottts-neutral',
|
||
'personas',
|
||
'notionists',
|
||
'initials',
|
||
];
|
||
|
||
for (let i = 0; i < count; i++) {
|
||
const style = professionalStyles[i % professionalStyles.length];
|
||
const seed = professionalSeeds[i % professionalSeeds.length];
|
||
const bgColor = professionalColors[i % professionalColors.length];
|
||
|
||
const url = `https://api.dicebear.com/7.x/${style}/svg?seed=${seed}&backgroundColor=${bgColor}&radius=50&size=200`;
|
||
|
||
avatars.push({
|
||
id: `avatar-${style}-${seed}-${i}`,
|
||
name: `${seed}`, // Apenas o nome, sem (estilo)
|
||
url,
|
||
seed,
|
||
style,
|
||
});
|
||
}
|
||
|
||
return avatars;
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 Como Testar:
|
||
|
||
### **Teste 1: Upload de Foto**
|
||
1. Login → Perfil
|
||
2. Hover sobre avatar → Clique no ícone de **lápis/edição** ✏️
|
||
3. Tab "Enviar Foto"
|
||
4. Selecione uma imagem
|
||
5. ✅ Upload deve funcionar sem erro
|
||
6. ✅ Foto deve aparecer instantaneamente
|
||
|
||
### **Teste 2: Avatares Profissionais**
|
||
1. Abra modal de edição
|
||
2. Tab "Escolher Avatar"
|
||
3. ✅ Veja avatares com estilo corporativo
|
||
4. ✅ Veja nomes profissionais (Alexandre, Ana, Bruno, etc.)
|
||
5. ✅ Veja cores neutras e elegantes
|
||
6. Selecione um avatar
|
||
7. ✅ Avatar deve aparecer instantaneamente
|
||
|
||
### **Teste 3: Ícone de Edição**
|
||
1. Vá ao perfil
|
||
2. Passe mouse sobre avatar
|
||
3. ✅ Ícone de lápis/edição aparece (não mais câmera)
|
||
4. ✅ Ícone é maior e mais visível
|
||
5. ✅ Dica "Clique para alterar" aparece
|
||
|
||
---
|
||
|
||
## 📁 Arquivos Modificados:
|
||
|
||
1. ✅ `apps/web/src/lib/utils/avatars.ts`
|
||
- Seeds profissionais
|
||
- Estilos corporativos
|
||
- Cores neutras
|
||
|
||
2. ✅ `apps/web/src/routes/(dashboard)/perfil/+page.svelte`
|
||
- Correção do upload (authStore.refresh())
|
||
- Ícone de edição/lápis
|
||
- Texto "avatar profissional"
|
||
|
||
---
|
||
|
||
## 🎨 Estilos de Avatares Disponíveis:
|
||
|
||
### 1. **Avataaars Neutral** 👔
|
||
- Estilo corporativo
|
||
- Expressões neutras
|
||
- Roupas formais
|
||
- Ideal para: Empresas, governo, corporativo
|
||
|
||
### 2. **Bottts Neutral** 🤖
|
||
- Robôs minimalistas
|
||
- Cores neutras
|
||
- Estilo moderno
|
||
- Ideal para: Tech, TI, inovação
|
||
|
||
### 3. **Personas** 👤
|
||
- Silhuetas profissionais
|
||
- Muito formal
|
||
- Minimalista
|
||
- Ideal para: Documentos oficiais
|
||
|
||
### 4. **Notionists** 📋
|
||
- Estilo Notion
|
||
- Super profissional
|
||
- Clean e moderno
|
||
- Ideal para: Produtividade, organização
|
||
|
||
### 5. **Initials** 🔤
|
||
- Apenas iniciais
|
||
- Extremamente simples
|
||
- Elegante
|
||
- Ideal para: Formalidade máxima
|
||
|
||
---
|
||
|
||
## ✨ Resultado Final:
|
||
|
||
### **Antes:**
|
||
- ❌ Upload com erro
|
||
- ❌ Ícone de câmera (menos intuitivo)
|
||
- ❌ Avatares coloridos/infantis
|
||
- ❌ Nomes de animais
|
||
- ❌ Cores vibrantes
|
||
|
||
### **Depois:**
|
||
- ✅ Upload funcionando perfeitamente
|
||
- ✅ Ícone de edição (intuitivo)
|
||
- ✅ Avatares corporativos/profissionais
|
||
- ✅ Nomes profissionais brasileiros
|
||
- ✅ Cores neutras e elegantes
|
||
- ✅ Adequado para ambiente governamental
|
||
- ✅ 48 avatares diversos (24 masc. + 24 fem.)
|
||
|
||
---
|
||
|
||
## 🏢 Adequação para Ambiente Governamental:
|
||
|
||
### **Por que essas mudanças são importantes:**
|
||
|
||
1. **Profissionalismo**
|
||
- Governo exige aparência formal
|
||
- Credibilidade institucional
|
||
- Seriedade no atendimento
|
||
|
||
2. **Representatividade**
|
||
- Nomes brasileiros comuns
|
||
- Diversidade de gênero
|
||
- Inclusão equilibrada
|
||
|
||
3. **Neutralidade**
|
||
- Cores discretas
|
||
- Sem expressões exageradas
|
||
- Foco no conteúdo, não na decoração
|
||
|
||
4. **Acessibilidade**
|
||
- Fácil identificação
|
||
- Leitura clara
|
||
- Sem distrações visuais
|
||
|
||
---
|
||
|
||
**Tudo atualizado e funcionando! 🎉**
|
||
|
||
Agora o sistema está adequado para uso em ambiente profissional/governamental!
|
||
|