/** * Which ids are new, given what was on screen before — the rule, without React. * * `before` is `null` when nothing has been seen yet, and that case is the whole * reason this is a named function: **a first render is never an arrival.** A * register opening on two hundred rows has two hundred ids it has not seen, and * the naive diff flashes all of them — both wrong (nothing arrived, the page * loaded) and the moment a highlight is least wanted. * * A removal reports nothing. A row leaving is not a row arriving, and the two * share a diff only if you write it carelessly. */ export declare function arrivalsSince(before: ReadonlySet | null, ids: readonly string[]): string[]; /** * Which of these ids are NEW since the last render — the set a register passes * to `TableRow`'s `justArrived`. * * A row landing while someone is looking at the screen is the case the realtime * push exists for, and until something marks it the push is invisible: the list * is one row longer and nothing says which one. Every register wants the same * diff, so it lives here rather than in each app. * * **`scope` is what the ids are a list OF** — the filter, the search, the page. * Without it a register cannot tell twelve rows ARRIVING from a filter change * that replaced the list, because both are a large diff, and it would flash the * whole page every time someone picked a status. Change the scope and the * baseline reseeds silently: nothing arrived, the reader asked a different * question. Pass a string that changes exactly when the QUESTION does. * * An EMPTY render never seeds the baseline either: a list rendering `[]` while * its query is in flight would otherwise make its real first page look like an * arrival. * * Ids leave the set on the next render that carries them, so the highlight is a * one-shot — re-rendering never restarts an animation that already played. */ export declare function useJustArrived(ids: readonly string[], scope?: string): ReadonlySet;