Coder Social home page Coder Social logo

microsoft / react-dag-editor Goto Github PK

View Code? Open in Web Editor NEW
158.0 12.0 8.0 91.8 MB

React component to create graphic user interface with: - draggable nodes with ports and edges on a directed graph editor. - extensibility to customize the widgets or behaviors. - accessbility and testability support

Home Page: https://microsoft.github.io/react-dag-editor/

License: MIT License

JavaScript 0.37% HTML 0.18% TypeScript 99.44% Shell 0.01%

react-dag-editor's Introduction

Work in progress

react-dag-editor

License npm version Downloads

Try it out!

Overview

React component to create graphic user interface with:

  • draggable nodes with ports and edges on a directed graph editor.
  • extensibility to customize the widgets or behaviors.
  • accessbility and testability support

About the name "react-dag-editor"

  • react: it is a react component created from scratch.
  • dag: directed acyclic graph editor. Our a11y solution assumes the graph is a DAG. If you intend to turn off the a11y features, it is fine to draw undirected or cyclic graph with this component.
  • editor: it supports readonly graphic data visualization. However the reason you choose this library is the highlight in the user interaction to create/edit a graph.

Demo

Online sample link: WIP

Local demo

Follow the steps below to run local demo on your machine(MacOS/Linux/Windows):

  1. Clone the repository
  2. Run "yarn" to install all dependencies.
  3. Run "yarn start" and select the "react-dag-editor" in prompt selection.
  4. It won't take long to load the sample page. If not, try to open localhost:5000 on your browser or submit an issue.
  5. Checkout ./packages/ReactDagEditor/stories/components/FeatureDemo.tsx for api usage(Detail API Doc WIP)

Features

Feature Description Demo Is in default feature set? Is in read only mode feature set?
GraphFeatures.nodeDraggable Node drag-and-drop to relocate (WIP) Yes Yes
GraphFeatures.nodeResizable Double clicking on a node to enable the anchors to resize it (WIP) Yes Yes
GraphFeatures.clickNodeToSelect Node click-to-select (WIP) Yes Yes
GraphFeatures.panCanvas Drag-n-drop on canvas to pan (WIP) Yes Yes
GraphFeatures.multipleSelect Ctrl click multi selection (WIP) Yes Yes
GraphFeatures.lassoSelect Lasso select (WIP) Yes Yes
GraphFeatures.delete Use delete key to delete a node (WIP) Yes No
GraphFeatures.addNewNodes Adding new nodes (WIP) Yes No
GraphFeatures.addNewEdges Adding new edges (WIP) Yes No
GraphFeatures.addNewPorts Adding new ports (WIP) Yes No
GraphFeatures.sidePanel, Built-in side panel (WIP) Yes Yes
GraphFeatures.autoFit Auto pan/zoom the whole canvas to fit the viewport on every move (WIP) No No
GraphFeatures.editNode Node inline editing mode (WIP) Yes No
GraphFeatures.autoAlign Auto aligning hint on node drag-n-drop (WIP) Yes No
GraphFeatures.undoStack Undo stack to support undo/redo (WIP) Yes No
GraphFeatures.ctrlKeyZoom Zooming by ctrl clicking + mousewheel (WIP) Yes Yes
GraphFeatures.limitBoundary Constraint the allowed drag-n-drop area (WIP) Yes Yes

compatibility

Touch screen/touch pad support

Deceeded rendering on old browsers

Extensibility & customization

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Trademarks

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.

react-dag-editor's People

Contributors

dependabot[bot] avatar guanghechen avatar intellild avatar jieqiu0129 avatar joouis avatar jyc-99 avatar kingwl avatar linningmii avatar microsoftopensource avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

react-dag-editor's Issues

Context propagation performance

Context propagation with a large graph consumes a lot of CPU time and may block the browser.
We need to find a way to optimized it

Replace generic "data" field with "properties"

Currently we have too many generic parameters, which result in the difficulty of maintaining and flexibility.
If we replace the generic field with an "token" that contains the type of the value and the engine don't have to be aware of the different types.

Pseudo code:

const myProperty = createProperty<string>("my-property");

const nextNode = node.setProperty(myProperty, "value");

const value = nextNode.getProperty(myProperty); // "value"

This method also resolves #36 that requires a "comment" field in "data".
The result would be like:

// the built-in comment property
const CommentProperty = new Property<string>("comment");

const onChange = e => {
  dispatch({
    type: "CommentChange",
    value: e.target.value
  })
}

// in reducer
switch (action.type) {
  case "CommentChange":
    node.setProperty(CommentProperty, action.value)
}

Lift state

  • Lift configs into state since both components and reducers requires them
  • Delete PropsAPI #37
  • Remove legacy register components since they are unsafe #51
  • Lift state and expose reducers and state #54

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.