yFiles for HTML 2.1.0.6 Release Notes

The newest available bugfix and maintenance release of yFiles for HTML is version 2.1.0.6.

Technical Requirements

  • An IDE with dedicated support for JavaScript development is strongly recommended. For example, IntelliJ WebStorm or IDEA Ultimate, Visual Studio Code, NetBeans, Eclipse.
  • To run yFiles for HTML-based web applications, an HTML5-capable browser with adequate SVG support is required (see table).

yFiles for HTML 2.1.0.6 – Changes Since 2.1.0.5

This is the 6th bugfix release for yFiles for HTML 2.1. It corrects several errors and brings some improvements. There are no incompatible changes.

Improvements

  • By default, the Backspace key now deletes the selected elements, as the Delete key does. This is especially useful on MacBooks since their 'Delete' key is Backspace. Previously, the Backspace key had no default command.
  • Added the FixPortLocationStageData class that allows to conveniently define the port constraints that are considered by the FixPortLocationStage class.
  • The new properties OrganicLayoutData.sourceGroupIds and OrganicLayoutData.targetGroupIds can be used to specify edge grouping.

Bugfixes

View

  • Exporting with the SvgExport class silently failed without exporting anything if the text of a label contained emojis or some other unusual Unicode characters.
  • User interactions in a folded graph which contains labels at ports no longer throw an exception.
  • An edge in a folded view no longer loses its bends and labels after it is reversed multiple times.
  • Scrolling with the CanvasControl.animateScrollCommands property enabled no longer changes the zoom level.
  • The labels of dragged ports were not displayed correctly by the PortDropInputMode class.
  • The EdgeStyleDecorationsInstaller class now properly displays decorations for edges between group nodes and their descendants when displayed in view coordinates.
  • The IAnimation.createSequentialAnimation method no longer throws a TypeError due to 'Object.binarySearch is not a function'.

Layout

  • The HierarchicLayout class now correctly handles port labels with zero height/width. Previously, such labels may have caused very large distances between some nodes.
  • The HierarchicLayout class sometimes threw an exception for input graphs that contained incremental elements in combination with groups.
  • The HierarchicLayout class now prevents intersections between labels and the horizontal grid lines of a PartitionGrid.
  • The HierarchicLayout class now properly handles input graphs with source/target port labels and where a subset of nodes has NodeHalos. Previously, such inputs could cause an exception.
  • The HierarchicLayout class does no longer violate fixed PortCandidates in cases where also critical edges (HierarchicLayoutData.criticalEdgePriorities) and edges connecting to group nodes are given.
  • The HierarchicLayout class now produces less superfluous crossings if there are same-layer edges with PortConstraints or PortCandidates.
  • The HierarchicLayout class no longer produces non-orthogonal segments if the graph has port labels and the edge grouping feature is enabled.
  • The HierarchicLayout class now correctly calculates the required length of straight-line same-layer edges. Previously, the calculated length could have exceeded the required length by the value of the HierarchicLayout.nodeToEdgeDistance property.
  • The HierarchicLayout class now places sloped segments of grouped octilinear edges such that they are perfectly overlapping each other. Previously, it could happen that segments were slightly displaced with respect to each other.
  • The EdgeRouter class no longer throws an exception for some inputs containing edges with intermediate routing points.
  • The EdgeRouter class now correctly handles cases where the maximum duration is exceeded and where previously an exception was triggered.
  • Improved the path search performance of the EdgeRouter class for cases where a large number of fixed and overlapping edge segments exist. Previously, the search could become very slow in such scenarios.
  • Fixed a stack overflow error in EdgeRouter.
  • When using RecursiveGroupLayout, the values of the properties computedWidth, computedHeight and computedPosition of the classes ColumnDescriptor and RowDescriptor are now correctly set after the layout if EdgeRouter is the corresponding InterEdgeRouter.
  • The ComponentLayout class now correctly handles input graphs with user-specified components that contain nodes with null as their component ID (see property ComponentLayoutData.componentIds). Previously, such inputs may have caused an exception.
  • The CompactNodePlacer class now correctly considers the specified values for the verticalDistance and horizontalDistance properties.
  • The CompactNodePlacer class now correctly handles inputs where the tree root is marked as assistant node, see TreeLayoutData.assistantNodes.
  • The CompactNodePlacer class now correctly handles input graphs that contain assistant nodes and given placement strategies (see the TreeLayoutData.compactNodePlacerStrategyMementos property).
  • The CompactNodePlacer class now produces more compact results for some cases where it previously generated larger, less compact results.
  • The CompactNodePlacer class no longer throws an exception for some inputs with specified strategy memento information.
  • The OrthogonalLayout does no longer throw an exception if a graph is almost a tree and its treeStyle property is set to TreeLayoutStyle.INTEGRATED and a fixed TreeOrientation is set.
  • The OrganicLayout class now produces deterministic results for group nodes if the property deterministic is enabled.
  • The OrganicRemoveOverlapsStage class no longer gets stuck in an infinite loop in some rare cases.

