Tree is a tool for displaying node based systems. This package contains one dependency.
- Table of Contents
 - Getting Started
 - Listening to Diagram Events
 - Developing and Growth
 - Adding to Your Own Project
 - Serialisation of Data
 - Docs
 - Controls
 - Contribute
 
This section will help you get started with the graph visualizer.
import { Diagram } from '@aexol/tree'
class App {
  constructor() {
    const root = document.getElementById("root");
    if (!root) {
      throw new Error("No root html element");
    }
    this.diagram = new Diagram(root, {});
    this.diagram.setNodes([
        {
            "name": "Query",
            "type": "type",
            "id": "1",
            "description": "",
            "inputs": [
                "2"
            ],
            "outputs": [],
            "options": [
                "query"
            ]
        },
        {
            "name": "pizzas",
            "type": "Pizza",
            "id": "2",
            "inputs": [],
            "outputs": [
                "2"
            ],
            "description":"get all pizzas a a a from the database",
            "options": [
                "array",
                "required"
            ]
        },
        {
            "name": "Pizza",
            "type": "type",
            "id": "3",
            "description": "Main type of the schema",
            "inputs": [
                "4",
            ],
            "outputs": [],
            "options": []
        },
        {
            "name": "name",
            "type": "String",
            "id": "4",
            "inputs": [],
            "outputs": [
                "3"
            ],
            "options": [
                "required"
            ]
        }
    ])
  }
}
new App()Diagram is in dark mode by defult, but you can easily switch to light theme. Just add the options for that while creating the Diagram.
import { Diagram, DefaultDiagramThemeLight } from '@aexol/tree'
this.diagram = new Diagram(document.getElementById("root"),
{
  theme: DefaultDiagramThemeLight
});It's possible to attach  to certain events that occur inside the diagram.
You can do it by using familiar .on() syntax, e.g.:
this.diagram = new Diagram(/* ... */);
/* ... */
this.diagram.on(EVENT_NAME, () => {
  // callback
});
The list of all subscribable events:
| Event | Description | 
|---|---|
| ViewModelChanged | Fires when a view model (pan, zoom) was changed | 
| NodeMoving | Fires when node is being moved | 
| NodeMoved | Fires when node stops being moved | 
| NodeSelected | Fires when node(s) was selected | 
| UndoRequested | Fires when undo was requested | 
| RedoRequested | Fires when redo was requested | 
Note
You can unsubscribe your listener by either using .off() or by invoking the unsubscriber function that is returned from .on():
this.diagram = new Diagram(/* ... */);
const callback = (nodeList) => {
  console.log('Nodes are moving!', nodeList);
};
this.diagram.on('NodeMoving', callback); // callback will be fired
// ...
this.diagram.off('NodeMoving', callback); // callback will not be fired anymorethis.diagram = new Diagram(/* ... */);
const callback = () => {
  console.log('node moving!');
};
const unsubscriber = this.diagram.on('NodeMoving', callback); // callback will be fired
// ...
unsubscriber(); // callback will not be fired anymoreconst diagram = new Diagram(/* ... */);
const callback = ({nodes, links}) => {
  // Here you receive nodes and links after Serialisation
};
this.diagram.on('DataModelChanged', callback); // callback will be fired$ git clone https://github.com/aexol-studio/tree
$ npm install
$ npm run start$ npm install @aexol/treeTo generate docs simply type:
npm run docs
Here is a list of the available controls:
| Action | Result | 
|---|---|
| Press and hold Left Mouse Button and move mouse | Pans the view | 
| Press and hold Left Mouse Button on node | Moves the node | 
| CLICK ON NODE TYPE | Centers view on parent node (if node is a children of other node) | 
| SHIFT + Left Mouse Button Click | Selects multiple nodes | 
Feel free to contribute! Don't hesitate to:
- Fork this repo
 - Create your own feature branch using: git checkout -b feature-name
 - Commit your changes with: git commit -am 'Add some feature'
 - Push to the branch: git push origin my-new-feature
 - Submit a pull request
 
