chooseColor
Sent when an effect asks the player to choose a color — for example, the color named by Painter’s Servant, or the color half of a hybrid mana payment.
Arguments
Section titled “Arguments”input.type is "chooseColor". The remaining fields:
interface ChooseColorInput { validColors: Array<string>; amount: number; repeatAllowed: boolean;}#[serde(rename_all = "camelCase")]pub struct ChooseColorInput { pub valid_colors: Vec<String>, pub amount: u32, pub repeat_allowed: bool,}Rendering
Section titled “Rendering”The control depends on how many picks are needed.

For a single pick (amount of 1) the colors are tiles — click one and the choice is sent
immediately.

For multiple picks (amount > 1 with repeatAllowed) it becomes a per-color counter — the
player spreads amount across the colors, then confirms.
Response
Section titled “Response”type ChooseColorOutput = { type: "colorDecision"; chosenColors: { [color: string]: number } };Return a map of color → number of times chosen, with the counts summing to amount.
Example
Section titled “Example”{ "promptId": 7, "decidingPlayerId": "player-0", "input": { "type": "chooseColor", "validColors": ["W", "U", "B", "R", "G"], "amount": 1, "repeatAllowed": false }}{ "promptId": 7, "output": { "type": "colorDecision", "chosenColors": { "R": 1 } } }