Create highly customizable tech trees (or generic graphical trees)
-
Light
- Zero dependencies (besides react)
- Tree-shaking ready
- < 2Kb gzipped
-
Responsive
- works on mobile, desktop, etc
-
Image Support
- sprite sheets (e.g: TexturePacker)
- individual images
-
Customizable
- style links and nodes
- ready to use with react-tooltip, etc
- good examples
- npm:
npm install --save react-tech-tree
- yarn:
yarn add react-tech-tree
import React from "react";
import { Tree } from "react-tech-tree";
import "react-tech-tree/dist/index.css";
const nodes = [
[
{ id: "A0", name: "A" },
{ id: "B0", name: "B" }
]
];
const links = [{ from: "A0", to: "B0" }];
function ExampleComponent() {
return <Tree nodes={nodes} links={links} />;
}
import { Tree } from "react-tech-tree";
Prop | Type | Description |
---|---|---|
id | string |
id property (should be unique). E.g: uuuid |
nodes | {id:string, name: string}[][] |
2d array with nodes information |
links | {from:string, to: string}[] |
array with links information |
NodeElement | ReactElement |
(optional) React Element to be used as Node. Defaults to Node . |
nodeProps | object |
(optional) Properties to pass down to Node elements. See Node . |
linkProps | object |
(optional) See below. |
Prop | Type | Description |
---|---|---|
pathMaker | (r0: Rect,r1: Rect, props?: object) => string |
(optional) Function to generate string paths. Defaults to simplePathMaker |
import { Node } from "react-tech-tree";
Prop | Type | Description |
---|---|---|
onClick | (e: MouseEvent) => void |
(optional) Event Handler fired when the Node is clicked. Defaults to nodeClickHandler |
import { Sprite } from "react-tech-tree";
Prop | Type | Description |
---|---|---|
name | string |
name of spritesheet entry or image name for this Sprite |
styleName | () => object |
function to style the Sprite from its name. Example |
import { Link } from "react-tech-tree";
Prop | Type | Description |
---|---|---|
pathData | string |
data to build links. E.g: M 0 0 L 1 1 |
import { nodeClickHandler } from "react-tech-tree";
clickHandler function used by Node
internally.
Use it when you are trying to build a custom NodeElement
that you pass to a Tree
.
It will:
- mark
Node
with classactive
- mark
Node's children
with classnext-active
//...
function MyNodeElement({ name, id }) {
return (
<button id={id} onClick={nodeClickHandler}>
{name}
</button>
);
}
function ExampleComponent() {
return <Tree nodes={nodes} links={links} NodeElement={MyNodeElement} />;
}
import { prepareSpritesheetStyle } from "react-tech-tree";
When using spritesheets, you may need to style each Sprite
based on its name.
If you are using TexturePacker, you can use this function as follows:
//...
import spriteInformation from "./data/spritesheet.json";
import spriteImage from "./data/spritesheet.png";
//...
const nodeProps = {
styleName: prepareSpritesheetStyle(spriteImage, spriteInformation)
};
function ExampleComponent() {
return <Tree nodes={nodes} links={links} nodeProps={nodeProps} />;
}
import { simplePathMaker } from "react-tech-tree";
Pure function that return a string path between the center of two rectangles.
const rect0 = { x: 0, y: 24, width: 4, height: 4 };
const rect1 = { x: 8, y: 32, width: 2, height: 2 };
const path = simplePathMaker(rect0, rect1);
// "M 2 26 L 9 33"
It is used at the default value for building links between Nodes
.
It can be passed down in linkProps
to a Tree
. See example
//...
const linkProps = { pathMaker: simplePathMaker };
function ExampleComponent() {
return <Tree nodes={nodes} links={links} linkProps={linkProps} />;
}
For further usage, go to the examples page
- tech-tree
- vanilla javascript project I made a long time ago
MIT © ldd