Refine second-row card layout
This commit is contained in:
parent
684cda0e94
commit
eda219852f
2 changed files with 64 additions and 2 deletions
|
|
@ -270,6 +270,7 @@ h1 {
|
||||||
gap: 12px;
|
gap: 12px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
|
flex: 0 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tape-controls {
|
.tape-controls {
|
||||||
|
|
@ -740,7 +741,7 @@ h1 {
|
||||||
}
|
}
|
||||||
|
|
||||||
.list {
|
.list {
|
||||||
height: 360px;
|
min-height: 360px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -771,3 +772,52 @@ h1 {
|
||||||
grid-column: span 1;
|
grid-column: span 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.card-flow .row,
|
||||||
|
.card-alerts .row,
|
||||||
|
.card-classifiers .row {
|
||||||
|
padding: 12px 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-flow .meta,
|
||||||
|
.card-alerts .meta,
|
||||||
|
.card-classifiers .meta {
|
||||||
|
font-size: 0.78rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-flow .note,
|
||||||
|
.card-alerts .note,
|
||||||
|
.card-classifiers .note {
|
||||||
|
font-size: 0.72rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-flow,
|
||||||
|
.card-alerts,
|
||||||
|
.card-classifiers {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 1fr);
|
||||||
|
height: 760px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-flow,
|
||||||
|
.card-classifiers {
|
||||||
|
grid-template-rows: auto auto minmax(0, 1fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-alerts {
|
||||||
|
grid-template-rows: auto auto auto minmax(0, 1fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-flow .list,
|
||||||
|
.card-alerts .list,
|
||||||
|
.card-classifiers .list {
|
||||||
|
height: 100%;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 720px) {
|
||||||
|
.card-flow,
|
||||||
|
.card-alerts,
|
||||||
|
.card-classifiers {
|
||||||
|
height: 600px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -163,6 +163,16 @@ const formatTime = (ts: number): string => {
|
||||||
|
|
||||||
const formatConfidence = (value: number): string => `${Math.round(value * 100)}%`;
|
const formatConfidence = (value: number): string => `${Math.round(value * 100)}%`;
|
||||||
|
|
||||||
|
const formatUsd = (value: number): string => {
|
||||||
|
if (!Number.isFinite(value)) {
|
||||||
|
return "0.00";
|
||||||
|
}
|
||||||
|
return value.toLocaleString(undefined, {
|
||||||
|
minimumFractionDigits: 2,
|
||||||
|
maximumFractionDigits: 2
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const formatDateTime = (ts: number): string => {
|
const formatDateTime = (ts: number): string => {
|
||||||
const date = new Date(ts);
|
const date = new Date(ts);
|
||||||
return `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`;
|
return `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`;
|
||||||
|
|
@ -1630,6 +1640,7 @@ export default function HomePage() {
|
||||||
const count = parseNumber(features.count, packet.members.length);
|
const count = parseNumber(features.count, packet.members.length);
|
||||||
const totalSize = parseNumber(features.total_size, 0);
|
const totalSize = parseNumber(features.total_size, 0);
|
||||||
const totalPremium = parseNumber(features.total_premium, 0);
|
const totalPremium = parseNumber(features.total_premium, 0);
|
||||||
|
const notional = totalPremium * 100;
|
||||||
const startTs = parseNumber(features.start_ts, packet.source_ts);
|
const startTs = parseNumber(features.start_ts, packet.source_ts);
|
||||||
const endTs = parseNumber(features.end_ts, startTs);
|
const endTs = parseNumber(features.end_ts, startTs);
|
||||||
const windowMs = parseNumber(features.window_ms, 0);
|
const windowMs = parseNumber(features.window_ms, 0);
|
||||||
|
|
@ -1641,7 +1652,8 @@ export default function HomePage() {
|
||||||
<div className="meta flow-meta">
|
<div className="meta flow-meta">
|
||||||
<span>{formatFlowMetric(count)} prints</span>
|
<span>{formatFlowMetric(count)} prints</span>
|
||||||
<span>{formatFlowMetric(totalSize)} size</span>
|
<span>{formatFlowMetric(totalSize)} size</span>
|
||||||
<span>${formatPrice(totalPremium)}</span>
|
<span>Premium ${formatPrice(totalPremium)}</span>
|
||||||
|
<span>Notional ${formatUsd(notional)}</span>
|
||||||
{windowMs > 0 ? (
|
{windowMs > 0 ? (
|
||||||
<span>{formatFlowMetric(windowMs, "ms")}</span>
|
<span>{formatFlowMetric(windowMs, "ms")}</span>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue