define(['dart_sdk', 'packages/flutter/src/widgets/widget_span.dart', 'packages/flutter/src/material/colors.dart', 'packages/flutter/src/rendering/layer.dart', 'packages/flutter/src/foundation/debug.dart', 'packages/flutter/src/foundation/key.dart'], (function load__packages__graphview__GraphView_dart(dart_sdk, packages__flutter__src__widgets__widget_span$46dart, packages__flutter__src__material__colors$46dart, packages__flutter__src__rendering__layer$46dart, packages__flutter__src__foundation__debug$46dart, packages__flutter__src__foundation__key$46dart) {
  'use strict';
  const core = dart_sdk.core;
  const _interceptors = dart_sdk._interceptors;
  const ui = dart_sdk.ui;
  const math = dart_sdk.math;
  const _js_helper = dart_sdk._js_helper;
  const collection = dart_sdk.collection;
  const dart = dart_sdk.dart;
  const dartx = dart_sdk.dartx;
  const framework = packages__flutter__src__widgets__widget_span$46dart.src__widgets__framework;
  const text = packages__flutter__src__widgets__widget_span$46dart.src__widgets__text;
  const widget_inspector = packages__flutter__src__widgets__widget_span$46dart.src__widgets__widget_inspector;
  const colors = packages__flutter__src__material__colors$46dart.src__material__colors;
  const box = packages__flutter__src__rendering__layer$46dart.src__rendering__box;
  const object = packages__flutter__src__rendering__layer$46dart.src__rendering__object;
  const diagnostics = packages__flutter__src__foundation__debug$46dart.src__foundation__diagnostics;
  const key = packages__flutter__src__foundation__key$46dart.src__foundation__key;
  var GraphView = Object.create(dart.library);
  var $add = dartx.add;
  var $forEach = dartx.forEach;
  var $length = dartx.length;
  var $contains = dartx.contains;
  var $remove = dartx.remove;
  var $removeWhere = dartx.removeWhere;
  var $firstWhere = dartx.firstWhere;
  var $isNotEmpty = dartx.isNotEmpty;
  var $any = dartx.any;
  var $where = dartx.where;
  var $map = dartx.map;
  var $toList = dartx.toList;
  var $_get = dartx._get;
  var $hashCode = dartx.hashCode;
  var $_equals = dartx._equals;
  var $toString = dartx.toString;
  var $_set = dartx._set;
  var $reduce = dartx.reduce;
  var $clear = dartx.clear;
  var $isEmpty = dartx.isEmpty;
  var $abs = dartx.abs;
  var $iterator = dartx.iterator;
  var $modulo = dartx['%'];
  var $indexOf = dartx.indexOf;
  var $sort = dartx.sort;
  var $truncate = dartx.truncate;
  var $ceil = dartx.ceil;
  var $keys = dartx.keys;
  var $values = dartx.values;
  var $asMap = dartx.asMap;
  var $floor = dartx.floor;
  var $toInt = dartx.toInt;
  var $containsKey = dartx.containsKey;
  var $ceilToDouble = dartx.ceilToDouble;
  var $first = dartx.first;
  var $addAll = dartx.addAll;
  var $reversed = dartx.reversed;
  var $toDouble = dartx.toDouble;
  dart._checkModuleNullSafetyMode(false);
  var T = {
    WidgetL: () => (T.WidgetL = dart.constFn(dart.legacy(framework.Widget)))(),
    JSArrayOfWidgetL: () => (T.JSArrayOfWidgetL = dart.constFn(_interceptors.JSArray$(T.WidgetL())))(),
    NodeL: () => (T.NodeL = dart.constFn(dart.legacy(GraphView.Node)))(),
    NodeLToNull: () => (T.NodeLToNull = dart.constFn(dart.fnType(core.Null, [T.NodeL()])))(),
    RenderCustomLayoutBoxL: () => (T.RenderCustomLayoutBoxL = dart.constFn(dart.legacy(GraphView.RenderCustomLayoutBox)))(),
    RenderBoxL: () => (T.RenderBoxL = dart.constFn(dart.legacy(box.RenderBox)))(),
    NodeBoxDataL: () => (T.NodeBoxDataL = dart.constFn(dart.legacy(GraphView.NodeBoxData)))(),
    GraphL: () => (T.GraphL = dart.constFn(dart.legacy(GraphView.Graph)))(),
    DiagnosticsPropertyOfGraphL: () => (T.DiagnosticsPropertyOfGraphL = dart.constFn(diagnostics.DiagnosticsProperty$(T.GraphL())))(),
    LayoutL: () => (T.LayoutL = dart.constFn(dart.legacy(GraphView.Layout)))(),
    DiagnosticsPropertyOfLayoutL: () => (T.DiagnosticsPropertyOfLayoutL = dart.constFn(diagnostics.DiagnosticsProperty$(T.LayoutL())))(),
    PaintL: () => (T.PaintL = dart.constFn(dart.legacy(ui.Paint)))(),
    DiagnosticsPropertyOfPaintL: () => (T.DiagnosticsPropertyOfPaintL = dart.constFn(diagnostics.DiagnosticsProperty$(T.PaintL())))(),
    JSArrayOfNodeL: () => (T.JSArrayOfNodeL = dart.constFn(_interceptors.JSArray$(T.NodeL())))(),
    EdgeL: () => (T.EdgeL = dart.constFn(dart.legacy(GraphView.Edge)))(),
    JSArrayOfEdgeL: () => (T.JSArrayOfEdgeL = dart.constFn(_interceptors.JSArray$(T.EdgeL())))(),
    GraphObserverL: () => (T.GraphObserverL = dart.constFn(dart.legacy(GraphView.GraphObserver)))(),
    JSArrayOfGraphObserverL: () => (T.JSArrayOfGraphObserverL = dart.constFn(_interceptors.JSArray$(T.GraphObserverL())))(),
    NodeLTovoid: () => (T.NodeLTovoid = dart.constFn(dart.fnType(dart.void, [T.NodeL()])))(),
    boolL: () => (T.boolL = dart.constFn(dart.legacy(core.bool)))(),
    EdgeLToboolL: () => (T.EdgeLToboolL = dart.constFn(dart.fnType(T.boolL(), [T.EdgeL()])))(),
    NodeLToboolL: () => (T.NodeLToboolL = dart.constFn(dart.fnType(T.boolL(), [T.NodeL()])))(),
    EdgeLTovoid: () => (T.EdgeLTovoid = dart.constFn(dart.fnType(dart.void, [T.EdgeL()])))(),
    VoidToNull: () => (T.VoidToNull = dart.constFn(dart.fnType(core.Null, [])))(),
    EdgeLToNodeL: () => (T.EdgeLToNodeL = dart.constFn(dart.fnType(T.NodeL(), [T.EdgeL()])))(),
    GraphObserverLToNull: () => (T.GraphObserverLToNull = dart.constFn(dart.fnType(core.Null, [T.GraphObserverL()])))(),
    EdgeLToNull: () => (T.EdgeLToNull = dart.constFn(dart.fnType(core.Null, [T.EdgeL()])))(),
    doubleL: () => (T.doubleL = dart.constFn(dart.legacy(core.double)))(),
    JSArrayOfdoubleL: () => (T.JSArrayOfdoubleL = dart.constFn(_interceptors.JSArray$(T.doubleL())))(),
    ListOfdoubleL: () => (T.ListOfdoubleL = dart.constFn(core.List$(T.doubleL())))(),
    OffsetL: () => (T.OffsetL = dart.constFn(dart.legacy(ui.Offset)))(),
    LinkedMapOfNodeL$OffsetL: () => (T.LinkedMapOfNodeL$OffsetL = dart.constFn(_js_helper.LinkedMap$(T.NodeL(), T.OffsetL())))(),
    NodeClusterL: () => (T.NodeClusterL = dart.constFn(dart.legacy(GraphView.NodeCluster)))(),
    JSArrayOfNodeClusterL: () => (T.JSArrayOfNodeClusterL = dart.constFn(_interceptors.JSArray$(T.NodeClusterL())))(),
    NodeClusterLToNull: () => (T.NodeClusterLToNull = dart.constFn(dart.fnType(core.Null, [T.NodeClusterL()])))(),
    NodeClusterLToboolL: () => (T.NodeClusterLToboolL = dart.constFn(dart.fnType(T.boolL(), [T.NodeClusterL()])))(),
    NodeLTodoubleL: () => (T.NodeLTodoubleL = dart.constFn(dart.fnType(T.doubleL(), [T.NodeL()])))(),
    TAndTToT: () => (T.TAndTToT = dart.constFn(dart.gFnType(T => [T, [T, T]], T => [core.num])))(),
    numL: () => (T.numL = dart.constFn(dart.legacy(core.num)))(),
    SugiyamaNodeDataL: () => (T.SugiyamaNodeDataL = dart.constFn(dart.legacy(GraphView.SugiyamaNodeData)))(),
    LinkedMapOfNodeL$SugiyamaNodeDataL: () => (T.LinkedMapOfNodeL$SugiyamaNodeDataL = dart.constFn(_js_helper.LinkedMap$(T.NodeL(), T.SugiyamaNodeDataL())))(),
    SugiyamaEdgeDataL: () => (T.SugiyamaEdgeDataL = dart.constFn(dart.legacy(GraphView.SugiyamaEdgeData)))(),
    LinkedMapOfEdgeL$SugiyamaEdgeDataL: () => (T.LinkedMapOfEdgeL$SugiyamaEdgeDataL = dart.constFn(_js_helper.LinkedMap$(T.EdgeL(), T.SugiyamaEdgeDataL())))(),
    LinkedHashSetOfNodeL: () => (T.LinkedHashSetOfNodeL = dart.constFn(collection.LinkedHashSet$(T.NodeL())))(),
    ListOfNodeL: () => (T.ListOfNodeL = dart.constFn(core.List$(T.NodeL())))(),
    ListLOfNodeL: () => (T.ListLOfNodeL = dart.constFn(dart.legacy(T.ListOfNodeL())))(),
    JSArrayOfListLOfNodeL: () => (T.JSArrayOfListLOfNodeL = dart.constFn(_interceptors.JSArray$(T.ListLOfNodeL())))(),
    _LocationL: () => (T._LocationL = dart.constFn(dart.legacy(widget_inspector._Location)))(),
    ListLOfNodeLToNull: () => (T.ListLOfNodeLToNull = dart.constFn(dart.fnType(core.Null, [T.ListLOfNodeL()])))(),
    ListOfListLOfNodeL: () => (T.ListOfListLOfNodeL = dart.constFn(core.List$(T.ListLOfNodeL())))(),
    intL: () => (T.intL = dart.constFn(dart.legacy(core.int)))(),
    EdgeLTointL: () => (T.EdgeLTointL = dart.constFn(dart.fnType(T.intL(), [T.EdgeL()])))(),
    NodeLAndNodeLTointL: () => (T.NodeLAndNodeLTointL = dart.constFn(dart.fnType(T.intL(), [T.NodeL(), T.NodeL()])))(),
    MapOfNodeL$NodeL: () => (T.MapOfNodeL$NodeL = dart.constFn(core.Map$(T.NodeL(), T.NodeL())))(),
    MapLOfNodeL$NodeL: () => (T.MapLOfNodeL$NodeL = dart.constFn(dart.legacy(T.MapOfNodeL$NodeL())))(),
    JSArrayOfMapLOfNodeL$NodeL: () => (T.JSArrayOfMapLOfNodeL$NodeL = dart.constFn(_interceptors.JSArray$(T.MapLOfNodeL$NodeL())))(),
    MapOfNodeL$doubleL: () => (T.MapOfNodeL$doubleL = dart.constFn(core.Map$(T.NodeL(), T.doubleL())))(),
    MapLOfNodeL$doubleL: () => (T.MapLOfNodeL$doubleL = dart.constFn(dart.legacy(T.MapOfNodeL$doubleL())))(),
    JSArrayOfMapLOfNodeL$doubleL: () => (T.JSArrayOfMapLOfNodeL$doubleL = dart.constFn(_interceptors.JSArray$(T.MapLOfNodeL$doubleL())))(),
    LinkedMapOfNodeL$NodeL: () => (T.LinkedMapOfNodeL$NodeL = dart.constFn(_js_helper.LinkedMap$(T.NodeL(), T.NodeL())))(),
    LinkedMapOfNodeL$doubleL: () => (T.LinkedMapOfNodeL$doubleL = dart.constFn(_js_helper.LinkedMap$(T.NodeL(), T.doubleL())))(),
    NodeLAnddoubleLToNull: () => (T.NodeLAnddoubleLToNull = dart.constFn(dart.fnType(core.Null, [T.NodeL(), T.doubleL()])))(),
    MapLOfNodeL$doubleLToNull: () => (T.MapLOfNodeL$doubleLToNull = dart.constFn(dart.fnType(core.Null, [T.MapLOfNodeL$doubleL()])))(),
    TAndTToT$1: () => (T.TAndTToT$1 = dart.constFn(dart.gFnType(T => [T, [T, T]], T => [core.num])))(),
    ListOfboolL: () => (T.ListOfboolL = dart.constFn(core.List$(T.boolL())))(),
    ListLOfboolL: () => (T.ListLOfboolL = dart.constFn(dart.legacy(T.ListOfboolL())))(),
    JSArrayOfListLOfboolL: () => (T.JSArrayOfListLOfboolL = dart.constFn(_interceptors.JSArray$(T.ListLOfboolL())))(),
    JSArrayOfboolL: () => (T.JSArrayOfboolL = dart.constFn(_interceptors.JSArray$(T.boolL())))(),
    intLAndNodeLToNull: () => (T.intLAndNodeLToNull = dart.constFn(dart.fnType(core.Null, [T.intL(), T.NodeL()])))(),
    ListOfintL: () => (T.ListOfintL = dart.constFn(core.List$(T.intL())))(),
    BuchheimWalkerNodeDataL: () => (T.BuchheimWalkerNodeDataL = dart.constFn(dart.legacy(GraphView.BuchheimWalkerNodeData)))(),
    LinkedMapOfNodeL$BuchheimWalkerNodeDataL: () => (T.LinkedMapOfNodeL$BuchheimWalkerNodeDataL = dart.constFn(_js_helper.LinkedMap$(T.NodeL(), T.BuchheimWalkerNodeDataL())))()
  };
  var T$Eval = Object.assign({
    _: () => T$Eval
  }, T);
  var S = {
    _: () => S
  };
  var S$Eval = Object.assign({
    _: () => S$Eval
  }, S);
  const CT = Object.create({
    _: () => (C, CT)
  });
  dart.defineLazy(CT, {
    get C0() {
      return C[0] = dart.fn(math.max, T.TAndTToT());
    },
    get C3() {
      return C[3] = dart.const({
        __proto__: widget_inspector._Location.prototype,
        [_Location_parameterLocations]: null,
        [_Location_name]: "data",
        [_Location_column]: 54,
        [_Location_line]: 21,
        [_Location_file]: null
      });
    },
    get C2() {
      return C[2] = dart.constList([C[3] || CT.C3], T._LocationL());
    },
    get C1() {
      return C[1] = dart.const({
        __proto__: widget_inspector._Location.prototype,
        [_Location_parameterLocations]: C[2] || CT.C2,
        [_Location_name]: null,
        [_Location_column]: 27,
        [_Location_line]: 21,
        [_Location_file]: "file:///C:/Users/Luca/Documents/flutter/flutter_windows_1.22.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/graphview-0.6.6/lib/layered/SugiyamaAlgorithm.dart"
      });
    },
    get C4() {
      return C[4] = dart.fn(math.min, T.TAndTToT$1());
    }
  }, false);
  var C = Array(5).fill(void 0);
  var I = [
    "file:///C:/Users/Luca/Documents/flutter/flutter_windows_1.22.5-stable/flutter/.pub-cache/hosted/pub.dartlang.org/graphview-0.6.6/lib/GraphView.dart",
    "package:graphview/GraphView.dart"
  ];
  var graph$ = dart.privateName(GraphView, "GraphView.graph");
  var algorithm$ = dart.privateName(GraphView, "GraphView.algorithm");
  var paint$ = dart.privateName(GraphView, "GraphView.paint");
  GraphView.GraphView = class GraphView$ extends framework.MultiChildRenderObjectWidget {
    get graph() {
      return this[graph$];
    }
    set graph(value) {
      super.graph = value;
    }
    get algorithm() {
      return this[algorithm$];
    }
    set algorithm(value) {
      super.algorithm = value;
    }
    get paint() {
      return this[paint$];
    }
    set paint(value) {
      super.paint = value;
    }
    static _extractChildren(graph) {
      let result = T.JSArrayOfWidgetL().of([]);
      graph.nodes[$forEach](dart.fn(element => {
        result[$add](element.data);
      }, T.NodeLToNull()));
      return result;
    }
    createRenderObject(context) {
      return new GraphView.RenderCustomLayoutBox.new(this.graph, this.algorithm, this.paint);
    }
    updateRenderObject(context, renderObject) {
      let t0;
      T.RenderCustomLayoutBoxL().as(renderObject);
      t0 = renderObject;
      (() => {
        t0.graph = this.graph;
        t0.algorithm = this.algorithm;
        t0.edgePaint = this.paint;
        return t0;
      })();
    }
  };
  (GraphView.GraphView.new = function(opts) {
    let key = opts && 'key' in opts ? opts.key : null;
    let graph = opts && 'graph' in opts ? opts.graph : null;
    let algorithm = opts && 'algorithm' in opts ? opts.algorithm : null;
    let paint = opts && 'paint' in opts ? opts.paint : null;
    let $36creationLocationd_0dea112b090073317d4 = opts && '$creationLocationd_0dea112b090073317d4' in opts ? opts.$creationLocationd_0dea112b090073317d4 : null;
    this[graph$] = graph;
    this[algorithm$] = algorithm;
    this[paint$] = paint;
    if (!(graph != null)) dart.assertFailed(null, I[0], 31, 16, "graph != null");
    if (!(algorithm != null)) dart.assertFailed(null, I[0], 32, 16, "algorithm != null");
    GraphView.GraphView.__proto__.new.call(this, {key: key, children: GraphView.GraphView._extractChildren(graph), $creationLocationd_0dea112b090073317d4: $36creationLocationd_0dea112b090073317d4});
    ;
  }).prototype = GraphView.GraphView.prototype;
  dart.addTypeTests(GraphView.GraphView);
  dart.addTypeCaches(GraphView.GraphView);
  dart.setMethodSignature(GraphView.GraphView, () => ({
    __proto__: dart.getMethods(GraphView.GraphView.__proto__),
    createRenderObject: dart.fnType(dart.legacy(GraphView.RenderCustomLayoutBox), [dart.legacy(framework.BuildContext)]),
    updateRenderObject: dart.fnType(dart.void, [dart.legacy(framework.BuildContext), dart.legacy(core.Object)])
  }));
  dart.setLibraryUri(GraphView.GraphView, I[1]);
  dart.setFieldSignature(GraphView.GraphView, () => ({
    __proto__: dart.getFields(GraphView.GraphView.__proto__),
    graph: dart.finalFieldType(dart.legacy(GraphView.Graph)),
    algorithm: dart.finalFieldType(dart.legacy(GraphView.Layout)),
    paint: dart.finalFieldType(dart.legacy(ui.Paint))
  }));
  var _graph = dart.privateName(GraphView, "_graph");
  var _algorithm = dart.privateName(GraphView, "_algorithm");
  var _paint = dart.privateName(GraphView, "_paint");
  GraphView.NodeBoxData = class NodeBoxData extends box.ContainerBoxParentData$(dart.legacy(box.RenderBox)) {};
  (GraphView.NodeBoxData.new = function() {
    GraphView.NodeBoxData.__proto__.new.call(this);
    ;
  }).prototype = GraphView.NodeBoxData.prototype;
  dart.addTypeTests(GraphView.NodeBoxData);
  dart.addTypeCaches(GraphView.NodeBoxData);
  dart.setLibraryUri(GraphView.NodeBoxData, I[1]);
  const RenderBox_ContainerRenderObjectMixin$36 = class RenderBox_ContainerRenderObjectMixin extends box.RenderBox {};
  (RenderBox_ContainerRenderObjectMixin$36.new = function() {
    object.ContainerRenderObjectMixin$(dart.legacy(box.RenderBox), dart.legacy(GraphView.NodeBoxData))[dart.mixinNew].call(this);
    RenderBox_ContainerRenderObjectMixin$36.__proto__.new.call(this);
  }).prototype = RenderBox_ContainerRenderObjectMixin$36.prototype;
  dart.applyMixin(RenderBox_ContainerRenderObjectMixin$36, object.ContainerRenderObjectMixin$(dart.legacy(box.RenderBox), dart.legacy(GraphView.NodeBoxData)));
  const RenderBox_RenderBoxContainerDefaultsMixin$36 = class RenderBox_RenderBoxContainerDefaultsMixin extends RenderBox_ContainerRenderObjectMixin$36 {};
  (RenderBox_RenderBoxContainerDefaultsMixin$36.new = function() {
    RenderBox_RenderBoxContainerDefaultsMixin$36.__proto__.new.call(this);
  }).prototype = RenderBox_RenderBoxContainerDefaultsMixin$36.prototype;
  dart.applyMixin(RenderBox_RenderBoxContainerDefaultsMixin$36, box.RenderBoxContainerDefaultsMixin$(dart.legacy(box.RenderBox), dart.legacy(GraphView.NodeBoxData)));
  GraphView.RenderCustomLayoutBox = class RenderCustomLayoutBox extends RenderBox_RenderBoxContainerDefaultsMixin$36 {
    get edgePaint() {
      return this[_paint];
    }
    set edgePaint(value) {
      let t1, t0, t0$;
      this[_paint] = (t0$ = (t0 = value, t0 == null ? (t1 = ui.Paint.new(), (() => {
        t1.color = colors.Colors.black;
        t1.strokeWidth = 3.0;
        return t1;
      })()) : t0), (() => {
        t0$.style = ui.PaintingStyle.stroke;
        t0$.strokeCap = ui.StrokeCap.butt;
        return t0$;
      })());
      this.markNeedsPaint();
    }
    get graph() {
      return this[_graph];
    }
    set graph(value) {
      this[_graph] = value;
      this.markNeedsLayout();
    }
    get algorithm() {
      return this[_algorithm];
    }
    set algorithm(value) {
      this[_algorithm] = value;
      this.markNeedsLayout();
    }
    setupParentData(child) {
      T.RenderBoxL().as(child);
      if (!T.NodeBoxDataL().is(child.parentData)) {
        child.parentData = new GraphView.NodeBoxData.new();
      }
    }
    performLayout() {
      if (this.childCount === 0) {
        this.size = this.constraints.biggest;
        if (!dart.test(this.size.isFinite)) dart.assertFailed(null, I[0], 115, 14, "size.isFinite");
        return;
      }
      let child = this.firstChild;
      let position = 0;
      while (child != null) {
        let node = T.NodeBoxDataL().as(child.parentData);
        child.layout(new box.BoxConstraints.loose(this.constraints.biggest), {parentUsesSize: true});
        this.graph.getNodeAtPosition(position).size = child.size;
        child = node.nextSibling;
        position = position + 1;
      }
      this.size = this.algorithm.run(this.graph, 10.0, 10.0);
      child = this.firstChild;
      position = 0;
      while (child != null) {
        let node = T.NodeBoxDataL().as(child.parentData);
        node.offset = this.graph.getNodeAtPosition(position).position;
        child = node.nextSibling;
        position = position + 1;
      }
    }
    paint(context, offset) {
      context.canvas.save();
      context.canvas.translate(offset.dx, offset.dy);
      this.algorithm.renderer.render(context.canvas, this.graph, this.edgePaint);
      context.canvas.restore();
      this.defaultPaint(context, offset);
    }
    hitTestChildren(result, opts) {
      let position = opts && 'position' in opts ? opts.position : null;
      return this.defaultHitTestChildren(result, {position: position});
    }
    debugFillProperties(properties) {
      super.debugFillProperties(properties);
      properties.add(new (T.DiagnosticsPropertyOfGraphL()).new("graph", this.graph));
      properties.add(new (T.DiagnosticsPropertyOfLayoutL()).new("algorithm", this.algorithm));
      properties.add(new (T.DiagnosticsPropertyOfPaintL()).new("paint", this.edgePaint));
    }
  };
  (GraphView.RenderCustomLayoutBox.new = function(graph, algorithm, paint, opts) {
    let children = opts && 'children' in opts ? opts.children : null;
    this[_graph] = null;
    this[_algorithm] = null;
    this[_paint] = null;
    GraphView.RenderCustomLayoutBox.__proto__.new.call(this);
    this[_algorithm] = algorithm;
    this[_graph] = graph;
    this.edgePaint = paint;
    this.addAll(children);
  }).prototype = GraphView.RenderCustomLayoutBox.prototype;
  dart.addTypeTests(GraphView.RenderCustomLayoutBox);
  dart.addTypeCaches(GraphView.RenderCustomLayoutBox);
  dart.setMethodSignature(GraphView.RenderCustomLayoutBox, () => ({
    __proto__: dart.getMethods(GraphView.RenderCustomLayoutBox.__proto__),
    setupParentData: dart.fnType(dart.void, [dart.legacy(core.Object)]),
    paint: dart.fnType(dart.void, [dart.legacy(object.PaintingContext), dart.legacy(ui.Offset)]),
    hitTestChildren: dart.fnType(dart.legacy(core.bool), [dart.legacy(box.BoxHitTestResult)], {position: dart.legacy(ui.Offset)}, {}),
    debugFillProperties: dart.fnType(dart.void, [dart.legacy(diagnostics.DiagnosticPropertiesBuilder)])
  }));
  dart.setGetterSignature(GraphView.RenderCustomLayoutBox, () => ({
    __proto__: dart.getGetters(GraphView.RenderCustomLayoutBox.__proto__),
    edgePaint: dart.legacy(ui.Paint),
    graph: dart.legacy(GraphView.Graph),
    algorithm: dart.legacy(GraphView.Layout)
  }));
  dart.setSetterSignature(GraphView.RenderCustomLayoutBox, () => ({
    __proto__: dart.getSetters(GraphView.RenderCustomLayoutBox.__proto__),
    edgePaint: dart.legacy(ui.Paint),
    graph: dart.legacy(GraphView.Graph),
    algorithm: dart.legacy(GraphView.Layout)
  }));
  dart.setLibraryUri(GraphView.RenderCustomLayoutBox, I[1]);
  dart.setFieldSignature(GraphView.RenderCustomLayoutBox, () => ({
    __proto__: dart.getFields(GraphView.RenderCustomLayoutBox.__proto__),
    [_graph]: dart.fieldType(dart.legacy(GraphView.Graph)),
    [_algorithm]: dart.fieldType(dart.legacy(GraphView.Layout)),
    [_paint]: dart.fieldType(dart.legacy(ui.Paint))
  }));
  var graphObserver = dart.privateName(GraphView, "Graph.graphObserver");
  var isTree = dart.privateName(GraphView, "Graph.isTree");
  var _nodes = dart.privateName(GraphView, "_nodes");
  var _edges = dart.privateName(GraphView, "_edges");
  GraphView.Graph = class Graph extends core.Object {
    get graphObserver() {
      return this[graphObserver];
    }
    set graphObserver(value) {
      this[graphObserver] = value;
    }
    get isTree() {
      return this[isTree];
    }
    set isTree(value) {
      this[isTree] = value;
    }
    get nodes() {
      return this[_nodes];
    }
    get edges() {
      return this[_edges];
    }
    nodeCount() {
      return this[_nodes][$length];
    }
    addNode(node) {
      if (!dart.test(this[_nodes][$contains](node))) {
        this[_nodes][$add](node);
        this.notifyGraphObserver();
      }
    }
    addNodes(nodes) {
      return nodes[$forEach](dart.fn(it => this.addNode(it), T.NodeLTovoid()));
    }
    removeNode(node) {
      if (!dart.test(this[_nodes][$contains](node))) {
      }
      if (dart.test(this.isTree)) {
        this.successorsOf(node)[$forEach](dart.fn(element => this.removeNode(element), T.NodeLTovoid()));
      }
      this[_nodes][$remove](node);
      this[_edges][$removeWhere](dart.fn(edge => dart.equals(edge.source, node) || dart.equals(edge.destination, node), T.EdgeLToboolL()));
      this.notifyGraphObserver();
    }
    removeNodes(nodes) {
      return nodes[$forEach](dart.fn(it => this.removeNode(it), T.NodeLTovoid()));
    }
    addEdge(source, destination, opts) {
      let paint = opts && 'paint' in opts ? opts.paint : null;
      let edge = new GraphView.Edge.new(source, destination, {paint: paint});
      this.addEdgeS(edge);
      return edge;
    }
    addEdgeS(edge) {
      if (dart.test(this[_nodes][$contains](edge.source))) {
        edge.source = this[_nodes][$firstWhere](dart.fn(element => dart.equals(element, edge.source), T.NodeLToboolL()));
      } else {
        this[_nodes][$add](edge.source);
      }
      if (dart.test(this[_nodes][$contains](edge.destination))) {
        edge.destination = this[_nodes][$firstWhere](dart.fn(element => dart.equals(element, edge.destination), T.NodeLToboolL()));
      } else {
        this[_nodes][$add](edge.destination);
      }
      if (!dart.test(this[_edges][$contains](edge))) {
        this[_edges][$add](edge);
        this.notifyGraphObserver();
      }
    }
    addEdges(edges) {
      return edges[$forEach](dart.fn(it => this.addEdgeS(it), T.EdgeLTovoid()));
    }
    removeEdge(edge) {
      return this[_edges][$remove](edge);
    }
    removeEdges(edges) {
      return edges[$forEach](dart.fn(it => this.removeEdge(it), T.EdgeLTovoid()));
    }
    removeEdgeFromPredecessor(predecessor, current) {
      this[_edges][$removeWhere](dart.fn(edge => dart.equals(edge.source, predecessor) && dart.equals(edge.destination, current), T.EdgeLToboolL()));
    }
    hasNodes() {
      return this[_nodes][$isNotEmpty];
    }
    getEdgeBetween(source, destination) {
      return this[_edges][$firstWhere](dart.fn(element => dart.equals(element.source, source) && dart.equals(element.destination, destination), T.EdgeLToboolL()), {orElse: dart.fn(() => null, T.VoidToNull())});
    }
    hasSuccessor(node) {
      return this[_edges][$any](dart.fn(element => dart.equals(element.source, node), T.EdgeLToboolL()));
    }
    successorsOf(node) {
      return this[_edges][$where](dart.fn(element => dart.equals(element.source, node), T.EdgeLToboolL()))[$map](T.NodeL(), dart.fn(e => e.destination, T.EdgeLToNodeL()))[$toList]();
    }
    hasPredecessor(node) {
      return this[_edges][$any](dart.fn(element => dart.equals(element.destination, node), T.EdgeLToboolL()));
    }
    predecessorsOf(node) {
      return this[_edges][$where](dart.fn(element => dart.equals(element.destination, node), T.EdgeLToboolL()))[$map](T.NodeL(), dart.fn(edge => edge.source, T.EdgeLToNodeL()))[$toList]();
    }
    contains(opts) {
      let node = opts && 'node' in opts ? opts.node : null;
      let edge = opts && 'edge' in opts ? opts.edge : null;
      return node != null && dart.test(this[_nodes][$contains](node)) || edge != null && dart.test(this[_edges][$contains](edge));
    }
    containsData(data) {
      return this[_nodes][$any](dart.fn(element => dart.equals(element.data, data), T.NodeLToboolL()));
    }
    getNodeAtPosition(position) {
      if (dart.notNull(position) < 0) {
      }
      let size = this[_nodes][$length];
      if (dart.notNull(position) >= dart.notNull(size)) {
      }
      return this[_nodes][$_get](position);
    }
    getNodeAtUsingData(data) {
      return this[_nodes][$firstWhere](dart.fn(element => dart.equals(element.data, data), T.NodeLToboolL()));
    }
    getNodeUsingKey(key) {
      return this[_nodes][$firstWhere](dart.fn(element => dart.equals(element.key, key), T.NodeLToboolL()));
    }
    getOutEdges(node) {
      return this[_edges][$where](dart.fn(element => dart.equals(element.source, node), T.EdgeLToboolL()))[$toList]();
    }
    getInEdges(node) {
      return this[_edges][$where](dart.fn(element => dart.equals(element.destination, node), T.EdgeLToboolL()))[$toList]();
    }
    notifyGraphObserver() {
      return this.graphObserver[$forEach](dart.fn(element => {
        element.notifyGraphInvalidated();
      }, T.GraphObserverLToNull()));
    }
  };
  (GraphView.Graph.new = function() {
    this[_nodes] = T.JSArrayOfNodeL().of([]);
    this[_edges] = T.JSArrayOfEdgeL().of([]);
    this[graphObserver] = T.JSArrayOfGraphObserverL().of([]);
    this[isTree] = false;
    ;
  }).prototype = GraphView.Graph.prototype;
  dart.addTypeTests(GraphView.Graph);
  dart.addTypeCaches(GraphView.Graph);
  dart.setMethodSignature(GraphView.Graph, () => ({
    __proto__: dart.getMethods(GraphView.Graph.__proto__),
    nodeCount: dart.fnType(dart.legacy(core.int), []),
    addNode: dart.fnType(dart.void, [dart.legacy(GraphView.Node)]),
    addNodes: dart.fnType(dart.void, [dart.legacy(core.List$(dart.legacy(GraphView.Node)))]),
    removeNode: dart.fnType(dart.void, [dart.legacy(GraphView.Node)]),
    removeNodes: dart.fnType(dart.void, [dart.legacy(core.List$(dart.legacy(GraphView.Node)))]),
    addEdge: dart.fnType(dart.legacy(GraphView.Edge), [dart.legacy(GraphView.Node), dart.legacy(GraphView.Node)], {paint: dart.legacy(ui.Paint)}, {}),
    addEdgeS: dart.fnType(dart.void, [dart.legacy(GraphView.Edge)]),
    addEdges: dart.fnType(dart.void, [dart.legacy(core.List$(dart.legacy(GraphView.Edge)))]),
    removeEdge: dart.fnType(dart.void, [dart.legacy(GraphView.Edge)]),
    removeEdges: dart.fnType(dart.void, [dart.legacy(core.List$(dart.legacy(GraphView.Edge)))]),
    removeEdgeFromPredecessor: dart.fnType(dart.void, [dart.legacy(GraphView.Node), dart.legacy(GraphView.Node)]),
    hasNodes: dart.fnType(dart.legacy(core.bool), []),
    getEdgeBetween: dart.fnType(dart.legacy(GraphView.Edge), [dart.legacy(GraphView.Node), dart.legacy(GraphView.Node)]),
    hasSuccessor: dart.fnType(dart.legacy(core.bool), [dart.legacy(GraphView.Node)]),
    successorsOf: dart.fnType(dart.legacy(core.List$(dart.legacy(GraphView.Node))), [dart.legacy(GraphView.Node)]),
    hasPredecessor: dart.fnType(dart.legacy(core.bool), [dart.legacy(GraphView.Node)]),
    predecessorsOf: dart.fnType(dart.legacy(core.List$(dart.legacy(GraphView.Node))), [dart.legacy(GraphView.Node)]),
    contains: dart.fnType(dart.legacy(core.bool), [], {edge: dart.legacy(GraphView.Edge), node: dart.legacy(GraphView.Node)}, {}),
    containsData: dart.fnType(dart.legacy(core.bool), [dart.dynamic]),
    getNodeAtPosition: dart.fnType(dart.legacy(GraphView.Node), [dart.legacy(core.int)]),
    getNodeAtUsingData: dart.fnType(dart.legacy(GraphView.Node), [dart.legacy(framework.Widget)]),
    getNodeUsingKey: dart.fnType(dart.legacy(GraphView.Node), [dart.legacy(key.Key)]),
    getOutEdges: dart.fnType(dart.legacy(core.List$(dart.legacy(GraphView.Edge))), [dart.legacy(GraphView.Node)]),
    getInEdges: dart.fnType(dart.legacy(core.List$(dart.legacy(GraphView.Edge))), [dart.legacy(GraphView.Node)]),
    notifyGraphObserver: dart.fnType(dart.void, [])
  }));
  dart.setGetterSignature(GraphView.Graph, () => ({
    __proto__: dart.getGetters(GraphView.Graph.__proto__),
    nodes: dart.legacy(core.List$(dart.legacy(GraphView.Node))),
    edges: dart.legacy(core.List$(dart.legacy(GraphView.Edge)))
  }));
  dart.setLibraryUri(GraphView.Graph, I[1]);
  dart.setFieldSignature(GraphView.Graph, () => ({
    __proto__: dart.getFields(GraphView.Graph.__proto__),
    [_nodes]: dart.finalFieldType(dart.legacy(core.List$(dart.legacy(GraphView.Node)))),
    [_edges]: dart.finalFieldType(dart.legacy(core.List$(dart.legacy(GraphView.Edge)))),
    graphObserver: dart.fieldType(dart.legacy(core.List$(dart.legacy(GraphView.GraphObserver)))),
    isTree: dart.fieldType(dart.legacy(core.bool))
  }));
  var key$ = dart.privateName(GraphView, "Node.key");
  var data$ = dart.privateName(GraphView, "Node.data");
  var size = dart.privateName(GraphView, "Node.size");
  var position = dart.privateName(GraphView, "Node.position");
  GraphView.Node = class Node extends core.Object {
    get key() {
      return this[key$];
    }
    set key(value) {
      this[key$] = value;
    }
    get data() {
      return this[data$];
    }
    set data(value) {
      this[data$] = value;
    }
    get size() {
      return this[size];
    }
    set size(value) {
      this[size] = value;
    }
    get position() {
      return this[position];
    }
    set position(value) {
      this[position] = value;
    }
    get height() {
      return this.size.height;
    }
    get width() {
      return this.size.width;
    }
    get x() {
      return this.position.dx;
    }
    get y() {
      return this.position.dy;
    }
    set y(value) {
      this.position = new ui.Offset.new(this.position.dx, value);
    }
    set x(value) {
      this.position = new ui.Offset.new(value, this.position.dy);
    }
    _equals(other) {
      if (other == null) return false;
      return this === other || T.NodeL().is(other) && this.hashCode == dart.hashCode(other);
    }
    get hashCode() {
      let t0, t0$;
      t0$ = (t0 = this.key, t0 == null ? null : dart.hashCode(t0));
      return t0$ == null ? dart.hashCode(this.data) : t0$;
    }
    toString() {
      return "Node{position: " + dart.str(this.position) + ", data: " + dart.str(this.data) + ", _size: " + dart.str(this.size) + "}";
    }
  };
  (GraphView.Node.new = function(data, opts) {
    let key = opts && 'key' in opts ? opts.key : null;
    this[size] = new ui.Size.new(0.0, 0.0);
    this[position] = new ui.Offset.new(0.0, 0.0);
    this[data$] = data;
    this[key$] = key;
    ;
  }).prototype = GraphView.Node.prototype;
  dart.addTypeTests(GraphView.Node);
  dart.addTypeCaches(GraphView.Node);
  dart.setMethodSignature(GraphView.Node, () => ({
    __proto__: dart.getMethods(GraphView.Node.__proto__),
    _equals: dart.fnType(dart.legacy(core.bool), [dart.legacy(core.Object)]),
    [$_equals]: dart.fnType(dart.legacy(core.bool), [dart.legacy(core.Object)]),
    toString: dart.fnType(dart.legacy(core.String), []),
    [$toString]: dart.fnType(dart.legacy(core.String), [])
  }));
  dart.setGetterSignature(GraphView.Node, () => ({
    __proto__: dart.getGetters(GraphView.Node.__proto__),
    height: dart.legacy(core.double),
    width: dart.legacy(core.double),
    x: dart.legacy(core.double),
    y: dart.legacy(core.double),
    hashCode: dart.legacy(core.int),
    [$hashCode]: dart.legacy(core.int)
  }));
  dart.setSetterSignature(GraphView.Node, () => ({
    __proto__: dart.getSetters(GraphView.Node.__proto__),
    y: dart.legacy(core.double),
    x: dart.legacy(core.double)
  }));
  dart.setLibraryUri(GraphView.Node, I[1]);
  dart.setFieldSignature(GraphView.Node, () => ({
    __proto__: dart.getFields(GraphView.Node.__proto__),
    key: dart.fieldType(dart.legacy(key.Key)),
    data: dart.fieldType(dart.legacy(framework.Widget)),
    size: dart.fieldType(dart.legacy(ui.Size)),
    position: dart.fieldType(dart.legacy(ui.Offset))
  }));
  dart.defineExtensionMethods(GraphView.Node, ['_equals', 'toString']);
  dart.defineExtensionAccessors(GraphView.Node, ['hashCode']);
  var source$ = dart.privateName(GraphView, "Edge.source");
  var destination$ = dart.privateName(GraphView, "Edge.destination");
  var key$0 = dart.privateName(GraphView, "Edge.key");
  var paint$0 = dart.privateName(GraphView, "Edge.paint");
  GraphView.Edge = class Edge extends core.Object {
    get source() {
      return this[source$];
    }
    set source(value) {
      this[source$] = value;
    }
    get destination() {
      return this[destination$];
    }
    set destination(value) {
      this[destination$] = value;
    }
    get key() {
      return this[key$0];
    }
    set key(value) {
      this[key$0] = value;
    }
    get paint() {
      return this[paint$0];
    }
    set paint(value) {
      this[paint$0] = value;
    }
    _equals(other) {
      if (other == null) return false;
      return this === other || T.EdgeL().is(other) && this.hashCode == dart.hashCode(other);
    }
    get hashCode() {
      let t0, t0$;
      t0$ = (t0 = this.key, t0 == null ? null : dart.hashCode(t0));
      return t0$ == null ? (dart.notNull(dart.hashCode(this.source)) ^ dart.notNull(dart.hashCode(this.destination))) >>> 0 : t0$;
    }
  };
  (GraphView.Edge.new = function(source, destination, opts) {
    let key = opts && 'key' in opts ? opts.key : null;
    let paint = opts && 'paint' in opts ? opts.paint : null;
    this[source$] = source;
    this[destination$] = destination;
    this[key$0] = key;
    this[paint$0] = paint;
    ;
  }).prototype = GraphView.Edge.prototype;
  dart.addTypeTests(GraphView.Edge);
  dart.addTypeCaches(GraphView.Edge);
  dart.setMethodSignature(GraphView.Edge, () => ({
    __proto__: dart.getMethods(GraphView.Edge.__proto__),
    _equals: dart.fnType(dart.legacy(core.bool), [dart.legacy(core.Object)]),
    [$_equals]: dart.fnType(dart.legacy(core.bool), [dart.legacy(core.Object)])
  }));
  dart.setGetterSignature(GraphView.Edge, () => ({
    __proto__: dart.getGetters(GraphView.Edge.__proto__),
    hashCode: dart.legacy(core.int),
    [$hashCode]: dart.legacy(core.int)
  }));
  dart.setLibraryUri(GraphView.Edge, I[1]);
  dart.setFieldSignature(GraphView.Edge, () => ({
    __proto__: dart.getFields(GraphView.Edge.__proto__),
    source: dart.fieldType(dart.legacy(GraphView.Node)),
    destination: dart.fieldType(dart.legacy(GraphView.Node)),
    key: dart.fieldType(dart.legacy(key.Key)),
    paint: dart.fieldType(dart.legacy(ui.Paint))
  }));
  dart.defineExtensionMethods(GraphView.Edge, ['_equals']);
  dart.defineExtensionAccessors(GraphView.Edge, ['hashCode']);
  GraphView.GraphObserver = class GraphObserver extends core.Object {};
  (GraphView.GraphObserver.new = function() {
    ;
  }).prototype = GraphView.GraphObserver.prototype;
  dart.addTypeTests(GraphView.GraphObserver);
  dart.addTypeCaches(GraphView.GraphObserver);
  dart.setLibraryUri(GraphView.GraphObserver, I[1]);
  var renderer = dart.privateName(GraphView, "Layout.renderer");
  GraphView.Layout = class Layout extends core.Object {
    get renderer() {
      return this[renderer];
    }
    set renderer(value) {
      this[renderer] = value;
    }
  };
  (GraphView.Layout.new = function() {
    this[renderer] = null;
    ;
  }).prototype = GraphView.Layout.prototype;
  dart.addTypeTests(GraphView.Layout);
  dart.addTypeCaches(GraphView.Layout);
  dart.setLibraryUri(GraphView.Layout, I[1]);
  dart.setFieldSignature(GraphView.Layout, () => ({
    __proto__: dart.getFields(GraphView.Layout.__proto__),
    renderer: dart.fieldType(dart.legacy(GraphView.EdgeRenderer))
  }));
  var trianglePath = dart.privateName(GraphView, "ArrowEdgeRenderer.trianglePath");
  GraphView.EdgeRenderer = class EdgeRenderer extends core.Object {};
  (GraphView.EdgeRenderer.new = function() {
    ;
  }).prototype = GraphView.EdgeRenderer.prototype;
  dart.addTypeTests(GraphView.EdgeRenderer);
  dart.addTypeCaches(GraphView.EdgeRenderer);
  dart.setLibraryUri(GraphView.EdgeRenderer, I[1]);
  GraphView.ArrowEdgeRenderer = class ArrowEdgeRenderer extends GraphView.EdgeRenderer {
    get trianglePath() {
      return this[trianglePath];
    }
    set trianglePath(value) {
      this[trianglePath] = value;
    }
    render(canvas, graph, paint) {
      let t0;
      let trianglePaint = (t0 = ui.Paint.new(), (() => {
        t0.color = paint.color;
        t0.style = ui.PaintingStyle.fill;
        return t0;
      })());
      graph.edges[$forEach](dart.fn(edge => {
        let t1, t0, t0$, t0$0;
        let source = edge.source;
        let destination = edge.destination;
        let sourceOffset = source.position;
        let x1 = sourceOffset.dx;
        let y1 = sourceOffset.dy;
        let destinationOffset = destination.position;
        let x2 = destinationOffset.dx;
        let y2 = destinationOffset.dy;
        let startX = dart.notNull(x1) + dart.notNull(source.width) / 2;
        let startY = dart.notNull(y1) + dart.notNull(source.height) / 2;
        let stopX = dart.notNull(x2) + dart.notNull(destination.width) / 2;
        let stopY = dart.notNull(y2) + dart.notNull(destination.height) / 2;
        let clippedLine = this.clipLine(startX, startY, stopX, stopY, destination);
        let edgeTrianglePaint = null;
        if (edge.paint != null) {
          edgeTrianglePaint = (t0 = ui.Paint.new(), (() => {
            t0.color = (t1 = edge.paint.color, t1 == null ? paint.color : t1);
            t0.style = ui.PaintingStyle.fill;
            return t0;
          })());
        }
        let triangleCentroid = this.drawTriangle(canvas, (t0$ = edgeTrianglePaint, t0$ == null ? trianglePaint : t0$), clippedLine[$_get](0), clippedLine[$_get](1), clippedLine[$_get](2), clippedLine[$_get](3));
        canvas.drawLine(new ui.Offset.new(clippedLine[$_get](0), clippedLine[$_get](1)), new ui.Offset.new(triangleCentroid[$_get](0), triangleCentroid[$_get](1)), (t0$0 = edge.paint, t0$0 == null ? paint : t0$0));
      }, T.EdgeLToNull()));
    }
    drawTriangle(canvas, paint, x1, y1, x2, y2) {
      let angle = math.atan2(dart.notNull(y2) - dart.notNull(y1), dart.notNull(x2) - dart.notNull(x1)) + 3.141592653589793;
      let x3 = dart.notNull(x2) + 10 * math.cos(angle - 0.5);
      let y3 = dart.notNull(y2) + 10 * math.sin(angle - 0.5);
      let x4 = dart.notNull(x2) + 10 * math.cos(angle + 0.5);
      let y4 = dart.notNull(y2) + 10 * math.sin(angle + 0.5);
      this.trianglePath.moveTo(x2, y2);
      this.trianglePath.lineTo(x3, y3);
      this.trianglePath.lineTo(x4, y4);
      this.trianglePath.close();
      canvas.drawPath(this.trianglePath, paint);
      let x = (dart.notNull(x2) + x3 + x4) / 3;
      let y = (dart.notNull(y2) + y3 + y4) / 3;
      let triangleCentroid = T.JSArrayOfdoubleL().of([x, y]);
      this.trianglePath.reset();
      return triangleCentroid;
    }
    clipLine(startX, startY, stopX, stopY, destination) {
      let resultLine = T.ListOfdoubleL().filled(4, 0.0);
      resultLine[$_set](0, startX);
      resultLine[$_set](1, startY);
      let slope = (dart.notNull(startY) - dart.notNull(stopY)) / (dart.notNull(startX) - dart.notNull(stopX));
      let halfHeight = dart.notNull(destination.height) / 2;
      let halfWidth = dart.notNull(destination.width) / 2;
      let halfSlopeWidth = slope * halfWidth;
      let halfSlopeHeight = halfHeight / slope;
      if (-halfHeight <= halfSlopeWidth && halfSlopeWidth <= halfHeight) {
        if (dart.notNull(destination.x) > dart.notNull(startX)) {
          resultLine[$_set](2, dart.notNull(stopX) - halfWidth);
          resultLine[$_set](3, dart.notNull(stopY) - halfSlopeWidth);
        } else if (dart.notNull(destination.x) < dart.notNull(startX)) {
          resultLine[$_set](2, dart.notNull(stopX) + halfWidth);
          resultLine[$_set](3, dart.notNull(stopY) + halfSlopeWidth);
        }
      }
      if (-halfWidth <= halfSlopeHeight && halfSlopeHeight <= halfWidth) {
        if (dart.notNull(destination.y) < dart.notNull(startY)) {
          resultLine[$_set](2, dart.notNull(stopX) + halfSlopeHeight);
          resultLine[$_set](3, dart.notNull(stopY) + halfHeight);
        } else if (dart.notNull(destination.y) > dart.notNull(startY)) {
          resultLine[$_set](2, dart.notNull(stopX) - halfSlopeHeight);
          resultLine[$_set](3, dart.notNull(stopY) - halfHeight);
        }
      }
      return resultLine;
    }
  };
  (GraphView.ArrowEdgeRenderer.new = function() {
    this[trianglePath] = ui.Path.new();
    ;
  }).prototype = GraphView.ArrowEdgeRenderer.prototype;
  dart.addTypeTests(GraphView.ArrowEdgeRenderer);
  dart.addTypeCaches(GraphView.ArrowEdgeRenderer);
  dart.setMethodSignature(GraphView.ArrowEdgeRenderer, () => ({
    __proto__: dart.getMethods(GraphView.ArrowEdgeRenderer.__proto__),
    render: dart.fnType(dart.void, [dart.legacy(ui.Canvas), dart.legacy(GraphView.Graph), dart.legacy(ui.Paint)]),
    drawTriangle: dart.fnType(dart.legacy(core.List$(dart.legacy(core.double))), [dart.legacy(ui.Canvas), dart.legacy(ui.Paint), dart.legacy(core.double), dart.legacy(core.double), dart.legacy(core.double), dart.legacy(core.double)]),
    clipLine: dart.fnType(dart.legacy(core.List$(dart.legacy(core.double))), [dart.legacy(core.double), dart.legacy(core.double), dart.legacy(core.double), dart.legacy(core.double), dart.legacy(GraphView.Node)])
  }));
  dart.setLibraryUri(GraphView.ArrowEdgeRenderer, I[1]);
  dart.setFieldSignature(GraphView.ArrowEdgeRenderer, () => ({
    __proto__: dart.getFields(GraphView.ArrowEdgeRenderer.__proto__),
    trianglePath: dart.fieldType(dart.legacy(ui.Path))
  }));
  var displacement = dart.privateName(GraphView, "FruchtermanReingoldAlgorithm.displacement");
  var rand = dart.privateName(GraphView, "FruchtermanReingoldAlgorithm.rand");
  var width = dart.privateName(GraphView, "FruchtermanReingoldAlgorithm.width");
  var height = dart.privateName(GraphView, "FruchtermanReingoldAlgorithm.height");
  var k = dart.privateName(GraphView, "FruchtermanReingoldAlgorithm.k");
  var tick = dart.privateName(GraphView, "FruchtermanReingoldAlgorithm.tick");
  var attractionK = dart.privateName(GraphView, "FruchtermanReingoldAlgorithm.attractionK");
  var repulsionK = dart.privateName(GraphView, "FruchtermanReingoldAlgorithm.repulsionK");
  var iterations$ = dart.privateName(GraphView, "FruchtermanReingoldAlgorithm.iterations");
  var renderer$ = dart.privateName(GraphView, "FruchtermanReingoldAlgorithm.renderer");
  var focusedNode = dart.privateName(GraphView, "FruchtermanReingoldAlgorithm.focusedNode");
  GraphView.FruchtermanReingoldAlgorithm = class FruchtermanReingoldAlgorithm extends core.Object {
    get displacement() {
      return this[displacement];
    }
    set displacement(value) {
      this[displacement] = value;
    }
    get rand() {
      return this[rand];
    }
    set rand(value) {
      this[rand] = value;
    }
    get width() {
      return this[width];
    }
    set width(value) {
      this[width] = value;
    }
    get height() {
      return this[height];
    }
    set height(value) {
      this[height] = value;
    }
    get k() {
      return this[k];
    }
    set k(value) {
      this[k] = value;
    }
    get tick() {
      return this[tick];
    }
    set tick(value) {
      this[tick] = value;
    }
    get attractionK() {
      return this[attractionK];
    }
    set attractionK(value) {
      this[attractionK] = value;
    }
    get repulsionK() {
      return this[repulsionK];
    }
    set repulsionK(value) {
      this[repulsionK] = value;
    }
    get iterations() {
      return this[iterations$];
    }
    set iterations(value) {
      this[iterations$] = value;
    }
    get renderer() {
      return this[renderer$];
    }
    set renderer(value) {
      this[renderer$] = value;
    }
    get focusedNode() {
      return this[focusedNode];
    }
    set focusedNode(value) {
      this[focusedNode] = value;
    }
    init(nodes) {
      nodes[$forEach](dart.fn(node => {
        this.displacement[$_set](node, ui.Offset.zero);
        if (node.position.distance === 0.0) {
          node.position = new ui.Offset.new(GraphView.randInt(this.rand, 0, dart.notNull(this.width) / 2), GraphView.randInt(this.rand, 0, dart.notNull(this.height) / 2));
        }
      }, T.NodeLToNull()));
    }
    cool(currentIteration) {
      this.tick = dart.notNull(this.tick) * (1.0 - dart.notNull(currentIteration) / dart.notNull(this.iterations));
    }
    limitMaximumDisplacement(nodes) {
      nodes[$forEach](dart.fn(node => {
        let t0;
        if (!dart.equals(node, this.focusedNode)) {
          let dispLength = math.max(T.doubleL(), 0.0001, this.displacement[$_get](node).distance);
          t0 = node;
          t0.position = t0.position['+'](this.displacement[$_get](node)['/'](dispLength)['*'](math.min(T.doubleL(), dispLength, this.tick)));
        } else {
          this.displacement[$_set](node, ui.Offset.zero);
        }
      }, T.NodeLToNull()));
    }
    calculateAttraction(edges) {
      edges[$forEach](dart.fn(edge => {
        let source = edge.source;
        let destination = edge.destination;
        let delta = source.position['-'](destination.position);
        let deltaLength = math.max(T.doubleL(), 0.0001, delta.distance);
        let offsetDisp = delta['/'](deltaLength)['*'](this.forceAttraction(deltaLength));
        this.displacement[$_set](source, this.displacement[$_get](source)['-'](offsetDisp));
        this.displacement[$_set](destination, this.displacement[$_get](destination)['+'](offsetDisp));
      }, T.EdgeLToNull()));
    }
    calculateRepulsion(nodes) {
      nodes[$forEach](dart.fn(v => {
        nodes[$forEach](dart.fn(u => {
          if (!dart.equals(u, v)) {
            let delta = v.position['-'](u.position);
            let deltaLength = math.max(T.doubleL(), 0.0001, delta.distance);
            this.displacement[$_set](v, this.displacement[$_get](v)['+'](delta['/'](deltaLength)['*'](this.forceRepulsion(deltaLength))));
          }
        }, T.NodeLToNull()));
      }, T.NodeLToNull()));
    }
    forceAttraction(x) {
      return dart.notNull(x) * dart.notNull(x) / dart.notNull(this.attractionK);
    }
    forceRepulsion(x) {
      return dart.notNull(this.repulsionK) * dart.notNull(this.repulsionK) / dart.notNull(x);
    }
    run(graph, shiftX, shiftY) {
      let size = dart.notNull(this.findBiggestSize(graph)) * dart.notNull(graph.nodeCount());
      this.width = size;
      this.height = size;
      let nodes = graph.nodes;
      let edges = graph.edges;
      this.tick = 0.1 * math.sqrt(dart.notNull(this.width) / 2 * dart.notNull(this.height) / 2);
      this.k = 0.75 * math.sqrt(dart.notNull(this.width) * dart.notNull(this.height) / dart.notNull(nodes[$length]));
      this.attractionK = 0.75 * dart.notNull(this.k);
      this.repulsionK = 0.75 * dart.notNull(this.k);
      this.init(nodes);
      for (let i = 0; i < dart.notNull(this.iterations); i = i + 1) {
        this.calculateRepulsion(nodes);
        this.calculateAttraction(edges);
        this.limitMaximumDisplacement(nodes);
        this.cool(i);
        if (dart.test(this.done())) {
          break;
        }
      }
      if (this.focusedNode == null) {
        this.positionNodes(graph);
      }
      this.shiftCoordinates(graph, shiftX, shiftY);
      return this.calculateGraphSize(graph);
    }
    shiftCoordinates(graph, shiftX, shiftY) {
      graph.nodes[$forEach](dart.fn(node => {
        node.position = new ui.Offset.new(dart.notNull(node.x) + dart.notNull(shiftX), dart.notNull(node.y) + dart.notNull(shiftY));
      }, T.NodeLToNull()));
    }
    positionNodes(graph) {
      let offset = this.getOffset(graph);
      let x = offset.dx;
      let y = offset.dy;
      let nodesVisited = T.JSArrayOfNodeL().of([]);
      let nodeClusters = T.JSArrayOfNodeClusterL().of([]);
      graph.nodes[$forEach](dart.fn(node => {
        node.position = new ui.Offset.new(dart.notNull(node.x) - dart.notNull(x), dart.notNull(node.y) - dart.notNull(y));
      }, T.NodeLToNull()));
      graph.nodes[$forEach](dart.fn(node => {
        if (!dart.test(nodesVisited[$contains](node))) {
          nodesVisited[$add](node);
          let cluster = this.findClusterOf(nodeClusters, node);
          if (cluster == null) {
            cluster = new GraphView.NodeCluster.new();
            cluster.add(node);
            nodeClusters[$add](cluster);
          }
          this.followEdges(graph, cluster, node, nodesVisited);
        }
      }, T.NodeLToNull()));
      this.positionCluster(nodeClusters);
    }
    positionCluster(nodeClusters) {
      this.combineSingleNodeCluster(nodeClusters);
      let cluster = nodeClusters[$_get](0);
      cluster.offset(-dart.notNull(cluster.rect.left), -dart.notNull(cluster.rect.top));
      for (let i = 1; i < dart.notNull(nodeClusters[$length]); i = i + 1) {
        let nextCluster = nodeClusters[$_get](i);
        let xDiff = dart.notNull(nextCluster.rect.left) - dart.notNull(cluster.rect.right) - 15;
        let yDiff = dart.notNull(nextCluster.rect.top) - dart.notNull(cluster.rect.top);
        nextCluster.offset(-xDiff, -yDiff);
        cluster = nextCluster;
      }
    }
    combineSingleNodeCluster(nodeClusters) {
      let firstSingleNodeCluster = null;
      nodeClusters[$forEach](dart.fn(cluster => {
        if (cluster.size() === 1) {
          if (firstSingleNodeCluster == null) {
            firstSingleNodeCluster = cluster;
          } else {
            firstSingleNodeCluster.concat(cluster);
          }
        }
      }, T.NodeClusterLToNull()));
      nodeClusters[$removeWhere](dart.fn(element => element.size() === 1, T.NodeClusterLToboolL()));
    }
    followEdges(graph, cluster, node, nodesVisited) {
      graph.successorsOf(node)[$forEach](dart.fn(successor => {
        if (!dart.test(nodesVisited[$contains](successor))) {
          nodesVisited[$add](successor);
          cluster.add(successor);
          this.followEdges(graph, cluster, successor, nodesVisited);
        }
      }, T.NodeLToNull()));
      graph.predecessorsOf(node)[$forEach](dart.fn(predecessor => {
        if (!dart.test(nodesVisited[$contains](predecessor))) {
          nodesVisited[$add](predecessor);
          cluster.add(predecessor);
          this.followEdges(graph, cluster, predecessor, nodesVisited);
        }
      }, T.NodeLToNull()));
    }
    findClusterOf(clusters, node) {
      return clusters[$firstWhere](dart.fn(element => element.contains(node), T.NodeClusterLToboolL()), {orElse: dart.fn(() => null, T.VoidToNull())});
    }
    findBiggestSize(graph) {
      let t0;
      t0 = graph.nodes[$map](T.doubleL(), dart.fn(it => math.max(T.doubleL(), it.height, it.width), T.NodeLTodoubleL()))[$reduce](dart.gbind(C[0] || CT.C0, T.doubleL()));
      return t0 == null ? 0.0 : t0;
    }
    getOffset(graph) {
      let offsetX = 1 / 0;
      let offsetY = 1 / 0;
      graph.nodes[$forEach](dart.fn(node => {
        offsetX = math.min(T.doubleL(), offsetX, node.x);
        offsetY = math.min(T.doubleL(), offsetY, node.y);
      }, T.NodeLToNull()));
      return new ui.Offset.new(offsetX, offsetY);
    }
    done() {
      return dart.notNull(this.tick) < 1.0 / math.max(T.numL(), this.height, this.width);
    }
    drawEdges(canvas, graph, linePaint) {
    }
    calculateGraphSize(graph) {
      let left = 1 / 0;
      let top = 1 / 0;
      let right = -1 / 0;
      let bottom = -1 / 0;
      graph.nodes[$forEach](dart.fn(node => {
        left = math.min(T.doubleL(), left, node.x);
        top = math.min(T.doubleL(), top, node.y);
        right = math.max(T.doubleL(), right, dart.notNull(node.x) + dart.notNull(node.width));
        bottom = math.max(T.doubleL(), bottom, dart.notNull(node.y) + dart.notNull(node.height));
      }, T.NodeLToNull()));
      return new ui.Size.new(right - left, bottom - top);
    }
    setFocusedNode(node) {
      this.focusedNode = node;
    }
  };
  (GraphView.FruchtermanReingoldAlgorithm.new = function(opts) {
    let t0;
    let iterations = opts && 'iterations' in opts ? opts.iterations : 1000;
    let renderer = opts && 'renderer' in opts ? opts.renderer : null;
    this[displacement] = new (T.LinkedMapOfNodeL$OffsetL()).new();
    this[rand] = math.Random.new();
    this[width] = null;
    this[height] = null;
    this[k] = null;
    this[tick] = null;
    this[attractionK] = null;
    this[repulsionK] = null;
    this[focusedNode] = null;
    this[iterations$] = iterations;
    this[renderer$] = renderer;
    this.renderer = (t0 = this.renderer, t0 == null ? new GraphView.ArrowEdgeRenderer.new() : t0);
  }).prototype = GraphView.FruchtermanReingoldAlgorithm.prototype;
  dart.addTypeTests(GraphView.FruchtermanReingoldAlgorithm);
  dart.addTypeCaches(GraphView.FruchtermanReingoldAlgorithm);
  GraphView.FruchtermanReingoldAlgorithm[dart.implements] = () => [GraphView.Layout];
  dart.setMethodSignature(GraphView.FruchtermanReingoldAlgorithm, () => ({
    __proto__: dart.getMethods(GraphView.FruchtermanReingoldAlgorithm.__proto__),
    init: dart.fnType(dart.void, [dart.legacy(core.List$(dart.legacy(GraphView.Node)))]),
    cool: dart.fnType(dart.void, [dart.legacy(core.int)]),
    limitMaximumDisplacement: dart.fnType(dart.void, [dart.legacy(core.List$(dart.legacy(GraphView.Node)))]),
    calculateAttraction: dart.fnType(dart.void, [dart.legacy(core.List$(dart.legacy(GraphView.Edge)))]),
    calculateRepulsion: dart.fnType(dart.void, [dart.legacy(core.List$(dart.legacy(GraphView.Node)))]),
    forceAttraction: dart.fnType(dart.legacy(core.double), [dart.legacy(core.double)]),
    forceRepulsion: dart.fnType(dart.legacy(core.double), [dart.legacy(core.double)]),
    run: dart.fnType(dart.legacy(ui.Size), [dart.legacy(GraphView.Graph), dart.legacy(core.double), dart.legacy(core.double)]),
    shiftCoordinates: dart.fnType(dart.void, [dart.legacy(GraphView.Graph), dart.legacy(core.double), dart.legacy(core.double)]),
    positionNodes: dart.fnType(dart.void, [dart.legacy(GraphView.Graph)]),
    positionCluster: dart.fnType(dart.void, [dart.legacy(core.List$(dart.legacy(GraphView.NodeCluster)))]),
    combineSingleNodeCluster: dart.fnType(dart.void, [dart.legacy(core.List$(dart.legacy(GraphView.NodeCluster)))]),
    followEdges: dart.fnType(dart.void, [dart.legacy(GraphView.Graph), dart.legacy(GraphView.NodeCluster), dart.legacy(GraphView.Node), dart.legacy(core.List)]),
    findClusterOf: dart.fnType(dart.legacy(GraphView.NodeCluster), [dart.legacy(core.List$(dart.legacy(GraphView.NodeCluster))), dart.legacy(GraphView.Node)]),
    findBiggestSize: dart.fnType(dart.legacy(core.double), [dart.legacy(GraphView.Graph)]),
    getOffset: dart.fnType(dart.legacy(ui.Offset), [dart.legacy(GraphView.Graph)]),
    done: dart.fnType(dart.legacy(core.bool), []),
    drawEdges: dart.fnType(dart.void, [dart.legacy(ui.Canvas), dart.legacy(GraphView.Graph), dart.legacy(ui.Paint)]),
    calculateGraphSize: dart.fnType(dart.legacy(ui.Size), [dart.legacy(GraphView.Graph)]),
    setFocusedNode: dart.fnType(dart.void, [dart.legacy(GraphView.Node)])
  }));
  dart.setLibraryUri(GraphView.FruchtermanReingoldAlgorithm, I[1]);
  dart.setFieldSignature(GraphView.FruchtermanReingoldAlgorithm, () => ({
    __proto__: dart.getFields(GraphView.FruchtermanReingoldAlgorithm.__proto__),
    displacement: dart.fieldType(dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(ui.Offset)))),
    rand: dart.fieldType(dart.legacy(math.Random)),
    width: dart.fieldType(dart.legacy(core.double)),
    height: dart.fieldType(dart.legacy(core.double)),
    k: dart.fieldType(dart.legacy(core.double)),
    tick: dart.fieldType(dart.legacy(core.double)),
    attractionK: dart.fieldType(dart.legacy(core.double)),
    repulsionK: dart.fieldType(dart.legacy(core.double)),
    iterations: dart.fieldType(dart.legacy(core.int)),
    renderer: dart.fieldType(dart.legacy(GraphView.EdgeRenderer)),
    focusedNode: dart.fieldType(dart.dynamic)
  }));
  var nodes = dart.privateName(GraphView, "NodeCluster.nodes");
  var rect = dart.privateName(GraphView, "NodeCluster.rect");
  GraphView.NodeCluster = class NodeCluster extends core.Object {
    get nodes() {
      return this[nodes];
    }
    set nodes(value) {
      this[nodes] = value;
    }
    get rect() {
      return this[rect];
    }
    set rect(value) {
      this[rect] = value;
    }
    getNodes() {
      return this.nodes;
    }
    getRect() {
      return this.rect;
    }
    setRect(rect) {
      rect = rect;
    }
    add(node) {
      this.nodes[$add](node);
      if (this.nodes[$length] === 1) {
        this.rect = new ui.Rect.fromLTRB(node.x, node.y, dart.notNull(node.x) + dart.notNull(node.width), dart.notNull(node.y) + dart.notNull(node.height));
      } else {
        this.rect = new ui.Rect.fromLTRB(math.min(T.doubleL(), this.rect.left, node.x), math.min(T.doubleL(), this.rect.top, node.y), math.max(T.doubleL(), this.rect.right, dart.notNull(node.x) + dart.notNull(node.width)), math.max(T.doubleL(), this.rect.bottom, dart.notNull(node.y) + dart.notNull(node.height)));
      }
    }
    contains(node) {
      return this.nodes[$contains](node);
    }
    size() {
      return this.nodes[$length];
    }
    concat(cluster) {
      cluster.nodes[$forEach](dart.fn(node => {
        node.position = new ui.Offset.new(dart.notNull(this.rect.right) + 15, this.rect.top);
        this.add(node);
      }, T.NodeLToNull()));
    }
    offset(xDiff, yDiff) {
      this.nodes[$forEach](dart.fn(node => {
        node.position = node.position['+'](new ui.Offset.new(xDiff, yDiff));
      }, T.NodeLToNull()));
      this.rect.translate(xDiff, yDiff);
    }
  };
  (GraphView.NodeCluster.new = function() {
    this[nodes] = null;
    this[rect] = null;
    this.nodes = T.JSArrayOfNodeL().of([]);
    this.rect = ui.Rect.zero;
  }).prototype = GraphView.NodeCluster.prototype;
  dart.addTypeTests(GraphView.NodeCluster);
  dart.addTypeCaches(GraphView.NodeCluster);
  dart.setMethodSignature(GraphView.NodeCluster, () => ({
    __proto__: dart.getMethods(GraphView.NodeCluster.__proto__),
    getNodes: dart.fnType(dart.legacy(core.List$(dart.legacy(GraphView.Node))), []),
    getRect: dart.fnType(dart.legacy(ui.Rect), []),
    setRect: dart.fnType(dart.void, [dart.legacy(ui.Rect)]),
    add: dart.fnType(dart.void, [dart.legacy(GraphView.Node)]),
    contains: dart.fnType(dart.legacy(core.bool), [dart.legacy(GraphView.Node)]),
    size: dart.fnType(dart.legacy(core.int), []),
    concat: dart.fnType(dart.void, [dart.legacy(GraphView.NodeCluster)]),
    offset: dart.fnType(dart.void, [dart.legacy(core.double), dart.legacy(core.double)])
  }));
  dart.setLibraryUri(GraphView.NodeCluster, I[1]);
  dart.setFieldSignature(GraphView.NodeCluster, () => ({
    __proto__: dart.getFields(GraphView.NodeCluster.__proto__),
    nodes: dart.fieldType(dart.legacy(core.List$(dart.legacy(GraphView.Node)))),
    rect: dart.fieldType(dart.legacy(ui.Rect))
  }));
  var nodeData = dart.privateName(GraphView, "SugiyamaAlgorithm.nodeData");
  var edgeData = dart.privateName(GraphView, "SugiyamaAlgorithm.edgeData");
  var stack = dart.privateName(GraphView, "SugiyamaAlgorithm.stack");
  var visited = dart.privateName(GraphView, "SugiyamaAlgorithm.visited");
  var layers = dart.privateName(GraphView, "SugiyamaAlgorithm.layers");
  var graph = dart.privateName(GraphView, "SugiyamaAlgorithm.graph");
  var configuration$ = dart.privateName(GraphView, "SugiyamaAlgorithm.configuration");
  var renderer$0 = dart.privateName(GraphView, "SugiyamaAlgorithm.renderer");
  var nodeCount = dart.privateName(GraphView, "SugiyamaAlgorithm.nodeCount");
  var _Location_parameterLocations = dart.privateName(widget_inspector, "_Location.parameterLocations");
  var _Location_name = dart.privateName(widget_inspector, "_Location.name");
  var _Location_column = dart.privateName(widget_inspector, "_Location.column");
  var _Location_line = dart.privateName(widget_inspector, "_Location.line");
  var _Location_file = dart.privateName(widget_inspector, "_Location.file");
  GraphView.SugiyamaAlgorithm = class SugiyamaAlgorithm extends GraphView.Layout {
    get nodeData() {
      return this[nodeData];
    }
    set nodeData(value) {
      this[nodeData] = value;
    }
    get edgeData() {
      return this[edgeData];
    }
    set edgeData(value) {
      this[edgeData] = value;
    }
    get stack() {
      return this[stack];
    }
    set stack(value) {
      this[stack] = value;
    }
    get visited() {
      return this[visited];
    }
    set visited(value) {
      this[visited] = value;
    }
    get layers() {
      return this[layers];
    }
    set layers(value) {
      this[layers] = value;
    }
    get graph() {
      return this[graph];
    }
    set graph(value) {
      this[graph] = value;
    }
    get configuration() {
      return this[configuration$];
    }
    set configuration(value) {
      this[configuration$] = value;
    }
    get renderer() {
      return this[renderer$0];
    }
    set renderer(value) {
      this[renderer$0] = value;
    }
    get nodeCount() {
      return this[nodeCount];
    }
    set nodeCount(value) {
      this[nodeCount] = value;
    }
    get dummyText() {
      let t0;
      return new text.Text.new("Dummy " + dart.str((t0 = this.nodeCount, this.nodeCount = dart.notNull(t0) + 1, t0)), {$creationLocationd_0dea112b090073317d4: C[1] || CT.C1});
    }
    isVertical() {
      let orientation = this.configuration.orientation;
      return orientation === 1 || orientation === 2;
    }
    needReverseOrder() {
      let orientation = this.configuration.orientation;
      return orientation === 2 || orientation === 4;
    }
    run(graph, shiftX, shiftY) {
      this.graph = this.copyGraph(graph);
      this.reset();
      this.initSugiyamaData();
      this.cycleRemoval();
      this.layerAssignment();
      this.nodeOrdering();
      this.coordinateAssignment();
      this.shiftCoordinates(shiftX, shiftY);
      let graphSize = this.calculateGraphSize(this.graph);
      this.denormalize();
      this.restoreCycle();
      return graphSize;
    }
    calculateGraphSize(graph) {
      let left = 1 / 0;
      let top = 1 / 0;
      let right = -1 / 0;
      let bottom = -1 / 0;
      graph.nodes[$forEach](dart.fn(node => {
        left = math.min(T.doubleL(), left, node.x);
        top = math.min(T.doubleL(), top, node.y);
        right = math.max(T.doubleL(), right, dart.notNull(node.x) + dart.notNull(node.width));
        bottom = math.max(T.doubleL(), bottom, dart.notNull(node.y) + dart.notNull(node.height));
      }, T.NodeLToNull()));
      return new ui.Size.new(right - left, bottom - top);
    }
    shiftCoordinates(shiftX, shiftY) {
      this.layers[$forEach](dart.fn(arrayList => {
        arrayList[$forEach](dart.fn(it => {
          it.position = new ui.Offset.new(dart.notNull(it.x) + dart.notNull(shiftX), dart.notNull(it.y) + dart.notNull(shiftY));
        }, T.NodeLToNull()));
      }, T.ListLOfNodeLToNull()));
    }
    reset() {
      this.layers[$clear]();
      this.stack.clear();
      this.visited.clear();
      this.nodeData[$clear]();
      this.edgeData[$clear]();
      this.nodeCount = 1;
    }
    initSugiyamaData() {
      this.graph.nodes[$forEach](dart.fn(node => {
        node.position = new ui.Offset.new(0.0, 0.0);
        this.nodeData[$_set](node, new GraphView.SugiyamaNodeData.new());
      }, T.NodeLToNull()));
      this.graph.edges[$forEach](dart.fn(edge => {
        this.edgeData[$_set](edge, new GraphView.SugiyamaEdgeData.new());
      }, T.EdgeLToNull()));
    }
    cycleRemoval() {
      this.graph.nodes[$forEach](dart.fn(node => {
        this.dfs(node);
      }, T.NodeLToNull()));
    }
    dfs(node) {
      if (dart.test(this.visited.contains(node))) {
        return;
      }
      this.visited.add(node);
      this.stack.add(node);
      this.graph.getOutEdges(node)[$forEach](dart.fn(edge => {
        let target = edge.destination;
        if (dart.test(this.stack.contains(target))) {
          this.graph.removeEdge(edge);
          this.graph.addEdge(target, node);
          this.nodeData[$_get](node).reversed.add(target);
        } else {
          this.dfs(target);
        }
      }, T.EdgeLToNull()));
      this.stack.remove(node);
    }
    layerAssignment() {
      if (dart.test(this.graph.nodes[$isEmpty])) {
        return;
      }
      let copiedGraph = this.copyGraph(this.graph);
      let roots = this.getRootNodes(copiedGraph);
      while (dart.test(roots[$isNotEmpty])) {
        this.layers[$add](roots);
        copiedGraph.removeNodes(roots);
        roots = this.getRootNodes(copiedGraph);
      }
      for (let i = 0; i < dart.notNull(this.layers[$length]) - 1; i = i + 1) {
        let indexNextLayer = i + 1;
        let currentLayer = this.layers[$_get](i);
        let nextLayer = this.layers[$_get](indexNextLayer);
        for (let node of currentLayer) {
          let edges = this.graph.edges[$where](dart.fn(element => dart.equals(element.source, node) && (dart.notNull(this.nodeData[$_get](element.destination).layer) - dart.notNull(this.nodeData[$_get](node).layer))[$abs]() > 1, T.EdgeLToboolL()))[$toList]();
          let iterator = edges[$iterator];
          while (dart.test(iterator.moveNext())) {
            let edge = iterator.current;
            let dummy = new GraphView.Node.new(this.dummyText);
            let dummyNodeData = new GraphView.SugiyamaNodeData.new();
            dummyNodeData.isDummy = true;
            dummyNodeData.layer = indexNextLayer;
            nextLayer[$add](dummy);
            this.nodeData[$_set](dummy, dummyNodeData);
            dummy.size = new ui.Size.new(edge.source.width, 0.0);
            let dummyEdge1 = this.graph.addEdge(edge.source, dummy);
            let dummyEdge2 = this.graph.addEdge(dummy, edge.destination);
            this.edgeData[$_set](dummyEdge1, new GraphView.SugiyamaEdgeData.new());
            this.edgeData[$_set](dummyEdge2, new GraphView.SugiyamaEdgeData.new());
            this.graph.removeEdge(edge);
          }
        }
      }
    }
    getRootNodes(graph) {
      let roots = T.JSArrayOfNodeL().of([]);
      graph.nodes[$forEach](dart.fn(node => {
        let inDegree = 0;
        graph.edges[$forEach](dart.fn(edge => {
          let destination = edge.destination;
          if (dart.equals(destination, node)) {
            inDegree = inDegree + 1;
          }
        }, T.EdgeLToNull()));
        if (inDegree === 0) {
          roots[$add](node);
          this.nodeData[$_get](node).layer = this.layers[$length];
        }
      }, T.NodeLToNull()));
      return roots;
    }
    copyGraph(graph) {
      let copy = new GraphView.Graph.new();
      copy.addNodes(graph.nodes);
      copy.addEdges(graph.edges);
      return copy;
    }
    nodeOrdering() {
      let best = (() => {
        let t0 = T.ListOfListLOfNodeL().of(this.layers);
        return t0;
      })();
      for (let i = 0; i < 23; i = i + 1) {
        this.median(best, i);
        this.transpose(best);
        if (dart.notNull(this.crossing(best)) < dart.notNull(this.crossing(this.layers))) {
          this.layers = best;
        }
      }
    }
    median(layers, currentIteration) {
      if (currentIteration[$modulo](2) === 0) {
        for (let i = 1; i < dart.notNull(layers[$length]); i = i + 1) {
          let currentLayer = layers[$_get](i);
          let previousLayer = layers[$_get](i - 1);
          for (let node of currentLayer) {
            let positions = this.graph.edges[$where](dart.fn(element => previousLayer[$contains](element.source), T.EdgeLToboolL()))[$map](T.intL(), dart.fn(e => previousLayer[$indexOf](e.source), T.EdgeLTointL()))[$toList]();
            positions[$sort]();
            let median = (dart.notNull(positions[$length]) / 2)[$truncate]();
            if (dart.test(positions[$isNotEmpty])) {
              if (positions[$length] === 1) {
                this.nodeData[$_get](node).median = -1;
              } else if (positions[$length] === 2) {
                this.nodeData[$_get](node).median = ((dart.notNull(positions[$_get](0)) + dart.notNull(positions[$_get](1))) / 2)[$truncate]();
              } else if (positions[$length][$modulo](2) === 1) {
                this.nodeData[$_get](node).median = positions[$_get](median);
              } else {
                let left = dart.notNull(positions[$_get](median - 1)) - dart.notNull(positions[$_get](0));
                let right = dart.notNull(positions[$_get](dart.notNull(positions[$length]) - 1)) - dart.notNull(positions[$_get](median));
                if (left + right !== 0) {
                  this.nodeData[$_get](node).median = ((dart.notNull(positions[$_get](median - 1)) * right + dart.notNull(positions[$_get](median)) * left) / (left + right))[$truncate]();
                }
              }
            }
          }
          currentLayer[$sort](dart.fn((n1, n2) => dart.notNull(this.nodeData[$_get](n1).median) - dart.notNull(this.nodeData[$_get](n2).median), T.NodeLAndNodeLTointL()));
        }
      } else {
        for (let l = 1; l < dart.notNull(layers[$length]); l = l + 1) {
          let currentLayer = layers[$_get](l);
          let previousLayer = layers[$_get](l - 1);
          for (let i = dart.notNull(currentLayer[$length]) - 1; i > 1; i = i - 1) {
            let node = currentLayer[$_get](i);
            let positions = this.graph.edges[$where](dart.fn(element => previousLayer[$contains](element.source), T.EdgeLToboolL()))[$map](T.intL(), dart.fn(e => previousLayer[$indexOf](e.source), T.EdgeLTointL()))[$toList]();
            positions[$sort]();
            if (dart.test(positions[$isNotEmpty])) {
              if (positions[$length] === 1) {
                this.nodeData[$_get](node).median = positions[$_get](0);
              } else {
                this.nodeData[$_get](node).median = ((dart.notNull(positions[$_get]((dart.notNull(positions[$length]) / 2.0)[$ceil]())) + dart.notNull(positions[$_get]((dart.notNull(positions[$length]) / 2.0)[$ceil]() - 1))) / 2)[$truncate]();
              }
            }
          }
          currentLayer[$sort](dart.fn((n1, n2) => dart.notNull(this.nodeData[$_get](n1).median) - dart.notNull(this.nodeData[$_get](n2).median), T.NodeLAndNodeLTointL()));
        }
      }
    }
    transpose(layers) {
      let improved = true;
      while (improved) {
        improved = false;
        for (let l = 0; l < dart.notNull(layers[$length]) - 1; l = l + 1) {
          let northernNodes = layers[$_get](l);
          let southernNodes = layers[$_get](l + 1);
          for (let i = 0; i < dart.notNull(southernNodes[$length]) - 1; i = i + 1) {
            let v = southernNodes[$_get](i);
            let w = southernNodes[$_get](i + 1);
            if (dart.notNull(this.crossingb(northernNodes, v, w)) > dart.notNull(this.crossingb(northernNodes, w, v))) {
              improved = true;
              this.exchange(southernNodes, v, w);
            }
          }
        }
      }
    }
    exchange(nodes, v, w) {
      let i = nodes[$indexOf](v);
      let j = nodes[$indexOf](w);
      let temp = nodes[$_get](i);
      nodes[$_set](i, nodes[$_get](j));
      nodes[$_set](j, temp);
    }
    crossingb(northernNodes, n1, n2) {
      let crossing = 0;
      let parentNodesN1 = this.graph.edges[$where](dart.fn(element => dart.equals(element.destination, n1), T.EdgeLToboolL()))[$map](T.NodeL(), dart.fn(e => e.source, T.EdgeLToNodeL()))[$toList]();
      let parentNodesN2 = this.graph.edges[$where](dart.fn(element => dart.equals(element.destination, n2), T.EdgeLToboolL()))[$map](T.NodeL(), dart.fn(e => e.source, T.EdgeLToNodeL()))[$toList]();
      parentNodesN2[$forEach](dart.fn(pn2 => {
        let indexOfPn2 = northernNodes[$indexOf](pn2);
        parentNodesN1[$where](dart.fn(it => dart.notNull(indexOfPn2) < dart.notNull(northernNodes[$indexOf](it)), T.NodeLToboolL()))[$forEach](dart.fn(element => {
          crossing = crossing + 1;
        }, T.NodeLToNull()));
      }, T.NodeLToNull()));
      return crossing;
    }
    crossing(layers) {
      let crossinga = 0;
      for (let l = 0; l < dart.notNull(layers[$length]) - 1; l = l + 1) {
        let southernNodes = layers[$_get](l);
        let northernNodes = layers[$_get](l + 1);
        for (let i = 0; i < dart.notNull(southernNodes[$length]) - 2; i = i + 1) {
          let v = southernNodes[$_get](i);
          let w = southernNodes[$_get](i + 1);
          crossinga = crossinga + dart.notNull(this.crossingb(northernNodes, v, w));
        }
      }
      return crossinga;
    }
    coordinateAssignment() {
      this.assignX();
      this.assignY();
      let offset = this.getOffset(this.graph, this.needReverseOrder());
      this.graph.nodes[$forEach](dart.fn(v => {
        v.position = this.getPosition(v, offset);
      }, T.NodeLToNull()));
    }
    assignX() {
      let root = T.JSArrayOfMapLOfNodeL$NodeL().of([]);
      let align = T.JSArrayOfMapLOfNodeL$NodeL().of([]);
      let sink = T.JSArrayOfMapLOfNodeL$NodeL().of([]);
      let x = T.JSArrayOfMapLOfNodeL$doubleL().of([]);
      let shift = T.JSArrayOfMapLOfNodeL$doubleL().of([]);
      let blockWidth = T.JSArrayOfMapLOfNodeL$doubleL().of([]);
      for (let i = 0; i < 4; i = i + 1) {
        root[$add](new (T.LinkedMapOfNodeL$NodeL()).new());
        align[$add](new (T.LinkedMapOfNodeL$NodeL()).new());
        sink[$add](new (T.LinkedMapOfNodeL$NodeL()).new());
        shift[$add](new (T.LinkedMapOfNodeL$doubleL()).new());
        x[$add](new (T.LinkedMapOfNodeL$doubleL()).new());
        blockWidth[$add](new (T.LinkedMapOfNodeL$doubleL()).new());
        this.graph.nodes[$forEach](dart.fn(n => {
          root[$_get](i)[$_set](n, n);
          align[$_get](i)[$_set](n, n);
          sink[$_get](i)[$_set](n, n);
          shift[$_get](i)[$_set](n, 1 / 0);
          x[$_get](i)[$_set](n, -1 / 0);
          blockWidth[$_get](i)[$_set](n, 0.0);
        }, T.NodeLToNull()));
      }
      for (let downward = 0; downward <= 1; downward = downward + 1) {
        let isDownward = downward === 0;
        let type1Conflicts = this.markType1Conflicts(isDownward);
        for (let leftToRight = 0; leftToRight <= 1; leftToRight = leftToRight + 1) {
          let k = 2 * downward + leftToRight;
          let isLeftToRight = leftToRight === 0;
          this.verticalAlignment(root[$_get](k), align[$_get](k), type1Conflicts, isDownward, isLeftToRight);
          this.graph.nodes[$forEach](dart.fn(v => {
            let r = root[$_get](k)[$_get](v);
            blockWidth[$_get](k)[$_set](r, math.max(T.doubleL(), blockWidth[$_get](k)[$_get](r), dart.test(this.isVertical()) ? v.width : v.height));
          }, T.NodeLToNull()));
          this.horizontalCompactation(align[$_get](k), root[$_get](k), sink[$_get](k), shift[$_get](k), blockWidth[$_get](k), x[$_get](k), isLeftToRight, isDownward);
        }
      }
      this.balance(x, blockWidth);
    }
    balance(x, blockWidth) {
      let t1;
      let coordinates = new (T.LinkedMapOfNodeL$doubleL()).new();
      let minWidth = 1 / 0;
      let smallestWidthLayout = 0;
      let minArray = T.ListOfdoubleL().filled(4, 0.0);
      let maxArray = T.ListOfdoubleL().filled(4, 0.0);
      for (let i = 0; i < 4; i = i + 1) {
        minArray[$_set](i, 1 / 0);
        maxArray[$_set](i, 0.0);
        this.graph.nodes[$forEach](dart.fn(v => {
          let bw = 0.5 * dart.notNull(blockWidth[$_get](i)[$_get](v));
          let xp = dart.notNull(x[$_get](i)[$_get](v)) - bw;
          if (xp < dart.notNull(minArray[$_get](i))) {
            minArray[$_set](i, xp);
          }
          xp = dart.notNull(x[$_get](i)[$_get](v)) + bw;
          if (xp > dart.notNull(maxArray[$_get](i))) {
            maxArray[$_set](i, xp);
          }
        }, T.NodeLToNull()));
        let width = dart.notNull(maxArray[$_get](i)) - dart.notNull(minArray[$_get](i));
        if (width < minWidth) {
          minWidth = width;
          smallestWidthLayout = i;
        }
      }
      for (let layout = 0; layout < 4; layout = layout + 1) {
        if (layout !== smallestWidthLayout) {
          let diff = 0.0;
          if (layout < 2) {
            diff = dart.notNull(minArray[$_get](layout)) - dart.notNull(minArray[$_get](smallestWidthLayout));
          } else {
            diff = dart.notNull(maxArray[$_get](layout)) - dart.notNull(maxArray[$_get](smallestWidthLayout));
          }
          if (diff > 0) {
            x[$_get](layout)[$keys][$forEach](dart.fn(n => {
              x[$_get](layout)[$_set](n, dart.notNull(x[$_get](layout)[$_get](n)) - diff);
            }, T.NodeLToNull()));
          } else {
            x[$_get](layout)[$keys][$forEach](dart.fn(n => {
              x[$_get](layout)[$_set](n, dart.notNull(x[$_get](layout)[$_get](n)) + diff);
            }, T.NodeLToNull()));
          }
        }
      }
      let minValue = 1 / 0;
      x[$forEach](dart.fn(element => {
        element[$forEach](dart.fn((key, value) => {
          if (dart.notNull(value) < dart.notNull(minValue)) {
            minValue = value;
          }
        }, T.NodeLAnddoubleLToNull()));
      }, T.MapLOfNodeL$doubleLToNull()));
      let values = T.ListOfdoubleL().filled(4, 0.0);
      this.graph.nodes[$forEach](dart.fn(n => {
        for (let i = 0; i < 4; i = i + 1) {
          values[$_set](i, x[$_get](i)[$_get](n));
        }
        values[$sort]();
        let average = (dart.notNull(values[$_get](1)) + dart.notNull(values[$_get](2))) / 2;
        coordinates[$_set](n, average);
      }, T.NodeLToNull()));
      minValue = (t1 = coordinates[$values][$reduce](dart.gbind(C[4] || CT.C4, T.doubleL())), t1 == null ? 1 / 0 : t1);
      if (minValue !== 0) {
        coordinates[$keys][$forEach](dart.fn(n => {
          coordinates[$_set](n, dart.notNull(coordinates[$_get](n)) - dart.notNull(minValue));
        }, T.NodeLToNull()));
      }
      this.graph.nodes[$forEach](dart.fn(v => {
        v.x = coordinates[$_get](v);
      }, T.NodeLToNull()));
    }
    markType1Conflicts(downward) {
      let type1Conflicts = T.JSArrayOfListLOfboolL().of([]);
      this.graph.nodes[$asMap]()[$forEach](dart.fn((i, value) => {
        type1Conflicts[$add](T.JSArrayOfboolL().of([]));
        this.graph.edges[$forEach](dart.fn(element => {
          type1Conflicts[$_get](i)[$add](false);
        }, T.EdgeLToNull()));
      }, T.intLAndNodeLToNull()));
      if (dart.notNull(this.layers[$length]) >= 4) {
        let upper = null;
        let lower = null;
        let k1 = null;
        if (dart.test(downward)) {
          lower = 1;
          upper = dart.notNull(this.layers[$length]) - 2;
        } else {
          lower = dart.notNull(this.layers[$length]) - 1;
          upper = 2;
        }
        let i = lower;
        while (dart.test(downward) && dart.notNull(i) <= dart.notNull(upper) || !dart.test(downward) && dart.notNull(i) >= dart.notNull(upper)) {
          let k0 = 0;
          let firstIndex = 0;
          let currentLevel = this.layers[$_get](i);
          let nextLevel = dart.test(downward) ? this.layers[$_get](dart.notNull(i) + 1) : this.layers[$_get](dart.notNull(i) - 1);
          for (let l1 = 0; l1 < dart.notNull(nextLevel[$length]); l1 = l1 + 1) {
            let virtualTwin = this.virtualTwinNode(nextLevel[$_get](l1), downward);
            if (l1 === dart.notNull(nextLevel[$length]) - 1 || virtualTwin != null) {
              k1 = dart.notNull(currentLevel[$length]) - 1;
              if (virtualTwin != null) {
                k1 = this.positionOfNode(virtualTwin);
              }
              while (firstIndex <= l1) {
                let upperNeighbours = this.getAdjNodes(nextLevel[$_get](l1), downward);
                for (let currentNeighbour of upperNeighbours) {
                  let currentNeighbourIndex = this.positionOfNode(currentNeighbour);
                  if (dart.notNull(currentNeighbourIndex) < dart.notNull(k0) || dart.notNull(currentNeighbourIndex) > dart.notNull(k1)) {
                    type1Conflicts[$_get](l1)[$_set](currentNeighbourIndex, true);
                  }
                }
                firstIndex = firstIndex + 1;
              }
              k0 = k1;
            }
          }
          i = dart.test(downward) ? dart.notNull(i) + 1 : dart.notNull(i) - 1;
        }
      }
      return type1Conflicts;
    }
    verticalAlignment(root, align, type1Conflicts, downward, leftToRight) {
      let i = dart.test(downward) ? 0 : dart.notNull(this.layers[$length]) - 1;
      while (dart.test(downward) && i <= dart.notNull(this.layers[$length]) - 1 || !dart.test(downward) && i >= 0) {
        let currentLevel = this.layers[$_get](i);
        let r = dart.test(leftToRight) ? -1 : 1 / 0;
        let k = dart.test(leftToRight) ? 0 : dart.notNull(currentLevel[$length]) - 1;
        while (dart.test(leftToRight) && k <= dart.notNull(currentLevel[$length]) - 1 || !dart.test(leftToRight) && k >= 0) {
          let v = currentLevel[$_get](k);
          let adjNodes = this.getAdjNodes(v, downward);
          if (dart.test(adjNodes[$isNotEmpty])) {
            let median = ((dart.notNull(adjNodes[$length]) + 1) / 2.0)[$floor]();
            let medianCount = adjNodes[$length][$modulo](2) === 1 ? 1 : 2;
            for (let count = 0; count < medianCount; count = count + 1) {
              let m = adjNodes[$_get](median + count - 1);
              let posM = this.positionOfNode(m);
              if (dart.equals(align[$_get](v), v) && !dart.test(type1Conflicts[$_get](this.positionOfNode(v))[$_get](posM)) && (dart.test(leftToRight) && dart.notNull(r) < dart.notNull(posM) || !dart.test(leftToRight) && dart.notNull(r) > dart.notNull(posM))) {
                align[$_set](m, v);
                root[$_set](v, root[$_get](m));
                align[$_set](v, root[$_get](v));
                r = posM;
              }
            }
          }
          k = dart.test(leftToRight) ? k + 1 : k - 1;
        }
        i = dart.test(downward) ? i + 1 : i - 1;
      }
    }
    horizontalCompactation(align, root, sink, shift, blockWidth, x, leftToRight, downward) {
      let i = dart.test(downward) ? 0 : dart.notNull(this.layers[$length]) - 1;
      while (dart.test(downward) && i <= dart.notNull(this.layers[$length]) - 1 || !dart.test(downward) && i >= 0) {
        let currentLevel = this.layers[$_get](i);
        let j = dart.test(leftToRight) ? 0 : dart.notNull(currentLevel[$length]) - 1;
        while (dart.test(leftToRight) && j <= dart.notNull(currentLevel[$length]) - 1 || !dart.test(leftToRight) && j >= 0) {
          let v = currentLevel[$_get](j);
          if (dart.equals(root[$_get](v), v)) {
            this.placeBlock(v, sink, shift, x, align, blockWidth, root, leftToRight);
          }
          j = dart.test(leftToRight) ? j + 1 : j - 1;
        }
        i = dart.test(downward) ? i + 1 : i - 1;
      }
      let d = 0;
      i = dart.test(downward) ? 0 : dart.notNull(this.layers[$length]) - 1;
      while (dart.test(downward) && i <= dart.notNull(this.layers[$length]) - 1 || !dart.test(downward) && i >= 0) {
        let currentLevel = this.layers[$_get](i);
        let v = currentLevel[$_get](dart.test(leftToRight) ? 0 : dart.notNull(currentLevel[$length]) - 1);
        if (dart.equals(v, sink[$_get](root[$_get](v)))) {
          let oldShift = shift[$_get](v);
          if (dart.notNull(oldShift) < 1 / 0) {
            shift[$_set](v, dart.notNull(oldShift) + d);
            d = d + oldShift[$toInt]();
          } else {
            shift[$_set](v, 0.0);
          }
        }
        i = dart.test(downward) ? i + 1 : i - 1;
      }
      this.graph.nodes[$forEach](dart.fn(v => {
        x[$_set](v, x[$_get](root[$_get](v)));
        let shiftVal = shift[$_get](sink[$_get](root[$_get](v)));
        if (dart.notNull(shiftVal) < 1 / 0) {
          x[$_set](v, dart.notNull(x[$_get](v)) + dart.notNull(shiftVal));
        }
      }, T.NodeLToNull()));
    }
    placeBlock(v, sink, shift, x, align, blockWidth, root, leftToRight) {
      if (x[$_get](v) === -1 / 0) {
        x[$_set](v, 0.0);
        let w = v;
        try {
          do {
            if (dart.test(leftToRight) && dart.notNull(this.positionOfNode(w)) > 0 || !dart.test(leftToRight) && dart.notNull(this.positionOfNode(w)) < dart.notNull(this.layers[$_get](this.getLayerIndex(w))[$length]) - 1) {
              let pred = this.predecessor(w, leftToRight);
              let u = root[$_get](pred);
              this.placeBlock(u, sink, shift, x, align, blockWidth, root, leftToRight);
              if (dart.equals(sink[$_get](v), v)) {
                sink[$_set](v, sink[$_get](u));
              }
              if (!dart.equals(sink[$_get](v), sink[$_get](u))) {
                if (dart.test(leftToRight)) {
                  shift[$_set](sink[$_get](u), math.min(T.doubleL(), shift[$_get](sink[$_get](u)), dart.notNull(x[$_get](v)) - dart.notNull(x[$_get](u)) - dart.notNull(this.configuration.nodeSeparation) - 0.5 * (dart.notNull(blockWidth[$_get](u)) + dart.notNull(blockWidth[$_get](v)))));
                } else {
                  shift[$_set](sink[$_get](u), math.max(T.doubleL(), shift[$_get](sink[$_get](u)), dart.notNull(x[$_get](v)) - dart.notNull(x[$_get](u)) + dart.notNull(this.configuration.nodeSeparation) + 0.5 * (dart.notNull(blockWidth[$_get](u)) + dart.notNull(blockWidth[$_get](v)))));
                }
              } else {
                if (dart.test(leftToRight)) {
                  x[$_set](v, math.max(T.doubleL(), x[$_get](v), dart.notNull(x[$_get](u)) + dart.notNull(this.configuration.nodeSeparation) + 0.5 * (dart.notNull(blockWidth[$_get](u)) + dart.notNull(blockWidth[$_get](v)))));
                } else {
                  x[$_set](v, math.min(T.doubleL(), x[$_get](v), dart.notNull(x[$_get](u)) - dart.notNull(this.configuration.nodeSeparation) - 0.5 * (dart.notNull(blockWidth[$_get](u)) + dart.notNull(blockWidth[$_get](v)))));
                }
              }
            }
            w = align[$_get](w);
          } while (!dart.equals(w, v));
        } catch (e$) {
          let e = dart.getThrown(e$);
          core.print(e);
        }
      }
    }
    predecessor(v, leftToRight) {
      let pos = this.positionOfNode(v);
      let rank = this.getLayerIndex(v);
      let level = this.layers[$_get](rank);
      return dart.test(leftToRight) && pos !== 0 || !dart.test(leftToRight) && pos !== dart.notNull(level[$length]) - 1 ? level[$_get](dart.test(leftToRight) ? dart.notNull(pos) - 1 : dart.notNull(pos) + 1) : null;
    }
    virtualTwinNode(node, downward) {
      if (!dart.test(this.isLongEdgeDummy(node))) {
        return null;
      }
      let adjNodes = this.getAdjNodes(node, downward);
      return dart.test(adjNodes[$isEmpty]) ? null : adjNodes[$_get](0);
    }
    getAdjNodes(node, downward) {
      return dart.test(downward) ? this.graph.predecessorsOf(node) : this.graph.successorsOf(node);
    }
    positionOfNode(node) {
      for (let l of this.layers) {
        for (let n of l) {
          if (dart.equals(node, n)) {
            return l[$indexOf](node);
          }
        }
      }
      return -1;
    }
    getLayerIndex(node) {
      let l = -1;
      for (let layer of this.layers) {
        l = l + 1;
        for (let n of layer) {
          if (dart.equals(node, n)) {
            return l;
          }
        }
      }
      return l;
    }
    isLongEdgeDummy(v) {
      let successors = this.graph.successorsOf(v);
      return dart.test(this.nodeData[$_get](v).isDummy) && successors[$length] === 1 && dart.test(this.nodeData[$_get](successors[$_get](0)).isDummy);
    }
    assignY() {
      let k = this.layers[$length];
      let height = T.ListOfintL().filled(this.graph.nodes[$length], 0);
      for (let i = 0; i < dart.notNull(k); i = i + 1) {
        let level = this.layers[$_get](i);
        level[$forEach](dart.fn(node => {
          let h = dart.test(this.nodeData[$_get](node).isDummy) ? 0 : dart.test(this.isVertical()) ? node.height : node.width;
          if (dart.notNull(h) > dart.notNull(height[$_get](i))) {
            height[$_set](i, h[$toInt]());
          }
        }, T.NodeLToNull()));
      }
      let yPos = 0.0;
      for (let i = 0; i < dart.notNull(k); i = i + 1) {
        let level = this.layers[$_get](i);
        level[$forEach](dart.fn(node => {
          node.y = yPos;
        }, T.NodeLToNull()));
        if (i < dart.notNull(k) - 1) {
          yPos = yPos + (dart.notNull(this.configuration.levelSeparation) + 0.5 * (dart.notNull(height[$_get](i)) + dart.notNull(height[$_get](i + 1))));
        }
      }
    }
    denormalize() {
      for (let i = 1; i < dart.notNull(this.layers[$length]) - 1; i = i + 1) {
        let iterator = this.layers[$_get](i)[$iterator];
        while (dart.test(iterator.moveNext())) {
          let current = iterator.current;
          if (dart.test(this.nodeData[$_get](current).isDummy)) {
            let predecessor = this.graph.predecessorsOf(current)[$_get](0);
            let successor = this.graph.successorsOf(current)[$_get](0);
            let bendPoints = this.edgeData[$_get](this.graph.getEdgeBetween(predecessor, current)).bendPoints;
            if (dart.test(bendPoints[$isEmpty]) || !dart.test(bendPoints[$contains](dart.notNull(current.x) + dart.notNull(predecessor.width) / 2))) {
              bendPoints[$add](dart.notNull(predecessor.x) + dart.notNull(predecessor.width) / 2);
              bendPoints[$add](dart.notNull(predecessor.y) + dart.notNull(predecessor.height) / 2);
              bendPoints[$add](dart.notNull(current.x) + dart.notNull(predecessor.width) / 2);
              bendPoints[$add](current.y);
            }
            if (!dart.test(this.nodeData[$_get](predecessor).isDummy)) {
              bendPoints[$add](dart.notNull(current.x) + dart.notNull(predecessor.width) / 2);
            } else {
              bendPoints[$add](current.x);
            }
            bendPoints[$add](current.y);
            if (dart.test(this.nodeData[$_get](successor).isDummy)) {
              bendPoints[$add](dart.notNull(successor.x) + dart.notNull(predecessor.width) / 2);
            } else {
              bendPoints[$add](dart.notNull(successor.x) + dart.notNull(successor.width) / 2);
            }
            bendPoints[$add](dart.notNull(successor.y) + dart.notNull(successor.height) / 2);
            this.graph.removeEdgeFromPredecessor(predecessor, current);
            this.graph.removeEdgeFromPredecessor(current, successor);
            let edge = this.graph.addEdge(predecessor, successor);
            let sugiyamaEdgeData = new GraphView.SugiyamaEdgeData.new();
            sugiyamaEdgeData.bendPoints = bendPoints;
            this.edgeData[$_set](edge, sugiyamaEdgeData);
            this.graph.removeNode(current);
          }
        }
      }
    }
    restoreCycle() {
      this.graph.nodes[$forEach](dart.fn(n => {
        if (dart.test(this.nodeData[$_get](n).isReversed)) {
          this.nodeData[$_get](n).reversed[$forEach](dart.fn(target => {
            let bendPoints = this.edgeData[$_get](this.graph.getEdgeBetween(target, n)).bendPoints;
            this.graph.removeEdgeFromPredecessor(target, n);
            let edge = this.graph.addEdge(n, target);
            let edgeData = new GraphView.SugiyamaEdgeData.new();
            edgeData.bendPoints = bendPoints;
            this.edgeData[$_set](edge, edgeData);
          }, T.NodeLToNull()));
        }
      }, T.NodeLToNull()));
    }
    getOffset(graph, needReverseOrder) {
      let offsetX = 1 / 0;
      let offsetY = 1 / 0;
      if (dart.test(needReverseOrder)) {
        offsetY = 5e-324;
      }
      graph.nodes[$forEach](dart.fn(node => {
        if (dart.test(needReverseOrder)) {
          offsetX = math.min(T.doubleL(), offsetX, node.x);
          offsetY = math.max(T.doubleL(), offsetY, node.y);
        } else {
          offsetX = math.min(T.doubleL(), offsetX, node.x);
          offsetY = math.min(T.doubleL(), offsetY, node.y);
        }
      }, T.NodeLToNull()));
      return new ui.Offset.new(offsetX, offsetY);
    }
    getPosition(node, offset) {
      let finalOffset = null;
      switch (this.configuration.orientation) {
        case 1:
        {
          finalOffset = new ui.Offset.new(dart.notNull(node.x) - dart.notNull(offset.dx), node.y);
          break;
        }
        case 2:
        {
          finalOffset = new ui.Offset.new(dart.notNull(node.x) - dart.notNull(offset.dx), dart.notNull(offset.dy) - dart.notNull(node.y));
          break;
        }
        case 3:
        {
          finalOffset = new ui.Offset.new(node.y, dart.notNull(node.x) - dart.notNull(offset.dx));
          break;
        }
        case 4:
        {
          finalOffset = new ui.Offset.new(dart.notNull(offset.dy) - dart.notNull(node.y), dart.notNull(node.x) - dart.notNull(offset.dx));
          break;
        }
      }
      return finalOffset;
    }
    setFocusedNode(node) {
    }
  };
  (GraphView.SugiyamaAlgorithm.new = function(configuration) {
    this[nodeData] = new (T.LinkedMapOfNodeL$SugiyamaNodeDataL()).new();
    this[edgeData] = new (T.LinkedMapOfEdgeL$SugiyamaEdgeDataL()).new();
    this[stack] = T.LinkedHashSetOfNodeL().new();
    this[visited] = T.LinkedHashSetOfNodeL().new();
    this[layers] = T.JSArrayOfListLOfNodeL().of([]);
    this[graph] = null;
    this[renderer$0] = null;
    this[nodeCount] = 1;
    this[configuration$] = configuration;
    GraphView.SugiyamaAlgorithm.__proto__.new.call(this);
    this.renderer = new GraphView.SugiyamaEdgeRenderer.new(this.nodeData, this.edgeData);
  }).prototype = GraphView.SugiyamaAlgorithm.prototype;
  dart.addTypeTests(GraphView.SugiyamaAlgorithm);
  dart.addTypeCaches(GraphView.SugiyamaAlgorithm);
  dart.setMethodSignature(GraphView.SugiyamaAlgorithm, () => ({
    __proto__: dart.getMethods(GraphView.SugiyamaAlgorithm.__proto__),
    isVertical: dart.fnType(dart.legacy(core.bool), []),
    needReverseOrder: dart.fnType(dart.legacy(core.bool), []),
    run: dart.fnType(dart.legacy(ui.Size), [dart.legacy(GraphView.Graph), dart.legacy(core.double), dart.legacy(core.double)]),
    calculateGraphSize: dart.fnType(dart.legacy(ui.Size), [dart.legacy(GraphView.Graph)]),
    shiftCoordinates: dart.fnType(dart.void, [dart.legacy(core.double), dart.legacy(core.double)]),
    reset: dart.fnType(dart.void, []),
    initSugiyamaData: dart.fnType(dart.void, []),
    cycleRemoval: dart.fnType(dart.void, []),
    dfs: dart.fnType(dart.void, [dart.legacy(GraphView.Node)]),
    layerAssignment: dart.fnType(dart.void, []),
    getRootNodes: dart.fnType(dart.legacy(core.List$(dart.legacy(GraphView.Node))), [dart.legacy(GraphView.Graph)]),
    copyGraph: dart.fnType(dart.legacy(GraphView.Graph), [dart.legacy(GraphView.Graph)]),
    nodeOrdering: dart.fnType(dart.void, []),
    median: dart.fnType(dart.void, [dart.legacy(core.List$(dart.legacy(core.List$(dart.legacy(GraphView.Node))))), dart.legacy(core.int)]),
    transpose: dart.fnType(dart.void, [dart.legacy(core.List$(dart.legacy(core.List$(dart.legacy(GraphView.Node)))))]),
    exchange: dart.fnType(dart.void, [dart.legacy(core.List$(dart.legacy(GraphView.Node))), dart.legacy(GraphView.Node), dart.legacy(GraphView.Node)]),
    crossingb: dart.fnType(dart.legacy(core.int), [dart.legacy(core.List$(dart.legacy(GraphView.Node))), dart.legacy(GraphView.Node), dart.legacy(GraphView.Node)]),
    crossing: dart.fnType(dart.legacy(core.int), [dart.legacy(core.List$(dart.legacy(core.List$(dart.legacy(GraphView.Node)))))]),
    coordinateAssignment: dart.fnType(dart.void, []),
    assignX: dart.fnType(dart.void, []),
    balance: dart.fnType(dart.void, [dart.legacy(core.List$(dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(core.double))))), dart.legacy(core.List$(dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(core.double)))))]),
    markType1Conflicts: dart.fnType(dart.legacy(core.List$(dart.legacy(core.List$(dart.legacy(core.bool))))), [dart.legacy(core.bool)]),
    verticalAlignment: dart.fnType(dart.void, [dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(GraphView.Node))), dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(GraphView.Node))), dart.legacy(core.List$(dart.legacy(core.List$(dart.legacy(core.bool))))), dart.legacy(core.bool), dart.legacy(core.bool)]),
    horizontalCompactation: dart.fnType(dart.void, [dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(GraphView.Node))), dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(GraphView.Node))), dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(GraphView.Node))), dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(core.double))), dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(core.double))), dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(core.double))), dart.legacy(core.bool), dart.legacy(core.bool)]),
    placeBlock: dart.fnType(dart.void, [dart.legacy(GraphView.Node), dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(GraphView.Node))), dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(core.double))), dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(core.double))), dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(GraphView.Node))), dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(core.double))), dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(GraphView.Node))), dart.legacy(core.bool)]),
    predecessor: dart.fnType(dart.legacy(GraphView.Node), [dart.legacy(GraphView.Node), dart.legacy(core.bool)]),
    virtualTwinNode: dart.fnType(dart.legacy(GraphView.Node), [dart.legacy(GraphView.Node), dart.legacy(core.bool)]),
    getAdjNodes: dart.fnType(dart.legacy(core.List$(dart.legacy(GraphView.Node))), [dart.legacy(GraphView.Node), dart.legacy(core.bool)]),
    positionOfNode: dart.fnType(dart.legacy(core.int), [dart.legacy(GraphView.Node)]),
    getLayerIndex: dart.fnType(dart.legacy(core.int), [dart.legacy(GraphView.Node)]),
    isLongEdgeDummy: dart.fnType(dart.legacy(core.bool), [dart.legacy(GraphView.Node)]),
    assignY: dart.fnType(dart.void, []),
    denormalize: dart.fnType(dart.void, []),
    restoreCycle: dart.fnType(dart.void, []),
    getOffset: dart.fnType(dart.legacy(ui.Offset), [dart.legacy(GraphView.Graph), dart.legacy(core.bool)]),
    getPosition: dart.fnType(dart.legacy(ui.Offset), [dart.legacy(GraphView.Node), dart.legacy(ui.Offset)]),
    setFocusedNode: dart.fnType(dart.void, [dart.legacy(GraphView.Node)])
  }));
  dart.setGetterSignature(GraphView.SugiyamaAlgorithm, () => ({
    __proto__: dart.getGetters(GraphView.SugiyamaAlgorithm.__proto__),
    dummyText: dart.legacy(framework.Widget)
  }));
  dart.setLibraryUri(GraphView.SugiyamaAlgorithm, I[1]);
  dart.setFieldSignature(GraphView.SugiyamaAlgorithm, () => ({
    __proto__: dart.getFields(GraphView.SugiyamaAlgorithm.__proto__),
    nodeData: dart.fieldType(dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(GraphView.SugiyamaNodeData)))),
    edgeData: dart.fieldType(dart.legacy(core.Map$(dart.legacy(GraphView.Edge), dart.legacy(GraphView.SugiyamaEdgeData)))),
    stack: dart.fieldType(dart.legacy(core.Set$(dart.legacy(GraphView.Node)))),
    visited: dart.fieldType(dart.legacy(core.Set$(dart.legacy(GraphView.Node)))),
    layers: dart.fieldType(dart.legacy(core.List$(dart.legacy(core.List$(dart.legacy(GraphView.Node)))))),
    graph: dart.fieldType(dart.legacy(GraphView.Graph)),
    configuration: dart.fieldType(dart.legacy(GraphView.SugiyamaConfiguration)),
    renderer: dart.fieldType(dart.legacy(GraphView.EdgeRenderer)),
    nodeCount: dart.fieldType(dart.legacy(core.int))
  }));
  var levelSeparation = dart.privateName(GraphView, "SugiyamaConfiguration.levelSeparation");
  var nodeSeparation = dart.privateName(GraphView, "SugiyamaConfiguration.nodeSeparation");
  var orientation = dart.privateName(GraphView, "SugiyamaConfiguration.orientation");
  GraphView.SugiyamaConfiguration = class SugiyamaConfiguration extends core.Object {
    get levelSeparation() {
      return this[levelSeparation];
    }
    set levelSeparation(value) {
      this[levelSeparation] = value;
    }
    get nodeSeparation() {
      return this[nodeSeparation];
    }
    set nodeSeparation(value) {
      this[nodeSeparation] = value;
    }
    get orientation() {
      return this[orientation];
    }
    set orientation(value) {
      this[orientation] = value;
    }
    getLevelSeparation() {
      return this.levelSeparation;
    }
    getNodeSeparation() {
      return this.nodeSeparation;
    }
    getOrientation() {
      return this.orientation;
    }
  };
  (GraphView.SugiyamaConfiguration.new = function() {
    this[levelSeparation] = 100;
    this[nodeSeparation] = 100;
    this[orientation] = 1;
    ;
  }).prototype = GraphView.SugiyamaConfiguration.prototype;
  dart.addTypeTests(GraphView.SugiyamaConfiguration);
  dart.addTypeCaches(GraphView.SugiyamaConfiguration);
  dart.setMethodSignature(GraphView.SugiyamaConfiguration, () => ({
    __proto__: dart.getMethods(GraphView.SugiyamaConfiguration.__proto__),
    getLevelSeparation: dart.fnType(dart.legacy(core.int), []),
    getNodeSeparation: dart.fnType(dart.legacy(core.int), []),
    getOrientation: dart.fnType(dart.legacy(core.int), [])
  }));
  dart.setLibraryUri(GraphView.SugiyamaConfiguration, I[1]);
  dart.setFieldSignature(GraphView.SugiyamaConfiguration, () => ({
    __proto__: dart.getFields(GraphView.SugiyamaConfiguration.__proto__),
    levelSeparation: dart.fieldType(dart.legacy(core.int)),
    nodeSeparation: dart.fieldType(dart.legacy(core.int)),
    orientation: dart.fieldType(dart.legacy(core.int))
  }));
  dart.defineLazy(GraphView.SugiyamaConfiguration, {
    /*GraphView.SugiyamaConfiguration.ORIENTATION_TOP_BOTTOM*/get ORIENTATION_TOP_BOTTOM() {
      return 1;
    },
    /*GraphView.SugiyamaConfiguration.ORIENTATION_BOTTOM_TOP*/get ORIENTATION_BOTTOM_TOP() {
      return 2;
    },
    /*GraphView.SugiyamaConfiguration.ORIENTATION_LEFT_RIGHT*/get ORIENTATION_LEFT_RIGHT() {
      return 3;
    },
    /*GraphView.SugiyamaConfiguration.ORIENTATION_RIGHT_LEFT*/get ORIENTATION_RIGHT_LEFT() {
      return 4;
    },
    /*GraphView.SugiyamaConfiguration.DEFAULT_ORIENTATION*/get DEFAULT_ORIENTATION() {
      return 1;
    },
    /*GraphView.SugiyamaConfiguration.X_SEPARATION*/get X_SEPARATION() {
      return 100;
    },
    /*GraphView.SugiyamaConfiguration.Y_SEPARATION*/get Y_SEPARATION() {
      return 100;
    }
  }, true);
  var bendPoints = dart.privateName(GraphView, "SugiyamaEdgeData.bendPoints");
  GraphView.SugiyamaEdgeData = class SugiyamaEdgeData extends core.Object {
    get bendPoints() {
      return this[bendPoints];
    }
    set bendPoints(value) {
      this[bendPoints] = value;
    }
  };
  (GraphView.SugiyamaEdgeData.new = function() {
    this[bendPoints] = T.JSArrayOfdoubleL().of([]);
    ;
  }).prototype = GraphView.SugiyamaEdgeData.prototype;
  dart.addTypeTests(GraphView.SugiyamaEdgeData);
  dart.addTypeCaches(GraphView.SugiyamaEdgeData);
  dart.setLibraryUri(GraphView.SugiyamaEdgeData, I[1]);
  dart.setFieldSignature(GraphView.SugiyamaEdgeData, () => ({
    __proto__: dart.getFields(GraphView.SugiyamaEdgeData.__proto__),
    bendPoints: dart.fieldType(dart.legacy(core.List$(dart.legacy(core.double))))
  }));
  var nodeData$ = dart.privateName(GraphView, "SugiyamaEdgeRenderer.nodeData");
  var edgeData$ = dart.privateName(GraphView, "SugiyamaEdgeRenderer.edgeData");
  var path = dart.privateName(GraphView, "SugiyamaEdgeRenderer.path");
  GraphView.SugiyamaEdgeRenderer = class SugiyamaEdgeRenderer extends GraphView.ArrowEdgeRenderer {
    get nodeData() {
      return this[nodeData$];
    }
    set nodeData(value) {
      this[nodeData$] = value;
    }
    get edgeData() {
      return this[edgeData$];
    }
    set edgeData(value) {
      this[edgeData$] = value;
    }
    get path() {
      return this[path];
    }
    set path(value) {
      this[path] = value;
    }
    render(canvas, graph, paint) {
      let t2;
      let trianglePaint = (t2 = ui.Paint.new(), (() => {
        t2.color = paint.color;
        t2.style = ui.PaintingStyle.fill;
        return t2;
      })());
      graph.edges[$forEach](dart.fn(edge => {
        let t3, t2, t2$, t2$0, t2$1, t2$2;
        let source = edge.source;
        let x = source.x;
        let y = source.y;
        let destination = edge.destination;
        let x1 = destination.x;
        let y1 = destination.y;
        this.path.reset();
        let clippedLine = T.JSArrayOfdoubleL().of([]);
        let edgeTrianglePaint = null;
        if (edge.paint != null) {
          edgeTrianglePaint = (t2 = ui.Paint.new(), (() => {
            t2.color = (t3 = edge.paint.color, t3 == null ? paint.color : t3);
            t2.style = ui.PaintingStyle.fill;
            return t2;
          })());
        }
        let p = (t2$0 = (t2$ = edge.paint, t2$ == null ? paint : t2$), (() => {
          t2$0.style = ui.PaintingStyle.stroke;
          return t2$0;
        })());
        if (dart.test(this.edgeData[$containsKey](edge)) && dart.test(this.edgeData[$_get](edge).bendPoints[$isNotEmpty])) {
          let bendPoints = this.edgeData[$_get](edge).bendPoints;
          let size = bendPoints[$length];
          if (dart.test(this.nodeData[$_get](source).isReversed)) {
            clippedLine = this.clipLine(bendPoints[$_get](2), bendPoints[$_get](3), bendPoints[$_get](0), bendPoints[$_get](1), destination);
          } else {
            clippedLine = this.clipLine(bendPoints[$_get](dart.notNull(size) - 4), bendPoints[$_get](dart.notNull(size) - 3), bendPoints[$_get](dart.notNull(size) - 2), bendPoints[$_get](dart.notNull(size) - 1), destination);
          }
          let triangleCentroid = this.drawTriangle(canvas, (t2$1 = edgeTrianglePaint, t2$1 == null ? trianglePaint : t2$1), clippedLine[$_get](0), clippedLine[$_get](1), clippedLine[$_get](2), clippedLine[$_get](3));
          this.path.reset();
          this.path.moveTo(bendPoints[$_get](0), bendPoints[$_get](1));
          for (let i = 3; i < dart.notNull(size) - 2; i = i + 2) {
            this.path.lineTo(bendPoints[$_get](i - 1), bendPoints[$_get](i));
          }
          this.path.lineTo(triangleCentroid[$_get](0), triangleCentroid[$_get](1));
          canvas.drawPath(this.path, p);
        } else {
          let startX = dart.notNull(x) + dart.notNull(source.width) / 2;
          let startY = dart.notNull(y) + dart.notNull(source.height) / 2;
          let stopX = dart.notNull(x1) + dart.notNull(destination.width) / 2;
          let stopY = dart.notNull(y1) + dart.notNull(destination.height) / 2;
          clippedLine = this.clipLine(startX, startY, stopX, stopY, destination);
          let triangleCentroid = this.drawTriangle(canvas, (t2$2 = edgeTrianglePaint, t2$2 == null ? trianglePaint : t2$2), clippedLine[$_get](0), clippedLine[$_get](1), clippedLine[$_get](2), clippedLine[$_get](3));
          canvas.drawLine(new ui.Offset.new(clippedLine[$_get](0), clippedLine[$_get](1)), new ui.Offset.new(triangleCentroid[$_get](0), triangleCentroid[$_get](1)), p);
        }
      }, T.EdgeLToNull()));
    }
  };
  (GraphView.SugiyamaEdgeRenderer.new = function(nodeData, edgeData) {
    this[path] = ui.Path.new();
    this[nodeData$] = nodeData;
    this[edgeData$] = edgeData;
    GraphView.SugiyamaEdgeRenderer.__proto__.new.call(this);
    ;
  }).prototype = GraphView.SugiyamaEdgeRenderer.prototype;
  dart.addTypeTests(GraphView.SugiyamaEdgeRenderer);
  dart.addTypeCaches(GraphView.SugiyamaEdgeRenderer);
  dart.setLibraryUri(GraphView.SugiyamaEdgeRenderer, I[1]);
  dart.setFieldSignature(GraphView.SugiyamaEdgeRenderer, () => ({
    __proto__: dart.getFields(GraphView.SugiyamaEdgeRenderer.__proto__),
    nodeData: dart.fieldType(dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(GraphView.SugiyamaNodeData)))),
    edgeData: dart.fieldType(dart.legacy(core.Map$(dart.legacy(GraphView.Edge), dart.legacy(GraphView.SugiyamaEdgeData)))),
    path: dart.fieldType(dart.legacy(ui.Path))
  }));
  var reversed = dart.privateName(GraphView, "SugiyamaNodeData.reversed");
  var isDummy = dart.privateName(GraphView, "SugiyamaNodeData.isDummy");
  var median = dart.privateName(GraphView, "SugiyamaNodeData.median");
  var layer = dart.privateName(GraphView, "SugiyamaNodeData.layer");
  GraphView.SugiyamaNodeData = class SugiyamaNodeData extends core.Object {
    get reversed() {
      return this[reversed];
    }
    set reversed(value) {
      this[reversed] = value;
    }
    get isDummy() {
      return this[isDummy];
    }
    set isDummy(value) {
      this[isDummy] = value;
    }
    get median() {
      return this[median];
    }
    set median(value) {
      this[median] = value;
    }
    get layer() {
      return this[layer];
    }
    set layer(value) {
      this[layer] = value;
    }
    get isReversed() {
      return this.reversed[$isNotEmpty];
    }
    toString() {
      return "SugiyamaNodeData{reversed: " + dart.str(this.reversed) + ", isDummy: " + dart.str(this.isDummy) + ", median: " + dart.str(this.median) + ", layer: " + dart.str(this.layer) + "}";
    }
  };
  (GraphView.SugiyamaNodeData.new = function() {
    this[reversed] = T.LinkedHashSetOfNodeL().new();
    this[isDummy] = false;
    this[median] = -1;
    this[layer] = -1;
    ;
  }).prototype = GraphView.SugiyamaNodeData.prototype;
  dart.addTypeTests(GraphView.SugiyamaNodeData);
  dart.addTypeCaches(GraphView.SugiyamaNodeData);
  dart.setMethodSignature(GraphView.SugiyamaNodeData, () => ({
    __proto__: dart.getMethods(GraphView.SugiyamaNodeData.__proto__),
    toString: dart.fnType(dart.legacy(core.String), []),
    [$toString]: dart.fnType(dart.legacy(core.String), [])
  }));
  dart.setGetterSignature(GraphView.SugiyamaNodeData, () => ({
    __proto__: dart.getGetters(GraphView.SugiyamaNodeData.__proto__),
    isReversed: dart.legacy(core.bool)
  }));
  dart.setLibraryUri(GraphView.SugiyamaNodeData, I[1]);
  dart.setFieldSignature(GraphView.SugiyamaNodeData, () => ({
    __proto__: dart.getFields(GraphView.SugiyamaNodeData.__proto__),
    reversed: dart.fieldType(dart.legacy(core.Set$(dart.legacy(GraphView.Node)))),
    isDummy: dart.fieldType(dart.legacy(core.bool)),
    median: dart.fieldType(dart.legacy(core.int)),
    layer: dart.fieldType(dart.legacy(core.int))
  }));
  dart.defineExtensionMethods(GraphView.SugiyamaNodeData, ['toString']);
  var mNodeData = dart.privateName(GraphView, "BuchheimWalkerAlgorithm.mNodeData");
  var minNodeHeight = dart.privateName(GraphView, "BuchheimWalkerAlgorithm.minNodeHeight");
  var minNodeWidth = dart.privateName(GraphView, "BuchheimWalkerAlgorithm.minNodeWidth");
  var maxNodeWidth = dart.privateName(GraphView, "BuchheimWalkerAlgorithm.maxNodeWidth");
  var maxNodeHeight = dart.privateName(GraphView, "BuchheimWalkerAlgorithm.maxNodeHeight");
  var configuration$0 = dart.privateName(GraphView, "BuchheimWalkerAlgorithm.configuration");
  var renderer$1 = dart.privateName(GraphView, "BuchheimWalkerAlgorithm.renderer");
  GraphView.BuchheimWalkerAlgorithm = class BuchheimWalkerAlgorithm extends GraphView.Layout {
    get mNodeData() {
      return this[mNodeData];
    }
    set mNodeData(value) {
      this[mNodeData] = value;
    }
    get minNodeHeight() {
      return this[minNodeHeight];
    }
    set minNodeHeight(value) {
      this[minNodeHeight] = value;
    }
    get minNodeWidth() {
      return this[minNodeWidth];
    }
    set minNodeWidth(value) {
      this[minNodeWidth] = value;
    }
    get maxNodeWidth() {
      return this[maxNodeWidth];
    }
    set maxNodeWidth(value) {
      this[maxNodeWidth] = value;
    }
    get maxNodeHeight() {
      return this[maxNodeHeight];
    }
    set maxNodeHeight(value) {
      this[maxNodeHeight] = value;
    }
    get configuration() {
      return this[configuration$0];
    }
    set configuration(value) {
      this[configuration$0] = value;
    }
    get renderer() {
      return this[renderer$1];
    }
    set renderer(value) {
      this[renderer$1] = value;
    }
    isVertical() {
      let orientation = this.configuration.orientation;
      return orientation === 1 || orientation === 2;
    }
    needReverseOrder() {
      let orientation = this.configuration.orientation;
      return orientation === 2 || orientation === 4;
    }
    run(graph, shiftX, shiftY) {
      this.mNodeData[$clear]();
      let firstNode = graph.getNodeAtPosition(0);
      this.firstWalk(graph, firstNode, 0, 0);
      this.secondWalk(graph, firstNode, 0.0);
      this.positionNodes(graph);
      this.shiftCoordinates(graph, shiftX, shiftY);
      return this.calculateGraphSize(graph);
    }
    compare(x, y) {
      return dart.notNull(x) < dart.notNull(y) ? -1 : x == y ? 0 : 1;
    }
    createNodeData(node) {
      let nodeData = new GraphView.BuchheimWalkerNodeData.new();
      nodeData.ancestor = node;
      this.mNodeData[$_set](node, nodeData);
      return nodeData;
    }
    getNodeData(node) {
      return this.mNodeData[$_get](node);
    }
    firstWalk(graph, node, depth, number) {
      let t2;
      let nodeData = this.createNodeData(node);
      nodeData.depth = depth;
      nodeData.number = number;
      this.minNodeHeight = math.min(T.doubleL(), this.minNodeHeight, node.height);
      this.minNodeWidth = math.min(T.doubleL(), this.minNodeWidth, node.width);
      this.maxNodeWidth = math.max(T.doubleL(), this.maxNodeWidth, node.width);
      this.maxNodeHeight = math.max(T.doubleL(), this.maxNodeHeight, node.height);
      if (dart.test(this.isLeaf(graph, node))) {
        if (dart.test(this.hasLeftSibling(graph, node))) {
          let leftSibling = this.getLeftSibling(graph, node);
          nodeData.prelim = dart.notNull(this.getPrelim(leftSibling)) + dart.notNull(this.getSpacing(graph, leftSibling, node));
        }
      } else {
        let leftMost = this.getLeftMostChild(graph, node);
        let rightMost = this.getRightMostChild(graph, node);
        let defaultAncestor = leftMost;
        let next = leftMost;
        let i = 1;
        while (next != null) {
          this.firstWalk(graph, next, dart.notNull(depth) + 1, (t2 = i, i = t2 + 1, t2));
          defaultAncestor = this.apportion(graph, next, defaultAncestor);
          next = this.getRightSibling(graph, next);
        }
        this.executeShifts(graph, node);
        let vertical = this.isVertical();
        let midPoint = 0.5 * (dart.notNull(this.getPrelim(leftMost)) + dart.notNull(this.getPrelim(rightMost)) + dart.notNull(dart.test(vertical) ? rightMost.width : rightMost.height) - dart.notNull(dart.test(vertical) ? node.width : node.height));
        if (dart.test(this.hasLeftSibling(graph, node))) {
          let leftSibling = this.getLeftSibling(graph, node);
          nodeData.prelim = dart.notNull(this.getPrelim(leftSibling)) + dart.notNull(this.getSpacing(graph, leftSibling, node));
          nodeData.modifier = dart.notNull(nodeData.prelim) - midPoint;
        } else {
          nodeData.prelim = midPoint;
        }
      }
    }
    secondWalk(graph, node, modifier) {
      let nodeData = this.getNodeData(node);
      let depth = nodeData.depth;
      let vertical = this.isVertical();
      node.position = new ui.Offset.new(dart.notNull(nodeData.prelim) + dart.notNull(modifier), (dart.notNull(depth) * dart.notNull(dart.test(vertical) ? this.minNodeHeight : this.minNodeWidth) + dart.notNull(depth) * dart.notNull(this.configuration.levelSeparation))[$ceilToDouble]());
      graph.successorsOf(node)[$forEach](dart.fn(w => {
        this.secondWalk(graph, w, dart.notNull(modifier) + dart.notNull(nodeData.modifier));
      }, T.NodeLToNull()));
    }
    calculateGraphSize(graph) {
      let left = 1 / 0;
      let top = 1 / 0;
      let right = -1 / 0;
      let bottom = -1 / 0;
      graph.nodes[$forEach](dart.fn(node => {
        left = math.min(T.doubleL(), left, node.x);
        top = math.min(T.doubleL(), top, node.y);
        right = math.max(T.doubleL(), right, dart.notNull(node.x) + dart.notNull(node.width));
        bottom = math.max(T.doubleL(), bottom, dart.notNull(node.y) + dart.notNull(node.height));
      }, T.NodeLToNull()));
      return new ui.Size.new(right - left, bottom - top);
    }
    executeShifts(graph, node) {
      let shift = 0.0;
      let change = 0.0;
      let w = this.getRightMostChild(graph, node);
      while (w != null) {
        let nodeData = this.getNodeData(w);
        nodeData.prelim = dart.notNull(nodeData.prelim) + shift;
        nodeData.modifier = dart.notNull(nodeData.modifier) + shift;
        change = change + dart.notNull(nodeData.change);
        shift = shift + (dart.notNull(nodeData.shift) + change);
        w = this.getLeftSibling(graph, w);
      }
    }
    apportion(graph, node, defaultAncestor) {
      let ancestor = defaultAncestor;
      if (dart.test(this.hasLeftSibling(graph, node))) {
        let leftSibling = this.getLeftSibling(graph, node);
        let vop = node;
        let vom = this.getLeftMostChild(graph, graph.predecessorsOf(node)[$_get](0));
        let sip = this.getModifier(node);
        let sop = this.getModifier(node);
        let sim = this.getModifier(leftSibling);
        let som = this.getModifier(vom);
        let nextRight = this.nextRight(graph, leftSibling);
        let nextLeft = null;
        for (let t2 = nextLeft = this.nextLeft(graph, node); nextRight != null && nextLeft != null; nextLeft = this.nextLeft(graph, nextLeft)) {
          vom = this.nextLeft(graph, vom);
          vop = this.nextRight(graph, vop);
          this.setAncestor(vop, node);
          let shift = dart.notNull(this.getPrelim(nextRight)) + dart.notNull(sim) - (dart.notNull(this.getPrelim(nextLeft)) + dart.notNull(sip)) + dart.notNull(this.getSpacing(graph, nextRight, node));
          if (shift > 0) {
            this.moveSubtree(this.ancestor(graph, nextRight, node, ancestor), node, shift);
            sip = dart.notNull(sip) + shift;
            sop = dart.notNull(sop) + shift;
          }
          sim = dart.notNull(sim) + dart.notNull(this.getModifier(nextRight));
          sip = dart.notNull(sip) + dart.notNull(this.getModifier(nextLeft));
          som = dart.notNull(som) + dart.notNull(this.getModifier(vom));
          sop = dart.notNull(sop) + dart.notNull(this.getModifier(vop));
          nextRight = this.nextRight(graph, nextRight);
        }
        if (nextRight != null && this.nextRight(graph, vop) == null) {
          this.setThread(vop, nextRight);
          this.setModifier(vop, dart.notNull(this.getModifier(vop)) + dart.notNull(sim) - dart.notNull(sop));
        }
        if (nextLeft != null && this.nextLeft(graph, vom) == null) {
          this.setThread(vom, nextLeft);
          this.setModifier(vom, dart.notNull(this.getModifier(vom)) + dart.notNull(sip) - dart.notNull(som));
          ancestor = node;
        }
      }
      return ancestor;
    }
    setAncestor(v, ancestor) {
      this.getNodeData(v).ancestor = ancestor;
    }
    setModifier(v, modifier) {
      this.getNodeData(v).modifier = modifier;
    }
    setThread(v, thread) {
      this.getNodeData(v).thread = thread;
    }
    getPrelim(v) {
      return this.getNodeData(v).prelim;
    }
    getModifier(vip) {
      return this.getNodeData(vip).modifier;
    }
    moveSubtree(wm, wp, shift) {
      let wpNodeData = this.getNodeData(wp);
      let wmNodeData = this.getNodeData(wm);
      let subtrees = dart.notNull(wpNodeData.number) - dart.notNull(wmNodeData.number);
      wpNodeData.change = dart.notNull(wpNodeData.change) - dart.notNull(shift) / subtrees;
      wpNodeData.shift = dart.notNull(wpNodeData.shift) + dart.notNull(shift);
      wmNodeData.change = dart.notNull(wmNodeData.change) + dart.notNull(shift) / subtrees;
      wpNodeData.prelim = dart.notNull(wpNodeData.prelim) + dart.notNull(shift);
      wpNodeData.modifier = dart.notNull(wpNodeData.modifier) + dart.notNull(shift);
    }
    ancestor(graph, vim, node, defaultAncestor) {
      let vipNodeData = this.getNodeData(vim);
      return dart.equals(graph.predecessorsOf(vipNodeData.ancestor)[$_get](0), graph.predecessorsOf(node)[$_get](0)) ? vipNodeData.ancestor : defaultAncestor;
    }
    nextRight(graph, node) {
      return dart.test(graph.hasSuccessor(node)) ? this.getRightMostChild(graph, node) : this.getNodeData(node).thread;
    }
    nextLeft(graph, node) {
      return dart.test(graph.hasSuccessor(node)) ? this.getLeftMostChild(graph, node) : this.getNodeData(node).thread;
    }
    getSpacing(graph, leftNode, rightNode) {
      let separation = this.configuration.getSubtreeSeparation();
      if (dart.test(this.isSibling(graph, leftNode, rightNode))) {
        separation = this.configuration.getSiblingSeparation();
      }
      let length = dart.test(this.isVertical()) ? leftNode.width : leftNode.height;
      return dart.notNull(separation) + dart.notNull(length);
    }
    isSibling(graph, leftNode, rightNode) {
      let leftParent = graph.predecessorsOf(leftNode)[$_get](0);
      return graph.successorsOf(leftParent)[$contains](rightNode);
    }
    isLeaf(graph, node) {
      return graph.successorsOf(node)[$isEmpty];
    }
    getLeftSibling(graph, node) {
      if (!dart.test(this.hasLeftSibling(graph, node))) {
        return null;
      } else {
        let parent = graph.predecessorsOf(node)[$_get](0);
        let children = graph.successorsOf(parent);
        let nodeIndex = children[$indexOf](node);
        return children[$_get](dart.notNull(nodeIndex) - 1);
      }
    }
    hasLeftSibling(graph, node) {
      let parents = graph.predecessorsOf(node);
      if (dart.test(parents[$isEmpty])) {
        return false;
      } else {
        let parent = parents[$_get](0);
        let nodeIndex = graph.successorsOf(parent)[$indexOf](node);
        return dart.notNull(nodeIndex) > 0;
      }
    }
    getRightSibling(graph, node) {
      if (!dart.test(this.hasRightSibling(graph, node))) {
        return null;
      } else {
        let parent = graph.predecessorsOf(node)[$_get](0);
        let children = graph.successorsOf(parent);
        let nodeIndex = children[$indexOf](node);
        return children[$_get](dart.notNull(nodeIndex) + 1);
      }
    }
    hasRightSibling(graph, node) {
      let parents = graph.predecessorsOf(node);
      if (dart.test(parents[$isEmpty])) {
        return false;
      } else {
        let parent = parents[$_get](0);
        let children = graph.successorsOf(parent);
        let nodeIndex = children[$indexOf](node);
        return dart.notNull(nodeIndex) < dart.notNull(children[$length]) - 1;
      }
    }
    getLeftMostChild(graph, node) {
      return graph.successorsOf(node)[$_get](0);
    }
    getRightMostChild(graph, node) {
      let children = graph.successorsOf(node);
      return dart.test(children[$isEmpty]) ? null : children[$_get](dart.notNull(children[$length]) - 1);
    }
    positionNodes(graph) {
      let doesNeedReverseOrder = this.needReverseOrder();
      let offset = this.getOffset(graph, doesNeedReverseOrder);
      let nodes = this.sortByLevel(graph, doesNeedReverseOrder);
      let firstLevel = this.getNodeData(nodes[$first]).depth;
      let localMaxSize = this.findMaxSize(this.filterByLevel(nodes, firstLevel));
      let currentLevel = dart.test(doesNeedReverseOrder) ? firstLevel : 0;
      let globalPadding = 0.0;
      let localPadding = 0.0;
      nodes[$forEach](dart.fn(node => {
        let depth = this.getNodeData(node).depth;
        if (depth != currentLevel) {
          if (dart.test(doesNeedReverseOrder)) {
            globalPadding = globalPadding - localPadding;
          } else {
            globalPadding = globalPadding + localPadding;
          }
          localPadding = 0.0;
          currentLevel = depth;
          localMaxSize = this.findMaxSize(this.filterByLevel(nodes, currentLevel));
        }
        let height = node.height;
        let width = node.width;
        switch (this.configuration.orientation) {
          case 1:
          {
            if (dart.notNull(height) > dart.notNull(this.minNodeHeight)) {
              let diff = dart.notNull(height) - dart.notNull(this.minNodeHeight);
              localPadding = math.max(T.doubleL(), localPadding, diff);
            }
            break;
          }
          case 2:
          {
            if (dart.notNull(height) < dart.notNull(localMaxSize.height)) {
              let diff = dart.notNull(localMaxSize.height) - dart.notNull(height);
              node.position = node.position['-'](new ui.Offset.new(0.0, diff));
              localPadding = math.max(T.doubleL(), localPadding, diff);
            }
            break;
          }
          case 3:
          {
            if (dart.notNull(width) > dart.notNull(this.minNodeWidth)) {
              let diff = dart.notNull(width) - dart.notNull(this.minNodeWidth);
              localPadding = math.max(T.doubleL(), localPadding, diff);
            }
            break;
          }
          case 4:
          {
            if (dart.notNull(width) < dart.notNull(localMaxSize.width)) {
              let diff = dart.notNull(localMaxSize.width) - dart.notNull(width);
              node.position = node.position['-'](new ui.Offset.new(0.0, diff));
              localPadding = math.max(T.doubleL(), localPadding, diff);
            }
          }
        }
        node.position = this.getPosition(node, globalPadding, offset);
      }, T.NodeLToNull()));
    }
    shiftCoordinates(graph, shiftX, shiftY) {
      graph.nodes[$forEach](dart.fn(node => {
        node.position = new ui.Offset.new(dart.notNull(node.x) + dart.notNull(shiftX), dart.notNull(node.y) + dart.notNull(shiftY));
      }, T.NodeLToNull()));
    }
    findMaxSize(nodes) {
      let width = -1 / 0;
      let height = -1 / 0;
      nodes[$forEach](dart.fn(node => {
        width = math.max(T.doubleL(), width, node.width);
        height = math.max(T.doubleL(), height, node.height);
      }, T.NodeLToNull()));
      return new ui.Size.new(width, height);
    }
    getOffset(graph, needReverseOrder) {
      let offsetX = 1 / 0;
      let offsetY = 1 / 0;
      if (dart.test(needReverseOrder)) {
        offsetY = 5e-324;
      }
      graph.nodes[$forEach](dart.fn(node => {
        if (dart.test(needReverseOrder)) {
          offsetX = math.min(T.doubleL(), offsetX, node.x);
          offsetY = math.max(T.doubleL(), offsetY, node.y);
        } else {
          offsetX = math.min(T.doubleL(), offsetX, node.x);
          offsetY = math.min(T.doubleL(), offsetY, node.y);
        }
      }, T.NodeLToNull()));
      return new ui.Offset.new(offsetX, offsetY);
    }
    getPosition(node, globalPadding, offset) {
      let finalOffset = null;
      switch (this.configuration.orientation) {
        case 1:
        {
          finalOffset = new ui.Offset.new(dart.notNull(node.x) - dart.notNull(offset.dx), dart.notNull(node.y) + dart.notNull(globalPadding));
          break;
        }
        case 2:
        {
          finalOffset = new ui.Offset.new(dart.notNull(node.x) - dart.notNull(offset.dx), dart.notNull(offset.dy) - dart.notNull(node.y) - dart.notNull(globalPadding));
          break;
        }
        case 3:
        {
          finalOffset = new ui.Offset.new(dart.notNull(node.y) + dart.notNull(globalPadding), dart.notNull(node.x) - dart.notNull(offset.dx));
          break;
        }
        case 4:
        {
          finalOffset = new ui.Offset.new(dart.notNull(offset.dy) - dart.notNull(node.y) - dart.notNull(globalPadding), dart.notNull(node.x) - dart.notNull(offset.dx));
          break;
        }
      }
      return finalOffset;
    }
    sortByLevel(graph, descending) {
      let t3;
      let nodes = (t3 = T.JSArrayOfNodeL().of([]), (() => {
        t3[$addAll](graph.nodes);
        return t3;
      })());
      if (dart.test(descending)) {
        nodes[$reversed];
      }
      nodes[$sort](dart.fn((data1, data2) => this.compare(this.getNodeData(data1).depth, this.getNodeData(data2).depth), T.NodeLAndNodeLTointL()));
      return nodes;
    }
    filterByLevel(nodes, level) {
      return nodes[$where](dart.fn(node => this.getNodeData(node).depth == level, T.NodeLToboolL()))[$toList]();
    }
    setFocusedNode(node) {
    }
  };
  (GraphView.BuchheimWalkerAlgorithm.new = function(configuration, renderer) {
    let t2;
    this[mNodeData] = null;
    this[minNodeHeight] = null;
    this[minNodeWidth] = null;
    this[maxNodeWidth] = null;
    this[maxNodeHeight] = null;
    this[renderer$1] = null;
    this[configuration$0] = configuration;
    GraphView.BuchheimWalkerAlgorithm.__proto__.new.call(this);
    this.renderer = (t2 = renderer, t2 == null ? new GraphView.TreeEdgeRenderer.new(this.configuration) : t2);
    this.mNodeData = new (T.LinkedMapOfNodeL$BuchheimWalkerNodeDataL()).new();
    this.minNodeHeight = 1 / 0;
    this.minNodeWidth = 1 / 0;
    this.maxNodeWidth = -1 / 0;
    this.maxNodeHeight = -1 / 0;
  }).prototype = GraphView.BuchheimWalkerAlgorithm.prototype;
  dart.addTypeTests(GraphView.BuchheimWalkerAlgorithm);
  dart.addTypeCaches(GraphView.BuchheimWalkerAlgorithm);
  dart.setMethodSignature(GraphView.BuchheimWalkerAlgorithm, () => ({
    __proto__: dart.getMethods(GraphView.BuchheimWalkerAlgorithm.__proto__),
    isVertical: dart.fnType(dart.legacy(core.bool), []),
    needReverseOrder: dart.fnType(dart.legacy(core.bool), []),
    run: dart.fnType(dart.legacy(ui.Size), [dart.legacy(GraphView.Graph), dart.legacy(core.double), dart.legacy(core.double)]),
    compare: dart.fnType(dart.legacy(core.int), [dart.legacy(core.int), dart.legacy(core.int)]),
    createNodeData: dart.fnType(dart.legacy(GraphView.BuchheimWalkerNodeData), [dart.legacy(GraphView.Node)]),
    getNodeData: dart.fnType(dart.legacy(GraphView.BuchheimWalkerNodeData), [dart.legacy(GraphView.Node)]),
    firstWalk: dart.fnType(dart.void, [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node), dart.legacy(core.int), dart.legacy(core.int)]),
    secondWalk: dart.fnType(dart.void, [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node), dart.legacy(core.double)]),
    calculateGraphSize: dart.fnType(dart.legacy(ui.Size), [dart.legacy(GraphView.Graph)]),
    executeShifts: dart.fnType(dart.void, [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node)]),
    apportion: dart.fnType(dart.legacy(GraphView.Node), [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node), dart.legacy(GraphView.Node)]),
    setAncestor: dart.fnType(dart.void, [dart.legacy(GraphView.Node), dart.legacy(GraphView.Node)]),
    setModifier: dart.fnType(dart.void, [dart.legacy(GraphView.Node), dart.legacy(core.double)]),
    setThread: dart.fnType(dart.void, [dart.legacy(GraphView.Node), dart.legacy(GraphView.Node)]),
    getPrelim: dart.fnType(dart.legacy(core.double), [dart.legacy(GraphView.Node)]),
    getModifier: dart.fnType(dart.legacy(core.double), [dart.legacy(GraphView.Node)]),
    moveSubtree: dart.fnType(dart.void, [dart.legacy(GraphView.Node), dart.legacy(GraphView.Node), dart.legacy(core.double)]),
    ancestor: dart.fnType(dart.legacy(GraphView.Node), [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node), dart.legacy(GraphView.Node), dart.legacy(GraphView.Node)]),
    nextRight: dart.fnType(dart.legacy(GraphView.Node), [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node)]),
    nextLeft: dart.fnType(dart.legacy(GraphView.Node), [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node)]),
    getSpacing: dart.fnType(dart.legacy(core.num), [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node), dart.legacy(GraphView.Node)]),
    isSibling: dart.fnType(dart.legacy(core.bool), [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node), dart.legacy(GraphView.Node)]),
    isLeaf: dart.fnType(dart.legacy(core.bool), [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node)]),
    getLeftSibling: dart.fnType(dart.legacy(GraphView.Node), [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node)]),
    hasLeftSibling: dart.fnType(dart.legacy(core.bool), [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node)]),
    getRightSibling: dart.fnType(dart.legacy(GraphView.Node), [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node)]),
    hasRightSibling: dart.fnType(dart.legacy(core.bool), [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node)]),
    getLeftMostChild: dart.fnType(dart.legacy(GraphView.Node), [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node)]),
    getRightMostChild: dart.fnType(dart.legacy(GraphView.Node), [dart.legacy(GraphView.Graph), dart.legacy(GraphView.Node)]),
    positionNodes: dart.fnType(dart.void, [dart.legacy(GraphView.Graph)]),
    shiftCoordinates: dart.fnType(dart.void, [dart.legacy(GraphView.Graph), dart.legacy(core.double), dart.legacy(core.double)]),
    findMaxSize: dart.fnType(dart.legacy(ui.Size), [dart.legacy(core.List$(dart.legacy(GraphView.Node)))]),
    getOffset: dart.fnType(dart.legacy(ui.Offset), [dart.legacy(GraphView.Graph), dart.legacy(core.bool)]),
    getPosition: dart.fnType(dart.legacy(ui.Offset), [dart.legacy(GraphView.Node), dart.legacy(core.double), dart.legacy(ui.Offset)]),
    sortByLevel: dart.fnType(dart.legacy(core.List$(dart.legacy(GraphView.Node))), [dart.legacy(GraphView.Graph), dart.legacy(core.bool)]),
    filterByLevel: dart.fnType(dart.legacy(core.List$(dart.legacy(GraphView.Node))), [dart.legacy(core.List$(dart.legacy(GraphView.Node))), dart.legacy(core.int)]),
    setFocusedNode: dart.fnType(dart.void, [dart.legacy(GraphView.Node)])
  }));
  dart.setLibraryUri(GraphView.BuchheimWalkerAlgorithm, I[1]);
  dart.setFieldSignature(GraphView.BuchheimWalkerAlgorithm, () => ({
    __proto__: dart.getFields(GraphView.BuchheimWalkerAlgorithm.__proto__),
    mNodeData: dart.fieldType(dart.legacy(core.Map$(dart.legacy(GraphView.Node), dart.legacy(GraphView.BuchheimWalkerNodeData)))),
    minNodeHeight: dart.fieldType(dart.legacy(core.double)),
    minNodeWidth: dart.fieldType(dart.legacy(core.double)),
    maxNodeWidth: dart.fieldType(dart.legacy(core.double)),
    maxNodeHeight: dart.fieldType(dart.legacy(core.double)),
    configuration: dart.fieldType(dart.legacy(GraphView.BuchheimWalkerConfiguration)),
    renderer: dart.fieldType(dart.legacy(GraphView.EdgeRenderer))
  }));
  var siblingSeparation = dart.privateName(GraphView, "BuchheimWalkerConfiguration.siblingSeparation");
  var levelSeparation$ = dart.privateName(GraphView, "BuchheimWalkerConfiguration.levelSeparation");
  var subtreeSeparation = dart.privateName(GraphView, "BuchheimWalkerConfiguration.subtreeSeparation");
  var orientation$ = dart.privateName(GraphView, "BuchheimWalkerConfiguration.orientation");
  GraphView.BuchheimWalkerConfiguration = class BuchheimWalkerConfiguration extends core.Object {
    get siblingSeparation() {
      return this[siblingSeparation];
    }
    set siblingSeparation(value) {
      this[siblingSeparation] = value;
    }
    get levelSeparation() {
      return this[levelSeparation$];
    }
    set levelSeparation(value) {
      this[levelSeparation$] = value;
    }
    get subtreeSeparation() {
      return this[subtreeSeparation];
    }
    set subtreeSeparation(value) {
      this[subtreeSeparation] = value;
    }
    get orientation() {
      return this[orientation$];
    }
    set orientation(value) {
      this[orientation$] = value;
    }
    getSiblingSeparation() {
      return this.siblingSeparation;
    }
    getLevelSeparation() {
      return this.levelSeparation;
    }
    getSubtreeSeparation() {
      return this.subtreeSeparation;
    }
  };
  (GraphView.BuchheimWalkerConfiguration.new = function() {
    this[siblingSeparation] = 100;
    this[levelSeparation$] = 100;
    this[subtreeSeparation] = 100;
    this[orientation$] = 1;
    ;
  }).prototype = GraphView.BuchheimWalkerConfiguration.prototype;
  dart.addTypeTests(GraphView.BuchheimWalkerConfiguration);
  dart.addTypeCaches(GraphView.BuchheimWalkerConfiguration);
  dart.setMethodSignature(GraphView.BuchheimWalkerConfiguration, () => ({
    __proto__: dart.getMethods(GraphView.BuchheimWalkerConfiguration.__proto__),
    getSiblingSeparation: dart.fnType(dart.legacy(core.int), []),
    getLevelSeparation: dart.fnType(dart.legacy(core.int), []),
    getSubtreeSeparation: dart.fnType(dart.legacy(core.int), [])
  }));
  dart.setLibraryUri(GraphView.BuchheimWalkerConfiguration, I[1]);
  dart.setFieldSignature(GraphView.BuchheimWalkerConfiguration, () => ({
    __proto__: dart.getFields(GraphView.BuchheimWalkerConfiguration.__proto__),
    siblingSeparation: dart.fieldType(dart.legacy(core.int)),
    levelSeparation: dart.fieldType(dart.legacy(core.int)),
    subtreeSeparation: dart.fieldType(dart.legacy(core.int)),
    orientation: dart.fieldType(dart.legacy(core.int))
  }));
  dart.defineLazy(GraphView.BuchheimWalkerConfiguration, {
    /*GraphView.BuchheimWalkerConfiguration.ORIENTATION_TOP_BOTTOM*/get ORIENTATION_TOP_BOTTOM() {
      return 1;
    },
    /*GraphView.BuchheimWalkerConfiguration.ORIENTATION_BOTTOM_TOP*/get ORIENTATION_BOTTOM_TOP() {
      return 2;
    },
    /*GraphView.BuchheimWalkerConfiguration.ORIENTATION_LEFT_RIGHT*/get ORIENTATION_LEFT_RIGHT() {
      return 3;
    },
    /*GraphView.BuchheimWalkerConfiguration.ORIENTATION_RIGHT_LEFT*/get ORIENTATION_RIGHT_LEFT() {
      return 4;
    },
    /*GraphView.BuchheimWalkerConfiguration.DEFAULT_SIBLING_SEPARATION*/get DEFAULT_SIBLING_SEPARATION() {
      return 100;
    },
    /*GraphView.BuchheimWalkerConfiguration.DEFAULT_SUBTREE_SEPARATION*/get DEFAULT_SUBTREE_SEPARATION() {
      return 100;
    },
    /*GraphView.BuchheimWalkerConfiguration.DEFAULT_LEVEL_SEPARATION*/get DEFAULT_LEVEL_SEPARATION() {
      return 100;
    },
    /*GraphView.BuchheimWalkerConfiguration.DEFAULT_ORIENTATION*/get DEFAULT_ORIENTATION() {
      return 1;
    }
  }, true);
  var ancestor = dart.privateName(GraphView, "BuchheimWalkerNodeData.ancestor");
  var thread = dart.privateName(GraphView, "BuchheimWalkerNodeData.thread");
  var number = dart.privateName(GraphView, "BuchheimWalkerNodeData.number");
  var depth = dart.privateName(GraphView, "BuchheimWalkerNodeData.depth");
  var prelim = dart.privateName(GraphView, "BuchheimWalkerNodeData.prelim");
  var modifier = dart.privateName(GraphView, "BuchheimWalkerNodeData.modifier");
  var shift = dart.privateName(GraphView, "BuchheimWalkerNodeData.shift");
  var change = dart.privateName(GraphView, "BuchheimWalkerNodeData.change");
  GraphView.BuchheimWalkerNodeData = class BuchheimWalkerNodeData extends core.Object {
    get ancestor() {
      return this[ancestor];
    }
    set ancestor(value) {
      this[ancestor] = value;
    }
    get thread() {
      return this[thread];
    }
    set thread(value) {
      this[thread] = value;
    }
    get number() {
      return this[number];
    }
    set number(value) {
      this[number] = value;
    }
    get depth() {
      return this[depth];
    }
    set depth(value) {
      this[depth] = value;
    }
    get prelim() {
      return this[prelim];
    }
    set prelim(value) {
      this[prelim] = value;
    }
    get modifier() {
      return this[modifier];
    }
    set modifier(value) {
      this[modifier] = value;
    }
    get shift() {
      return this[shift];
    }
    set shift(value) {
      this[shift] = value;
    }
    get change() {
      return this[change];
    }
    set change(value) {
      this[change] = value;
    }
  };
  (GraphView.BuchheimWalkerNodeData.new = function() {
    this[ancestor] = null;
    this[thread] = null;
    this[number] = 0;
    this[depth] = 0;
    this[prelim] = (0)[$toDouble]();
    this[modifier] = (0)[$toDouble]();
    this[shift] = (0)[$toDouble]();
    this[change] = (0)[$toDouble]();
    ;
  }).prototype = GraphView.BuchheimWalkerNodeData.prototype;
  dart.addTypeTests(GraphView.BuchheimWalkerNodeData);
  dart.addTypeCaches(GraphView.BuchheimWalkerNodeData);
  dart.setLibraryUri(GraphView.BuchheimWalkerNodeData, I[1]);
  dart.setFieldSignature(GraphView.BuchheimWalkerNodeData, () => ({
    __proto__: dart.getFields(GraphView.BuchheimWalkerNodeData.__proto__),
    ancestor: dart.fieldType(dart.legacy(GraphView.Node)),
    thread: dart.fieldType(dart.legacy(GraphView.Node)),
    number: dart.fieldType(dart.legacy(core.int)),
    depth: dart.fieldType(dart.legacy(core.int)),
    prelim: dart.fieldType(dart.legacy(core.double)),
    modifier: dart.fieldType(dart.legacy(core.double)),
    shift: dart.fieldType(dart.legacy(core.double)),
    change: dart.fieldType(dart.legacy(core.double))
  }));
  var configuration$1 = dart.privateName(GraphView, "TreeEdgeRenderer.configuration");
  var linePath = dart.privateName(GraphView, "TreeEdgeRenderer.linePath");
  GraphView.TreeEdgeRenderer = class TreeEdgeRenderer extends GraphView.EdgeRenderer {
    get configuration() {
      return this[configuration$1];
    }
    set configuration(value) {
      this[configuration$1] = value;
    }
    get linePath() {
      return this[linePath];
    }
    set linePath(value) {
      this[linePath] = value;
    }
    render(canvas, graph, paint) {
      let levelSeparationHalf = dart.notNull(this.configuration.levelSeparation) / 2;
      graph.nodes[$forEach](dart.fn(node => {
        let children = graph.successorsOf(node);
        children[$forEach](dart.fn(child => {
          let t3, t3$, t3$0;
          let edge = graph.getEdgeBetween(node, child);
          let edgePaint = (t3$0 = (t3$ = (t3 = edge, t3 == null ? null : t3.paint), t3$ == null ? paint : t3$), (() => {
            t3$0.style = ui.PaintingStyle.stroke;
            return t3$0;
          })());
          this.linePath.reset();
          switch (this.configuration.orientation) {
            case 1:
            {
              this.linePath.moveTo(dart.notNull(child.x) + dart.notNull(child.width) / 2, child.y);
              this.linePath.lineTo(dart.notNull(child.x) + dart.notNull(child.width) / 2, dart.notNull(child.y) - levelSeparationHalf);
              this.linePath.lineTo(dart.notNull(node.x) + dart.notNull(node.width) / 2, dart.notNull(child.y) - levelSeparationHalf);
              this.linePath.moveTo(dart.notNull(node.x) + dart.notNull(node.width) / 2, dart.notNull(child.y) - levelSeparationHalf);
              this.linePath.lineTo(dart.notNull(node.x) + dart.notNull(node.width) / 2, dart.notNull(node.y) + dart.notNull(node.height));
              break;
            }
            case 2:
            {
              this.linePath.moveTo(dart.notNull(child.x) + dart.notNull(child.width) / 2, dart.notNull(child.y) + dart.notNull(child.height));
              this.linePath.lineTo(dart.notNull(child.x) + dart.notNull(child.width) / 2, dart.notNull(child.y) + dart.notNull(child.height) + levelSeparationHalf);
              this.linePath.lineTo(dart.notNull(node.x) + dart.notNull(node.width) / 2, dart.notNull(child.y) + dart.notNull(child.height) + levelSeparationHalf);
              this.linePath.moveTo(dart.notNull(node.x) + dart.notNull(node.width) / 2, dart.notNull(child.y) + dart.notNull(child.height) + levelSeparationHalf);
              this.linePath.lineTo(dart.notNull(node.x) + dart.notNull(node.width) / 2, dart.notNull(node.y) + dart.notNull(node.height));
              break;
            }
            case 3:
            {
              this.linePath.moveTo(child.x, dart.notNull(child.y) + dart.notNull(child.height) / 2);
              this.linePath.lineTo(dart.notNull(child.x) - levelSeparationHalf, dart.notNull(child.y) + dart.notNull(child.height) / 2);
              this.linePath.lineTo(dart.notNull(child.x) - levelSeparationHalf, dart.notNull(node.y) + dart.notNull(node.height) / 2);
              this.linePath.moveTo(dart.notNull(child.x) - levelSeparationHalf, dart.notNull(node.y) + dart.notNull(node.height) / 2);
              this.linePath.lineTo(dart.notNull(node.x) + dart.notNull(node.width), dart.notNull(node.y) + dart.notNull(node.height) / 2);
              break;
            }
            case 4:
            {
              this.linePath.moveTo(dart.notNull(child.x) + dart.notNull(child.width), dart.notNull(child.y) + dart.notNull(child.height) / 2);
              this.linePath.lineTo(dart.notNull(child.x) + dart.notNull(child.width) + levelSeparationHalf, dart.notNull(child.y) + dart.notNull(child.height) / 2);
              this.linePath.lineTo(dart.notNull(child.x) + dart.notNull(child.width) + levelSeparationHalf, dart.notNull(node.y) + dart.notNull(node.height) / 2);
              this.linePath.moveTo(dart.notNull(child.x) + dart.notNull(child.width) + levelSeparationHalf, dart.notNull(node.y) + dart.notNull(node.height) / 2);
              this.linePath.lineTo(dart.notNull(node.x) + dart.notNull(node.width), dart.notNull(node.y) + dart.notNull(node.height) / 2);
            }
          }
          canvas.drawPath(this.linePath, edgePaint);
        }, T.NodeLToNull()));
      }, T.NodeLToNull()));
    }
  };
  (GraphView.TreeEdgeRenderer.new = function(configuration) {
    this[linePath] = ui.Path.new();
    this[configuration$1] = configuration;
    ;
  }).prototype = GraphView.TreeEdgeRenderer.prototype;
  dart.addTypeTests(GraphView.TreeEdgeRenderer);
  dart.addTypeCaches(GraphView.TreeEdgeRenderer);
  dart.setMethodSignature(GraphView.TreeEdgeRenderer, () => ({
    __proto__: dart.getMethods(GraphView.TreeEdgeRenderer.__proto__),
    render: dart.fnType(dart.void, [dart.legacy(ui.Canvas), dart.legacy(GraphView.Graph), dart.legacy(ui.Paint)])
  }));
  dart.setLibraryUri(GraphView.TreeEdgeRenderer, I[1]);
  dart.setFieldSignature(GraphView.TreeEdgeRenderer, () => ({
    __proto__: dart.getFields(GraphView.TreeEdgeRenderer.__proto__),
    configuration: dart.fieldType(dart.legacy(GraphView.BuchheimWalkerConfiguration)),
    linePath: dart.fieldType(dart.legacy(ui.Path))
  }));
  GraphView.randInt = function randInt(rand, min, max) {
    return (rand.nextInt(max[$toInt]() - dart.notNull(min) + 1)[$toDouble]() + dart.notNull(min))[$toDouble]();
  };
  dart.defineLazy(GraphView, {
    /*GraphView.ARROW_DEGREES*/get ARROW_DEGREES() {
      return 0.5;
    },
    /*GraphView.ARROW_LENGTH*/get ARROW_LENGTH() {
      return 10;
    },
    /*GraphView.DEFAULT_ITERATIONS*/get DEFAULT_ITERATIONS() {
      return 1000;
    },
    /*GraphView.CLUSTER_PADDING*/get CLUSTER_PADDING() {
      return 15;
    },
    /*GraphView.EPSILON*/get EPSILON() {
      return 0.0001;
    }
  }, true);
  dart.trackLibraries("packages/graphview/GraphView.dart", {
    "package:graphview/GraphView.dart": GraphView
  }, {
    "package:graphview/GraphView.dart": ["Graph.dart", "Layout.dart", "edgerenderer/ArrowEdgeRenderer.dart", "edgerenderer/EdgeRenderer.dart", "forcedirected/FruchtermanReingoldAlgorithm.dart", "layered/SugiyamaAlgorithm.dart", "layered/SugiyamaConfiguration.dart", "layered/SugiyamaEdgeData.dart", "layered/SugiyamaEdgeRenderer.dart", "layered/SugiyamaNodeData.dart", "tree/BuchheimWalkerAlgorithm.dart", "tree/BuchheimWalkerConfiguration.dart", "tree/BuchheimWalkerNodeData.dart", "tree/TreeEdgeRenderer.dart"]
  }, '{"version":3,"sourceRoot":"","sources":["GraphView.dart","Graph.dart","Layout.dart","edgerenderer/EdgeRenderer.dart","edgerenderer/ArrowEdgeRenderer.dart","forcedirected/FruchtermanReingoldAlgorithm.dart","layered/SugiyamaAlgorithm.dart","layered/SugiyamaConfiguration.dart","layered/SugiyamaEdgeData.dart","layered/SugiyamaEdgeRenderer.dart","layered/SugiyamaNodeData.dart","tree/BuchheimWalkerAlgorithm.dart","tree/BuchheimWalkerConfiguration.dart","tree/BuchheimWalkerNodeData.dart","tree/TreeEdgeRenderer.dart"],"names":[],"mappings":"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","file":"../../../../../../../../../../../packages/graphview/GraphView.dart.lib.js"}');
  // Exports:
  return {
    GraphView: GraphView
  };
}));

//# sourceMappingURL=GraphView.dart.lib.js.map