// Type definitions for React 0.11.2 // Project: http://facebook.github.io/react/ // Definitions by: Asana // Definitions: https://github.com/borisyankov/DefinitelyTyped declare module "react" { export function createClass(specification: Specification): Factory

; export function renderComponent(component: Descriptor, container: Element, callback?: () => void): void; export function unmountComponentAtNode(container: Element): boolean; export function renderComponentToString(component: Descriptor): string; export function renderComponentToStaticMarkup(component: Descriptor): string; export function isValidClass(factory: Factory): boolean; export function isValidComponent(component: Descriptor): boolean; export function initializeTouchEvents(shouldUseTouch: boolean): void; export interface Descriptor

{ props: P; } export interface Factory

{ (properties?: P, ...children: any[]): Descriptor

; } export interface Mixin { componentWillMount?(): void; componentDidMount?(): void; componentWillReceiveProps?(nextProps: P): void; shouldComponentUpdate?(nextProps: P, nextState: S): boolean; componentWillUpdate?(nextProps: P, nextState: S): void; componentDidUpdate?(prevProps: P, prevState: S): void; componentWillUnmount?(): void; } export interface Specification extends Mixin { displayName?: string; mixins?: Mixin[]; statics?: { [key: string]: Function; }; propTypes?: ValidationMap

; getDefaultProps?(): P; getInitialState?(): S; render(): Descriptor; } interface DomReferencer { getDomNode(): Element; } export interface Component extends DomReferencer{ refs: { [key: string]: DomReferencer }; props: P; state: S; setState(nextState: S, callback?: () => void): void; replaceState(nextState: S, callback?: () => void): void; forceUpdate(callback?: () => void): void; isMounted(): boolean; transferPropsTo(target: Factory

): Descriptor

; setProps(nextProps: P, callback?: () => void): void; replaceProps(nextProps: P, callback?: () => void): void; } interface Constructable { new(): any; } interface Validator

{ (props: P, propName: string, componentName: string): Error; } interface Requireable

extends Validator

{ isRequired: Validator

; } interface ValidationMap

{ [key: string]: Validator

; } export var PropTypes: { any: Requireable; array: Requireable; bool: Requireable; func: Requireable; number: Requireable; object: Requireable; string: Requireable; renderable: Requireable; component: Requireable; instanceOf: (clazz: Constructable) => Requireable; oneOf: (types: any[]) => Requireable oneOfType: (types: Validator[]) => Requireable; arrayOf: (type: Validator) => Requireable; objectOf: (type: Validator) => Requireable; shape: (type: ValidationMap) => Requireable; }; export var Children: { map(children: any[], fn: (child: any) => any): any[]; forEach(children: any[], fn: (child: any) => any): void; count(children: any[]): number; only(children: any[]): any; }; // Browser Interfaces // Taken from https://github.com/nikeee/2048-typescript/blob/master/2048/js/touch.d.ts interface AbstractView { styleMedia: StyleMedia; document: Document; } interface Touch { identifier: number; target: EventTarget; screenX: number; screenY: number; clientX: number; clientY: number; pageX: number; pageY: number; } interface TouchList { [index: number]: Touch; length: number; item(index: number): Touch; identifiedTouch(identifier: number): Touch; } // Events export interface SyntheticEvent { bubbles: boolean; cancelable: boolean; currentTarget: EventTarget; defaultPrevented: boolean; eventPhase: number; nativeEvent: Event; preventDefault(): void; stopPropagation(): void; target: EventTarget; timeStamp: Date; type: string; } export interface ClipboardEvent extends SyntheticEvent { clipboardData: DataTransfer; } export interface KeyboardEvent extends SyntheticEvent { altKey: boolean; charCode: number; ctrlKey: boolean; getModifierState(key: string): boolean; key: string; keyCode: number; locale: string; location: number; metaKey: boolean; repeat: boolean; shiftKey: boolean; which: number; } export interface FocusEvent extends SyntheticEvent { relatedTarget: EventTarget; } export interface MouseEvent extends SyntheticEvent { altKey: boolean; button: number; buttons: number; clientX: number; clientY: number; ctrlKey: boolean; getModifierState(key: string): boolean; metaKey: boolean; pageX: number; pageY: number; relatedTarget: EventTarget; screenX: number; screenY: number; shiftKey: boolean; } export interface TouchEvent extends SyntheticEvent { altKey: boolean; changedTouches: TouchList; ctrlKey: boolean; getModifierState(key: string): boolean; metaKey: boolean; shiftKey: boolean; targetTouches: TouchList; touches: TouchList; } export interface UiEvent extends SyntheticEvent { detail: number; view: AbstractView; } export interface WheelEvent extends SyntheticEvent { deltaMode: number; deltaX: number; deltaY: number; deltaZ: number; } // Attributes interface DomAttributes { // HTML Attributes // Events onCopy?: (event: ClipboardEvent) => void; onCut?: (event: ClipboardEvent) => void; onPaste?: (event: ClipboardEvent) => void; onKeyDown?: (event: KeyboardEvent) => void; onKeyPress?: (event: KeyboardEvent) => void; onKeyUp?: (event: KeyboardEvent) => void; onFocus?: (event: FocusEvent) => void; onBlur?: (event: FocusEvent) => void; onChange?: (event: SyntheticEvent) => void; onInput?: (event: SyntheticEvent) => void; onSubmit?: (event: SyntheticEvent) => void; onClick?: (event: MouseEvent) => void; onDoubleClick?: (event: MouseEvent) => void; onDrag?: (event: MouseEvent) => void; onDragEnd?: (event: MouseEvent) => void; onDragEnter?: (event: MouseEvent) => void; onDragExit?: (event: MouseEvent) => void; onDragLeave?: (event: MouseEvent) => void; onDragOver?: (event: MouseEvent) => void; onDragStart?: (event: MouseEvent) => void; onDrop?: (event: MouseEvent) => void; onMouseDown?: (event: MouseEvent) => void; onMouseEnter?: (event: MouseEvent) => void; onMouseLeave?: (event: MouseEvent) => void; onMouseMove?: (event: MouseEvent) => void; onMouseOut?: (event: MouseEvent) => void; onMouseOver?: (event: MouseEvent) => void; onMouseUp?: (event: MouseEvent) => void; onTouchCancel?: (event: TouchEvent) => void; onTouchEnd?: (event: TouchEvent) => void; onTouchMove?: (event: TouchEvent) => void; onTouchStart?: (event: TouchEvent) => void; onScroll?: (event: UiEvent) => void; onWheel?: (event: WheelEvent) => void; } }