yFiles for HTML 2.1.0.5 - Changes Since 2.1.0.4

This is the 5th bugfix release for yFiles for HTML 2.1. It corrects just one issue that prevented backwards compatibility with old browsers.

Bugfixes

  • A deployment issue caused the "lang" library module to contain a 'const' declaration. This declaration has now been replaced by a 'var' declaration, so the modules are fully ECMAScript 5 compatible again.

yFiles for HTML 2.1.0.4 - Changes Since 2.1.0.3

This is the 4th bugfix release for yFiles for HTML 2.1. It corrects several errors and comes with some improvements of the library and the demos. There is one minor incompatible change.

Improvements

  • Some code optimizers break the library code, most prominently the build optimizer of Angular CLI, Rollup when 'tree shaking' is enabled, and Uglify when the 'pure_getters' setting is enabled. We now check whether the code has been wrecked and show a corresponding warning in the console. For more details, see the Known Issues document (of your local yFiles for HTML installation) and the corresponding angular-cli issue.
  • The LayoutExecutor now automatically enables and disables a wait input mode for the GraphComponent during layout and subsequent animation. This can be turned off with the new allowUserInteraction property.
  • Input modes no longer run unnecessary hit tests when they are canceled.

Bugfixes

  • ES6 library modules that are packed with webpack no longer contain 'const' variables.
  • The deployment tool did not rename references to obfuscated types in some cases when using the simple names exported from the yFiles ES6 modules.

View and Input

  • GraphModelManager: Fixed an error that occurred when any of the descriptor properties were set while the GraphModelManager instance was not yet associated with an IGraph.
  • Fixed a possible infinite loop in the OrthogonalEdgeHelper class.
  • The cursor is now correctly reset after editing an orthogonal edge.
  • Fixed a possible error which could occur in customized LabelDropInputMode and PortDropInputMode classes.
  • The drop input modes now make sure not to throw "Invalid Argument" errors in Internet Explorer.
  • The PortRelocationHandle.GHOST_VISUALIZATION_STROKE_KEY constant was not excluded from obfuscation.
  • The graph parameter of the constructor of the PortRelocationHandleProvider class can now be null. This was already the documented behavior.
  • Mouse wheel scrolling and scroll commands no longer move the view to the top left corner if the viewport is limited by a ViewportLimiter.
  • The bounds and the visibility state of the ICanvasObject installed by the RectangleIndicatorInstaller class were wrong. This impacted the performance as e.g. some node selection highlights were updated although they were not in the viewport and resulted in unnecessary large content rectangles.
  • The IHitTestable implementation of the DefaultPortCandidateDescriptor class used incorrect coordinates.
  • Changing the MouseHoverInputMode.duration property had no effect.
  • The ItemHoverInputMode class now updates the hovered item upon mouse drag events, too. This was already the documented behavior. Previously, the hovered item was only updated on mouse move events.
  • The ItemHoverInputMode class now removes the hovered item upon Cancel.
  • The CreateEdgeInputMode class doesn't show port candidates anymore if bend creation is enforced (by pressing CTRL key during edge creation).
  • Key bindings registered with KeyboardInputMode were gone after re-installation of the mode.
  • The INodeInsetsProvider implementations which can be retrieved from InteriorLabelModel and InteriorStretchLabelModel now correctly sum up the space required by overlapping labels.
  • Bridges sometimes did not appear on edges when they were scrolled into the viewport.
  • The overview did not render self-loops whose ports were owned by another edge correctly.
  • The indicators for bend grid snapping were not always drawn at the correct position for bends which were implicitly moved with a selected edge.
  • Fixed a possible TypeError in TableNodeStyleRenderer when a TableNodeStyle is rendered with the table property set to null.
  • The GraphBuilder.updateGraph method properly builds the graph now even if buildGraph was not called before.

