feat: framework color dots in sessions table, filter toolbar panel
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -299,15 +299,19 @@
|
|||||||
sessionsState.cursor = data.next_cursor;
|
sessionsState.cursor = data.next_cursor;
|
||||||
|
|
||||||
const tbody = document.getElementById('sessions-body');
|
const tbody = document.getElementById('sessions-body');
|
||||||
tbody.innerHTML = sessionsState.sessions.map(s => `
|
tbody.innerHTML = sessionsState.sessions.map(s => {
|
||||||
|
const fw = s.framework || 'unknown';
|
||||||
|
const fwClass = fw.replace(/[^a-z0-9-]/g, '-');
|
||||||
|
return `
|
||||||
<tr class="clickable" data-session="${escapeHTML(s.session_id)}">
|
<tr class="clickable" data-session="${escapeHTML(s.session_id)}">
|
||||||
<td class="id-cell">${escapeHTML(s.session_id.substring(0, 12))}...</td>
|
<td class="id-cell">${escapeHTML(s.session_id.substring(0, 12))}…</td>
|
||||||
<td>${escapeHTML(s.framework || '-')}</td>
|
<td><span class="fw-dot ${escapeHTML(fwClass)}"></span>${escapeHTML(fw)}</td>
|
||||||
<td>${escapeHTML(s.host || '-')}</td>
|
<td>${escapeHTML(s.host || '-')}</td>
|
||||||
<td>${s.run_count}</td>
|
<td>${s.run_count}</td>
|
||||||
<td title="${escapeHTML(s.started_at)}">${escapeHTML(relativeTime(s.started_at))}</td>
|
<td title="${escapeHTML(s.started_at)}">${escapeHTML(relativeTime(s.started_at))}</td>
|
||||||
</tr>
|
</tr>
|
||||||
`).join('') || '<tr><td colspan="5" class="empty-state">No sessions found</td></tr>';
|
`;
|
||||||
|
}).join('') || '<tr><td colspan="5" class="empty-state">No sessions found</td></tr>';
|
||||||
|
|
||||||
tbody.querySelectorAll('tr.clickable').forEach(row => {
|
tbody.querySelectorAll('tr.clickable').forEach(row => {
|
||||||
row.addEventListener('click', () => navigate('/sessions/' + row.dataset.session));
|
row.addEventListener('click', () => navigate('/sessions/' + row.dataset.session));
|
||||||
|
|||||||
@@ -247,6 +247,10 @@ main > * {
|
|||||||
margin-bottom: 1.5rem;
|
margin-bottom: 1.5rem;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
align-items: flex-end;
|
align-items: flex-end;
|
||||||
|
background: var(--surface);
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
border-radius: var(--radius-lg);
|
||||||
|
padding: 1rem 1.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.filters label {
|
.filters label {
|
||||||
@@ -1242,3 +1246,21 @@ tr.clickable:hover td:first-child {
|
|||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ── Framework dots ───────────────────────────────────────── */
|
||||||
|
.fw-dot {
|
||||||
|
display: inline-block;
|
||||||
|
width: 7px;
|
||||||
|
height: 7px;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-right: 0.4rem;
|
||||||
|
flex-shrink: 0;
|
||||||
|
vertical-align: middle;
|
||||||
|
position: relative;
|
||||||
|
top: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fw-dot.openclaw { background: var(--accent); }
|
||||||
|
.fw-dot.claude-code { background: var(--success); }
|
||||||
|
.fw-dot.opencode { background: var(--purple); }
|
||||||
|
.fw-dot.unknown { background: var(--text-dim); }
|
||||||
|
|||||||
Reference in New Issue
Block a user