Release Notes
yFiles for HTML Version 3.1

Version 3.1 is the latest major release of yFiles for HTML in the yFiles for HTML 3.1 major release series.
See the changelog for a list of all changes in this and all other versions.

To learn about the new features in version 3.1, have a look at About yFiles for HTML Version 3.1.
Below you will find the technical requirements and a list of all new features, improvements, and incompatible changes.

Technical Requirements

  • For development, we strongly recommend an IDE with dedicated support for the web platform, for example Visual Studio Code or JetBrains WebStorm.
  • yFiles for HTML-based web applications require a common, standards-compliant browser. These include Chrome, Safari, Firefox, and Edge on Windows, macOS, iOS, and Android operating systems.
    The yFiles for HTML 3.1 release has been tested with the following browsers:
Icon of the Google Chrome browser Google Chrome
Icon of the Mozilla Firefox browser Mozilla Firefox
Icon of the Safari browser Apple Safari
Icon of Microsoft Edge browser Microsoft Edge
125+ (desktop and mobile devices)
125+ (desktop and mobile devices, and 115 ESR)
17.4+ (macOS, iOS, and iPadOS)
125+

All changes
Version 3.1

yFiles for HTML 3.1 is an incremental update that builds on the extensive changes introduced in the 3.0 release. It brings exciting new features, helpful improvements, and bug fixes to all parts of the library. As always, there is a large number of new and improved demos demonstrating these features and improvements.

If you are updating from an older version of yFiles for HTML, have a look at the list of incompatible changes and at the Migration Guide.

New Features, Improvements, and Bug Fixes

Categories: General Components WebGL Styles Text Rendering Interaction Tooltips and Popovers Layout Hierarchical Layout Bundled Edge Router Labeling Other Layouts Analysis Collections & Geometry New Demos

General

New Features and Improvements

  • yFiles classes and interfaces now behave like regular JavaScript classes when enumerating members: properties and methods are no longer enumerable, fields are enumerable. This improves compatibility with third-party frameworks like React.
  • The library is now split into more granular JavaScript modules. Major features and layout algorithms have been moved into separate modules, enabling tree‑shaking so build tools can exclude unused parts from production bundles, reducing bundle size and improving load times without changes to existing code.
  • The nonce value of the automatically loaded yFiles stylesheet can now be set with the new Workarounds.cspNonce property, which can be used to satisfy stricter Content Security Policy settings.
  • The memberwise cloning used internally by the library now also handles certain edge cases correctly.

Components and Graph

New Features and Improvements

  • The new HeatMapRenderer class can render a heat map. It simulates heat dissipating from nodes and edges and renders it with customizable color gradients. The new Heat Map Demo shows how to use the HeatMapRenderer class.
  • The property CanvasComponent.devicePixelRatio now defaults to the client's devicePixelRatio but clamped to a maximum value of 2.0.
  • Scrollbars with ScrollBarVisibility.VISIBLE now use the same modern styling as scrollbars with ScrollBarVisibility.AUTO.
  • The performance behavior of CanvasComponents that are no longer connected (directly or indirectly) to a Document object has been improved.
  • The Table.createChildRow, Table.createChildColumn, Table.setSize, Table.setMinimumSize methods and the StripeDefaults.size and StripeDefaults.minimumSize properties now throw an exception if negative, NaN, or infinite values are passed.

Bug Fixes

  • The bend-location-changed event of IGraph now uses the correct value for the y-coordinate of the old location.
  • Prevent a possible exception while reading or writing GraphML data with the scopes KeyScope.GRAPHML or KeyScope.ALL.

WebGL