Layout

  • The HierarchicLayout class placed source and target edge labels at the wrong location when integrated edge labeling was enabled and if there were either critical edges or the property SimplexNodePlacer.straightenEdges was enabled.
  • The HierarchicLayout class sometimes threw an error for input graphs that contained fixed elements in combination with both swimlanes and groups.
  • HierarchicLayout is no longer stuck in an endless loop if a sub-component with a nested layout algorithm that again contains a HierarchicLayout algorithm is defined.
  • The OrganicLayout class now always correctly moves the nodes for inputs with scope set to SUBSET or MAINLY_SUBSET and with specified output restrictions.
  • The TreeLayout class now correctly passes on exceptions that occurred during the layout calculation. Previously, they were sometimes caught without proper handling.
  • The SeriesParallelLayout class can now handle input graphs that contain nodes with very large location coordinates (e.g. largest possible floating-point value) when the fromSketchMode property is disabled.
  • The RadialLayout class does no longer throw an error if there is an IDataProvider registered with the key HierarchicLayout.SUB_COMPONENT_ID_DP_KEY.
  • The RecursiveGroupLayout class now correctly considers PortConstraints and PortCandidates of self-loops where both end points are restricted to the same node side.
  • A rare bug in the GenericLabeling may have caused an error for some input graphs that contain edges with zero length segments and labels associated with a free edge label model.
  • The EdgeRouter now avoids edge-to-edge distance violations for segments directly connecting at a node if there exists a cheaper route that, e.g., introduces a bend (which costs less by default). The effect of this issue was mainly observable in cases where the edge-to-edge distance was set to a rather large value.
  • The EdgeRouter now avoids some unnecessary bends that were previously created for edges that needed to pass group node borders and in conjunction with rather large minimumNodeToEdgeDistance values.
  • The EdgeRouter class now keeps paths with self-crossings belonging to fixed edges. Previously, the self-crossings were removed, i.e. paths of fixed edges were changed.
  • The PolylineLayoutStage class now keeps collinear bends of fixed edges.

Notable Demo Improvements

  • Updated third-party toolkits and dependencies of the demos to the current versions, most notable to webpack 4 and TypeScript 3.
  • Improved the performance of the Structure View and Neighborhood View demo components.
  • The new JSONWriter and JSONReader classes show how to write and read a graph to/from JSON. They supersede the GraphToJSON class and are more universal to support more use cases.
  • Enabled a workaround for Microsoft Edge in the Image Export demo. Otherwise gradients are not drawn correctly.

Incompatible Change

  • Reverted the following improvement of version 2.1 since it turned out to cause problems: "CreateEdgeInputMode now always creates dummy ports during a gesture, instead of temporarily reusing real ports if available. This makes it possible to change, e.g. the dummy edge's source port's style during the gesture.".

yFiles for HTML 2.1.0.3 - Changes Since 2.1.0.2

This is the 3rd bugfix release for yFiles for HTML 2.1. It includes several new demos, improvements, and corrections of errors. There are no incompatible changes.

Improvements

  • The yFiles type checking now complains always when trying to create an instance of an abstract class.

View

  • Reduced memory consumption of Void styles like VoidNodeStyle.
  • Improved performance for graphs with a large number of dynamically data-bound template styles.
  • Improved performance of the WebGLTaperedEdgeStyle.

Layout

  • The new PlaceNodesAtBarycenterStageData class allows to conveniently define the nodes that should be affected by PlaceNodesAtBarycenterStage.
  • HierarchicLayout now requires less memory for graphs with sequence constraints.
  • HierarchicLayout no longer inserts superfluous bends for edges between group nodes if the input graph contains grouped edges.

Bugfixes

  • Prevent a TypeError due to missing createElementNS property in web workers and in node.js when using the ES6 modules variant of the library.

View

  • GraphModelManager no longer removes the port visualizations if PortLayerPolicy.AT_OWNER is used and the HierarchicNestingPolicy is changed.
  • Bridges: For edges which cross each other with the same absolute slope a bridge is added on exactly one of these edges, depending on the crossing policy. Previously, a bridge was added either on both edges or none of them.
  • SmartEdgeLabelModel centered all labels on an edge that overlapped with a segment of the edge or were placed directly next to it.
  • Switching the input mode in an event handler of the current input mode no longer throws an error.
  • GraphClipboard: The contents of a folder node were not copied if the folder was copied from within a group view, i.e. if the user entered a group node. In the worst case, this might have frozen the complete application.
  • GenericLabelModel serialization: Fixed cyclic reference in GraphML which could happen while serializing a GenericLabelModel with a parameter with associated descriptor.
  • Corrected the GraphML serialization of the IArrow instances that are returned by the Arrow.asFrozen method.

