Factory token for the room's LiveKitRoomController. Each LiveKitRoomComponent
resolves this factory and invokes it to obtain its own controller instance (the room is
stateful per-instance, so this is a factory, not a shared singleton). The default factory
returns new LiveKitRoomController() — production behavior is identical to the previous
inline new. Tests override the token to inject a fake controller and drive the container's
DOM, e.g. { provide: LIVEKIT_ROOM_CONTROLLER_FACTORY, useValue: () => fakeController }.
Factory token for the room's LiveKitRoomController. Each
LiveKitRoomComponentresolves this factory and invokes it to obtain its own controller instance (the room is stateful per-instance, so this is a factory, not a shared singleton). The default factory returnsnew LiveKitRoomController()— production behavior is identical to the previous inlinenew. Tests override the token to inject a fake controller and drive the container's DOM, e.g.{ provide: LIVEKIT_ROOM_CONTROLLER_FACTORY, useValue: () => fakeController }.