hyperhive/frontend/packages/swarm-ui/src/util.ts
atlas 39b95c2ede treefmt: apply prettier
Pure `nix fmt` output from the commit before this one — no hand edits.
203 files: 52 md, 42 tsx, 32 js, 32 css, 21 ts, 13 html, 8 json, 3 mjs.

Reproduce with `nix develop -c nix fmt` on the parent commit; the result
should be byte-identical to this tree.

None of the 13 `.prettierignore` entries appears here — verified by
intersecting the changed-file list against the ignore file, with a
control proving the intersection finds a match when one exists.
2026-09-02 15:25:07 +02:00

22 lines
1 KiB
TypeScript

// Small pure render helpers shared across swarm-ui pages. Not folded
// into `@hive/shared` — swarm-ui's formatting choices aren't a
// cross-package contract, and there's nothing here worth sharing.
// Relative age, coarsened to one unit ("5m ago"). Built on the native
// `Intl.RelativeTimeFormat` (no dependency needed — mara asked whether
// a lightweight package was warranted; the runtime already ships this)
// with `style: 'narrow'`, which produces the same "5s/5m/5h/5d ago"
// shape the dashboard package's hand-rolled equivalent does, verified
// against a real `Intl` call rather than assumed from the spec.
const RTF = new Intl.RelativeTimeFormat("en", {
numeric: "always",
style: "narrow",
});
export function fmtAgo(ageSeconds: number): string {
const age = Math.max(0, Math.floor(ageSeconds));
if (age < 60) return RTF.format(-age, "second");
if (age < 3600) return RTF.format(-Math.floor(age / 60), "minute");
if (age < 86400) return RTF.format(-Math.floor(age / 3600), "hour");
return RTF.format(-Math.floor(age / 86400), "day");
}