Layout

  • HierarchicLayout now correctly considers fixed nodes with layering constraints. Previously, there were some rare cases where such inputs caused infinite looping issues.
  • OrthogonalLayout does no longer throw an error for some input graphs when its treeStyle property is set to COMPACT and its chainStyle property is set to a wrapped style.
  • OrthogonalLayout no longer throws an error if its cycleStyle property is set to a specific style and the input graph only consists of a single cycle.
  • EdgeRouter now always considers the PortCandidates for edges grouped with fixed edges.
  • EdgeRouter now keeps collinear bends of fixed edges.
  • EdgeRouter no longer crashes when defining exactly two equal intermediate routing points for an edge.
  • EdgeRouter threw an error when the list of intermediate points for an edge consisted of exactly two equal points.
  • BusRouter no longer produces non-deterministic results, i.e. different results for consecutive runs on the same input. Previously, this was possible in rare cases.
  • TabularLayout no longer crashes when applying an instance of it to a single-node graph after that same instance was previously applied to a larger graph.
  • GenericLabeling now always prefers LabelCandidates with higher profit values over others with lower profit. Previously, this sometimes happened even though both candidates did not intersect with other elements.
  • GenericLabeling does no longer assume that all LabelCandidates associated to a label have the same size. Previously, this caused unexpected labeling results if custom candidates with different sizes were given.
  • MultiPageLayout now correctly considers the maximum page size for tree layouts.
  • FamilyTreeLayout now correctly considers the preferred family member order.
  • The PreferredPlacementDescriptor.equals method incorrectly reported instances with different angles and distances as equal.

New Demos and Tutorials

Gantt Chart
Shows how to create an interactive Gantt chart from JSON data.
Structure View Demo
Features a tree list component that shows a structural view of a grouped graph.
Edge Groups
Shows how to configure HierarchicLayout to group edges. Grouped edges share common segments, thus making the layout more understandable and cleaner.
Split Edges
Shows that RecursiveGroupLayout in combination with HierarchicLayout presents the option to align edges that are split at a group's border. This leads to better routes for edges between groups and allows edges that connect ports at a group's border to the nodes of the group.
Rendering Order
Shows how to use the GraphModelManager class to control the order in which graph elements are rendered.
Build Swimlanes from Data Tutorial
Shows how to build a swimlane graph from JSON data.
Native Listeners Tutorial
Describes how to use a native click listener to add a button on a style.
Filtering with Folding Tutorial
Shows how to configure filtering and folding in the same diagram.

yFiles for HTML 2.1.0.2 - Changes Since 2.1.0.1

This is the 2nd bugfix release for yFiles for HTML 2.1. It includes four new demos, restructured tutorials, some improvements, and corrects several errors. There are no incompatible changes.

Improvements

  • Reduced the number of bends of directed edges in OrthogonalLayout.
  • The new TreeLayoutData.criticalEdgePriorities property can be used to specify critical edges.
  • The INode parameter of the NavigationInputMode.enterGroup method is now optional. If it is omitted or null the whole graph will be revealed.
  • The CanvasControl.createInputModeContext method is now public instead of protected.
  • The PointD.toMutablePoint and RectD.toMutableRectangle methods now return a MutablePoint instead of IMutablePoint and a MutableRectangle instead of a IMutableRectangle, respectively.
  • The new optional parameter initialTargetLocation of the CreateEdgeInputMode.doStartEdgeCreation method can be used to define the initial location that shall be used to find a target node.

Bugfixes

  • For some constructors, the automatic type conversion did not work as documented. Also many simple constructors were not type-checked at run-time at all even if yfiles-typeinfo.js was available.
  • Due to a bug in Safari 10.0 and earlier, using the new automatic type conversion feature for enum values resulted in a TypeError in these browsers. We now avoid the problematic code.
  • Since version 2.1, the workaround IE7766782 for a problem in Internet Explorer with GWT was not applied to all problematic usages of Array.isArray. Thus, instanceof checks for arrays could have been wrong in rare cases, resulting in different kinds of subsequent errors.

