sankey — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited sankey (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Flow diagram showing weighted connections between nodes. Built on D3-Sankey with gradient links, interactive highlighting, configurable label positioning, and node justification.
import { Sankey, SankeyNode, SankeyLink, SankeyLabel } from 'reaviz';| Prop | Type | Default | Description | |||
|---|---|---|---|---|---|---|
nodes | ReactElement<SankeyNodeProps>[] | — | Node elements (required) | |||
links | ReactElement<SankeyLinkProps>[] | — | Link elements (required) | |||
width | number | auto | Width in pixels | |||
height | number | auto | Height in pixels | |||
margins | Margins | — | Chart margins | |||
animated | boolean | true | Enable animations | |||
colorScheme | ColorSchemeType | — | Color scheme for nodes | |||
justification | `'justify' \ | 'center' \ | 'left' \ | 'right'` | 'justify' | Node alignment method |
nodeWidth | number | 15 | Width of each node | |||
nodePadding | number | 10 | Vertical padding between nodes | |||
labelPosition | `'inside' \ | 'outside'` | 'inside' | Label placement | ||
nodeSort | (a, b) => number | — | Custom node sort function | |||
className | string | — | SVG CSS class | |||
containerClassName | string | — | Container div CSS class |
| Prop | Type | Default | Description | |
|---|---|---|---|---|
title | string | — | Node title (required) | |
id | string | — | Node ID (falls back to index) | |
color | string | 'rgba(255, 255, 255, 0.2)' | Node color | |
animated | boolean | true | Enable animations | |
disabled | boolean | false | Disable the node | |
label | ReactElement<SankeyLabelProps> | <SankeyLabel /> | Label element | |
tooltip | `ReactElement \ | null` | <Tooltip /> | Tooltip element |
opacity | (active, disabled) => number | active: 1, disabled: 0.2, default: 0.9 | Opacity callback | |
className | string | — | CSS class | |
style | React.StyleHTMLAttributes | — | Inline styles | |
onClick | (event) => void | — | Click handler | |
onMouseEnter | (event) => void | — | Mouse enter handler | |
onMouseLeave | (event) => void | — | Mouse leave handler |
| Prop | Type | Default | Description | |
|---|---|---|---|---|
source | `string \ | number` | — | Source node ID or index |
target | `string \ | number` | — | Target node ID or index |
value | number | — | Link weight/value | |
color | string | — | Link color (defaults to source node color) | |
gradient | boolean | true | Use gradient from source to target color | |
animated | boolean | true | Enable animations | |
disabled | boolean | false | Disable the link | |
tooltip | `ReactElement \ | null` | <Tooltip /> | Tooltip element |
opacity | (active, disabled) => number | active: 0.5, disabled: 0.1, default: 0.35 | Opacity callback | |
className | string | — | CSS class | |
style | object | — | Inline styles | |
onClick | (event) => void | — | Click handler | |
onMouseEnter | (event) => void | — | Mouse enter handler | |
onMouseLeave | (event) => void | — | Mouse leave handler |
| Prop | Type | Default | Description | ||
|---|---|---|---|---|---|
position | `'inside' \ | 'outside'` | 'inside' | Label placement | |
fill | string | '#fff' | Text color | ||
visible | boolean | true | Show/hide the label | ||
ellipsis | `number \ | 'none' \ | 'auto'` | 'auto' | Truncation ('auto' based on width, number for char limit) |
format | (props: SankeyLabelFormatProps) => any | — | Custom label renderer | ||
opacity | (active, disabled) => number | active: 1, disabled: 0.2, default: 0.9 | Opacity callback | ||
padding | `string \ | number` | — | Padding between label and node | |
className | string | — | CSS class |
const nodes = [
{ title: 'Email' },
{ title: 'Social' },
{ title: 'Landing Page' },
{ title: 'Signup' },
{ title: 'Purchase' },
];
const links = [
{ source: 0, target: 3, value: 50 },
{ source: 1, target: 3, value: 30 },
{ source: 2, target: 3, value: 20 },
{ source: 3, target: 4, value: 70 },
];
<Sankey
height={300}
width={550}
nodes={nodes.map((node, i) => (
<SankeyNode key={`node-${i}`} {...node} />
))}
links={links.map((link, i) => (
<SankeyLink key={`link-${i}`} {...link} />
))}
/><Sankey
height={300}
width={550}
colorScheme="Spectral"
nodeWidth={5}
labelPosition="outside"
nodes={nodes.map((node, i) => (
<SankeyNode key={`node-${i}`} {...node} />
))}
links={links.map((link, i) => (
<SankeyLink key={`link-${i}`} {...link} />
))}
/><Sankey
height={300}
width={550}
nodes={nodes.map((node, i) => (
<SankeyNode
key={`node-${i}`}
{...node}
onClick={() => console.log(node.title)}
/>
))}
links={links.map((link, i) => (
<SankeyLink
key={`link-${i}`}
{...link}
onClick={() => console.log(link)}
/>
))}
/>const nodes = [
{ title: 'Email', color: '#FF5722' },
{ title: 'Social', color: '#2196F3' },
{ title: 'Signup', color: '#4CAF50' },
];<SankeyLink gradient={false} color="#999" /><SankeyNode
title="Email"
label={
<SankeyLabel
format={({ node }) => `${node.title} (${node.value})`}
/>
}
/>// Auto-truncate based on available width (default)
<SankeyLabel ellipsis="auto" />
// No truncation
<SankeyLabel ellipsis="none" />
// Truncate at specific character count
<SankeyLabel ellipsis={15} />// Nodes spread across full width (default)
<Sankey justification="justify" />
// Left-aligned
<Sankey justification="left" />
// Center-aligned
<Sankey justification="center" />
// Right-aligned
<Sankey justification="right" />nodes and links must be passed as arrays of JSX elements, not raw datasource/target in links reference node indices or IDs~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.