New Features and Improvements

  • The new WebGLZoomScalingPolicy class can scale labels non-uniformly with the zoom level, for example keeping labels at a constant size for all zoom levels. Instances of the class can be set to the new zoomScalingPolicy properties of WebGL label styles. The new WebGL Label Fading Demo illustrates how this policy can be applied.
  • The new WebGLZoomVisibilityPolicy class can hide items at certain zoom levels. Instances of the class can be set to the new zoomVisibilityPolicy properties of WebGL item styles. The new WebGL Label Fading Demo shows how to achieve a simple level of detail (LOD) display in WebGL rendering by fading out labels, nodes, and edges at certain zoom levels.
  • The new WebGLShapePortStyle visualizes ports with shapes that nodes can have. Ports can have effects and be animated. The WebGLShapePortStyle has been updated to include WebGL-based port rendering.
  • Squircle shapes are supported for WebGL styles for nodes, labels, and ports. The WebGL Styles Demo has been updated to include squircle shapes for nodes.
  • The new WebGLBeaconEdgeIndicatorStyle class adds beacon animations to the available WebGL2 selection, highlight, and focus styles. The WebGL Selection Styles Demo has been updated to support beacon animations for the selected edges.
  • The method WebGLGraphModelManager.createHaloAnimation now also applies to edges. The WebGL Animations Styles Demo has been updated to support halo animations for edges.
  • WebGL label styles now support beacon and halo animations. The WebGL Animations Styles Demo has been updated to support beacon and halo animations for labels.
  • WebGL styles can now be serialized to GraphML.
  • The new WebGLGroupNodeStyle.minimumContentAreaSize property specifies the minimum size for the content area, similar to the existing property on the GroupNodeStyle.
  • The new WebGLGraphModelManager.updatePortPosition method provides a way to manually update port locations similar to the updateLabelPosition method.
  • The item-specific overloads setAnimations and updateStyle of WebGLGraphModelManager have been merged into single methods with an IModelItem parameter. This removes the need for an instanceof check in some usage patterns.
  • Changing WebGLGraphModelManager.renderMode no longer throws when the HandleInputMode is currently active. Instead, the HandleInputMode is canceled.

Bug Fixes

  • Edges with WebGLPolylineEdgeStyle and a positive smoothingLength property are no longer missing the smooth line joins in Firefox.
  • Method WebGLGraphModelManager.createBeaconAnimation was fixed for simple edges without dashes or effects.
  • When using WebGLGraphModelManager in WebGL mode, edges are now correctly hit before group nodes.
  • Items that use INodeStyle.VOID_NODE_STYLE, IEdgeStyle.VOID_EDGE_STYLE, ILabelStyle.VOID_LABEL_STYLE, and IPortStyle.VOID_PORT_STYLE no longer render when WebGL is used for rendering.
  • VOID_LABEL_STYLE is now working correctly in WebGL and no longer renders labels regardless of the label model. Previously, using StretchNodeLabelModel, the label remained visible.
  • Selecting a self-loop edge with WebGLArcEdgeStyle with zero height no longer throws a "Cannot read properties of undefined" exception.
  • The WebGLArcEdgeStyle no longer throws an Exception when handling self-loop edges that have no specified arc height.
  • Clicks on self-loop edges with WebGLPolylineEdgeStyle and a single bend now properly select them.
  • Selections of self-loop edges with WebGLPolylineEdgeStyle are now properly cleared if deselected.
  • WebGL animations that were stopped before having finished now run in the correct direction when started again.
  • WebGL animations for label indicators now correctly run animations assigned to their labels.
  • Fixed resize-handle hit-testing when non-default handle offsets are defined with the yFiles theme.
  • Fixed a bug in the lookup chain of WebGL styles that has overwritten registered chain links, e.g., through the NodeDecorator, when the WebGLGraphModelManager was assigned after the chain link registration. Now the invocation order of registering chain links and assigning the WebGLGraphModelManager is irrelevant.

Styles

New Features and Improvements

  • Squircle shapes are now available for node, port, and label styles. The RectangleNodeStyle, ShapeNodeStyle, ShapePortStyle, and LabelStyle classes support this shape type via the new enum values RectangleCornerStyle.SQUIRCLE, ShapeNodeShape.SQUIRCLE, and LabelShape.SQUIRCLE.
  • The LabelStyle class now supports text wrapping in squircle shapes via the new enum value TextWrappingShape.SQUIRCLE.
  • The ShapePortStyle class has now a cssClass property.
  • Reduced rendering artifacts of square handles in combination with a fractional theme scaling.
  • The new BridgeManager.maximumBridgeWidth property allows bridges to be made wider for flatter intersection angles in order to maintain a constant distance from obstacles.
  • The new IRenderContext.setConnectedCallback method allows registering a callback that is invoked when the visual was added to the DOM.
  • The new SvgVisualGroup.from method creates a visual group with an attached tag object. This can be used, for example, as a cache for rendering data, similar to the existing SvgVisual.from method.
  • The new RadialGradient.radius property specifies the radius of the gradient and replaces the previous properties radiusX and radiusY. This corresponds to the underlying SVG element <radialGradient>, which also has only a single r attribute for the radius.
  • LinearGradient and RadialGradient now have a gradientTransform property. Similarly, PatternFill now has a patternTransform property.