View

  • yFiles no longer shows an error if WebGL support is not available but no WebGL rendering is used at all. If WebGL support is not available and WebGL rendering is used, the resulting error has now a clear error message.
  • The Workarounds class now correctly documents that it is exported by the yfiles/core ES6 module.
  • CreateEdgeInputMode did not show port candidates after re-installation of the input mode.
  • CreateEdgeInputMode didn't always update the highlight of possible source port candidates when its showPortCandidates property was configured to show the source port candidates.
  • The default input mode that available view the GraphEditorInputMode.moveUnselectedInputMode property moved the bottom-most item at the cursor position instead of the top-most. This is most apparent when trying to move a child node of a group.
  • ClickInputMode provided wrong click locations in the Click event if a MouseEventTypes.CLICK event without preceding MouseEventTypes.DOWN event was processed.
  • If the MouseHoverInputMode.toolTip property was changed while a tool tip was visible, that tool tip was shown forever.
  • ItemHoverInputMode now resets the hovered item when moving the mouse out of the control.
  • While relocating edges, dropping a port over an invalid target or empty canvas no longer creates an empty undo unit.
  • Fixed an exception when an edge or label was pasted without selected target while its original owner was not in the current view.
  • The marquee visual of the LassoSelectionInputMode class was not updated properly during zooming.
  • PolylineEdgeStyle now takes arrow heads into account for visibility checks.
  • Reduced memory consumption of DefaultEdgePathCropper.
  • EdgeSegmentLabelModel and EdgePathLabelModel placed the label on the wrong side for EdgeSides.ABOVE_EDGE and EdgeSides.BELOW_EDGE if the distance and offset was both 0.
  • The TextWrapConverter for template styles threw a TypeError if the resolved value was not a string (e.g. for numbers or null). Now, it handles null and undefined like an empty string and converts non-string values to string.
  • The maximumSize parameter of the TextRenderSupport.addText method is now optional, and consequently handles null arguments as it was already documented.

Layout

  • The HierarchicLayout now produces less bends if the edges should be routed on a grid and the grid reference point is not (0,0), see NodeLayoutDescriptor.gridReference.
  • HierarchicLayout did sometimes not correctly consider the edge thickness for grouped edge segments. Even though there would have been space for a thick edge it was placed too close to other elements.
  • HierarchicLayout now produces more symmetric results for grouped edges if property SimplexNodePlacer.barycenterMode is enabled.
  • For some input graphs with port groups, the HierarchicLayout threw an exception for layout mode LayoutMode.INCREMENTAL.
  • Fixed a rare bug in OrthogonalLayout that may have caused infinite looping for grouped input graphs.
  • For some input graphs the OrganicLayout produced an error if the CycleSubstructureStyle property was set to CycleSubstructureStyle.CIRCULAR.
  • CircularLayout does now correctly consider the EdgeBundleDescriptor.bundled property for edges between different partitions. Previously, when at least one of these edges had the Bundled property enabled, all of them were bundled, ignoring the property value of the other edges.
  • Fixed a bug in TreeMapLayout that may have caused NaN-coordinates or infinite looping for input graphs that are non-directed trees.
  • The EdgeRouter now produces better routes if there are edges with intermediate routing points, see property EdgeLayoutDescriptor.intermediateRoutingPoints.
  • For grouped segments the GraphLayoutLineWrapper now produces more compact results.
  • In rare cases the GraphLayoutLineWrapper produced drawings with large empty space between lines.

New and Improved Demos

Application Features Tutorial
These new small tutorials show how to implement features that applications typically have, like drag and drop, building graphs from JSON data, and tool tips.
Map Integration
Draws a graph on top of an interactive map. The nodes are placed at the correct locations on the map with geo-coordinates. The map in this demo is realized with the Leaflet.js library.
Contextual Toolbar
In this demo, contextual toolbars for the nodes and edges allow quick modifications of the styling and other actions.
Template Styles
Shows how to rapidly create node, label, and port styles from SVG template snippets. These styles can show information about their item with dynamic data binding.
Lasso Selection
Shows how to configure a lasso tool for freeform selection.

Other Notable Demo Improvements

  • The performance of the Large Graphs Demo was significantly improved.
  • The PDF Export now supports custom fonts and non-Latin-1 characters. A second sample graph shows such fonts and characters.
  • The load and save operations in the File Operations demo have been refactored and simplified to make it much easier to re-use the code in customer applications.

yFiles for HTML 2.1.0.1 - Changes Since 2.1

