/** Charlie API v1. Present only when the game is opened inside Charlie. */
export type CharlieButton = 'a' | 'b' | 'x' | 'y' | 'l' | 'r' | 'start' | 'select' | 'up' | 'down' | 'left' | 'right';
export type CharlieInput = Readonly<{
  axes: readonly [number, number, number, number];
  /** Treat missing initial values as released. */
  buttons: Readonly<Partial<Record<CharlieButton, boolean>>>;
}>;
export type CharlieJSON = null | boolean | number | string | CharlieJSON[] | { [key: string]: CharlieJSON };
export interface CharlieController {
  readonly version: 1;
  readonly ready: Promise<void>;
  readonly input: CharlieInput;
  readonly paused: boolean;
  onInput(callback: (input: CharlieInput) => void): () => void;
  onPause(callback: (paused: boolean) => void): () => void;
  load(): Promise<CharlieJSON>;
  save(value: CharlieJSON): Promise<void>;
}
declare global {
  interface Window { readonly charlie?: CharlieController; }
}
