Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

entitree-flex

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

entitree-flex

Flexible Tree layout supporting ancestors, descendants and side nodes

  • 0.3.0
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

entitree-flex

This is the core package that fuels the iconic https://www.entitree.com website!

In a paper from 2013, A.J. van der Ploeg enhanced the Tidy Tree (Reingold-Tilford) algorithm to allow for variable-sized nodes, while keeping its linear runtime nature. He described the algorithm in his paper, Drawing Non-layered Tidy Trees in Linear Time. The author also provided a working Java application on GitHub at https://github.com/cwi-swat/non-layered-tidy-trees

This package take it to the next level by allowing also side nodes, very useful if you are drawing family trees and pedigrees.

Examples

Screenshot 2021-07-11 at 16 41 14 Screenshot 2021-07-11 at 16 40 53 Screenshot 2021-07-11 at 16 40 40 Screenshot 2021-07-11 at 16 40 17

Install

npm i entitree-flex

OR

yarn add entitree-flex

It does come with TS definitions

Usage from nested object

const { layoutFromNested } = require("entitree-flex")
//or
import { layoutFromNested } from "entitree-flex"

const tree = {
  name: "root",
  width: 60,
  height: 20,
  siblings: [
    { name: "rootSibling1" },
    { name: "rootSibling2"},
  ],
  partners: [{ name: "rootPartner1" }, { name: "rootPartner2" }],
  children: [
    {
      name: "child1",
      width: 20,
      height: 50,
      partners: [
        {
          name: "child1partner1",
        },
      ],
      children: [
        {
          name: "grandchild1",
          children: [
            {
              name: "grandGrandchild1",
            },
          ],
        },
        {
          name: "grandchild2",
        },
      ],
    },
  ],
  parents: [
    {
      name: "parent1",
      parents: [
        {
          name: "grandParent1",
        },
        {
          name: "grandParent2",
        },
      ],
    },
    {
      name: "parent1",
      parents: [
        {
          name: "grandparent1",
        },
      ],
    },
  ],
};

layoutFromNested(tree [, settings])

and the object will be populated with all the coordinates for a flexible, bidirectional, side-nodes supporting tree

Usage from flat object

const { layoutFromMap } = require("entitree-flex")
//or
import { layoutFromMap } from "entitree-flex"

const flatTree = {
  1: {
    name: "root",
    width: 14,
    childrenIds: [2, 3],
  },
  2: { name: "child2" },
  3: { name: "child3", childrenIds: [4, 5], spousesIds: [6] },
  4: { name: "grandChild4" },
  5: { name: "grandChild5" },
  6: { name: "spouse of child 3" },
};

layoutFromMap(1, flatTree [, settings])

Settings

defaultSettings = {
  targetsAccessor: "children", // what prop to use to pick children
  differentGroupSpacing: 20, // spacing in px between "cousins"
  nodeHeight: 40, // default node height in px
  nodeWidth: 40, // default node width in px
  enableFlex: true, // has slightly better perfomance if turned off (node.width, node.height will not be read)
  sourcesAccessor: "parents", // the prop used to go up the ancestors
  nextAfterAccessor: "partners", // the side node prop used to go sideways, AFTER the current node
  rootX: 0, // default root position
  rootY: 0, // default root position
  nextBeforeAccessor: "siblings", // the side node prop used to go sideways, BEFORE the current node
  nextBeforeSpacing: 10,
  nextAfterSpacing: 10,
  sourceTargetSpacing: 10,
  clone: false, // returns a clone, if your application does not allow editing the original object
};

Similar examples in javascript

Keywords

FAQs

Package last updated on 01 Aug 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc