> This library is deprecated. Please see `DEPRECATED.md`.
# Sankey
Sankey diagrams are a form of graph that allows for the easy communication of flows and other transferal processes.
### Usage
```jsx
import {Sankey} from 'react-vis';
const nodes = [{name: 'a'}, {name: 'b'}, {name: 'c'}];
const links = [
{source: 0, target: 1, value: 10},
{source: 0, target: 2, value: 20},
{source: 1, target: 2, value: 20}
];
```
### Api
##### width (required, pixels)
##### height (required, pixels)
##### nodes (required)
Type: `Object`
An array of objects matching the following shape:
```
{
name: String,
color: String,
opacity: Number,
key: String
}
```
The name will be displayed as a label next to its node.
All these fields are optional.
##### links (required)
Type: `Object`
An array of objects matching the following shape, where both `source` and `target`
are the indexes of the nodes they intent to represent, and `value` that would
match the height of the path link.
```
{
// required
source: Number,
target: Number,
value: Number,
// optional
color: String,
opacity: Number,
key: String
}
```
##### margin (pixels)
Type: either number or {top: Number, left: Number, right: Number, bottom: Number}
The margin that will applied around the edge of the diagram.
##### nodeWidth (optional)
Type: `Number`(pixels)
Defaults: `10`.
Width of the nodes.
##### nodePadding (optional)
Type: `Number`(pixels)
Defaults: `10`.
Padding between each node.
##### align (optional)
Type: `String`, one of `justify`, `center`, `left`, `right`
Defaults: `justify`.
The alignment used for the sankey, see above for an example.
##### layout (optional)
Type: `Number`
Defaults: `50`.
The number of passes the sankey algorithm will do in order to arrange positioning.
##### hasVoronoi (optional)
Type: `Boolean`
Defaults: `false`
Determine if the node selection will be done using a voronoi or not. Although less
precise, it can help providing a better interactive experience to the user.
##### hideLabels (optional)
Type: `Boolean`
Defaults: `false`.
Hide the display of the node names if specified to true.
#### labelRotation (optional)
Type: `Number`
Default: `0`
Rotate the angle of the labels in the sankey
##### onValueClick (optional)
Type: `function`
Default: noop
This handler is triggered either when the user clicks on a node. Callback when clicking a node, or the voronoi assigned to this node, pass the node.
```jsx
{
// does something on click
// you can access the value of the event
}}
```
##### onValueMouseOver (optional)
Type: `function`
Default: noop
This handler is triggered either when the user hovers over a node. Callback when clicking a node, or the voronoi assigned to this node, pass the node.
```jsx
{
// does something on click
// you can access the value of the event
}}
```
##### onValueMouseOut (optional)
Type: `function`
Default: noop
This handler is triggered either when the users mouse leaves a node. Callback when clicking a node, or the voronoi assigned to this node, pass the node.
```jsx
{
// does something on click
// you can access the value of the event
}}
```
#### onLinkClick (optional)
Type: `function`
Default noop
This handler is triggered when the user clicks on a link. Callback accepts the data point associated with this link as well as the click event.
```jsx
{
// does something on click
// you can access the value of the event
}}
/>
```
#### onLinkMouseOver (optional)
Type: `function`
Default noop
This handler is triggered when the user's mouse hovers over a link. Callback accepts the data point associated with this link as well as the click event.
```jsx
{
// does something on mouseover
// you can access the value of the event
}}
/>
```
#### onLinkMouseOut (optional)
Type: `function`
Default noop
This handler is triggered when the user's exits a link. Callback accepts the data point associated with this link as well as the click event.
```jsx
{
// does something on mouseout
// you can access the value of the event
}}
/>
```
#### style (optional)
Type: `object`
An object that contains CSS properties with which the axis component can be entirely re-styled.
As the Sankey is composite of several composite elements, it is possible to provide style objects for any and all parts of the tree. See [style](style.md)
Most generally, there are three top level components `labels`, `links`, and `rects`. These in turn lead to their corresponding to style objects. As an example, here is the default style object for the Sankey:
```jsx
```
##### children (optional)
Type: `Node` (Based on React.PropTypes.node: Anything that can be rendered: numbers, strings, elements or an array (or fragment) containing these types.)
Allows to render additional children at the inner XYPlot used by the Sankey. See the [XYPlot](xy-plot.md)'s for more general information on children.
This is especially useful for rendering of Hints within a Sankey (since the must be rendered inside the XYPlot).
```jsx
```
(See sample [Sankey - With hint (for links)](examples/showcases/sankeys-showcase.md) at showcase for more details.)