Bug Fixes

  • MarkupLabelStyle no longer wraps incorrectly or exceeds the maximumSize of the label.
  • Loading GraphMLs containing pattern fills no longer crashes.
  • Bridges of polyline edges are no longer included in selection, highlight, or focus.
  • Fixed a problem when only one of the managers for highlights or selection got replaced in GraphComponent where their domain property value of the other one became defunct.

Label Text Rendering

New Features and Improvements

  • When rendering label text in CJK languages, line breaks between ideographic graphemes are now allowed for both word and character wrapping.
  • When word-wrap is enabled, trailing and orphaned whitespace is now trimmed before wrapping, resulting in tighter label bounds.

Bug Fixes

  • Word and character wrapping now respects grapheme boundaries (including emojis, characters with combining marks, and non‑breaking spaces).
  • By default, the text input field of the TextEditorInputMode and the default tooltip now both use black text instead of inheriting the color. This avoids displaying white text on the already white background.

Interaction

New Features and Improvements

  • The new CanvasComponent.preventViewportInteraction property can be used to prevent unwanted interactions with the viewport by touch or pen gestures or the mouse wheel. This replaces the previous enum value MouseWheelBehaviors.ONLY_WHEN_FOCUSED which applied only to mouse wheel input.
  • Context menu entries can now be activated on pointerup for environments where the menu opens on pointerdown (e.g. macOS) such that a single gesture can activate context-menu entries.
  • Improved panning behavior on touch devices results in a less slippery feel when panning the graph.
  • Keeping dragging with auto-scroll enabled while at the border of the canvas now accelerates the auto-scroll speed.
  • The new MoveViewportInputMode.isDragging property reflects the current state of that input mode.
  • Keyboard shortcuts for registered commands are now always handled and no longer trigger browser actions. Previously, shortcuts were only processed if possible in the current state. This may have resulted, for example, in CTRL+R unintentionally reloading the current page instead of reversing the direction of an edge.
  • The new ResizeStripeInputMode.affectedStripeSubregion and ResizeStripeInputMode.affectedItems properties provide access to the stripe being modified.
  • On macOS, the GraphComponent now zooms when holding the Command modifier key during vertical panning on a trackpad or a magic mouse.
  • The text editor input box is now placed with integer coordinates to avoid blurry browser rendering of the input field.
  • The new DropInputMode.acceptDrag method is called on drag-enter events and determines if the mode will handle subsequent drag and drop events. Previously, this was the responsibility of the DropInputMode.adjustEffect method. Now, adjustEffect only changes the drag/drop effect of the given event args as its name implies.

Bug Fixes

  • The GraphComponent no longer drifts when the minimumZoom value is reached during pinch zoom.
  • The GraphComponent no longer prevents zooming after dragging when two MoveViewportInputModes were active in the same instance.
  • Fixed delayed zoom and scroll animation of the GraphComponent for high frequency animation triggers. For example, when strongly accelerating a free-spinning mouse wheel.
  • In a GraphComponent that is transformed with a CSS transform, the location of pointer events is now handled correctly. Events that occur over an HtmlVisual are an exception; these are still not handled correctly.
  • WaitInputMode does not steal pointer capture from other UI elements anymore.
  • When HandleInputMode cancels the drag gesture, it now calls IDragHandler.cancelDrag with the original handle location instead of the initial pointer location.
  • ItemDropInputMode now also emits the drag-over event when the pointer remains at the same location but the viewport changes during the drag-drop gesture, for example, due to auto-dragging or mouse-wheel scrolling. This enables ItemDropInputMode to update its DropTarget correctly.
  • Fixed the label editor on iOS/Safari, so tapping inside the text box correctly positions the cursor and pointer input is properly recognized.

Tooltips and Popovers

