The board to sync (e.g. a WhiteboardState).
Debounce before broadcasting after local changes.
Invoked with a JSON snapshot to broadcast.
Applies a remote board snapshot, suppressing the echo the load triggers on SyncableBoard.Changed$.
The JSON snapshot from another participant.
Tears down subscriptions.
Starts listening for local board changes and emitting debounced snapshots.
Coordinates collaborative whiteboard sync over a transport (the LiveKit data channel): debounces local change bursts into one outbound snapshot, and applies inbound snapshots while suppressing the echo that the load itself would otherwise trigger. Pure and transport-agnostic — the surface component owns the actual
SendData/dataReceivedwiring.