// ============================================================ // dashmenu1 - Reorganizacao do menu do dash2 // Carregar DEPOIS do geralmtx36: // // // ============================================================ (function () { 'use strict'; const INFO = { instant: 'Diagnóstico coletivo simplificado e automático. Até 500 respondentes, recortes por grupos e relatório gerado pela nossa IA.', auto: 'Você responde pelo cliente e traduz a cultura dele para a Matriz em minutos. Sem envolver respondentes.', individual: 'Diagnóstico de perfil individual completo por link nominal. O resultado entra na matriz e no batch escolhido. 100 créditos.' }; // ── CSS ── const style = document.createElement('style'); style.textContent = ` .qmenu { position: relative; display: inline-block; } .qmenu-panel { display: none; position: absolute; top: calc(100% + 6px); left: 0; z-index: 500; min-width: 230px; padding: 6px; border-radius: 12px; background: rgba(20,12,50,0.97); border: 1px solid rgba(255,255,255,0.15); box-shadow: 0 10px 34px rgba(0,0,0,0.45); } .qmenu.open .qmenu-panel { display: block; } .qmenu-item { display: flex; align-items: center; gap: 8px; padding: 9px 10px; border-radius: 8px; color: rgba(255,255,255,0.85); font-size: 13px; font-weight: 500; text-decoration: none; cursor: pointer; border: none; background: transparent; width: 100%; text-align: left; box-sizing: border-box; } .qmenu-item:hover { background: rgba(255,255,255,0.08); color: #fff; } .qmenu-item.gated { opacity: 0.35; pointer-events: none; } .qmenu-caret { margin-left: 4px; font-size: 9px; opacity: 0.6; } .qi { position: relative; display: inline-flex; align-items: center; justify-content: center; width: 15px; height: 15px; border-radius: 50%; flex-shrink: 0; margin-left: auto; border: 1px solid rgba(255,255,255,0.35); color: rgba(255,255,255,0.55); font-size: 10px; font-style: italic; font-family: inherit; cursor: help; } .qi::after { content: attr(data-tip); display: none; position: absolute; z-index: 600; left: 50%; transform: translateX(-88%); top: calc(100% + 8px); width: 220px; padding: 10px 12px; border-radius: 10px; background: rgba(10,6,30,0.98); border: 1px solid rgba(167,129,243,0.4); color: rgba(255,255,255,0.85); font-size: 12px; font-style: normal; font-family: inherit; line-height: 1.55; text-align: left; white-space: normal; } .qi:hover::after { display: block; } `; document.head.appendChild(style); function hide(el) { if (el) el.style.display = 'none'; } function makeMenu(labelHtml) { const wrap = document.createElement('div'); wrap.className = 'qmenu'; const trigger = document.createElement('button'); trigger.className = 'btn btn-secondary'; trigger.innerHTML = labelHtml + ''; const panel = document.createElement('div'); panel.className = 'qmenu-panel'; trigger.addEventListener('click', (e) => { e.stopPropagation(); document.querySelectorAll('.qmenu.open').forEach(m => { if (m !== wrap) m.classList.remove('open'); }); wrap.classList.toggle('open'); }); wrap.appendChild(trigger); wrap.appendChild(panel); return { wrap, panel }; } function addItem(panel, { text, href, blank, onClick, info, id }) { const el = document.createElement(href ? 'a' : 'button'); el.className = 'qmenu-item'; if (id) el.id = id; if (href) { el.href = href; if (blank) el.target = '_blank'; } if (onClick) el.addEventListener('click', (e) => { e.preventDefault(); onClick(); closeAll(); }); el.innerHTML = `${text}` + (info ? `i` : ''); // o clique no "i" nao deve navegar const qi = el.querySelector('.qi'); if (qi) qi.addEventListener('click', (e) => { e.preventDefault(); e.stopPropagation(); }); panel.appendChild(el); return el; } function closeAll() { document.querySelectorAll('.qmenu.open').forEach(m => m.classList.remove('open')); } document.addEventListener('click', closeAll); function build() { const bar = document.querySelector('.action-buttons'); if (!bar) return; // ── 1) Renomear "Diagnóstico" para "Orçar" (mantendo o svg) ── const btnOrcar = document.getElementById('btn-novo-diagnostico'); if (btnOrcar) { [...btnOrcar.childNodes].forEach(n => { if (n.nodeType === 3 && n.textContent.trim()) n.textContent = ' Orçar'; }); if (![...btnOrcar.childNodes].some(n => n.nodeType === 3 && n.textContent.trim())) { btnOrcar.appendChild(document.createTextNode(' Orçar')); } } // ── 2) Esconder botoes antigos (listeners preservados) ── hide(document.getElementById('btn-gerar-link')); hide(document.getElementById('btn-autodiagnostico')); hide(document.getElementById('btn-gerenciar-batches')); hide(document.getElementById('btn-certificacao')); bar.querySelectorAll('a.btn').forEach(a => { const h = a.getAttribute('href') || ''; if (h.includes('/dash/calculadora') || h.includes('/dash/chalkboard') || h.includes('/dash/library') || h.includes('/dash/chat')) hide(a); }); // ── 3) Dropdown Diagnósticos ── const diag = makeMenu('Diagnósticos'); addItem(diag.panel, { text: 'Instant Scan', href: '/dash/diagnostico-rapido', info: INFO.instant }); addItem(diag.panel, { text: 'Auto Scan', href: '/dash/autodiagnostico', info: INFO.auto }); addItem(diag.panel, { text: 'Individual Scan', info: INFO.individual, onClick: () => { const b = document.getElementById('btn-gerar-link'); if (b) b.click(); } }); bar.appendChild(diag.wrap); // ── 4) Dropdown Conteúdo ── const cont = makeMenu('Conteúdo'); addItem(cont.panel, { text: 'Certificado', href: 'https://qore.me/dash/class/introducao', blank: true }); addItem(cont.panel, { text: 'Library', href: '/dash/library', blank: true }); bar.appendChild(cont.wrap); // ── 5) Dropdown Ferramentas ── const ferr = makeMenu('Ferramentas'); const itChalk = addItem(ferr.panel, { text: 'Chalkboard', href: '/dash/chalkboard', blank: true }); const itROI = addItem(ferr.panel, { text: 'Calculadora de ROI', href: '/dash/calculadora', blank: true }); addItem(ferr.panel, { text: 'Organização de dados', onClick: () => { const b = document.getElementById('btn-gerenciar-batches'); if (b) b.click(); } }); bar.appendChild(ferr.wrap); // ── 6) Copilot Qore ── const copilot = document.createElement('a'); copilot.className = 'btn btn-secondary'; copilot.href = '/dash/chat'; copilot.target = '_blank'; copilot.textContent = 'Copilot Qore'; bar.appendChild(copilot); // ── 7) Gate: espelha o estado dos botoes originais (a regra vive so no geralmtx) ── function findOriginal(hrefPart) { return [...bar.querySelectorAll('a')].find(a => !a.classList.contains('qmenu-item') && (a.getAttribute('href') || '').includes(hrefPart) ); } function mirrorGate(item, hrefPart) { const orig = findOriginal(hrefPart); if (!orig) return; const cs = getComputedStyle(orig); const gated = !orig.getAttribute('href') || parseFloat(cs.opacity) < 0.9 || cs.pointerEvents === 'none' || orig.classList.contains('disabled'); if (gated) { item.classList.add('gated'); item.removeAttribute('href'); item.title = 'Disponível para assinantes'; } else { item.classList.remove('gated'); } } let tries = 0; const gateTimer = setInterval(() => { tries++; const ready = typeof currentCompany !== 'undefined' && currentCompany; if (ready || tries > 40) { clearInterval(gateTimer); setTimeout(() => { mirrorGate(itChalk, '/dash/chalkboard'); mirrorGate(itROI, '/dash/calculadora'); }, 600); } }, 400); } // ── Faixa de Instant Scans em andamento (active/finalized) ── async function loadScanStrip() { const bar = document.querySelector('.action-buttons'); if (!bar || !window.supabase) return; try { const sb2 = window.supabase.createClient( 'https://ftujctzhsitfdlctbohr.supabase.co', 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImZ0dWpjdHpoc2l0ZmRsY3Rib2hyIiwicm9sZSI6ImFub24iLCJpYXQiOjE3Njg0MDQzNzcsImV4cCI6MjA4Mzk4MDM3N30.NivluvmqGq7Jc-zpZHsCdjUxC4GzWiAWoR4Ee0N78GI' ); const { data: scans, error } = await sb2 .from('scan_projects') .select('id, target_name, slug, status, plan_size, responses_count, batch_id') .in('status', ['active', 'finalized']) .order('created_at', { ascending: false }); if (error || !scans || scans.length === 0) return; const st = document.createElement('style'); st.textContent = ` #qscan-strip { margin: 10px 0 4px; } #qscan-strip .qs-title { font-size: 10px; text-transform: uppercase; letter-spacing: 1.5px; color: rgba(255,255,255,0.45); margin-bottom: 8px; } #qscan-strip .qs-row { display: flex; flex-wrap: wrap; gap: 8px; } .qs-chip { display: inline-flex; align-items: center; gap: 10px; padding: 8px 12px; border-radius: 12px; background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.15); color: #fff; font-size: 12px; } .qs-chip .qs-name { font-weight: 600; cursor: pointer; } .qs-chip .qs-name:hover { color: #f737a5; } .qs-chip .qs-count { color: rgba(255,255,255,0.5); font-size: 11px; } .qs-chip .qs-status { font-size: 9px; text-transform: uppercase; letter-spacing: 0.5px; padding: 2px 7px; border-radius: 10px; } .qs-chip .qs-status.active { background: rgba(110,231,183,0.15); color: #6ee7b7; } .qs-chip .qs-status.finalized { background: rgba(251,191,36,0.15); color: #fbbf24; } .qs-chip .qs-act { cursor: pointer; font-size: 11px; color: rgba(255,255,255,0.6); border-left: 1px solid rgba(255,255,255,0.15); padding-left: 10px; } .qs-chip .qs-act:hover { color: #fff; } .qs-chip .qs-del { color: #f87171; font-weight: bold; } .qs-chip .qs-del:hover { color: #f91069; }`; document.head.appendChild(st); const strip = document.createElement('div'); strip.id = 'qscan-strip'; strip.innerHTML = '
Instant Scans em andamento
' + scans.map(s => ` ${s.target_name} ${s.status === 'active' ? 'Coletando' : 'Finalizado'} ${s.responses_count}/${s.plan_size} Copiar link Abrir × `).join('') + '
'; const anchor = document.getElementById('matriz-controls'); if (anchor) anchor.insertAdjacentElement('afterend', strip); else bar.insertAdjacentElement('afterend', strip); strip.querySelectorAll('.qs-chip').forEach(chip => { const slug = chip.dataset.slug; const open = () => { window.location.href = '/dash/qmatrix/' + slug; }; chip.querySelector('.qs-name').addEventListener('click', open); chip.querySelector('.qs-open').addEventListener('click', open); chip.querySelector('.qs-copy').addEventListener('click', (e) => { navigator.clipboard.writeText('https://qore.me/dash/qscan/' + slug).then(() => { e.target.textContent = 'Copiado!'; setTimeout(() => { e.target.textContent = 'Copiar link'; }, 2000); }); }); chip.querySelector('.qs-del').addEventListener('click', async (e) => { const del = e.target; if (!confirm('Encerrar e APAGAR este Instant Scan? Todas as respostas coletadas serão perdidas. Esta ação não pode ser desfeita.')) return; del.textContent = '...'; const { error } = await sb2.from('scan_projects').delete().eq('id', del.dataset.id); if (error) { alert('Erro ao apagar: ' + error.message); del.textContent = '×'; return; } if (del.dataset.batch) await sb2.from('diagnosis_batches').delete().eq('id', del.dataset.batch); chip.remove(); }); }); } catch (e) { console.warn('[qscan-strip]', e); } } loadScanStrip(); if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', build); else build(); })();