feat: alinha tags da sidebar dinamicamente e implementa cards de sugestao tematica de boas-vindas

This commit is contained in:
2026-05-26 17:52:00 +00:00
parent 102aa6d712
commit 63ac641c5f
2 changed files with 59 additions and 8 deletions
+36 -8
View File
@@ -150,9 +150,18 @@ const initApp = () => {
updateModelBadge(); updateModelBadge();
// ========================================================================== // ==========================================================================
// MODAL DE TAGS // MODAL DE TAGS & SIDEBAR TAGS
// ========================================================================== // ==========================================================================
const AVAILABLE_TAGS = ['HTPC', 'ATA', 'Planejamento', 'Formação', 'Projeto', 'Relatório', 'Sugestão', 'Dúvida']; const AVAILABLE_TAGS = [
{ id: 'relatorios', label: '📋 Relatórios' },
{ id: 'planejamento', label: '📝 Planejamento' },
{ id: 'mindlab', label: '🧠 Mind Lab' },
{ id: 'estudos', label: '📚 Estudos' },
{ id: 'htpc', label: '💻 HTPC' },
{ id: 'ata', label: '📝 ATA' },
{ id: 'sugestao', label: '💡 Sugestão' },
{ id: 'duvida', label: '❓ Dúvida' }
];
const modalTagOverlay = document.getElementById('modalTagOverlay'); const modalTagOverlay = document.getElementById('modalTagOverlay');
const modalTagList = document.getElementById('modalTagList'); const modalTagList = document.getElementById('modalTagList');
const modalTagClose = document.getElementById('modalTagClose'); const modalTagClose = document.getElementById('modalTagClose');
@@ -175,9 +184,9 @@ const initApp = () => {
const renderTagModalList = () => { const renderTagModalList = () => {
modalTagList.innerHTML = AVAILABLE_TAGS.map(tag => ` modalTagList.innerHTML = AVAILABLE_TAGS.map(tag => `
<div class="modal-tag-item ${selectedTagsState.includes(tag) ? 'selected' : ''}" data-tag="${tag}"> <div class="modal-tag-item ${selectedTagsState.includes(tag.id) ? 'selected' : ''}" data-tag="${tag.id}">
<input type="checkbox" ${selectedTagsState.includes(tag) ? 'checked' : ''}> <input type="checkbox" ${selectedTagsState.includes(tag.id) ? 'checked' : ''}>
<span>${tag}</span> <span>${tag.label}</span>
</div> </div>
`).join(''); `).join('');
@@ -194,6 +203,17 @@ const initApp = () => {
}); });
}; };
const renderSidebarTags = () => {
if (!sidebarTags) return;
let tagsHtml = `<button class="tag-filter ${activeTag === 'all' ? 'active' : ''}" data-tag="all">Todas</button>`;
tagsHtml += AVAILABLE_TAGS.map(tag => `
<button class="tag-filter ${activeTag === tag.id ? 'active' : ''}" data-tag="${tag.id}">
${tag.label}
</button>
`).join('');
sidebarTags.innerHTML = tagsHtml;
};
modalTagClose.addEventListener('click', closeTagModal); modalTagClose.addEventListener('click', closeTagModal);
modalTagCancel.addEventListener('click', closeTagModal); modalTagCancel.addEventListener('click', closeTagModal);
modalTagOverlay.addEventListener('click', (e) => { modalTagOverlay.addEventListener('click', (e) => {
@@ -270,8 +290,6 @@ const initApp = () => {
sidebarTags.addEventListener('click', (e) => { sidebarTags.addEventListener('click', (e) => {
const tagBtn = e.target.closest('.tag-filter'); const tagBtn = e.target.closest('.tag-filter');
if (!tagBtn) return; if (!tagBtn) return;
document.querySelectorAll('.tag-filter').forEach(b => b.classList.remove('active'));
tagBtn.classList.add('active');
activeTag = tagBtn.dataset.tag; activeTag = tagBtn.dataset.tag;
renderHistory(); renderHistory();
}); });
@@ -667,12 +685,22 @@ const initApp = () => {
// Emoji para cada tag // Emoji para cada tag
const getTagEmoji = (tag) => { const getTagEmoji = (tag) => {
const emojis = { relatorios: '📋', planejamento: '📝', mindlab: '🧠', estudos: '📚' }; const emojis = {
relatorios: '📋',
planejamento: '📝',
mindlab: '🧠',
estudos: '📚',
htpc: '💻',
ata: '📝',
sugestao: '💡',
duvida: '❓'
};
return emojis[tag] || '🏷️'; return emojis[tag] || '🏷️';
}; };
// Renderizar histórico completo // Renderizar histórico completo
const renderHistory = () => { const renderHistory = () => {
renderSidebarTags(); // Renderizar tags da sidebar de forma dinâmica e atualizada
historyItems.innerHTML = ''; historyItems.innerHTML = '';
if (chats.length === 0) { if (chats.length === 0) {
+23
View File
@@ -147,6 +147,29 @@
</div> </div>
</div> </div>
<h2>Olá! Sou sua assistente virtual e me chamo Kemily. Como posso ajudar?</h2> <h2>Olá! Sou sua assistente virtual e me chamo Kemily. Como posso ajudar?</h2>
<div class="welcome-grid">
<div class="suggestion-card" data-prompt="Escreva um relatório de observação semanal de um aluno de educação infantil focado em socialização e interação.">
<div class="card-icon">📋</div>
<div class="card-title">Relatório Semanal</div>
<div class="card-desc">Observação de desenvolvimento e socialização na educação infantil.</div>
</div>
<div class="suggestion-card" data-prompt="Crie um planejamento de aula inspirado no Mind Lab para trabalhar educação socioemocional e cooperação.">
<div class="card-icon">🧠</div>
<div class="card-title">Planejamento Mind Lab</div>
<div class="card-desc">Atividades lúdicas para desenvolvimento de habilidades socioemocionais.</div>
</div>
<div class="suggestion-card" data-prompt="Crie uma música pedagógica infantil alegre e animada sobre animais e sons da fazenda.">
<div class="card-icon">🎵</div>
<div class="card-title">Criar Música / Cantiga</div>
<div class="card-desc">Gere músicas divertidas com melodia e letra educativa.</div>
</div>
<div class="suggestion-card" data-prompt="Crie um planejamento pedagógico de artes alinhado à BNCC para o campo 'Traços, sons, cores e formas'.">
<div class="card-icon">🎨</div>
<div class="card-title">Atividade BNCC</div>
<div class="card-desc">Planos de aula estruturados de acordo com as normas da BNCC.</div>
</div>
</div>
</div> </div>
<!-- Lista de mensagens geradas dinamicamente --> <!-- Lista de mensagens geradas dinamicamente -->