/** * The shared running activity feed (bottom of every board โ€” roadmap C2 / REVIEW ยง3.3). * * Modeled on Container's `GameLog` (the good one): scrollable, capped at the last 60 entries, newest * first, with a ๐Ÿค– badge on bot seats. Can't Stop and Stone Age had inline 6-entry copies with no badge * and no scroll; all three now share this frame. The genuinely per-game part is a single function, * `describe(entry) => string | null` โ€” the plain-English line for a move, or `null` to hide it (e.g. * Container's end-of-turn). The **actor's name and bot badge are rendered here**, so `describe` returns * just the action text. * * **Everything a game logs is public by construction** โ€” the log rides on the wire either way, so a * genuine secret must never be recorded (Container never records a losing bid). If a new mechanic ever * logs something hidden, redact it in the engine's `record()` / `viewFor`, not in this component. * * Typed off a structural `LogEntry`, **never** off `@game-hub/engine` โ€” each board's engine log type is * structurally compatible, and its `describe` closure carries whatever game context it needs. */ /** The minimal shape of a logged move โ€” structurally the engine's `MoveRecord`, restated to avoid a game import. */ export interface LogEntry { readonly seq: number; readonly type: string; readonly playerId: string; readonly payload?: Record; } export interface ActivityFeedProps { readonly log: readonly E[]; readonly players: readonly { readonly id: string; readonly name: string; }[]; /** Seats an AI holds, shown with a ๐Ÿค– badge. */ readonly botIds: readonly string[]; /** One line of plain English for a move (no actor name โ€” that's rendered here), or `null` to hide it. */ readonly describe: (entry: E) => string | null; /** The feed's testid โ€” `game-log`, `sa-log`, `cantstop-log` (the games' e2e depend on these). */ readonly testId?: string; readonly emptyLabel?: string; } export declare function ActivityFeed({ log, players, botIds, describe, testId, emptyLabel, }: ActivityFeedProps): import("react").JSX.Element;