New Features and Improvements

  • The new PopoverManager, in combination with the new PopoverDescriptor, provides an easy way to show popover elements like tooltips, contextual toolbars, detail panels, or persistent annotations. The new Tooltips and Popovers Demo shows how to enable and customize tooltips and popovers for graph items.
  • The ToolTipInputMode now uses the PopoverManager to display tooltips.
  • The QueryItemToolTipEventArgs now provides access to a new PopoverDescriptor that allows flexible customization of the tooltip's popover element. The new descriptor provides properties for positioning the popover with an additional update event that is triggered whenever a significant action occurs while the popover is opened. It also provides access to overwrite the automatic open/close behavior.
  • Tooltips now remain open at their initial open location until the cursor exits the item. This behavior can be adjusted by changing UpdatePopoverEventArgs.showPopover in the update event.

Layout

New Features and Improvements

  • LayoutExecutor.start, LayoutExecutorAsync.start, and GraphComponent.applyLayoutAnimated now accept an optional AbortSignal to cancel the layout animation or discard the layout result in case of LayoutExecutorAsync.
  • The new LayoutExecutorAsync.stop method keeps waiting for the Web Worker layout result but will skip the layout animation and apply the result immediately to the graph.
  • The new LayoutExecutor.cancel method provides a symmetric API to the LayoutExecutorAsync class. Due to the single-threaded execution in JavaScript, this method can only cancel a running layout animation but not the layout calculation itself.

Hierarchical Layout

New Features and Improvements

  • The HierarchicalLayout class now offers strong support for keeping an existing layout stable with respect to the exact coordinates. This makes it possible to insert incremental new elements while keeping the remaining elements at their original location, or as close as possible to their original location if the original placement is no longer valid.
    • Enabling the HierarchicalLayout.fromSketchMode, the results are now more similar to the input, preserving more spatial relations between nodes.
    • The new default hint for non-incremental nodes IncrementalNodeHint.FROM_SKETCH preserves existing spatial relations and straight edges.
    • The new hint IncrementalNodeHint.EXACT_COORDINATES tries to preserve the exact coordinates of nodes if that is possible without creating overlaps or violating other constraints and distance settings.
    • The IncrementalNodeHint.createExactCoordinatesHint method allows specifying even stronger hints where overlaps and distance violations can be accepted in favor of keeping coordinates fixed.
    • The new HierarchicalLayoutData.incrementalNodeHints property enables convenient specification of hints for nodes. These hints define how nodes are treated in from-sketch mode.
    The new Hierarchical Exact Coordinates Demo shows how to integrate additional nodes in an existing hierarchical layout while keeping the coordinates of the other nodes. In addition, the Interactive Hierarchical Layout Demo has been updated to support these new options.
  • The HierarchicalLayout symmetry optimization now produces more symmetrical results for grouped inputs.
  • The HierarchicalLayout class now produces significantly less short edge segments, thus, reducing the number of bends.

    The property CoordinateAssigner.maximumPortDeviation allows to control the distance a port may be moved to avoid bends in the connecting edge segment, with the drawback of getting non-uniform port distributions.

  • Improved the quality of HierarchicalLayout results with sequence constraints.

Bug Fixes

  • The HierarchicalLayout class no longer creates avoidable crossings between edges with the same target node when fromSketchMode property is enabled.
  • The HierarchicalLayout no longer produces unneeded white space between layers due to overestimating the required first or last segment length of edges.
  • The HierarchicalLayout now correctly handles grouped input graphs when grid spacing is defined. Previously this could lead to an error if a self-loop edge at a group node existed.
  • The HierarchicalLayout's integrated edge labeling no longer produces avoidable overlaps between node margins and port labels.
  • The HierarchicalLayout now correctly considers the specified critical edge priorities for edges with LayoutPortCandidates. Previously, it sometimes ignored these priorities for edges with port candidates at side PortSides.ANY.
  • The HierarchicalLayout now works correctly with grouped self-loops. Previously, an error could occur in rare cases.
  • The HierarchicalLayoutNodeContext.layer property now returns -1 if the node is not assigned to a layer. Previously, an error occurred.
  • The properties HierarchicalLayoutNodeContext.associatedNode and HierarchicalLayoutNodeContext.associatedEdge now correctly marked as nullable.
  • LayoutGraphSequenceConstraints created with the methods createReadonlyView or createWritableCopy now correctly include constraints between edges if there are nodes with constraints as well. Previously, in that case the edge constraints were ignored.
  • Sequence constraints and layer constraints defined with the methods of SequenceConstraintData and LayerConstraintData are now only represented once in data structures attached to the graph, which can be accessed, e.g., via LayoutGraphSequenceConstraints.createReadonlyView. Previously, they were inserted twice. This did not affect the resulting layouts.

