feat: enhance EventFeed timeline and Agent Health page styling

- EventFeed: 28px icon circles with severity colors, stacked message/timestamp,
  search input with clear button, ReactNode message support with searchText field
- Agent Health: timeline wrapped in card panel, instance listing as proper table,
  colored Badge pills for live counts, removed shift pill
- Input primitive: onClear prop with × button for all search fields
- Sidebar: Agents section collapsible like Applications, collapse state persisted
  to localStorage
- FilterBar/Sidebar: clear buttons on all search inputs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-03-18 19:11:58 +01:00
parent e7668e8144
commit 674444682e
11 changed files with 582 additions and 243 deletions

View File

@@ -49,7 +49,7 @@
.sectionHeaderRow {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
margin-bottom: 12px;
}
@@ -122,46 +122,65 @@
flex-shrink: 0;
}
/* Instance header row */
.instanceHeader {
display: grid;
grid-template-columns: 8px minmax(80px, 1.2fr) auto auto auto auto auto;
gap: 12px;
padding: 4px 16px;
/* Instance table */
.instanceTable {
width: 100%;
border-collapse: collapse;
font-size: 12px;
}
.instanceTable thead th {
padding: 4px 12px;
font-size: 9px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--text-faint);
text-align: left;
border-bottom: 1px solid var(--border-subtle);
white-space: nowrap;
}
.thStatus {
width: 12px;
}
.tdStatus {
width: 12px;
text-align: center;
}
/* Instance row */
.instanceRow {
display: grid;
grid-template-columns: 8px minmax(80px, 1.2fr) auto auto auto auto auto;
gap: 12px;
align-items: center;
padding: 8px 16px;
border-bottom: 1px solid var(--border-subtle);
font-size: 12px;
text-decoration: none;
color: inherit;
transition: background 0.1s;
cursor: pointer;
transition: background 0.1s;
}
.instanceRow:last-child {
.instanceRow td {
padding: 8px 12px;
border-bottom: 1px solid var(--border-subtle);
white-space: nowrap;
}
.instanceRow:last-child td {
border-bottom: none;
}
.instanceRow:hover {
.instanceRow:hover td {
background: var(--bg-hover);
}
.instanceRowActive {
.instanceRowActive td {
background: var(--amber-bg);
border-left: 3px solid var(--amber);
}
.instanceRowActive td:first-child {
box-shadow: inset 3px 0 0 var(--amber);
}
/* Chart expansion row */
.chartRow td {
padding: 0;
}
/* Instance fields */
@@ -217,7 +236,23 @@
letter-spacing: 0.5px;
}
/* Event section */
.eventSection {
/* Event card (timeline panel) */
.eventCard {
margin-top: 20px;
background: var(--bg-surface);
border: 1px solid var(--border-subtle);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-card);
overflow: hidden;
display: flex;
flex-direction: column;
max-height: 420px;
}
.eventCardHeader {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 16px;
border-bottom: 1px solid var(--border-subtle);
}