interface Props { expiresAt: Date | null; capabilities: { read: boolean; write: boolean }; token: string; } function relativeExpiry(d: Date): string { const ms = d.getTime() - Date.now(); if (ms <= 0) return "expired"; const days = Math.round(ms / 86400000); if (days >= 1) return `in ${days} day${days === 1 ? "" : "s"}`; const hours = Math.round(ms / 3600000); if (hours >= 1) return `in ${hours} hour${hours === 1 ? "" : "s"}`; const mins = Math.round(ms / 60000); return `in ${mins} min`; } export function ShareBanner({ expiresAt, capabilities, token }: Props) { const mode = capabilities.write ? "edit" : "view-only"; return (
Public share link · {mode} {expiresAt ? ( <> · expires {relativeExpiry(expiresAt)} · revoke anytime ) : ( · no expiration )} /s/{token.slice(0, 12)}
); }