Bundled Edge Router

New Features and Improvements

  • The BundledEdgeRouter class now supports multiple bundling strategies via the BundledEdgeRouter.strategy property. The original approach has been renamed to BundledEdgeRouterStrategy.FORCE_DIRECTED. Two new strategies are introduced:
    • BundledEdgeRouterStrategy.SPANNER, which offers significantly faster performance.
    • BundledEdgeRouterStrategy.VORONOI, which focuses on high performance while minimizing node-edge intersections.
    The new Bundled Edge Router Demo shows how to bundle the edges of a large graph to increase readability.

Labeling

New Features and Improvements

  • The integrated edge labeling of the OrganicLayout now places the edge labels with EdgeLabelPreferredPlacement.placementAlongEdge set to AT_CENTER closer to and more symmetric around the midpoint between the borders of the source and target nodes.
  • For edge labels with preferred placement center, the GenericLabeling algorithm now prefers positions near the center of the path between the incident nodes. The path length inside the incident nodes is ignored.

Other Layouts

Bug Fixes

  • The OrthogonalLayout class now correctly considers the specified bend costs and edge orientation. Previously, for some setups, specifying both could lead to an error.
  • The OrganicLayout with high values for the qualityTimeRatio property no longer violates constraints such as forbidden overlaps when running against the specified stopDuration.
  • The EdgeRouter class no longer throws an exception in some cases with bus-style routing (EdgeRouterData.buses).
  • The CircularLayout now correctly considers the specified node margins and labels. Previously, it sometimes produced overlapping margins regions or label overlaps.
  • The CircularLayout now correctly considers the minimum radius specified by the PartitionDescriptor.minimumRadius property.
  • The static LayoutGraphGrouping.isFlat method now correctly identifies graphs that have become flat because the last group node was deleted from the graph.
  • The methods LayoutGraphAlgorithms.allPairsShortestPath and LayoutGraphAlgorithms.allUnweightedShortestPaths publish the calculated results now.

Analysis

New Features and Improvements

  • The Neighborhood algorithm now additionally delivers the edges in the neighborhood of the start nodes through the Neighborhood.Result.Edges property.

Collections and Geometry

New Features and Improvements

  • The new IEnumerable.with method is modeled after the Array.prototype.with function and returns a modified view of the enumerable.

    Similarly, the new IEnumerable.toSpliced method is modeled after the Array.prototype.toSpliced function and returns a modified view of the enumerable.

  • The IEnumerable.concat method has improved type definitions.
  • The new static methods Rect.sum and Rect.fromPoints calculate the bounding rectangle of an enumerable of rectangles or points, respectively.
  • The new Rect.add method creates the union of the current instance and the specified rectangle.

Bug Fixes

  • Checking instances of basic types like Point, Size, etc. for equality is now more robust in certain rare edge cases.

New Demos

  • The new Event Timeline Demo showcases a simple yet powerful way to visualize dynamic graph data, with nodes (entities) represented as labeled parallel horizontal line segments and edges (events) as labeled parallel vertical ones.
  • The new Biofabrics Demo offers a simple presentation and introduction to biofabric visualizations.
  • The new Space and Time Demo visualizes the spread of contaminants in temporal, geospatial, and relational dimensions.
  • The new Custom Copy and Paste Demo shows how the GraphClipboard can be used to transfer style between graph elements.
  • The new Octilinear Edge Editing Demo shows how to implement interactive editing of octilinear edges.
  • The demos' UI has been modernized with an updated visual design to provide a clearer and more cohesive user experience.

Incompatible Changes

Categories: Components WebGL Styles Interaction Tooltips and Popovers Layout Hierarchical Layout Bundled Edge Router Geometry

Components

