...

Package d2elklayout

import "oss.terrastruct.com/d2/d2layouts/d2elklayout"
Overview
Index

Overview ▾

d2elklayout is a wrapper around the Javascript port of ELK.

Coordinates are relative to parents. See https://www.eclipse.org/elk/documentation/tooldevelopers/graphdatastructure/coordinatesystem.html

Variables

var DefaultOpts = ConfigurableOpts{
    Algorithm:       "layered",
    NodeSpacing:     70.0,
    Padding:         "[top=50,left=50,bottom=50,right=50]",
    EdgeNodeSpacing: 40.0,
    SelfLoopSpacing: 50.0,
}

func DefaultLayout

func DefaultLayout(ctx context.Context, g *d2graph.Graph) (err error)

func Layout

func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err error)

type ConfigurableOpts

type ConfigurableOpts struct {
    Algorithm       string `json:"elk.algorithm,omitempty"`
    NodeSpacing     int    `json:"spacing.nodeNodeBetweenLayers,omitempty"`
    Padding         string `json:"elk.padding,omitempty"`
    EdgeNodeSpacing int    `json:"spacing.edgeNodeBetweenLayers,omitempty"`
    SelfLoopSpacing int    `json:"elk.spacing.nodeSelfLoop"`
}

type Direction

type Direction string
const (
    Down  Direction = "DOWN"
    Up    Direction = "UP"
    Right Direction = "RIGHT"
    Left  Direction = "LEFT"
)

type ELKEdge

type ELKEdge struct {
    ID        string           `json:"id"`
    Sources   []string         `json:"sources"`
    Targets   []string         `json:"targets"`
    Sections  []ELKEdgeSection `json:"sections,omitempty"`
    Labels    []*ELKLabel      `json:"labels,omitempty"`
    Container string           `json:"container"`
}

type ELKEdgeSection

type ELKEdgeSection struct {
    Start      ELKPoint   `json:"startPoint"`
    End        ELKPoint   `json:"endPoint"`
    BendPoints []ELKPoint `json:"bendPoints,omitempty"`
}

type ELKGraph

type ELKGraph struct {
    ID            string     `json:"id"`
    LayoutOptions *elkOpts   `json:"layoutOptions"`
    Children      []*ELKNode `json:"children,omitempty"`
    Edges         []*ELKEdge `json:"edges,omitempty"`
}

type ELKLabel

type ELKLabel struct {
    Text          string   `json:"text"`
    X             float64  `json:"x"`
    Y             float64  `json:"y"`
    Width         float64  `json:"width"`
    Height        float64  `json:"height"`
    LayoutOptions *elkOpts `json:"layoutOptions,omitempty"`
}

type ELKNode

type ELKNode struct {
    ID            string      `json:"id"`
    X             float64     `json:"x"`
    Y             float64     `json:"y"`
    Width         float64     `json:"width"`
    Height        float64     `json:"height"`
    Children      []*ELKNode  `json:"children,omitempty"`
    Ports         []*ELKPort  `json:"ports,omitempty"`
    Labels        []*ELKLabel `json:"labels,omitempty"`
    LayoutOptions *elkOpts    `json:"layoutOptions,omitempty"`
}

type ELKPoint

type ELKPoint struct {
    X float64 `json:"x"`
    Y float64 `json:"y"`
}

type ELKPort

type ELKPort struct {
    ID            string   `json:"id"`
    X             float64  `json:"x"`
    Y             float64  `json:"y"`
    Width         float64  `json:"width"`
    Height        float64  `json:"height"`
    LayoutOptions *elkOpts `json:"layoutOptions,omitempty"`
}

type PortSide

type PortSide string
const (
    South PortSide = "SOUTH"
    North PortSide = "NORTH"
    East  PortSide = "EAST"
    West  PortSide = "WEST"
)