// Type definitions for React v0.14 // Project: http://facebook.github.io/react/ // Definitions by: Asana , AssureSign , Microsoft // Definitions: https://github.com/borisyankov/DefinitelyTyped declare namespace __React { // // React Elements // ---------------------------------------------------------------------- type ReactType = string | ComponentClass | StatelessComponent; interface ReactElement

> { type: string | ComponentClass

| StatelessComponent

; props: P; key: string | number; ref: string | ((component: Component | Element) => any); } interface ClassicElement

extends ReactElement

{ type: ClassicComponentClass

; ref: string | ((component: ClassicComponent) => any); } interface DOMElement

> extends ReactElement

{ type: string; ref: string | ((element: Element) => any); } interface ReactHTMLElement extends DOMElement> { ref: string | ((element: HTMLElement) => any); } interface ReactSVGElement extends DOMElement { ref: string | ((element: SVGElement) => any); } // // Factories // ---------------------------------------------------------------------- interface Factory

{ (props?: P, ...children: ReactNode[]): ReactElement

; } interface ClassicFactory

extends Factory

{ (props?: P, ...children: ReactNode[]): ClassicElement

; } interface DOMFactory

> extends Factory

{ (props?: P, ...children: ReactNode[]): DOMElement

; } type HTMLFactory = DOMFactory>; type SVGFactory = DOMFactory; // // React Nodes // http://facebook.github.io/react/docs/glossary.html // ---------------------------------------------------------------------- type ReactText = string | number; type ReactChild = ReactElement | ReactText; // Should be Array but type aliases cannot be recursive type ReactFragment = {} | Array; type ReactNode = ReactChild | ReactFragment | boolean; // // Top Level API // ---------------------------------------------------------------------- function createClass(spec: ComponentSpec): ClassicComponentClass

; function createFactory

(type: string): DOMFactory

; function createFactory

(type: ClassicComponentClass

): ClassicFactory

; function createFactory

(type: ComponentClass

| StatelessComponent

): Factory

; function createElement

( type: string, props?: P, ...children: ReactNode[]): DOMElement

; function createElement

( type: ClassicComponentClass

, props?: P, ...children: ReactNode[]): ClassicElement

; function createElement

( type: ComponentClass

| StatelessComponent

, props?: P, ...children: ReactNode[]): ReactElement

; function cloneElement

( element: DOMElement

, props?: P, ...children: ReactNode[]): DOMElement

; function cloneElement

( element: ClassicElement

, props?: P, ...children: ReactNode[]): ClassicElement

; function cloneElement

( element: ReactElement

, props?: P, ...children: ReactNode[]): ReactElement

; function isValidElement(object: {}): boolean; var DOM: ReactDOM; var PropTypes: ReactPropTypes; var Children: ReactChildren; // // Component API // ---------------------------------------------------------------------- type ReactInstance = Component | Element; // Base component for plain JS classes class Component implements ComponentLifecycle { constructor(props?: P, context?: any); setState(f: (prevState: S, props: P) => S, callback?: () => any): void; setState(state: S, callback?: () => any): void; forceUpdate(callBack?: () => any): void; render(): JSX.Element; props: P; state: S; context: {}; refs: { [key: string]: ReactInstance }; } interface ClassicComponent extends Component { replaceState(nextState: S, callback?: () => any): void; isMounted(): boolean; getInitialState?(): S; } interface ChildContextProvider { getChildContext(): CC; } // // Class Interfaces // ---------------------------------------------------------------------- interface StatelessComponent

{ (props?: P, context?: any): ReactElement; propTypes?: ValidationMap

; contextTypes?: ValidationMap; defaultProps?: P; } interface ComponentClass

{ new(props?: P, context?: any): Component; propTypes?: ValidationMap

; contextTypes?: ValidationMap; childContextTypes?: ValidationMap; defaultProps?: P; } interface ClassicComponentClass

extends ComponentClass