Incompatible API Changes

  • The IRenderContext has a new method setConnectedCallback - wrapping implementations should delegate the call to the wrapped context. If you are implementing the interface from scratch, make sure that after rendering and assembling the DOM, all the collected callbacks are called. yFiles automatically does this for the context implementations provided by the library.
  • The events CanvasComponent.viewport-changed and GraphComponent.current-item-changed now use plain EventArgs instead of PropertyChangedEventArgs, since these events each affect only a single property.
  • The event GraphComponent.selection-model-changed has been removed. This event was only fired when the model instance changed, not when one or more selected items changed.
  • The unused protected constructors of SerializationNotSupportedException and DeserializationNotSupportedException have been removed since they were based on an obsolete constructor of the base class.

Incompatible Behavior Changes

  • The GraphComponent.fitGraphBounds method no longer adds an undocumented additional margin of 1.0 when no margins are specified as arguments.
  • GraphML now uses a sentinel object GraphMLIOHandler.graphmlRoot instead of null if data for the toplevel document needs to be written or read.

WebGL

Incompatible API Changes

  • the property WebGLGroupNodeStyle.contentAreaPadding is now of type Insets instead of a plain number.
  • The class WebGLGroupNodeStyle has now a constructor parameter for the contentAreaPadding property.

Styles

Incompatible API Changes

  • The EdgeIndicatorBendsRenderTag class has been removed and replaced by the IListEnumerable<IBend>, which was previously available in its bends property. The zoomPolicy property had no effect was therefore removed without replacement. The corresponding, now obsolete zoomPolicy enum has also been removed.
  • The new RadialGradient.radius property replaces the properties radiusX and radiusY. This corresponds to the underlying SVG element <radialGradient>, which also has only a single r attribute for the radius. Previously, radiusX was used as the single radius and radiusY had no effect.
  • When word-wrap is enabled, trailing and orphaned whitespace is trimmed from rendered text before wrapping, which may change existing line breaks and reduce label width.

Interaction

Incompatible API Changes

  • The return value of the DropInputMode.adjustEffect method has been changed from boolean to void. This method no longer determines if the mode will handle drag or drop events but only changes the drag/drop effect of given event args as its name implies. the new DropInputMode.acceptDrag method now determines if the mode will handle drag and drop events.
  • The CanvasComponent.lastInputEvent property has been renamed to lastPointerEvent to better reflect its type. In addition, the CanvasComponent.lastEventLocation has been removed since the location property of lastPointerEvent provides the same value.
  • The enum value MouseWheelBehaviors.ONLY_WHEN_FOCUSED has been removed in favor of the new CanvasComponent.preventViewportInteraction property. Set it to the value PreventViewportInteractionPolicy.UNFOCUSED to achieve the old behavior with the additional improvement that it now not only prevents mouse wheel interactions but also touch and pen viewport gestures.
  • The generic IGridConstraintProvider interface has been removed, its usages have been replaced with the existing item-specific interfaces INodeGridConstraintProvider, IBendGridConstraintProvider, and IPortGridConstraintProvider. In addition, the unused ILabelGridConstraintProvider and ILabelOwnerGridConstraintProvider interfaces have been removed and the GridConstraintProvider class is no longer generic and implements all remaining item-specific interfaces.
  • The new LassoRenderTag class will be passed as render tag for the lasso path renderer of the LassoSelectionInputMode class.
  • The StripeSelection class has been removed. Instead, use the instance returned by the TableEditorInputMode.stripeSelection property.

Incompatible Behavior Changes

  • The default value of the property CanvasComponent.autoScrollPadding ahs been increased from 10 to 20.
  • Method DropInputMode.adjustEffect no longer determines if the mode will handle drag or drop events but only change the drag/drop effect of given event args as its name implies. Method DropInputMode.acceptDrag now determines if the mode will handle drag and drop events.

Tooltips and Popovers

Incompatible API Changes

  • Renamed ToolTipInputMode.show to ToolTipInputMode.open.
  • Removed ToolTipInputMode.onShow method. It is now part of ToolTipInputMode.open.
  • Removed ToolTipInputMode.onHide method. Instead, use the new closed event on PopoverDescriptor.
  • Removed ToolTipInputMode.hide method. Instead, use the ToolTipInputMode.close method or PopoverDescriptor.close.
  • Renamed ToolTipInputMode.Showing to ToolTipInputMode.isOpen and made it readonly now.
  • Removed ToolTipInputMode.getToolTipLocation method.
  • Removed ToolTipInputMode.getToolTipContent method.
  • Removed ToolTipInputMode.updateLocation method. The new popovers automatically detect resize events and reposition themselves according to their configured positioning properties.
  • Removed ToolTipInputMode.createToolTip method.
  • Moved and renamed ToolTipInputMode.adjustTooltipPosition method to PopoverManager.getDocumentLimitedLocation.
  • Moved and renamed ToolTipInputMode.toolTipParentElement method to PopoverManager.defaultParentElement or the specific PopoverDescriptor.parentElement.
  • The ContextMenuInputMode internally now uses the PopoverManager to display the context-menu popover. The contextMenuParentElement property has been removed, instead use PopoverManager.ParentElement.

