function renderGitPanel(container, { gitStatus, gitDiff, gitStage, gitCommit, gitLog }) { container.innerHTML = `

Changes

Loading...

Commit

Recent Commits

`; loadGitStatus(); async function loadGitStatus() { const status = await gitStatus(); const changesEl = document.getElementById('git-changes'); if (!status || !changesEl) return; if (status.error) { changesEl.innerHTML = `

${status.error}

`; return; } const files = [ ...status.modified.map(f => ({ file: f, status: 'M', color: '#f59e0b' })), ...status.not_added.map(f => ({ file: f, status: '?', color: '#6b7280' })), ...status.created.map(f => ({ file: f, status: 'A', color: '#10b981' })), ...status.deleted.map(f => ({ file: f, status: 'D', color: '#ef4444' })), ...status.staged.map(f => ({ file: f, status: 'S', color: '#3b82f6' })), ]; if (files.length === 0) { changesEl.innerHTML = '

No changes

'; } else { changesEl.innerHTML = files.map(f => `
${f.status} ${f.file}
`).join(''); changesEl.querySelectorAll('.git-stage-btn').forEach(btn => { btn.addEventListener('click', async (e) => { e.stopPropagation(); await gitStage([btn.dataset.file]); loadGitStatus(); }); }); } // Load log const log = await gitLog(); const logEl = document.getElementById('git-log'); if (log && logEl) { logEl.innerHTML = (log.all || []).slice(0, 10).map(entry => `
${entry.message}
${entry.date?.substring(0, 10) || ''} · ${entry.author_name || ''}
`).join('') || '

No commits

'; } } document.getElementById('git-commit-btn')?.addEventListener('click', async () => { const msg = document.getElementById('git-commit-msg')?.value?.trim(); if (!msg) return; await gitCommit(msg); document.getElementById('git-commit-msg').value = ''; loadGitStatus(); }); } module.exports = { renderGitPanel };