{ new(props?: P, context?: any): ClassicComponent; getDefaultProps?(): P; displayName?: string; } // // Component Specs and Lifecycle // ---------------------------------------------------------------------- interface ComponentLifecycle { componentWillMount?(): void; componentDidMount?(): void; componentWillReceiveProps?(nextProps: P, nextContext: any): void; shouldComponentUpdate?(nextProps: P, nextState: S, nextContext: any): boolean; componentWillUpdate?(nextProps: P, nextState: S, nextContext: any): void; componentDidUpdate?(prevProps: P, prevState: S, prevContext: any): void; componentWillUnmount?(): void; } interface Mixin extends ComponentLifecycle { mixins?: Mixin; statics?: { [key: string]: any; }; displayName?: string; propTypes?: ValidationMap; contextTypes?: ValidationMap; childContextTypes?: ValidationMap getDefaultProps?(): P; getInitialState?(): S; } interface ComponentSpec extends Mixin { render(): ReactElement; [propertyName: string]: any; } // // Event System // ---------------------------------------------------------------------- interface SyntheticEvent { bubbles: boolean; cancelable: boolean; currentTarget: EventTarget; defaultPrevented: boolean; eventPhase: number; isTrusted: boolean; nativeEvent: Event; preventDefault(): void; stopPropagation(): void; target: EventTarget; timeStamp: Date; type: string; } interface ClipboardEvent extends SyntheticEvent { clipboardData: DataTransfer; } interface CompositionEvent extends SyntheticEvent { data: string; } interface DragEvent extends SyntheticEvent { dataTransfer: DataTransfer; } interface FocusEvent extends SyntheticEvent { relatedTarget: EventTarget; } interface FormEvent extends SyntheticEvent { } 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; } 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; } interface TouchEvent extends SyntheticEvent { altKey: boolean; changedTouches: TouchList; ctrlKey: boolean; getModifierState(key: string): boolean; metaKey: boolean; shiftKey: boolean; targetTouches: TouchList; touches: TouchList; } interface UIEvent extends SyntheticEvent { detail: number; view: AbstractView; } interface WheelEvent extends SyntheticEvent { deltaMode: number; deltaX: number; deltaY: number; deltaZ: number; } // // Event Handler Types // ---------------------------------------------------------------------- interface EventHandler { (event: E): void; } type ReactEventHandler = EventHandler; type ClipboardEventHandler = EventHandler; type CompositionEventHandler = EventHandler; type DragEventHandler = EventHandler; type FocusEventHandler = EventHandler; type FormEventHandler = EventHandler; type KeyboardEventHandler = EventHandler; type MouseEventHandler = EventHandler; type TouchEventHandler = EventHandler; type UIEventHandler = EventHandler; type WheelEventHandler = EventHandler; // // Props / DOM Attributes // ---------------------------------------------------------------------- interface Props { children?: ReactNode; key?: string | number; ref?: string | ((component: T) => any); } interface HTMLProps extends HTMLAttributes, Props { } interface SVGProps extends SVGAttributes, Props { } interface DOMAttributes { dangerouslySetInnerHTML?: { __html: string; }; // Clipboard Events onCopy?: ClipboardEventHandler; onCut?: ClipboardEventHandler; onPaste?: ClipboardEventHandler; // Composition Events onCompositionEnd?: CompositionEventHandler; onCompositionStart?: CompositionEventHandler; onCompositionUpdate?: CompositionEventHandler; // Focus Events onFocus?: FocusEventHandler; onBlur?: FocusEventHandler; // Form Events onChange?: FormEventHandler; onInput?: FormEventHandler; onSubmit?: FormEventHandler; // Image Events onLoad?: ReactEventHandler; onError?: ReactEventHandler; // also a Media Event // Keyboard Events onKeyDown?: KeyboardEventHandler; onKeyPress?: KeyboardEventHandler; onKeyUp?: KeyboardEventHandler; // Media Events onAbort?: ReactEventHandler; onCanPlay?: ReactEventHandler; onCanPlayThrough?: ReactEventHandler; onDurationChange?: ReactEventHandler; onEmptied?: ReactEventHandler; onEncrypted?: ReactEventHandler; onEnded?: ReactEventHandler; onLoadedData?: ReactEventHandler; onLoadedMetadata?: ReactEventHandler; onLoadStart?: ReactEventHandler; onPause?: ReactEventHandler; onPlay?: ReactEventHandler; onPlaying?: ReactEventHandler; onProgress?: ReactEventHandler; onRateChange?: ReactEventHandler; onSeeked?: ReactEventHandler; onSeeking?: ReactEventHandler; onStalled?: ReactEventHandler; onSuspend?: ReactEventHandler; onTimeUpdate?: ReactEventHandler; onVolumeChange?: ReactEventHandler; onWaiting?: ReactEventHandler; // MouseEvents onClick?: MouseEventHandler; onContextMenu?: MouseEventHandler; onDoubleClick?: MouseEventHandler; onDrag?: DragEventHandler; onDragEnd?: DragEventHandler; onDragEnter?: DragEventHandler; onDragExit?: DragEventHandler; onDragLeave?: DragEventHandler; onDragOver?: DragEventHandler; onDragStart?: DragEventHandler; onDrop?: DragEventHandler; onMouseDown?: MouseEventHandler; onMouseEnter?: MouseEventHandler; onMouseLeave?: MouseEventHandler; onMouseMove?: MouseEventHandler; onMouseOut?: MouseEventHandler; onMouseOver?: MouseEventHandler; onMouseUp?: MouseEventHandler; // Selection Events onSelect?: ReactEventHandler; // Touch Events onTouchCancel?: TouchEventHandler; onTouchEnd?: TouchEventHandler; onTouchMove?: TouchEventHandler; onTouchStart?: TouchEventHandler; // UI Events onScroll?: UIEventHandler; // Wheel Events onWheel?: WheelEventHandler; } // This interface is not complete. Only properties accepting // unitless numbers are listed here (see CSSProperty.js in React) interface CSSProperties { boxFlex?: number; boxFlexGroup?: number; columnCount?: number; flex?: number | string; flexGrow?: number; flexShrink?: number; fontWeight?: number | string; lineClamp?: number; lineHeight?: number | string; opacity?: number; order?: number; orphans?: number; widows?: number; zIndex?: number; zoom?: number; fontSize?: number | string; // SVG-related properties fillOpacity?: number; strokeOpacity?: number; strokeWidth?: number; [propertyName: string]: any; } interface HTMLAttributes extends DOMAttributes { // React-specific Attributes defaultChecked?: boolean; defaultValue?: string | string[]; // Standard HTML Attributes accept?: string; acceptCharset?: string; accessKey?: string; action?: string; allowFullScreen?: boolean; allowTransparency?: boolean; alt?: string; async?: boolean; autoComplete?: string; autoFocus?: boolean; autoPlay?: boolean; capture?: boolean; cellPadding?: number | string; cellSpacing?: number | string; charSet?: string; challenge?: string; checked?: boolean; classID?: string; className?: string; cols?: number; colSpan?: number; content?: string; contentEditable?: boolean; contextMenu?: string; controls?: boolean; coords?: string; crossOrigin?: string; data?: string; dateTime?: string; default?: boolean; defer?: boolean; dir?: string; disabled?: boolean; download?: any; draggable?: boolean; encType?: string; form?: string; formAction?: string; formEncType?: string; formMethod?: string; formNoValidate?: boolean; formTarget?: string; frameBorder?: number | string; headers?: string; height?: number | string; hidden?: boolean; high?: number; href?: string; hrefLang?: string; htmlFor?: string; httpEquiv?: string; icon?: string; id?: string; inputMode?: string; integrity?: string; is?: string; keyParams?: string; keyType?: string; kind?: string; label?: string; lang?: string; list?: string; loop?: boolean; low?: number; manifest?: string; marginHeight?: number; marginWidth?: number; max?: number | string; maxLength?: number; media?: string; mediaGroup?: string; method?: string; min?: number | string; minLength?: number; multiple?: boolean; muted?: boolean; name?: string; noValidate?: boolean; open?: boolean; optimum?: number; pattern?: string; placeholder?: string; poster?: string; preload?: string; radioGroup?: string; readOnly?: boolean; rel?: string; required?: boolean; role?: string; rows?: number; rowSpan?: number; sandbox?: string; scope?: string; scoped?: boolean; scrolling?: string; seamless?: boolean; selected?: boolean; shape?: string; size?: number; sizes?: string; span?: number; spellCheck?: boolean; src?: string; srcDoc?: string; srcLang?: string; srcSet?: string; start?: number; step?: number | string; style?: CSSProperties; summary?: string; tabIndex?: number; target?: string; title?: string; type?: string; useMap?: string; value?: string | string[]; width?: number | string; wmode?: string; wrap?: string; // RDFa Attributes about?: string; datatype?: string; inlist?: any; prefix?: string; property?: string; resource?: string; typeof?: string; vocab?: string; // Non-standard Attributes autoCapitalize?: boolean; autoCorrect?: string; autoSave?: string; color?: string; itemProp?: string; itemScope?: boolean; itemType?: string; itemID?: string; itemRef?: string; results?: number; security?: string; unselectable?: boolean; } interface SVGAttributes extends HTMLAttributes { clipPath?: string; cx?: number | string; cy?: number | string; d?: string; dx?: number | string; dy?: number | string; fill?: string; fillOpacity?: number | string; fontFamily?: string; fontSize?: number | string; fx?: number | string; fy?: number | string; gradientTransform?: string; gradientUnits?: string; markerEnd?: string; markerMid?: string; markerStart?: string; offset?: number | string; opacity?: number | string; patternContentUnits?: string; patternUnits?: string; points?: string; preserveAspectRatio?: string; r?: number | string; rx?: number | string; ry?: number | string; spreadMethod?: string; stopColor?: string; stopOpacity?: number | string; stroke?: string; strokeDasharray?: string; strokeLinecap?: string; strokeOpacity?: number | string; strokeWidth?: number | string; textAnchor?: string; transform?: string; version?: string; viewBox?: string; x1?: number | string; x2?: number | string; x?: number | string; xlinkActuate?: string; xlinkArcrole?: string; xlinkHref?: string; xlinkRole?: string; xlinkShow?: string; xlinkTitle?: string; xlinkType?: string; xmlBase?: string; xmlLang?: string; xmlSpace?: string; y1?: number | string; y2?: number | string y?: number | string; } // // React.DOM // ---------------------------------------------------------------------- interface ReactDOM { // HTML a: HTMLFactory; abbr: HTMLFactory; address: HTMLFactory; area: HTMLFactory; article: HTMLFactory; aside: HTMLFactory; audio: HTMLFactory; b: HTMLFactory; base: HTMLFactory; bdi: HTMLFactory; bdo: HTMLFactory; big: HTMLFactory; blockquote: HTMLFactory; body: HTMLFactory; br: HTMLFactory; button: HTMLFactory; canvas: HTMLFactory; caption: HTMLFactory; cite: HTMLFactory; code: HTMLFactory; col: HTMLFactory; colgroup: HTMLFactory; data: HTMLFactory; datalist: HTMLFactory; dd: HTMLFactory; del: HTMLFactory; details: HTMLFactory; dfn: HTMLFactory; dialog: HTMLFactory; div: HTMLFactory; dl: HTMLFactory; dt: HTMLFactory; em: HTMLFactory; embed: HTMLFactory; fieldset: HTMLFactory; figcaption: HTMLFactory; figure: HTMLFactory; footer: HTMLFactory; form: HTMLFactory; h1: HTMLFactory; h2: HTMLFactory; h3: HTMLFactory; h4: HTMLFactory; h5: HTMLFactory; h6: HTMLFactory; head: HTMLFactory; header: HTMLFactory; hr: HTMLFactory; html: HTMLFactory; i: HTMLFactory; iframe: HTMLFactory; img: HTMLFactory; input: HTMLFactory; ins: HTMLFactory; kbd: HTMLFactory; keygen: HTMLFactory; label: HTMLFactory; legend: HTMLFactory; li: HTMLFactory; link: HTMLFactory; main: HTMLFactory; map: HTMLFactory; mark: HTMLFactory; menu: HTMLFactory; menuitem: HTMLFactory; meta: HTMLFactory; meter: HTMLFactory; nav: HTMLFactory; noscript: HTMLFactory; object: HTMLFactory; ol: HTMLFactory; optgroup: HTMLFactory; option: HTMLFactory; output: HTMLFactory; p: HTMLFactory; param: HTMLFactory; picture: HTMLFactory; pre: HTMLFactory; progress: HTMLFactory; q: HTMLFactory; rp: HTMLFactory; rt: HTMLFactory; ruby: HTMLFactory; s: HTMLFactory; samp: HTMLFactory; script: HTMLFactory; section: HTMLFactory; select: HTMLFactory; small: HTMLFactory; source: HTMLFactory; span: HTMLFactory; strong: HTMLFactory; style: HTMLFactory; sub: HTMLFactory; summary: HTMLFactory; sup: HTMLFactory; table: HTMLFactory; tbody: HTMLFactory; td: HTMLFactory; textarea: HTMLFactory; tfoot: HTMLFactory; th: HTMLFactory; thead: HTMLFactory; time: HTMLFactory; title: HTMLFactory; tr: HTMLFactory; track: HTMLFactory; u: HTMLFactory; ul: HTMLFactory; "var": HTMLFactory; video: HTMLFactory; wbr: HTMLFactory; // SVG svg: SVGFactory; circle: SVGFactory; defs: SVGFactory; ellipse: SVGFactory; g: SVGFactory; image: SVGFactory; line: SVGFactory; linearGradient: SVGFactory; mask: SVGFactory; path: SVGFactory; pattern: SVGFactory; polygon: SVGFactory; polyline: SVGFactory; radialGradient: SVGFactory; rect: SVGFactory; stop: SVGFactory; text: SVGFactory; tspan: SVGFactory; } // // React.PropTypes // ---------------------------------------------------------------------- interface Validator { (object: T, key: string, componentName: string): Error; } interface Requireable extends Validator { isRequired: Validator; } interface ValidationMap { [key: string]: Validator; } interface ReactPropTypes { any: Requireable; array: Requireable; bool: Requireable; func: Requireable; number: Requireable; object: Requireable; string: Requireable; node: Requireable; element: Requireable; instanceOf(expectedClass: {}): Requireable; oneOf(types: any[]): Requireable; oneOfType(types: Validator[]): Requireable; arrayOf(type: Validator): Requireable; objectOf(type: Validator): Requireable; shape(type: ValidationMap): Requireable; } // // React.Children // ---------------------------------------------------------------------- interface ReactChildren { map(children: ReactNode, fn: (child: ReactChild, index: number) => T): T[]; forEach(children: ReactNode, fn: (child: ReactChild, index: number) => any): void; count(children: ReactNode): number; only(children: ReactNode): ReactChild; toArray(children: ReactNode): ReactChild[]; } // // Browser Interfaces // 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; } } declare module "react" { export = __React; } declare namespace JSX { import React = __React; interface Element extends React.ReactElement { } interface ElementClass extends React.Component { render(): JSX.Element; } interface ElementAttributesProperty { props: {}; } interface IntrinsicAttributes { key?: string | number; } interface IntrinsicClassAttributes { ref?: string | ((classInstance: T) => void); } interface IntrinsicElements { // HTML a: React.HTMLProps; abbr: React.HTMLProps; address: React.HTMLProps; area: React.HTMLProps; article: React.HTMLProps; aside: React.HTMLProps; audio: React.HTMLProps; b: React.HTMLProps; base: React.HTMLProps; bdi: React.HTMLProps; bdo: React.HTMLProps; big: React.HTMLProps; blockquote: React.HTMLProps; body: React.HTMLProps; br: React.HTMLProps; button: React.HTMLProps; canvas: React.HTMLProps; caption: React.HTMLProps; cite: React.HTMLProps; code: React.HTMLProps; col: React.HTMLProps; colgroup: React.HTMLProps; data: React.HTMLProps; datalist: React.HTMLProps; dd: React.HTMLProps; del: React.HTMLProps; details: React.HTMLProps; dfn: React.HTMLProps; dialog: React.HTMLProps; div: React.HTMLProps; dl: React.HTMLProps; dt: React.HTMLProps; em: React.HTMLProps; embed: React.HTMLProps; fieldset: React.HTMLProps; figcaption: React.HTMLProps; figure: React.HTMLProps; footer: React.HTMLProps; form: React.HTMLProps; h1: React.HTMLProps; h2: React.HTMLProps; h3: React.HTMLProps; h4: React.HTMLProps; h5: React.HTMLProps; h6: React.HTMLProps; head: React.HTMLProps; header: React.HTMLProps; hr: React.HTMLProps; html: React.HTMLProps; i: React.HTMLProps; iframe: React.HTMLProps; img: React.HTMLProps; input: React.HTMLProps; ins: React.HTMLProps; kbd: React.HTMLProps; keygen: React.HTMLProps; label: React.HTMLProps; legend: React.HTMLProps; li: React.HTMLProps; link: React.HTMLProps; main: React.HTMLProps; map: React.HTMLProps; mark: React.HTMLProps; menu: React.HTMLProps; menuitem: React.HTMLProps; meta: React.HTMLProps; meter: React.HTMLProps; nav: React.HTMLProps; noscript: React.HTMLProps; object: React.HTMLProps; ol: React.HTMLProps; optgroup: React.HTMLProps; option: React.HTMLProps; output: React.HTMLProps; p: React.HTMLProps; param: React.HTMLProps; picture: React.HTMLProps; pre: React.HTMLProps; progress: React.HTMLProps; q: React.HTMLProps; rp: React.HTMLProps; rt: React.HTMLProps; ruby: React.HTMLProps; s: React.HTMLProps; samp: React.HTMLProps; script: React.HTMLProps; section: React.HTMLProps; select: React.HTMLProps; small: React.HTMLProps; source: React.HTMLProps; span: React.HTMLProps; strong: React.HTMLProps; style: React.HTMLProps; sub: React.HTMLProps; summary: React.HTMLProps; sup: React.HTMLProps; table: React.HTMLProps; tbody: React.HTMLProps; td: React.HTMLProps; textarea: React.HTMLProps; tfoot: React.HTMLProps; th: React.HTMLProps; thead: React.HTMLProps; time: React.HTMLProps; title: React.HTMLProps; tr: React.HTMLProps; track: React.HTMLProps; u: React.HTMLProps; ul: React.HTMLProps; "var": React.HTMLProps; video: React.HTMLProps; wbr: React.HTMLProps; // SVG svg: React.SVGProps; circle: React.SVGProps; defs: React.SVGProps; ellipse: React.SVGProps; g: React.SVGProps; image: React.SVGProps; line: React.SVGProps; linearGradient: React.SVGProps; mask: React.SVGProps; path: React.SVGProps; pattern: React.SVGProps; polygon: React.SVGProps; polyline: React.SVGProps; radialGradient: React.SVGProps; rect: React.SVGProps; stop: React.SVGProps; text: React.SVGProps; tspan: React.SVGProps; } }