diff --git a/express/express.d.ts b/express/express.d.ts
index 523f8f7c6..db1981d5d 100644
--- a/express/express.d.ts
+++ b/express/express.d.ts
@@ -110,6 +110,7 @@ declare module "express" {
use(path: string[], handler: ErrorRequestHandler): T;
use(path: RegExp, ...handler: RequestHandler[]): T;
use(path: RegExp, handler: ErrorRequestHandler): T;
+ use(path:string, router:Router): T;
}
export function Router(options?: any): Router;
diff --git a/fixed-data-table/fixed-data-table-tests.tsx b/fixed-data-table/fixed-data-table-tests.tsx
index 9265186fb..28dae2890 100644
--- a/fixed-data-table/fixed-data-table-tests.tsx
+++ b/fixed-data-table/fixed-data-table-tests.tsx
@@ -1,7 +1,9 @@
///
///
+///
import * as React from "react";
+import * as ReactDOM from "react-dom";
import * as FixedDataTable from "fixed-data-table";
var rows = [
@@ -34,4 +36,4 @@ function rowGetter(rowIndex: number) {
/>
-React.render(table, document.body);
+ReactDOM.render(table, document.body);
diff --git a/jsnox/jsnox-tests.ts b/jsnox/jsnox-tests.ts
index e34d71b4a..33e58720e 100644
--- a/jsnox/jsnox-tests.ts
+++ b/jsnox/jsnox-tests.ts
@@ -19,7 +19,7 @@ var clickHandler: React.MouseEventHandler
// Tests with spec string
function spec_string () {
- var result: React.HTMLComponent
+ var result: React.ReactHTMLElement
// just spec string
result = $('div')
diff --git a/jsnox/jsnox.d.ts b/jsnox/jsnox.d.ts
index dfb59e280..22291956d 100644
--- a/jsnox/jsnox.d.ts
+++ b/jsnox/jsnox.d.ts
@@ -31,7 +31,7 @@ declare module 'jsnox' {
* @param children A single React node (string or ReactElement) or array of nodes.
* Note that unlike with React itself, multiple children must be placed into an array.
*/
- (specString: string, children: React.ReactNode): React.HTMLComponent
+
(specString: string, children: React.ReactNode): React.DOMElement
/**
* Renders an HTML element from the given spec string, with optional props
@@ -42,7 +42,7 @@ declare module 'jsnox' {
* @param children A single React node (string or ReactElement) or array of nodes.
* Note that unlike with React itself, multiple children must be placed into an array.
*/
- (specString: string, props?: React.HTMLAttributes, children?: React.ReactNode): React.HTMLComponent
+
(specString: string, props?: React.HTMLAttributes, children?: React.ReactNode): React.DOMElement
/**
diff --git a/knockout/knockout.d.ts b/knockout/knockout.d.ts
index bee7041de..8f5d6fef4 100644
--- a/knockout/knockout.d.ts
+++ b/knockout/knockout.d.ts
@@ -142,6 +142,7 @@ interface KnockoutAllBindingsAccessor {
}
interface KnockoutBindingHandler {
+ after?: Array;
init?: (element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) => void | { controlsDescendantBindings: boolean; };
update?: (element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) => void;
options?: any;
diff --git a/leaflet/leaflet.d.ts b/leaflet/leaflet.d.ts
index cc4aa51b6..565a3c25d 100755
--- a/leaflet/leaflet.d.ts
+++ b/leaflet/leaflet.d.ts
@@ -4176,6 +4176,11 @@ declare namespace L {
* When this option is set, the TileLayer only loads tiles that are in the given geographical bounds.
*/
bounds?: LatLngBounds;
+
+ /**
+ * Custom keys may be specified in TileLayerOptions so they can be used in a provided URL template.
+ */
+ [additionalKeys: string]: any;
}
}
diff --git a/material-ui/legacy/material-ui-0.11.1-tests.tsx b/material-ui/legacy/material-ui-0.11.1-tests.tsx
index c686efa9e..ffc360963 100644
--- a/material-ui/legacy/material-ui-0.11.1-tests.tsx
+++ b/material-ui/legacy/material-ui-0.11.1-tests.tsx
@@ -1,7 +1,9 @@
///
+///
///
-import * as React from "react/addons";
+import * as React from "react";
+import * as LinkedStateMixin from "react-addons-linked-state-mixin";
import mui = require("material-ui");
import Colors = require("material-ui/lib/styles/colors");
import AppBar = require("material-ui/lib/app-bar");
diff --git a/material-ui/legacy/material-ui-0.11.1.d.ts b/material-ui/legacy/material-ui-0.11.1.d.ts
index 7f464bc57..f974c33be 100644
--- a/material-ui/legacy/material-ui-0.11.1.d.ts
+++ b/material-ui/legacy/material-ui-0.11.1.d.ts
@@ -233,7 +233,7 @@ declare namespace __MaterialUI {
}
// what's not commonly overridden by Checkbox, RadioButton, or Toggle
- interface CommonEnhancedSwitchProps extends React.HTMLAttributesBase {
+ interface CommonEnhancedSwitchProps extends React.HTMLAttributes, React.Props {
// is root element
id?: string;
iconStyle?: React.CSSProperties;
@@ -412,7 +412,7 @@ declare namespace __MaterialUI {
}
// non generally overridden elements of EnhancedButton
- interface SharedEnhancedButtonProps extends React.HTMLAttributesBase {
+ interface SharedEnhancedButtonProps extends React.HTMLAttributes, React.Props {
centerRipple?: boolean;
containerElement?: string | React.ReactElement;
disabled?: boolean;
diff --git a/material-ui/material-ui-tests.tsx b/material-ui/material-ui-tests.tsx
index 4c69f3410..4e1e920d7 100644
--- a/material-ui/material-ui-tests.tsx
+++ b/material-ui/material-ui-tests.tsx
@@ -1,7 +1,9 @@
///
+///
///
-import * as React from "react/addons";
+import * as React from "react";
+import * as LinkedStateMixin from "react-addons-linked-state-mixin";
import Checkbox = require("material-ui/lib/checkbox");
import Colors = require("material-ui/lib/styles/colors");
import AppBar = require("material-ui/lib/app-bar");
diff --git a/material-ui/material-ui.d.ts b/material-ui/material-ui.d.ts
index ecd32ae06..c31925d6f 100644
--- a/material-ui/material-ui.d.ts
+++ b/material-ui/material-ui.d.ts
@@ -222,7 +222,7 @@ declare namespace __MaterialUI {
}
// what's not commonly overridden by Checkbox, RadioButton, or Toggle
- interface CommonEnhancedSwitchProps extends React.HTMLAttributesBase {
+ interface CommonEnhancedSwitchProps extends React.HTMLAttributes, React.Props {
// is root element
id?: string;
iconStyle?: React.CSSProperties;
@@ -402,7 +402,7 @@ declare namespace __MaterialUI {
}
// non generally overridden elements of EnhancedButton
- interface SharedEnhancedButtonProps extends React.HTMLAttributesBase {
+ interface SharedEnhancedButtonProps extends React.HTMLAttributes, React.Props {
centerRipple?: boolean;
containerElement?: string | React.ReactElement;
disabled?: boolean;
@@ -644,7 +644,7 @@ declare namespace __MaterialUI {
export class Overlay extends React.Component {
}
- interface PaperProps extends React.HTMLAttributesBase {
+ interface PaperProps extends React.HTMLAttributes, React.Props {
circle?: boolean;
rounded?: boolean;
transitionEnabled?: boolean;
@@ -1304,7 +1304,7 @@ declare namespace __MaterialUI {
export class ToolbarSeparator extends React.Component {
}
- interface ToolbarTitleProps extends React.HTMLAttributesBase {
+ interface ToolbarTitleProps extends React.HTMLAttributes, React.Props {
text?: string;
}
export class ToolbarTitle extends React.Component {
diff --git a/mobservable-react/mobservable-react-tests.ts b/mobservable-react/mobservable-react-tests.ts
index 7b39dbb7f..1bf2b49c6 100644
--- a/mobservable-react/mobservable-react-tests.ts
+++ b/mobservable-react/mobservable-react-tests.ts
@@ -17,7 +17,7 @@ import {reactiveComponent} from 'mobservable-react';
}));
let c1Factory = React.createFactory(c1);
- React.render(c1Factory({
+ ReactDOM.render(c1Factory({
test: "hello"
}), null);
}
@@ -31,7 +31,7 @@ class TestComponent extends React.Component<{ test: string },{}> {
{
let c2Factory = React.createFactory(TestComponent);
- React.render(c2Factory({
+ ReactDOM.render(c2Factory({
test: "hello"
}) , null);
}
@@ -39,7 +39,7 @@ class TestComponent extends React.Component<{ test: string },{}> {
{
var c3 = reactiveComponent((props: { test: string }) => React.createElement("div"));
var c3Factory = React.createFactory(c3); //without JSX
- React.render(c3Factory({
+ ReactDOM.render(c3Factory({
test: "hello"
}), null);
}
@@ -55,7 +55,7 @@ class TestComponent2 extends React.Component<{ test: string },{}> {
// Argument of type 'typeof TestComponent2 | void' is not assignable to parameter of type 'ComponentClass<{ test: string; }>'.
// Type 'void' is not assignable to type 'ComponentClass<{ test: string; }>'.
let c4Factory = React.createFactory(> reactiveComponent(TestComponent2));
- React.render(c4Factory({
+ ReactDOM.render(c4Factory({
test: "hello"
}) , null);
}
\ No newline at end of file
diff --git a/react-dom/react-dom.d.ts b/react-dom/react-dom.d.ts
deleted file mode 100644
index 1351fa02e..000000000
--- a/react-dom/react-dom.d.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-// Type definitions for React-DOM v0.14.0-rc
-// Project: https://www.npmjs.com/package/react-dom
-// Definitions by: Stefan-Bieliauskas
-// Definitions: https://github.com/borisyankov/DefinitelyTyped
-
-///
-
-declare namespace __ReactDom {
- function render(
- element: __React.DOMElement
,
- container: Element,
- callback?: () => any): __React.DOMComponent
;
- function render
(
- element: __React.ClassicElement
,
- container: Element,
- callback?: () => any): __React.ClassicComponent
;
- function render
(
- element: __React.ReactElement
,
- container: Element,
- callback?: () => any): __React.Component
;
-
- function findDOMNode(
- componentOrElement: __React.Component | Element): TElement;
- function findDOMNode(
- componentOrElement: __React.Component | Element): Element;
-
- function unmountComponentAtNode(container: Element): boolean;
-}
-
-declare namespace __ReactDomServer {
- function renderToString(element: __React.ReactElement): string;
- function renderToStaticMarkup(element: __React.ReactElement): string;
-}
-declare module "react-dom" {
- export = __ReactDom
-}
-
-declare module "react-dom/server" {
- export = __ReactDomServer
-}
diff --git a/react-input-calendar/react-input-calendar-tests.tsx b/react-input-calendar/react-input-calendar-tests.tsx
index 127106424..9cc4963fb 100644
--- a/react-input-calendar/react-input-calendar-tests.tsx
+++ b/react-input-calendar/react-input-calendar-tests.tsx
@@ -1,6 +1,8 @@
///
///
+///
import * as ReactInputCalendar from 'react-input-calendar';
import * as React from 'react';
-React.render( , document.body);
+import * as ReactDOM from 'react-dom';
+ReactDOM.render( , document.body);
diff --git a/react-native/react-native.d.ts b/react-native/react-native.d.ts
index 485fdf5c0..2b6f076d0 100644
--- a/react-native/react-native.d.ts
+++ b/react-native/react-native.d.ts
@@ -2274,8 +2274,8 @@ declare namespace ReactNative {
export interface DOMElement extends React.DOMElement
{}
- export type HTMLElement =React.HTMLElement;
- export type SVGElement = React.SVGElement;
+ export type HTMLElement =React.ReactHTMLElement;
+ export type SVGElement = React.ReactSVGElement;
//
// Factories
@@ -2289,7 +2289,6 @@ declare namespace ReactNative {
export type HTMLFactory = React.HTMLFactory;
export type SVGFactory = React.SVGFactory;
- export type SVGElementFactory = React.SVGElementFactory;
//
// React Nodes
@@ -2352,9 +2351,6 @@ declare namespace ReactNative {
tagName: string;
}
- export type HTMLComponent = React.HTMLComponent;
- export type SVGComponent = React.SVGComponent
-
export interface ChildContextProvider extends React.ChildContextProvider {}
//
@@ -2422,20 +2418,14 @@ declare namespace ReactNative {
export interface Props extends React.Props {}
- export interface DOMAttributesBase extends React.DOMAttributesBase {}
-
export interface DOMAttributes extends React.DOMAttributes {}
// This interface is not complete. Only properties accepting
// unitless numbers are listed here (see CSSProperty.js in React)
export interface CSSProperties extends React.CSSProperties {}
- export interface HTMLAttributesBase extends React.HTMLAttributesBase {}
-
export interface HTMLAttributes extends React.HTMLAttributes {}
- export interface SVGElementAttributes extends React.SVGElementAttributes {}
-
export interface SVGAttributes extends React.SVGAttributes {}
//
diff --git a/react-redux/react-redux-tests.tsx b/react-redux/react-redux-tests.tsx
index abbacabef..a44c0bfaa 100644
--- a/react-redux/react-redux-tests.tsx
+++ b/react-redux/react-redux-tests.tsx
@@ -1,11 +1,13 @@
///
///
+///
///
///
///
import { Component, ReactElement } from 'react';
import * as React from 'react';
+import * as ReactDOM from 'react-dom';
import * as Router from 'react-router';
import { Route, RouterState } from 'react-router';
import { Store, Dispatch, bindActionCreators } from 'redux';
@@ -65,7 +67,7 @@ class App extends Component {
const targetEl = document.getElementById('root');
-React.render((
+ReactDOM.render((
{() => }
@@ -100,7 +102,7 @@ declare var addTodo: () => { type: string; };
declare var todoActionCreators: { [type: string]: (...args: any[]) => any; };
declare var counterActionCreators: { [type: string]: (...args: any[]) => any; };
-React.render(
+ReactDOM.render(
{() => }
,
@@ -108,7 +110,7 @@ React.render(
);
Router.run(routes, Router.HistoryLocation, (Handler, routerState) => { // note "routerState" here
- React.render(
+ ReactDOM.render(
{/*
//TODO: error TS2339: Property 'routerState' does not exist on type 'RouteProp'.
@@ -121,7 +123,7 @@ Router.run(routes, Router.HistoryLocation, (Handler, routerState) => { // note "
//TODO: for React Router 1.0
//TODO: error TS2604: JSX element type 'Router' does not have any construct or call signatures.
-//React.render(
+//ReactDOM.render(
//
// {() => ... }
// ,
diff --git a/react-router/react-router-tests.ts b/react-router/react-router-tests.ts
index 54b0545e2..7c80d740a 100644
--- a/react-router/react-router-tests.ts
+++ b/react-router/react-router-tests.ts
@@ -1,8 +1,9 @@
///
+///
"use strict";
import React = require('react');
-import ReactAddons = require('react/addons');
+import ReactDOM = require('react-dom');
import Router = require('react-router');
// Mixin
@@ -129,9 +130,6 @@ class DefaultRouteTest {
var Handler: React.ComponentClass;
React.createElement(Router.DefaultRoute, null);
React.createElement(Router.DefaultRoute, {name: 'name', handler: Handler});
-
- ReactAddons.createElement(Router.DefaultRoute, null);
- ReactAddons.createElement(Router.DefaultRoute, {name: 'name', handler: Handler});
}
}
@@ -169,16 +167,6 @@ class LinkTest {
query: {},
onClick: () => console.log(1)
});
-
- ReactAddons.createElement(Router.Link, null);
- ReactAddons.createElement(Router.Link, {to: 'home'});
- ReactAddons.createElement(Router.Link, {
- activeClassName: 'name',
- to: 'home',
- params: {},
- query: {},
- onClick: () => console.log(1)
- });
}
}
@@ -195,10 +183,6 @@ class NotFoundRouteTest {
React.createElement(Router.NotFoundRoute, null);
React.createElement(Router.NotFoundRoute, {handler: Handler});
React.createElement(Router.NotFoundRoute, {handler: Handler, name: "home"});
-
- ReactAddons.createElement(Router.NotFoundRoute, null);
- ReactAddons.createElement(Router.NotFoundRoute, {handler: Handler});
- ReactAddons.createElement(Router.NotFoundRoute, {handler: Handler, name: "home"});
}
}
@@ -215,10 +199,6 @@ class RedirectTest {
React.createElement(Router.Redirect, null);
React.createElement(Router.Redirect, {});
React.createElement(Router.Redirect, {path: 'a', from: 'a', to: 'b'});
-
- ReactAddons.createElement(Router.Redirect, null);
- ReactAddons.createElement(Router.Redirect, {});
- ReactAddons.createElement(Router.Redirect, {path: 'a', from: 'a', to: 'b'});
}
}
@@ -237,10 +217,6 @@ class RouteTest {
React.createElement(Router.Route, null);
React.createElement(Router.Route, {});
React.createElement(Router.Route, {name: "home", path: "/", handler: Handler, ignoreScrollBehavior: true});
-
- ReactAddons.createElement(Router.Route, null);
- ReactAddons.createElement(Router.Route, {});
- ReactAddons.createElement(Router.Route, {name: "home", path: "/", handler: Handler, ignoreScrollBehavior: true});
}
}
@@ -250,9 +226,6 @@ class RouteHandlerTest {
createElement() {
React.createElement(Router.RouteHandler, null);
React.createElement(Router.RouteHandler, {});
-
- ReactAddons.createElement(Router.RouteHandler, null);
- ReactAddons.createElement(Router.RouteHandler, {});
}
}
@@ -307,24 +280,24 @@ class RunTest {
constructor() {
// React.createElement() version
var v1: Router.Router = Router.run(React.createElement(Router.Route, null), (Handler) => {
- React.render(React.createElement(Handler, null), document.body);
+ ReactDOM.render(React.createElement(Handler, null), document.body);
});
var v2: Router.Router = Router.run(React.createElement(Router.Route, null), Router.HistoryLocation, (Handler, state) => {
- React.render(React.createElement(Handler, null), document.body);
+ ReactDOM.render(React.createElement(Handler, null), document.body);
});
var v3: Router.Router = Router.run(React.createElement(Router.Route, null), '/foo/bar', (Handler, state) => {
- React.render(React.createElement(Handler, null), document.body);
+ ReactDOM.render(React.createElement(Handler, null), document.body);
});
// React.createFactory() version
var v4: Router.Router = Router.run(React.createFactory(Router.Route)(), (Handler) => {
- React.render(React.createElement(Handler, null), document.body);
+ ReactDOM.render(React.createElement(Handler, null), document.body);
});
var v5: Router.Router = Router.run(React.createFactory(Router.Route)(), Router.HistoryLocation, (Handler, state) => {
- React.render(React.createElement(Handler, null), document.body);
+ ReactDOM.render(React.createElement(Handler, null), document.body);
});
var v6: Router.Router = Router.run(React.createFactory(Router.Route)(), '/foo/bar', (Handler, state) => {
- React.render(React.createElement(Handler, null), document.body);
+ ReactDOM.render(React.createElement(Handler, null), document.body);
});
}
}
diff --git a/react/README.md b/react/README.md
index b7ff4b55e..8990e8a71 100644
--- a/react/README.md
+++ b/react/README.md
@@ -1,5 +1,5 @@
-# React v0.13.3 Type Definitions
+# React v0.14.2 Type Definitions
-This folder contains the following `.d.ts` files:
-* `react.d.ts` declares the module `"react"` and `"react/addons"`
-* `react-global.d.ts` declares the global namespace `React` (only include this if you are actually using the global `React`)
+If you are using modules you should use `react.d.ts`, `react-dom.d.ts` and any of the `react-addon-*.d.ts` definition files.
+
+If you are using the global `React` variable, you should use `react-global.d.ts`.
diff --git a/react/react-0.13.3.d.ts b/react/react-0.13.3.d.ts
new file mode 100644
index 000000000..de8ba6732
--- /dev/null
+++ b/react/react-0.13.3.d.ts
@@ -0,0 +1,2038 @@
+// Type definitions for React v0.13.3
+// Project: http://facebook.github.io/react/
+// Definitions by: Asana , AssureSign , Microsoft
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare namespace __React {
+ //
+ // React Elements
+ // ----------------------------------------------------------------------
+
+ type ReactType = ComponentClass | string;
+
+ interface ReactElement {
+ type: string | ComponentClass
;
+ props: P;
+ key: string | number;
+ ref: string | ((component: Component
) => any);
+ }
+
+ interface ClassicElement
extends ReactElement
{
+ type: string | ClassicComponentClass
;
+ ref: string | ((component: ClassicComponent
) => any);
+ }
+
+ interface DOMElement
extends ClassicElement
{
+ type: string;
+ ref: string | ((component: DOMComponent
) => any);
+ }
+
+ type HTMLElement = DOMElement;
+ type SVGElement = DOMElement;
+
+ //
+ // Factories
+ // ----------------------------------------------------------------------
+
+ interface Factory {
+ (props?: P, ...children: ReactNode[]): ReactElement
;
+ }
+
+ interface ClassicFactory
extends Factory
{
+ (props?: P, ...children: ReactNode[]): ClassicElement
;
+ }
+
+ interface DOMFactory
extends ClassicFactory
{
+ (props?: P, ...children: ReactNode[]): DOMElement
;
+ }
+
+ type HTMLFactory = DOMFactory;
+ type SVGFactory = DOMFactory;
+ type SVGElementFactory = 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
| string): ClassicFactory
;
+ function createFactory
(type: ComponentClass
): Factory
;
+
+ function createElement
(
+ type: string,
+ props?: P,
+ ...children: ReactNode[]): DOMElement
;
+ function createElement
(
+ type: ClassicComponentClass
| string,
+ props?: P,
+ ...children: ReactNode[]): ClassicElement
;
+ function createElement
(
+ type: ComponentClass
,
+ 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 render
(
+ element: DOMElement
,
+ container: Element,
+ callback?: () => any): DOMComponent
;
+ function render
(
+ element: ClassicElement
,
+ container: Element,
+ callback?: () => any): ClassicComponent
;
+ function render
(
+ element: ReactElement
,
+ container: Element,
+ callback?: () => any): Component
;
+
+ function unmountComponentAtNode(container: Element): boolean;
+ function renderToString(element: ReactElement): string;
+ function renderToStaticMarkup(element: ReactElement): string;
+ function isValidElement(object: {}): boolean;
+ function initializeTouchEvents(shouldUseTouch: boolean): void;
+
+ function findDOMNode(
+ componentOrElement: Component | Element): TElement;
+ function findDOMNode(
+ componentOrElement: Component | Element): Element;
+
+ var DOM: ReactDOM;
+ var PropTypes: ReactPropTypes;
+ var Children: ReactChildren;
+
+ //
+ // Component API
+ // ----------------------------------------------------------------------
+
+ // Base component for plain JS classes
+ class Component implements ComponentLifecycle
{
+ static propTypes: ValidationMap;
+ static contextTypes: ValidationMap;
+ static childContextTypes: ValidationMap;
+ static defaultProps: Props;
+
+ 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]: Component
+ };
+ }
+
+ interface ClassicComponent extends Component
{
+ replaceState(nextState: S, callback?: () => any): void;
+ getDOMNode(): TElement;
+ getDOMNode(): Element;
+ isMounted(): boolean;
+ getInitialState?(): S;
+ setProps(nextProps: P, callback?: () => any): void;
+ replaceProps(nextProps: P, callback?: () => any): void;
+ }
+
+ interface DOMComponent extends ClassicComponent
{
+ tagName: string;
+ }
+
+ type HTMLComponent = DOMComponent;
+ type SVGComponent = DOMComponent;
+
+ interface ChildContextProvider {
+ getChildContext(): CC;
+ }
+
+ //
+ // Class Interfaces
+ // ----------------------------------------------------------------------
+
+ 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 DragEvent extends SyntheticEvent {
+ dataTransfer: DataTransfer;
+ }
+
+ interface ClipboardEvent extends SyntheticEvent {
+ clipboardData: DataTransfer;
+ }
+
+ 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 FocusEvent extends SyntheticEvent {
+ relatedTarget: EventTarget;
+ }
+
+ interface FormEvent extends SyntheticEvent {
+ }
+
+ 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;
+ }
+
+ interface DragEventHandler extends EventHandler {}
+ interface ClipboardEventHandler extends EventHandler {}
+ interface KeyboardEventHandler extends EventHandler {}
+ interface FocusEventHandler extends EventHandler {}
+ interface FormEventHandler extends EventHandler {}
+ interface MouseEventHandler extends EventHandler {}
+ interface TouchEventHandler extends EventHandler {}
+ interface UIEventHandler extends EventHandler {}
+ interface WheelEventHandler extends EventHandler {}
+
+ //
+ // Props / DOM Attributes
+ // ----------------------------------------------------------------------
+
+ interface Props {
+ children?: ReactNode;
+ key?: string | number;
+ ref?: string | ((component: T) => any);
+ }
+
+ interface DOMAttributesBase extends Props {
+ onCopy?: ClipboardEventHandler;
+ onCut?: ClipboardEventHandler;
+ onPaste?: ClipboardEventHandler;
+ onKeyDown?: KeyboardEventHandler;
+ onKeyPress?: KeyboardEventHandler;
+ onKeyUp?: KeyboardEventHandler;
+ onFocus?: FocusEventHandler;
+ onBlur?: FocusEventHandler;
+ onChange?: FormEventHandler;
+ onInput?: FormEventHandler;
+ onSubmit?: FormEventHandler;
+ 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;
+ onTouchCancel?: TouchEventHandler;
+ onTouchEnd?: TouchEventHandler;
+ onTouchMove?: TouchEventHandler;
+ onTouchStart?: TouchEventHandler;
+ onScroll?: UIEventHandler;
+ onWheel?: WheelEventHandler;
+
+ className?: string;
+ id?: string;
+
+ dangerouslySetInnerHTML?: {
+ __html: string;
+ };
+ }
+
+ interface DOMAttributes extends DOMAttributesBase> {
+ }
+
+ // 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 HTMLAttributesBase extends DOMAttributesBase {
+ accept?: string;
+ acceptCharset?: string;
+ accessKey?: string;
+ action?: string;
+ allowFullScreen?: boolean;
+ allowTransparency?: boolean;
+ alt?: string;
+ async?: boolean;
+ autoComplete?: boolean;
+ autoFocus?: boolean;
+ autoPlay?: boolean;
+ cellPadding?: number | string;
+ cellSpacing?: number | string;
+ charSet?: string;
+ checked?: boolean;
+ classID?: string;
+ cols?: number;
+ colSpan?: number;
+ content?: string;
+ contentEditable?: boolean;
+ contextMenu?: string;
+ controls?: any;
+ coords?: string;
+ crossOrigin?: string;
+ data?: string;
+ dateTime?: string;
+ defaultChecked?: boolean;
+ defaultValue?: string;
+ 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;
+ 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;
+ 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;
+ srcSet?: string;
+ start?: number;
+ step?: number | string;
+ style?: CSSProperties;
+ tabIndex?: number;
+ target?: string;
+ title?: string;
+ type?: string;
+ useMap?: string;
+ value?: string;
+ width?: number | string;
+ wmode?: string;
+
+ // Non-standard Attributes
+ autoCapitalize?: boolean;
+ autoCorrect?: boolean;
+ property?: string;
+ itemProp?: string;
+ itemScope?: boolean;
+ itemType?: string;
+ unselectable?: boolean;
+ }
+
+ interface HTMLAttributes extends HTMLAttributesBase {
+ }
+
+ interface SVGElementAttributes extends HTMLAttributes {
+ viewBox?: string;
+ preserveAspectRatio?: string;
+ }
+
+ interface SVGAttributes extends DOMAttributes {
+ ref?: string | ((component: SVGComponent) => void);
+
+ 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;
+ height?: number | 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;
+ strokeMiterlimit?: string;
+ strokeOpacity?: number | string;
+ strokeWidth?: number | string;
+ textAnchor?: string;
+ transform?: string;
+ version?: string;
+ viewBox?: string;
+ width?: number | string;
+ x1?: number | string;
+ x2?: number | string;
+ x?: number | 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: SVGElementFactory;
+ circle: SVGFactory;
+ defs: SVGFactory;
+ ellipse: SVGFactory;
+ g: 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): { [key:string]: T };
+ forEach(children: ReactNode, fn: (child: ReactChild, index: number) => any): void;
+ count(children: ReactNode): number;
+ only(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 module "react/addons" {
+ //
+ // React Elements
+ // ----------------------------------------------------------------------
+
+ type ReactType = ComponentClass | string;
+
+ interface ReactElement {
+ type: string | ComponentClass
;
+ props: P;
+ key: string | number;
+ ref: string | ((component: Component
) => any);
+ }
+
+ interface ClassicElement
extends ReactElement
{
+ type: string | ClassicComponentClass
;
+ ref: string | ((component: ClassicComponent
) => any);
+ }
+
+ interface DOMElement
extends ClassicElement
{
+ type: string;
+ ref: string | ((component: DOMComponent
) => any);
+ }
+
+ type HTMLElement = DOMElement;
+ type SVGElement = DOMElement;
+
+ //
+ // Factories
+ // ----------------------------------------------------------------------
+
+ interface Factory {
+ (props?: P, ...children: ReactNode[]): ReactElement
;
+ }
+
+ interface ClassicFactory
extends Factory
{
+ (props?: P, ...children: ReactNode[]): ClassicElement
;
+ }
+
+ interface DOMFactory
extends ClassicFactory
{
+ (props?: P, ...children: ReactNode[]): DOMElement
;
+ }
+
+ type HTMLFactory = DOMFactory;
+ type SVGFactory = DOMFactory;
+ type SVGElementFactory = 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
| string): ClassicFactory
;
+ function createFactory
(type: ComponentClass
): Factory
;
+
+ function createElement
(
+ type: string,
+ props?: P,
+ ...children: ReactNode[]): DOMElement
;
+ function createElement
(
+ type: ClassicComponentClass
| string,
+ props?: P,
+ ...children: ReactNode[]): ClassicElement
;
+ function createElement
(
+ type: ComponentClass
,
+ 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 render
(
+ element: DOMElement
,
+ container: Element,
+ callback?: () => any): DOMComponent
;
+ function render
(
+ element: ClassicElement
,
+ container: Element,
+ callback?: () => any): ClassicComponent
;
+ function render
(
+ element: ReactElement
,
+ container: Element,
+ callback?: () => any): Component
;
+
+ function unmountComponentAtNode(container: Element): boolean;
+ function renderToString(element: ReactElement): string;
+ function renderToStaticMarkup(element: ReactElement): string;
+ function isValidElement(object: {}): boolean;
+ function initializeTouchEvents(shouldUseTouch: boolean): void;
+
+ function findDOMNode(
+ componentOrElement: Component | Element): TElement;
+ function findDOMNode(
+ componentOrElement: Component | Element): Element;
+
+ var DOM: ReactDOM;
+ var PropTypes: ReactPropTypes;
+ var Children: ReactChildren;
+
+ //
+ // Component API
+ // ----------------------------------------------------------------------
+
+ // Base component for plain JS classes
+ class Component implements ComponentLifecycle
{
+ static propTypes: ValidationMap;
+ static contextTypes: ValidationMap;
+ static childContextTypes: ValidationMap;
+ static defaultProps: Props;
+
+ 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]: Component
+ };
+ }
+
+ interface ClassicComponent extends Component
{
+ replaceState(nextState: S, callback?: () => any): void;
+ getDOMNode(): TElement;
+ getDOMNode(): Element;
+ isMounted(): boolean;
+ getInitialState?(): S;
+ setProps(nextProps: P, callback?: () => any): void;
+ replaceProps(nextProps: P, callback?: () => any): void;
+ }
+
+ interface DOMComponent extends ClassicComponent
{
+ tagName: string;
+ }
+
+ type HTMLComponent = DOMComponent;
+ type SVGComponent = DOMComponent;
+
+ interface ChildContextProvider {
+ getChildContext(): CC;
+ }
+
+ //
+ // Class Interfaces
+ // ----------------------------------------------------------------------
+
+ 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 DragEvent extends SyntheticEvent {
+ dataTransfer: DataTransfer;
+ }
+
+ interface ClipboardEvent extends SyntheticEvent {
+ clipboardData: DataTransfer;
+ }
+
+ 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 FocusEvent extends SyntheticEvent {
+ relatedTarget: EventTarget;
+ }
+
+ interface FormEvent extends SyntheticEvent {
+ }
+
+ 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;
+ }
+
+ interface DragEventHandler extends EventHandler {}
+ interface ClipboardEventHandler extends EventHandler {}
+ interface KeyboardEventHandler extends EventHandler {}
+ interface FocusEventHandler extends EventHandler {}
+ interface FormEventHandler extends EventHandler {}
+ interface MouseEventHandler extends EventHandler {}
+ interface TouchEventHandler extends EventHandler {}
+ interface UIEventHandler extends EventHandler {}
+ interface WheelEventHandler extends EventHandler {}
+
+ //
+ // Props / DOM Attributes
+ // ----------------------------------------------------------------------
+
+ interface Props {
+ children?: ReactNode;
+ key?: string | number;
+ ref?: string | ((component: T) => any);
+ }
+
+ interface DOMAttributesBase extends Props {
+ onCopy?: ClipboardEventHandler;
+ onCut?: ClipboardEventHandler;
+ onPaste?: ClipboardEventHandler;
+ onKeyDown?: KeyboardEventHandler;
+ onKeyPress?: KeyboardEventHandler;
+ onKeyUp?: KeyboardEventHandler;
+ onFocus?: FocusEventHandler;
+ onBlur?: FocusEventHandler;
+ onChange?: FormEventHandler;
+ onInput?: FormEventHandler;
+ onSubmit?: FormEventHandler;
+ onClick?: 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;
+ onTouchCancel?: TouchEventHandler;
+ onTouchEnd?: TouchEventHandler;
+ onTouchMove?: TouchEventHandler;
+ onTouchStart?: TouchEventHandler;
+ onScroll?: UIEventHandler;
+ onWheel?: WheelEventHandler;
+
+ className?: string;
+ id?: string;
+
+ dangerouslySetInnerHTML?: {
+ __html: string;
+ };
+ }
+
+ interface DOMAttributes extends DOMAttributesBase> {
+ }
+
+ // 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 HTMLAttributesBase extends DOMAttributesBase {
+ accept?: string;
+ acceptCharset?: string;
+ accessKey?: string;
+ action?: string;
+ allowFullScreen?: boolean;
+ allowTransparency?: boolean;
+ alt?: string;
+ async?: boolean;
+ autoComplete?: boolean;
+ autoFocus?: boolean;
+ autoPlay?: boolean;
+ cellPadding?: number | string;
+ cellSpacing?: number | string;
+ charSet?: string;
+ checked?: boolean;
+ classID?: string;
+ cols?: number;
+ colSpan?: number;
+ content?: string;
+ contentEditable?: boolean;
+ contextMenu?: string;
+ controls?: any;
+ coords?: string;
+ crossOrigin?: string;
+ data?: string;
+ dateTime?: string;
+ defaultChecked?: boolean;
+ defaultValue?: string;
+ 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;
+ 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;
+ 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;
+ srcSet?: string;
+ start?: number;
+ step?: number | string;
+ style?: CSSProperties;
+ tabIndex?: number;
+ target?: string;
+ title?: string;
+ type?: string;
+ useMap?: string;
+ value?: string;
+ width?: number | string;
+ wmode?: string;
+
+ // Non-standard Attributes
+ autoCapitalize?: boolean;
+ autoCorrect?: boolean;
+ property?: string;
+ itemProp?: string;
+ itemScope?: boolean;
+ itemType?: string;
+ unselectable?: boolean;
+ }
+
+ interface HTMLAttributes extends HTMLAttributesBase {
+ }
+
+ interface SVGElementAttributes extends HTMLAttributes {
+ viewBox?: string;
+ preserveAspectRatio?: string;
+ }
+
+ interface SVGAttributes extends DOMAttributes {
+ ref?: string | ((component: SVGComponent) => void);
+
+ 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;
+ height?: number | 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;
+ strokeMiterlimit?: string;
+ strokeOpacity?: number | string;
+ strokeWidth?: number | string;
+ textAnchor?: string;
+ transform?: string;
+ version?: string;
+ viewBox?: string;
+ width?: number | string;
+ x1?: number | string;
+ x2?: number | string;
+ x?: number | 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: SVGElementFactory;
+ circle: SVGFactory;
+ defs: SVGFactory;
+ ellipse: SVGFactory;
+ g: 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): { [key:string]: T };
+ forEach(children: ReactNode, fn: (child: ReactChild, index: number) => any): void;
+ count(children: ReactNode): number;
+ only(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;
+ }
+
+ //
+ // React.addons
+ // ----------------------------------------------------------------------
+
+ export module addons {
+ export var CSSTransitionGroup: CSSTransitionGroup;
+ export var TransitionGroup: TransitionGroup;
+
+ export var LinkedStateMixin: LinkedStateMixin;
+ export var PureRenderMixin: PureRenderMixin;
+
+ export function batchedUpdates(
+ callback: (a: A, b: B) => any, a: A, b: B): void;
+ export function batchedUpdates (callback: (a: A) => any, a: A): void;
+ export function batchedUpdates(callback: () => any): void;
+
+ // deprecated: use petehunt/react-classset or JedWatson/classnames
+ export function classSet(cx: { [key: string]: boolean }): string;
+ export function classSet(...classList: string[]): string;
+
+ export function cloneWithProps(
+ element: DOMElement
, props: P): DOMElement
;
+ export function cloneWithProps
(
+ element: ClassicElement
, props: P): ClassicElement
;
+ export function cloneWithProps
(
+ element: ReactElement
, props: P): ReactElement
;
+
+ export function createFragment(
+ object: { [key: string]: ReactNode }): ReactFragment;
+
+ export function update(value: any[], spec: UpdateArraySpec): any[];
+ export function update(value: {}, spec: UpdateSpec): any;
+
+ // Development tools
+ export import Perf = ReactPerf;
+ export import TestUtils = ReactTestUtils;
+ }
+
+ //
+ // React.addons (Transitions)
+ // ----------------------------------------------------------------------
+
+ interface TransitionGroupProps {
+ component?: ReactType;
+ childFactory?: (child: ReactElement) => ReactElement;
+ }
+
+ interface CSSTransitionGroupProps extends TransitionGroupProps {
+ transitionName: string;
+ transitionAppear?: boolean;
+ transitionEnter?: boolean;
+ transitionLeave?: boolean;
+ }
+
+ type CSSTransitionGroup = ComponentClass;
+ type TransitionGroup = ComponentClass;
+
+ //
+ // React.addons (Mixins)
+ // ----------------------------------------------------------------------
+
+ interface ReactLink {
+ value: T;
+ requestChange(newValue: T): void;
+ }
+
+ interface LinkedStateMixin extends Mixin {
+ linkState(key: string): ReactLink;
+ }
+
+ interface PureRenderMixin extends Mixin {
+ }
+
+ //
+ // Reat.addons.update
+ // ----------------------------------------------------------------------
+
+ interface UpdateSpecCommand {
+ $set?: any;
+ $merge?: {};
+ $apply?(value: any): any;
+ }
+
+ interface UpdateSpecPath {
+ [key: string]: UpdateSpec;
+ }
+
+ type UpdateSpec = UpdateSpecCommand | UpdateSpecPath;
+
+ interface UpdateArraySpec extends UpdateSpecCommand {
+ $push?: any[];
+ $unshift?: any[];
+ $splice?: any[][];
+ }
+
+ //
+ // React.addons.Perf
+ // ----------------------------------------------------------------------
+
+ interface ComponentPerfContext {
+ current: string;
+ owner: string;
+ }
+
+ interface NumericPerfContext {
+ [key: string]: number;
+ }
+
+ interface Measurements {
+ exclusive: NumericPerfContext;
+ inclusive: NumericPerfContext;
+ render: NumericPerfContext;
+ counts: NumericPerfContext;
+ writes: NumericPerfContext;
+ displayNames: {
+ [key: string]: ComponentPerfContext;
+ };
+ totalTime: number;
+ }
+
+ module ReactPerf {
+ export function start(): void;
+ export function stop(): void;
+ export function printInclusive(measurements: Measurements[]): void;
+ export function printExclusive(measurements: Measurements[]): void;
+ export function printWasted(measurements: Measurements[]): void;
+ export function printDOM(measurements: Measurements[]): void;
+ export function getLastMeasurements(): Measurements[];
+ }
+
+ //
+ // React.addons.TestUtils
+ // ----------------------------------------------------------------------
+
+ interface MockedComponentClass {
+ new(): any;
+ }
+
+ module ReactTestUtils {
+ export import Simulate = ReactSimulate;
+
+ export function renderIntoDocument(
+ element: ReactElement
): Component
;
+ export function renderIntoDocument>(
+ element: ReactElement): C;
+
+ export function mockComponent(
+ mocked: MockedComponentClass, mockTagName?: string): typeof ReactTestUtils;
+
+ export function isElementOfType(
+ element: ReactElement, type: ReactType): boolean;
+ export function isTextComponent(instance: Component): boolean;
+ export function isDOMComponent(instance: Component): boolean;
+ export function isCompositeComponent(instance: Component): boolean;
+ export function isCompositeComponentWithType(
+ instance: Component,
+ type: ComponentClass): boolean;
+
+ export function findAllInRenderedTree(
+ tree: Component,
+ fn: (i: Component) => boolean): Component;
+
+ export function scryRenderedDOMComponentsWithClass(
+ tree: Component,
+ className: string): DOMComponent[];
+ export function findRenderedDOMComponentWithClass(
+ tree: Component,
+ className: string): DOMComponent;
+
+ export function scryRenderedDOMComponentsWithTag(
+ tree: Component,
+ tagName: string): DOMComponent[];
+ export function findRenderedDOMComponentWithTag(
+ tree: Component,
+ tagName: string): DOMComponent;
+
+ export function scryRenderedComponentsWithType(
+ tree: Component,
+ type: ComponentClass): Component
[];
+ export function scryRenderedComponentsWithType>(
+ tree: Component,
+ type: ComponentClass): C[];
+
+ export function findRenderedComponentWithType(
+ tree: Component,
+ type: ComponentClass): Component
;
+ export function findRenderedComponentWithType