Go to file
Thomas Bouffard 711db920da
fix: export EditorToolbarCodec and StylesheetCodec (#218)
These 2 classes were previously not exported as they generated runtime
errors when applications integrating `maxGraph` used the Vite dev
server.

Bump vite from 4.3.1 to 4.3.9. This is probably what fixed the problem.
No need to export Stylesheet and EditorToolbar as default as they are
already exported.
2023-07-07 06:54:31 +02:00
.github docs: improve the release process (#177) 2023-05-22 16:13:33 +02:00
packages fix: export EditorToolbarCodec and StylesheetCodec (#218) 2023-07-07 06:54:31 +02:00
scripts doc: update copyright and license in source file headers (#100) 2022-08-30 17:36:33 +02:00
.eslintignore chore: configure eslint (#123) 2022-10-23 09:41:41 +02:00
.eslintrc.json chore: eslint - switch no-this-alias error to warn 2022-11-20 13:59:21 +03:00
.gitignore chore: improve the configuration to build the npm package (#87) 2022-07-05 08:08:25 +02:00
.nvmrc chore: improve the configuration to build the npm package (#87) 2022-07-05 08:08:25 +02:00
.prettierrc conversions to typescript and type fixes 2021-06-13 16:13:43 +10:00
CHANGELOG.md refactor!: remove unused CellMap type (#210) 2023-07-03 11:13:10 +02:00
CODE_OF_CONDUCT.md create code of conduct 2021-05-11 06:59:18 +01:00
LICENSE chore: restore Apache 2.0 license + add a NOTICE file (#95) 2022-08-11 14:05:56 +02:00
NOTICE chore: restore Apache 2.0 license + add a NOTICE file (#95) 2022-08-11 14:05:56 +02:00
README.md docs(dev): explain NodeJS requirements (#202) 2023-06-07 08:43:26 +02:00
babel.config.js - Restructure into a monorepo. 2021-04-15 13:12:12 +09:00
lerna.json - Restructure into a monorepo. 2021-04-15 13:12:12 +09:00
package.json chore: fix TS2365 build errors (#186) 2023-04-04 09:17:39 +02:00
tsconfig.json chore(tsconfig): move baseUrl to base tsconfig 2022-10-23 11:56:07 +03:00
webpack.config.js Refactored everything... 2021-09-07 18:07:27 +09:00

README.md

maxGraph

npm version build status

maxGraph is a TypeScript library which can display and allow interaction with vector diagrams. At a high level, it provides:

  • Nodes, also known as vertices which are typically represented by shapes like rectangles.
  • Edges which can be lines and arrows which normally point between one node and another.

It provides many of the diagramming features which would be expected by a piece of presentation software like Microsoft® PowerPoint™ or LibreOffice® Impress such as being able to resize, move or rotate nodes, but has a stronger focus on automatic layout algorithms and applications of Graph Theory. It is suited towards software which requires finer-grained customization of functionality than off-the-shelf packages.

The maxGraph library uses no third-party software, it requires no plugins and can be integrated in virtually any framework (it's vanilla JS).

maxGraph is the successor of mxGraph which is now end of life. At first, it provides the same features as mxGraph and adds

  • TypeScript support
  • maintained npm package
  • modern modular, tree shakable, version of mxGraph to reduce the whole package size

New features will follow.

Browser support

Chrome, Edge, Firefox, Safari, Chromium based browsers (Brave, Opera, ....) for mobile and desktop.

Project status

maxGraph is under active development and is in alpha. Please try it in your application and submit an issue if you think that something is not working.

You can also test the project by running the Storybook examples or build the npm package locally to get the latest changes.

Install

Install the latest version of maxGraph from the npm registry.

npm

npm install @maxgraph/core

yarn

yarn add @maxgraph/core

pnpm

pnpm add @maxgraph/core

Getting Started

Assuming your page defines an element with the id graph-container, the following will display a rectangle connected to an orange circle.

import {type CellStyle, Graph, InternalEvent} from '@maxgraph/core';

const container = <HTMLElement>document.getElementById('graph-container');
// Disables the built-in context menu
InternalEvent.disableContextMenu(container);

const graph = new Graph(container);
graph.setPanning(true); // Use mouse right button for panning
// Gets the default parent for inserting new cells. This
// is normally the first child of the root (ie. layer 0).
const parent = graph.getDefaultParent();

// Adds cells to the model in a single step
graph.batchUpdate(() => {
  const vertex01 = graph.insertVertex(parent, null, 'a regular rectangle', 10, 10, 100, 100);
  const vertex02 = graph.insertVertex(parent, null, 'a regular ellipse', 350, 90, 50, 50, <CellStyle>{shape: 'ellipse', fillColor: 'orange'});
  graph.insertEdge(parent, null, 'a regular edge', vertex01, vertex02);
});

You will see something like in the following maxGraph panning demo:

maxGraph panning demo

For more details, have a look at the storybook stories.

TypeScript support

maxGraph is written in TypeScript and provides type definitions so maxGraph can be easily integrated into TypeScript projects.

maxGraph requires TypeScript 3.8 or greater.

Support

For usage question, please open a new discussion on GitHub. You can also use GitHub discussions for other topics like maxGraph development or to get the latest news.

Until we provide a complete documentation, you can check the mxGraph resources

Migrating from mxGraph

maxGraph APIs are not fully compatible with mxGraph APIs. The concepts are the same, so experienced mxGraph users should be able to switch from mxGraph to maxGraph without issues.

For a complete guide, see the dedicated migration page.

History

On 2020-11-09, the development on mxGraph stopped and mxGraph became effectively end of life.

On 2020-11-12, a fork of the mxGraph was created with a call to Contributors.

12 Nov 2020.

If you are interested in becoming a maintainer of mxGraph please comment on issue #1

Initial objectives:

  • The first priority is to maintain a working version of mxGraph and its npm package
  • The ambitious stretch goal is to refactor the codebase to create a modern modular, tree shakable, version of mxGraph to reduce the whole package size.

-- Colin Claverie

The project was then renamed on 2021-06-02 into maxGraph due to licensing issue.

Starting from the mxGraph 4.2.2 release, we

  • moved code to ES9
  • removed Internet Explorer specific code
  • migrated to TypeScript, based on the work initiated in typed-mxgraph
  • migrated the examples to Storybook

Development

Clean former mxGraph tags

Ensure you don't have the former mxGraph tags locally (see #92 fore more details):

git fetch --all --tags --prune

Setting up local development environment

NodeJS requirements:

  • use the version declared in .nvmrc. Other versions may work but are not supported.
  • this is the version used by GitHub Actions
  • nvm users can run nvm use. If the Node version is not installed, nvm will state how to install the required version.

In the project root directory, execute

$ npm install

To watch the core package, execute

$ npm run dev

and select @mxgraph/core.

To run the html(vanilla-js) version of Storybook, execute

$ npm run dev

and select @mxgraph/html.

Since both commands are in watch mode, so it's recommended to open two terminals and run them separately. When a file is saved from the core package, the html storybook will be automatically updated.

Building the npm package for usage in external project

Run

  • from the project root: npm install
  • then, from the packages/core folder: npm pack

The packages/core folder or the generated packages/core/maxgraph-core-***.tgz file are now ready for use in an external project, using npm link or npm install.

Examples of use can be found in the maxgraph-integration-examples repository.

Release

See the dedicated release page.