Incompatible Behavior Changes

  • Tooltips now show after 500ms instead of 1s by default.
  • The tooltip container is now added to the CanvasComponent.overlayPanel instead of the document body. This can be adjusted with the PopoverManager.defaultParentElement property for all popovers or specifically with the PopoverDescriptor.parentElement property.

Layout

Incompatible API Changes

  • The EdgeLabelCandidates.addDiscreteCandidates method uses DiscreteEdgeLabelPositions enum to specify label positions. The value CENTERED was removed from this enum; use the already existing value CENTER instead.
  • Renamed GroupBoundsCalculator to LayoutGroupBoundsCalculator to match the implementing ILayoutGroupBoundsCalculator interface.

Hierarchical Layout

Incompatible API Changes

  • The IncrementalNodeHint member is now a class and no longer an enum. The available hint values have been changed as follows:
    • LAYER_INCREMENTALLY has been replaced by INCREMENTAL.
    • SEQUENCE_INCREMENTALLY has been replaced by INCREMENTAL_WITH_LAYERS_FROM_SKETCH.
    • NONE has been replaced by KEEP_RELATIVE_ORDER. It is no longer the default value for nodes without a hint.
  • The IncrementalEdgeHint values have been changed as follows:
    • NONE has been replaced by KEEP_RELATIVE_ORDER.
    • SEQUENCE_INCREMENTALLY has been replaced by INCREMENTAL.
  • Removed the CoordinateAssigner.exactPlacement property. To keep coordinates as fix as possible, use hint IncrementalNodeHint.EXACT_COORDINATES or a hint created with the IncrementalNodeHint.createExactCoordinatesHint method. The old behavior forcing exact placement on the existing coordinate while even accepting severe violations of other constraints or illegal group overlaps is no longer available.
  • Removed the CoordinateAssigner.fromSketchLayerAssignment property. If there are nodes with exact-coordinate hints, their layer coordinates in the sketch are now always considered. Otherwise, the property had no effect, and the behavior has not changed.
  • Removed the CoordinateAssigner.bendReduction property. The number of bends is always optimized.
  • Removed the CoordinateAssigner.straightenEdges property. The replacement is the new CoordinateAssigner.maximumPortDeviation property. To get the old behavior for "true" use a large value on the new property, for "false", use zero.

Incompatible Behavior Changes

  • The default behavior when enabling the HierarchicalLayout.fromSketchMode property has been changed. Now, the given sketch (current coordinates) has a higher impact. Results are often closer to the sketch than previously. To get the old behavior where only the relative order of elements was preserved, specify hint IncrementalNodeHint.KEEP_RELATIVE_ORDER via layout data HierarchicalLayoutData.incrementalNodeHints property.

Bundled Edge Router

Incompatible Behavior Changes

  • The BundledEdgeRouter now uses BundledEdgeRouterStrategy.SPANNER as the default strategy for significantly improved performance. To restore the previous behavior, set the BundledEdgeRouter.strategy property to BundledEdgeRouterStrategy.FORCE_DIRECTED. In addition, for strategy BundledEdgeRouterStrategy.FORCE_DIRECTED, the range of the EdgeBundling.bundlingStrength property is now better utilized. Previously, most bundling occurred only at very high values.

Geometry and Collections

Incompatible API Changes

  • IEnumerable.concat is now stricter in regard to the types of rest arguments. Add a type parameter when mixed parameter types cannot be inferred, automatically.
  • Method MutablePoint.convertToPointD has been removed. Use the MutablePoint.toPoint method instead.
  • Method MutableRectangle.convertToRectD has been removed. Use the MutableRectangle.toRect method instead.
  • Method MutableSize.convertToSizeD has been removed. Use the MutableSize.toSize method instead.