This is the 1st bugfix release for yFiles for HTML 2.1. It includes four new demos, some improvements, and corrects several errors. There are three minor incompatible behavior changes.

In addition, there are new tutorial videos available online. We'll add more videos in the future.

Improvements

  • Calling a method that is not available because its required module is missing now throws an informative error message. Prominent examples are the LayoutExecutor.morphLayout and the IGraph.applyLayout methods which are only available if the view-layout-bridge module is loaded.
  • The EdgeRouter class now calculates a better routing for edges between group nodes and their descendants in the case that the routing is aborted via AbortHandler or when the maximum duration time limit is up. Previously, such edges might not have been handled in this case, whereas now they always get a simple but valid orthogonal route.
  • The HierarchicLayout class now respects the sequence and layering constraints between subcomponents. Previously, such constraints were ignored.

Bugfixes

  • The amount of time that may pass before a touch movement is considered a drag instead of a press is now correctly read from CanvasComponent.dragTime. Previously, the value of the CanvasComponent.longPressTime property was used instead.
  • The IOrientedRectangle.orientedRectangleCenter property didn't return the correct center if the width or height of the rectangle was equal to 0.
  • Moving an edge label with SmartEdgeLabelModel that is owned by an edge without visible path no longer throws an exception.
  • The behavior of the DefaultObservableCollection.clear method has been corrected. Previously, it always threw an error.
  • For template-based label and port styles, the binding context was not initialized early enough. As a result, these styles first created the DOM elements for the wrong, uninitialized vales and then updated them to the correct values.
  • The new CSS classes yfiles-selected, yfiles-highlighted and yfiles-focused for template-based styles were not always applied correctly at element creation time.
  • Removing an item that is currently highlighted with a custom HighlightIndicatorManager, FocusIndicatorManager, or SelectionIndicatorManager no longer results in an error.
  • Fixed a bug that resulted in an unresponsive input mode in Safari on iOS. This error happened only if the CollapsibleNodeStyleDecoratorRenderer.addToggleExpansionStateCommand method was used in a custom group node style.
  • The TypeScript definition files incorrectly required the implementation of some non-abstract properties in the quick-interface implementation constructors of some interfaces.
  • In EdgeRouter, an error occurred when there were intermediate routing points and the path search got aborted (e.g. because of maximum duration time limit).
  • In ShortestPaths, an error occurred when the a-star algorithm was applied to a graph with non-monotonic heuristic costs.
  • In HierarchicLayout, an error was triggered when a yfiles.algorithms.DataProviderAdapter that does not override the DataProvider.get method was registered with key GivenLayersLayerer.LAYER_ID_KEY. This issue only appeared in conjunction with subcomponents.

New and Improved Demos

UML Editor
An editor for UML diagrams that features a tailored UML node style, a custom automatic layout, and special pop-up menu to quickly add new connections of different types with the mouse and touch.
Rotatable Nodes
Shows nodes that can be rotated interactively by dragging a rotation handle. Labels and ports rotate with their node and edges clip perfectly at the rotated node bounds. Automatic layout can deal with rotated nodes, too.
Hierarchic Subcomponents
Hierarchic layout can now arrange selected subcomponents with a different style. This can be a tree, organic, or orthogonal style, or a hierarchic style with different settings than the main layout.
Critical Paths
In hierarchic and tree graphs, some paths can be more important than others. This demo shows how the hierarchic and tree layout styles align the nodes and edges of such important, or 'critical', paths to make them more striking.

Other Notable Demo Improvements

  • The context menu that is used in the demos is now an actual class and its menu items are real input elements. It now returns the focus to its graph component when closed and is easier to open with a touch long-press gesture.
  • The Image Export, PDF Export and Web Worker demos have been refactored to make it easier to re-use the code in other projects.
  • The GraphToJSON converter correctly parses bend locations and port locations now.

Changes of Default Behavior

  • The IGraph.setNodeLayout method and the various methods to create a node now throw an ArgumentError if the layout rectangle contains one or more NaN values. Similarly, the IGraph.setBendLocation and the various methods to add a bend to an edge now throw an ArgumentError if the location point contains one or two NaN values.
  • The ContextMenuInputMode.populateMenu event is now only fired if the current input mode state allows opening the context menu. Previously, the event was fired before the input mode had even checked whether another active input mode would prevent the opening of the menu.
  • The default value of DragSource.effectAllowed is now DragDropEffects.ALL instead of DragDropEffects.NONE. This was always the intended default value.