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 };