Files
cameleer-server/ui/src/components/TabKpis.module.css
hsiegeln 457650012b
All checks were successful
CI / cleanup-branch (push) Has been skipped
CI / build (push) Successful in 1m22s
CI / docker (push) Successful in 1m36s
CI / deploy-feature (push) Has been skipped
CI / deploy (push) Successful in 38s
fix: resolve UI glitches and improve consistency
- Sidebar: make +App button more subtle (lower opacity, brightens on hover)
- Sidebar: add filter chips to hide empty routes and offline/stale apps
- Sidebar: hide filter chips and +App button when sidebar is collapsed
- Exchange table: reorder columns to Status, Attributes, App, Route, Started, Duration; remove ExchangeId and Agent columns
- Exchange detail log tab: query by exchangeId only (no applicationId required), filter by processorId when processor selected
- KPI tooltips: styled tooltips with current/previous values, time period labels, percentage change, themed with DS variables
- KPI tooltips: fix overflow by left-aligning first two and right-aligning last two
- Exchange detail: show full datetime (YYYY-MM-DD HH:mm:ss.SSS) for start/end times
- Status labels: unify to title-case (Completed, Failed, Running) across all views
- Status filter buttons: match title-case labels (Completed, Warning, Failed, Running)
- Create app: show full external URL using routingDomain from env config or window.location.origin fallback
- Create app: add Runtime Type selector and Custom Arguments to Resources tab
- Create app: add Sensitive Keys tab with agent defaults, global keys, and app-specific keys (matching admin page design)
- Create app: add placeholder text to all Input fields for consistency
- Update design-system to 0.1.52 (sidebar collapse toggle fix)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 19:41:36 +02:00

153 lines
2.6 KiB
CSS

.kpis {
display: flex;
align-items: center;
gap: 1rem;
}
.metric {
display: flex;
align-items: baseline;
gap: 0.25rem;
white-space: nowrap;
}
.label {
font-size: 0.625rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--text-muted);
}
.value {
font-family: var(--font-mono);
font-size: 0.75rem;
font-weight: 600;
color: var(--text-primary);
}
.arrow {
font-size: 0.6875rem;
font-weight: 700;
}
.good {
color: var(--success);
}
.bad {
color: var(--error);
}
.flat {
color: var(--text-muted);
}
/* ── Tooltip ─────────────────────────────────────── */
/* Override DS tooltip bubble: use themed surface instead of inverted style */
.tooltipWrap [role="tooltip"] {
background: var(--bg-surface);
color: var(--text-primary);
border: 1px solid var(--border);
box-shadow: var(--shadow-md);
white-space: normal;
padding: 10px 12px;
border-radius: var(--radius-md);
left: 0;
transform: none;
}
/* Right-align tooltip for items near the edge to prevent overflow */
.tooltipEnd [role="tooltip"] {
left: auto;
right: 0;
transform: none;
}
.tooltipBody {
display: flex;
flex-direction: column;
gap: 8px;
min-width: 180px;
}
.tooltipTitle {
font-size: 0.6875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--text-muted);
padding-bottom: 6px;
border-bottom: 1px solid var(--border-subtle);
}
.tooltipRows {
display: flex;
flex-direction: column;
gap: 6px;
}
.tooltipRow {
display: flex;
justify-content: space-between;
align-items: center;
gap: 12px;
}
.tooltipPeriod {
display: flex;
align-items: center;
gap: 6px;
min-width: 0;
}
.tooltipDot {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--amber);
flex-shrink: 0;
}
.tooltipDotPrev {
background: var(--text-muted);
opacity: 0.4;
}
.tooltipPeriodLabel {
font-size: 0.6875rem;
font-weight: 600;
color: var(--text-secondary);
flex-shrink: 0;
}
.tooltipTime {
font-family: var(--font-mono);
font-size: 0.625rem;
color: var(--text-muted);
white-space: nowrap;
}
.tooltipValue {
font-family: var(--font-mono);
font-size: 0.8125rem;
font-weight: 700;
color: var(--text-primary);
flex-shrink: 0;
}
.tooltipValuePrev {
font-weight: 500;
color: var(--text-muted);
}
.tooltipChange {
font-family: var(--font-mono);
font-size: 0.75rem;
font-weight: 700;
padding-top: 6px;
border-top: 1px solid var(--border-subtle);
text-align: right;
}