b97f7f94e4
- Stickers: captura automática por fileSha256 (Baileys) no MessageHandler,
tabela Prisma 'stickers' com deduplicação por [tenantId, sha256],
API REST /api/stickers (list + favorite toggle), cache IndexedDB permanente
(sem TTL — conteúdo imutável), StickerPanel.tsx com abas Recentes/Favoritos
- Emoji picker: migrado de emoji-picker-react para @emoji-mart/react com
locale="pt" (tradução completa: categorias, busca, mensagem de sem resultado)
- Preloader: aparece apenas em hard reload (F5/URL direta) via
performance.getEntriesByType('navigation').type + sessionStorage flag,
navegação client-side Next.js pula o overlay instantaneamente
- Avatar cache: Wasabi como storage persistente + IndexedDB client-side,
avatar_version via MD5(avatarUrl) sem coluna extra no banco,
rota /api/storage/view/* para servir arquivos Wasabi ao frontend
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
39 lines
933 B
JSON
39 lines
933 B
JSON
{
|
|
"name": "newwhats-dashboard",
|
|
"version": "1.0.0",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "next dev -p 4004",
|
|
"build": "next build",
|
|
"start": "next start -p 3003",
|
|
"lint": "next lint"
|
|
},
|
|
"dependencies": {
|
|
"@emoji-mart/data": "^1.2.1",
|
|
"@emoji-mart/react": "^1.1.1",
|
|
"@xyflow/react": "^12.10.2",
|
|
"axios": "^1.6.0",
|
|
"date-fns": "^4.1.0",
|
|
"emoji-picker-react": "^4.18.0",
|
|
"framer-motion": "^11.0.0",
|
|
"immer": "^10.0.3",
|
|
"lucide-react": "^0.360.0",
|
|
"next": "^14.2.35",
|
|
"react": "^18.2.0",
|
|
"react-dom": "^18.2.0",
|
|
"reactflow": "^11.11.4",
|
|
"recharts": "^3.8.1",
|
|
"socket.io-client": "^4.8.3",
|
|
"zustand": "^4.5.1"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "20.19.40",
|
|
"@types/react": "^18",
|
|
"@types/react-dom": "^18",
|
|
"autoprefixer": "^10.4.19",
|
|
"postcss": "^8.4.38",
|
|
"tailwindcss": "^3.4.1",
|
|
"typescript": "5.9.3"
|
|
}
|
|
}
|