| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Version 0.24.0 released on 2026-07-08.
⚡ This new version continues improving modularity and tree-shaking: the image bundle feature moves to a dedicated plugin and per-edge-style registration helpers are introduced. ⚡
EdgeHandler.isHandleVisible() now uses EdgeStyleRegistry.allowsIntermediateHandles() instead of checking against the EdgeStyle.EntityRelation function reference.
If you register EdgeStyle.EntityRelation yourself:
// Before: the previous behavior was implied by the EntityRelation reference
import { EdgeStyle, EdgeStyleRegistry } from '@maxgraph/core';
EdgeStyleRegistry.add('entityRelationEdgeStyle', EdgeStyle.EntityRelation, {
isOrthogonal: true,
});// After: opt in explicitly, or use the dedicated helper
import { EdgeStyle, EdgeStyleRegistry, registerEntityRelationEdgeStyle } from '@maxgraph/core';
EdgeStyleRegistry.add('entityRelationEdgeStyle', EdgeStyle.EntityRelation, {
allowIntermediateHandles: false,
isOrthogonal: true,
});
// or simply:
registerEntityRelationEdgeStyle();For more details, see #1040.
ImageMixin has been converted to a new ImageBundlePlugin (id 'image-bundle'). Unlike a mixin, which shares a single state tree across all Graph instances and adds domain-specific methods to AbstractGraph, the plugin is per-instance and opt-in, keeping AbstractGraph lean. As a result, AbstractGraph.addImageBundle, removeImageBundle, getImageFromBundles and the imageBundles property no longer exist on AbstractGraph, Graph, or BaseGraph.
// Before
graph.addImageBundle(bundle);
const image = graph.getImageFromBundles(key);// After
import { ImageBundlePlugin } from '@maxgraph/core';
graph.getPlugin<ImageBundlePlugin>('image-bundle')!.addImageBundle(bundle);
const image = graph.getPlugin<ImageBundlePlugin>('image-bundle')?.getImageFromBundles(key);A new "image bundles" usage guide and a Storybook story cover registration, the BaseGraph opt-in, and the XML-serialization change.
This change is part of #762. For more details, see #1050.
There is now one register*EdgeStyle helper per built-in edge style (Elbow, EntityRelation, Loop, Manhattan, Orthogonal, Segment, SideToSide, TopToBottom), so BaseGraph users can register only what they need, without pulling in all of them and without having to know the associated EdgeStyleMetaData. registerDefaultEdgeStyles() now simply calls these eight helpers.
Before, you had to register each style explicitly and pass the right metadata by hand:
import { EdgeStyle, EdgeStyleRegistry } from '@maxgraph/core';
EdgeStyleRegistry.add('entityRelationEdgeStyle', EdgeStyle.EntityRelation, {
allowIntermediateHandles: false,
isOrthogonal: true,
});
EdgeStyleRegistry.add('manhattanEdgeStyle', EdgeStyle.ManhattanConnector, {
handlerKind: 'segment',
isOrthogonal: true,
});Now, call the dedicated helper for each style you need:
import {
registerEntityRelationEdgeStyle,
registerManhattanEdgeStyle,
} from '@maxgraph/core';
registerEntityRelationEdgeStyle();
registerManhattanEdgeStyle();For more details, see #1077.
Intermediate bend handle visibility is now resolved from edge style registry metadata (allowsIntermediateHandles) rather than from a hard-coded reference to EdgeStyle.EntityRelation. Previously only EntityRelation could influence handle visibility; now any edge style, including custom ones, controls it through configuration instead of being forced to write code to override maxGraph's defaults. Because EdgeHandler no longer imports EdgeStyle directly, EntityRelation is tree-shaken when your application does not register it, saving about 2 kB. See the Breaking changes section above for the migration details.
This closes #978. For more details, see #1040.
Overall the example bundle sizes stay roughly stable. The reduced examples (selected-features and without-defaults) shrink by 1 to 3 kB because EntityRelation and the image-bundle code path are now tree-shaken when they are not used. The fully featured examples (js-example, ts-example) grow by about 1 kB: they still register EntityRelation by default, so they do not benefit from the tree-shaking but do include the new handle-visibility code.
| Example | 0.23.0 | 0.24.0 |
|---|---|---|
| js-example | 467.65 kB | 468.70 kB |
| js-example-selected-features | 388.78 kB | 386.38 kB |
| js-example-without-defaults | 323.37 kB | 320.97 kB |
| ts-example | 433.53 kB | 434.58 kB |
| ts-example-selected-features | 367.64 kB | 366.37 kB |
| ts-example-without-defaults | 306.64 kB | 303.70 kB |
Full Changelog: v0.23.0...v0.24.0
Version 0.23.0 released on 2026-03-30.
⚡ This new version improves modularity, fixes important memory leaks, and adds utilities for better configuration management. ⚡
The tooltip-related methods have been moved from AbstractGraph to the TooltipHandler plugin.
This change improves modularity and tree-shaking, and clarifies responsibilities by removing tooltip logic from the core graph.
are no longer available on AbstractGraph.
Note
Moving these methods out of AbstractGraph means they are no longer included in the bundle unless TooltipHandler is used. This reduces the minified bundle size by about -0.7 kB.
Important
If you were overriding these methods in a subclass of AbstractGraph, you must now extend TooltipHandler instead.
This change mainly impacts advanced usages where tooltips are customized.
Note
See PR #640 for full details and migration examples.
The function xmlUtils.getViewXml has been moved to xmlViewUtils.getViewXml.
This change helps clarify responsibilities around XML view utilities and prepares for better modularization.
Note
The impact should be very limited, as this function was not widely used. It was mainly used internally in the Editor class.
If you were using this function, you only need to update the import path.
New helper functions are available to reset global configuration objects:
These functions restore default values, including internal instances like NoOpLogger and NoOpI18n.
They are especially useful for:
Note
See PR #979 for more details.
This release includes an important fix for memory leaks during graph destruction.
Some resources were not properly released, especially in plugins like PanningManager, but the issue was more general.
This update:
Important
If you use maxGraph in UI frameworks (React, Angular, etc.), make sure to call graph.destroy() when your component unmounts.
This fix makes teardown more reliable and prevents hidden memory issues in long-running applications.
Full Changelog: v0.22.0...v0.23.0
Version 0.22.0 released on 2025-12-11.
⚡ This new version makes default style properties globally configurable and includes bug fixes for a smoother developer experience. ⚡
Previously, changing default styles required local configuration per Graph instance using a Stylesheet.
It was also not possible to configure the rounding factor used when a vertex uses a non absolute arcSize, because there was no dedicated cell style property for that.
This release solves these limitations by making the built-in defaults globally configurable.
The StyleDefaultsConfig object has been extended to allow customization of default style values that were previously hardcoded as constants.
All direct references to DEFAULT_* constants in the codebase are now replaced with StyleDefaultsConfig property access. This means you can change these defaults at runtime without updating stylesheets on every Graph instance.
New configurable properties include:
You can now globally customize these defaults at runtime like this:
import { StyleDefaultsConfig } from '@maxgraph/core';
// Change default marker size
StyleDefaultsConfig.markerSize = 10;
// Change default image size for labels
StyleDefaultsConfig.imageSize = 32;
// Change default swimlane start size
StyleDefaultsConfig.startSize = 50;
// Change default rounding factor
StyleDefaultsConfig.roundingFactor = 0.4;Note
This change is especially useful if you want a consistent look across multiple graphs without duplicating stylesheet configuration, and if you need fine control over rounding/arc behavior that was not configurable before.
This release also includes bug fixes that improve overall stability and consistency of rendering and styling.
If you encounter any regressions or unexpected behavior, please open an issue with a minimal reproduction so we can address it quickly.
Full Changelog: v0.21.0...v0.22.0
Version 0.21.0 released on 2025-07-23.
⚡ This release improves Webpack and Node.js compatibility, removes legacy code, and slightly reduces bundle size. ⚡
Important
These changes might require updates in your codebase if you relied on internal behaviors or legacy APIs.
See the issues and pull requests referenced below for migration help.
The AbstractGraph.fit method and the minFitScale and maxFitScale properties have been moved to the FitPlugin.
This helps reduce the size of the base graph when the plugin is not used.
Tip
The fit method now accepts a single options parameter to reduce boilerplate. See #734.
The Dictionary class has been removed. You can now use the native JavaScript Map object, which is available in all environments supported by maxGraph.
This class was originally introduced in mxGraph to support old browsers lacking Map.
If your code used Dictionary, replace it with Map.
Note
This change slightly reduces the bundle size. See #857.
The way arcSize is computed for rounded shapes is now consistent across all shape types and matches the behavior of mxGraph.
Important
If you were relying on the previous behavior (especially for edges), you may need to multiply your arcSize value by 2 to keep the same rendering.
AbstractGraph.getPlugin() now explicitly returns undefined if the plugin is not found.
You must handle the undefined case in your code.
Improved return types for EditorToolbar methods:
You can now quickly search the documentation!
The new search bar uses a local lunr-search index for fast results.
Note
For more details, see #853
maxGraph can now be used with Webpack and Node.js ESM without extra config 🎉
Before this update, using maxGraph with Webpack required a workaround like this:
module.exports = {
module: {
rules: [
{
test: /\.m?js/,
resolve: {
fullySpecified: false,
},
},
],
},
};This was needed because import paths in maxGraph were missing the .js extension.
This also caused issues when importing maxGraph in ESM contexts with Node.js — no workaround was possible in that case.
These issues are now fixed ✅
Small but measurable size gains:
Full Changelog: v0.20.0...v0.21.0
Version 0.20.0 released on 2025-05-16.
⚡ This new version improves registry consistency, removes legacy enums, supports CommonJS, and enables tree-shaking optimizations. ⚡
Important
Several breaking changes are introduced to align internal APIs, improve tree-shaking, and reduce complexity. These changes mostly affect users customizing the graph.
All style-related registries now implement the same Registry interface. This ensures a consistent developer experience and makes it easier to use or extend them. 🛠️
Note
If you were using custom style registration, you'll likely need to update your code.
// Edge Marker
- MarkerShape.addMarker('oval', EdgeMarker.oval);
+ EdgeMarkerRegistry.add('oval', EdgeMarker.oval);
// Perimeter
- StyleRegistry.putValue('hexagonPerimeter', Perimeter.HexagonPerimeter);
+ PerimeterRegistry.add('hexagonPerimeter', Perimeter.HexagonPerimeter);
// Shape
- CellRenderer.registerShape('rhombus', RhombusShape);
+ ShapeRegistry.add('rhombus', RhombusShape);
// Stencil Shape
- StencilShapeRegistry.addStencil('my-stencil', new StencilShape(shape));
+ StencilShapeRegistry.add('my-stencil', new StencilShape(shape));In addition to method renaming, EdgeStyleRegistry.add() now takes an extra options object to categorize the style. This avoids hardcoded behavior and improves flexibility. 🧩
- StyleRegistry.putValue('elbowEdgeStyle', EdgeStyle.ElbowConnector);
+ EdgeStyleRegistry.add('elbowEdgeStyle', EdgeStyle.ElbowConnector, { handlerKind: 'elbow', isOrthogonal: true });This change supports internal refactors (see Highlights) and better extension patterns.
For most users, no impact is expected. Retrieval methods are typically used in custom extensions only.
// Edge Marker
- MarkerShape.markers['oval'];
+ EdgeMarkerRegistry.get('oval');
// Edge Style
- StyleRegistry.getValue('elbowEdgeStyle');
+ EdgeStyleRegistry.get('elbowEdgeStyle');
// Perimeter
- StyleRegistry.getValue('hexagonPerimeter');
+ PerimeterRegistry.get('hexagonPerimeter');
// Shape
- CellRenderer.defaultShapes['rhombus'];
+ ShapeRegistry.get('rhombus');
// Stencil Shape
- StencilShapeRegistry.getStencil('my-stencil')
+ StencilShapeRegistry.get('my-stencil')Note
EdgeMarkerRegistry still exposes its specific createMarker method unchanged. 🎯
All remaining enums have been removed. They caused unnecessary complexity and weren’t actually used to list values. 🧹
Use the corresponding string-based types instead:
| Removed Enum | Use this instead |
|---|---|
| constants.ALIGN | AlignValue, VAlignValue |
| constants.DIALECT | DialectValue |
| constants.ARROW | ArrowValue |
| constants.DIRECTION | DirectionValue |
| constants.EDGESTYLE | EdgeStyleValue |
| constants.ELBOW | ElbowValue |
| constants.PERIMETER | PerimeterValue |
| constants.SHAPE | ShapeValue |
| constants.TEXT_DIRECTION | TextDirectionValue |
| constants.RENDERING_HINT | No replacement |
Other specific changes:
constants.NODETYPE → replaced by value object constants.NODE_TYPE
constants.FONT → replaced by constants.FONT_STYLE_FLAG
constants.CURSOR → values moved to:
Also, constants.DIRECTION_MASK is now read-only. 🔒
maxGraph now ships with dual ESM and CommonJS builds. 🎉
Historically, only ESM was supported, as maxGraph was mainly used in browser-based applications with bundlers. But some new use cases made CJS support necessary:
Testing (e.g. with Jest): CJS is default in many test setups. Previously, you had to:
Now, maxGraph works in Jest without forcing ESM migration. ✅
Now it just works. 😎
Tip
Two new examples were added to show CommonJS usage:
Tree-shaking is now much more effective thanks to multiple internal refactors. 🧼
EdgeStyle implementations are no longer hardcoded throughout the codebase. Instead, the code only relies on what is dynamically registered with configuration (see Breaking changes).
This allows bundlers to remove unused styles - big win on size! 📦
Even with no changes in your app, enum removal already saves 3–5 kB. If your app avoids most EdgeStyles, savings can go up to 17 kB. 📉
| Example | v0.19.0 | enums removal | EdgeStyles tree-shaking | v0.20.0 |
|---|---|---|---|---|
| js-example | 475.30 kB | 469.80 kB | 470.56 kB | 467.59 kB |
| js-example-selected-features | 415.10 kB | 410.18 kB | 393.27 kB | 390.40 kB |
| js-example-without-default | 347.33 kB | 342.69 kB | 325.79 kB | 325.44 kB |
| ts-example | 438.64 kB | 434.80 kB | 435.46 kB | 435.23 kB |
| ts-example-selected-features | 380.70 kB | 377.11 kB | 369.30 kB | 369.09 kB |
| ts-example-without-default | 329.90 kB | 326.43 kB | 309.40 kB | 309.18 kB |
Warning
The 3 kB drop in js-example* is from button simplification in the examples, not related to maxGraph itself (see #822).
All share common Graph config and use EdgeStyle.OrthConnector. ⚙️
| Example | 0.19.0 | 0.20.0 |
|---|---|---|
| farm | 406.09 kB (2 chunks) | 404.25 kB (5 chunks) |
| lit (vite) | 402.19 kB | 389.92 kB |
| parcel | 506.70 kB | 500.98 kB |
| rollup | 380.44 kB | 369.02 kB |
| rsbuild | 361.94 kB | 347.19 kB |
| vite | 383.50 kB | 371.86 kB |
⚡ This new version improves tree-shaking for EdgeStyle and Perimeter, updates the documentation, and fixes bugs. ⚡
Warning
These changes only impact advanced use cases where edge styles or perimeters are customized directly.
EdgeStyle is now a namespace
It used to be a class with static properties. You could technically mutate it to add or override values — but that’s no longer possible.
If you were doing this, you now need to define your own EdgeStyle implementation and register it explicitly.
Perimeter is now a namespace
Previously a plain object, Perimeter could be mutated too. Not anymore.
Like with EdgeStyle, create your own perimeter implementation and register it if needed.
Until now, all edge styles and perimeters were bundled into your app even if you only used a few of them. Why? Because EdgeStyle and Perimeter were objects that referenced everything, which prevented bundlers from optimizing properly.
Here’s what changed:
Note
Bundlers like Rollup already did a great job here. But now all bundlers should behave nicely 🎉
Depending on what edge styles and perimeters your app uses, and the bundler you're using, bundle size can shrink by 1 to 5 kB.
Here’s a concrete example of what Rollup was doing with the old object-based Perimeter (with minification disabled):
const RectanglePerimeter = ...
const EllipsePerimeter = ...
const Perimeter = {
RectanglePerimeter,
EllipsePerimeter
};Only the perimeters actually used are bundled in.
Note
JS examples use Webpack, TS examples use Vite (Rollup)
⚠️ The TS and JS examples don't cover the same use cases
📦 In JS examples: the size = full app
📦 In TS examples: the size = maxGraph chunk only
| Example | v0.18.0 | After #785 | After #791 |
|---|---|---|---|
| js-example | 476.10 kB | 475.92 kB | 475.30 kB |
| js-example-selected-features | 423.45 kB | 415.59 kB | 415.10 kB |
| js-example-without-default | 347.86 kB | 347.83 kB | 347.33 kB |
| ts-example | 439.30 kB | 439.15 kB | 438.64 kB |
| ts-example-selected-features | 381.15 kB | 381.14 kB | 380.70 kB |
| ts-example-without-default | 330.38 kB | 330.38 kB | 329.90 kB |
Analysis:
| Example | 0.18.0 | 0.19.0 |
|---|---|---|
| farm | 407.8 kB (in 5 chunks) | 406.1 kB (in 2 chunks) |
| lit (vite) | 402.7 kB | 402.2 kB |
| parcel | 506.5 kB | 506.7 kB |
| rollup | 381.0 kB | 380.4 kB |
| rsbuild | 358.0 kB | 361.9 kB |
| vite | 384.0 kB | 383.5 kB |
Full Changelog: v0.18.0...v0.19.0
⚡ This new version introduces BaseGraph for better control over loaded features, adds new utilities to register default style elements, and significantly reduces bundle size! ⚡
Historically, the Graph class has been the main entry point in maxGraph, just like it was in mxGraph.
It automatically loads default plugins and style elements, making it convenient for prototyping but less ideal for production use - it increases the bundle size by including features you might not even use.
With v0.18.0, you now have a better option:
This is a big step toward full tree-shaking support!
More improvements are coming soon. Stay tuned! 📻
Note
See issue #665 for the full roadmap on tree-shaking improvements.
BaseGraph also simplifies constructor usage:
Instead of many parameters (and sometimes lots of null), you now pass a single configuration object.
Example - Basic setup:
const graph = new BaseGraph({
container: document.getElementById('graphContainer')!,
});Example - Full configuration:
const graph = new BaseGraph({
container: document.getElementById('graphContainer')!,
model: new MyGraphDataModel(),
stylesheet: new MyStylesheet(),
plugins: [Plugin1, Plugin2],
cellRenderer: new MyCellRenderer(),
view: (graph: AbstractGraph) => new MyGraphView(graph),
selectionModel: (graph: AbstractGraph) => new MyGraphSelectionModel(graph),
});Compared to Graph, it's much cleaner - no need to extend classes just to customize internals!
When using the traditional Graph class, customization often requires class extension and overriding internal methods (createXXX) which makes the code heavier and less readable.
Example - Basic setup:
const graph = new Graph(document.getElementById('graphContainer')!);Example - Full customization:
class MyCustomGraph extends Graph {
override createCellRenderer(): CellRenderer {
return new MyCellRenderer();
}
override createGraphView(): GraphView {
return new MyGraphView(this);
}
override createSelectionModel(): GraphSelectionModel {
return new MyGraphSelectionModel(this);
}
}
const graph = new MyCustomGraph(
document.getElementById('graphContainer')!,
new MyGraphDataModel(),
new MyStylesheet(),
[Plugin1, Plugin2],
);
// If you want to override only some elements and not others, you might end up passing `undefined` explicitly:
// In case of the GraphDataModel and Stylesheet are managed by overriding `createGraphDataModel` and `createStylesheet` respectively
const graph = new MyCustomGraph(
document.getElementById('graphContainer')!,
undefined,
undefined,
[Plugin1, Plugin2],
);Warning
This approach leads to less readable code and harder maintenance, especially when you don't want to override everything!
Want to manually register default styles? New helper functions are available:
registerDefaultEdgeMarkers();
registerDefaultEdgeStyles();
registerDefaultPerimeters();
registerDefaultShapes();Use them to selectively register only what your app actually needs!
If you need all built-in elements for a category, these helpers make it super easy.
Note
"Edge Marker" factories (for arrow shapes and such) are now public too. Flexibility unlocked! 🔓
Using BaseGraph with only the styles and plugins you need can drastically shrink your app's bundle size.
Tree-shaking now works better and smarter!
In our examples, switching to BaseGraph with a minimal setup gave measurable improvements, even with default bundler configs!
The "without-defaults" examples showed a decrease 105 kB!
Tip
JS examples use Webpack, TS examples use Vite (Vite/Rollup does better tree-shaking!)
| Example | 0.17.0 | before BaseGraph (main branch, commit 94a1609) | 0.18.0 |
|---|---|---|---|
| js-example | 475.7 kB | 475.8 kB | 476.1 kB |
| js-example-selected-features | - | 476.1 kB | 423.5 kB |
| js-example-without-default | 452.1 kB | 454.2 kB | 347.8 kB |
| ts-example | 439.1 kB | 439.0 kB | 439.3 kB |
| ts-example-selected-features | - | 439.1 kB | 381.2 kB |
| ts-example-without-default | 435.1 kB | 434.9 kB | 330.4 kB |
📖 See documentation for full example details.
Integration projects also switched to BaseGraph, showing similar gains:
| Example | Previously with Graph | Now with BaseGraph |
|---|---|---|
| farm | 454.2 kB (in 2 chunks) | 407.8 kB (in 5 chunks) |
| lit (vite) | 462.4 kB | 402.7 kB |
| parcel | 529.3 kB | 506.5 kB |
| rollup | 439.2 kB | 381.0 kB |
| rsbuild | 416.9 kB | 358.0 kB |
| vite | 443.1 kB | 384.0 kB |
Fun fact:
Removing the optional CellEditorHandler plugin in vite drops another ~12.5 kB!
Full Changelog: v0.17.0...v0.18.0
⚡ This new version improves graph fitting, makes i18n fully configurable, and reduces bundle size significantly. ⚡
Important
These changes may impact existing usages. Please review them carefully and check the related pull requests for migration guidance.
To prevent potential security issues, StylesheetCodec.allowEval is now false by default.
Note
See #736 for details.
The built-in Translations class is no longer used by default. If you want to keep using it, you must now explicitly enable it:
GlobalConfig.i18n = new TranslationsAsI18n();Note
See #737
Several utils have been reorganized for better clarity and maintainability:
Note
See #740
Some functions that were mistakenly exposed as public have been removed:
Utils.copyTextToClipboard is no longer available.
See #738
cellArrayUtils.filterCells was removed - just use the native Array.filter() instead!
See #752
You can now center and fit your graph into the container with the new FitPlugin.
The method is inspired by the former example provided in the JSDoc of Graph.fit() but improved to:
The storybook and TypeScript example have been updated to showcase how it works in various contexts.
PR_733_story_fit_center.mp4Note
See #733
Until now, the Translations class was always used internally. Now you can:
This makes maxGraph more flexible and lighter by default.
Note
See #737
Thanks to the new i18n configuration, tree-shaking now works better.
Depending on your setup, you could reduce the size of your app by 5-10kB - and probably more with tuned bundler configs!
Tip
Examples use default bundler configs and still show measurable gains.
| Example | 0.16.0 | 0.17.0 |
|---|---|---|
| js-example | 484.1 kB | 475.71 kB |
| js-example-without-defaults | 462.4 kB | 452.13 kB |
| ts-example | 444.4 kB | 439.15 kB |
| ts-example-without-defaults | 440.4 kB | 435.12 kB |
📖 See documentation for what each example includes.
All integration projects reuse a shared core similar to ts-example. Here's the app size:
| Example | 0.16.0 | 0.17.0 |
|---|---|---|
| farm | 461.0 kB | 453.9 kB |
| lit with vite | 471.7 kB | 466.5 kB |
| parcel[1] | 521.2 KB | 528.1 kB |
| rollup | 443.7 kB | 438.3 kB |
| rsbuild | 429.4 kB | 417.3 kB |
| vite | 447.5 kB | 442.2 kB |
[1] parcel is the sole bundler that increases the size of the application. Parcel was bump from 2.13.3 to 2.14.4 which may have introduced changes.
We've added a story to show the difference between:
Note
See #731
Full Changelog: v0.16.0...v0.17.0
⚡ This new version enhances internationalization (i18n), improves connector configurations, and prepares for future updates with tree shaking optimizations. ⚡
Note
Some changes are introduced to prepare for tree shaking improvements as part of issue #665.
Private utility functions:
The functions utils.isNullish and utils.isNotNullish are now marked as private. They were mistakenly made public and have always been intended for internal use.
Removed utility functions:
Several utility functions, originally designed for internal use to retrieve default values for CellStateStyle and CellStyle, have been removed:
You should now use the nullish coalescing operator (??) and Optional chaining (?.) instead.
Removed Client.isBrowserSupported:
The Client.isBrowserSupported method has been removed. It was not correctly validating all the prerequisites for determining whether the browser supports maxGraph. This method is now deprecated with no direct replacement.
Moved Client.VERSION to constants.VERSION:
The VERSION constant, previously stored in Client, is now stored in the constants module to ensure its immutability, as it represents the actual version of maxGraph.
Relocated Translations configuration:
Configuration elements for translations have been moved from Client to TranslationsConfig. The following properties have been migrated:
Connector Configuration changes:
Internal utility methods:
Several properties and utility methods previously exposed by EdgeStyle are now internal. For example:
You can now use custom shapes for overlays instead of just images. The CellRenderer provides extension points for configuring custom shapes and their associated DOM nodes.
Here is an example of custom Overlays taken from the Overlays story 👇🏿
PR_696_custom_overlays.webmNote
For more details, see #696.
This release enhances i18n support with the restoration of original mxGraph resource files (Chinese, English, and German) and adds French and Spanish resources. Additionally, a new configuration object, TranslationsConfig, is introduced to simplify and extend internationalization functionality in future releases.
This update is part of ongoing efforts to allow for custom i18n mechanisms in future versions (see issue #688).
The configuration for both the Manhattan and Orthogonal connectors is now centralized in dedicated global configuration objects: ManhattanConnectorConfig and OrthogonalConnectorConfig. This change helps clarify responsibilities and makes future tree shaking optimizations easier. Additionally, related reset functions are now available.
Full Changelog: v0.15.1...v0.16.0
⚡ This new version includes bug fixes and documentation improvements. ⚡
Full Changelog: v0.15.0...v0.15.1
| Back | FazBrowse Home | New Git URL |