/** * "A new version is ready." * * The one thing this app sells is that what it shows you is current, and a * cache-first shell quietly breaks that promise for its most loyal reader — the * one who never closes the tab. This is the disclosure, in the same spirit as * the offline banner: say what is true, then let them choose. * * It is an offer, never a swap. Reloading mid-sentence while someone types their * own event in would be the app taking a decision that costs them work, so the * reader picks the moment. Dismissing is free — nothing they have marked, typed * or ticked lives in the bundle, and the offer comes back next load. * * Sits a toast's height up from the bottom edge so an undo toast can never land * on top of it, and low enough to be reachable with a thumb. */ export function UpdateNotice({ applying, onApply, onDismiss, }: { applying: boolean; onApply: () => void; onDismiss: () => void; }) { return (

A new version of Event Clock is ready.{" "} Your marks and notes are kept — reloading only loses your place on the page.

); }