vue-port-graph

Graph a layout of nodes with ports
564 13
Install
npm install vue-port-graph
Latest Version:0.0.16
Vue:2
License:MIT
Last Updated:Jun 21, 2017
Links: GitHub  ·  npm
Maintainer: lukepur

vue-port-graph

Graph a layout of nodes with ports. Supports drag and drop event handling for ports.

Port graph example

Installation

npm install vue-port-graph

Usage

<template>
  <PortGraph :graphConfig="config" :onPortConnection="handleConnection" />
</template>

<script>
import PortGraph from 'vue-port-graph';

export default {
  name: 'app',
  data () {
    return {
      config: {
        nodes: [
          { id: 'input_node', ports: [ { id: 'input_one', type: 'output' }, { id: 'input_two', type: 'output' }, { id: 'input_three', type: 'output' } ] },
          { id: 'subprocess_one', ports: [ { id: 'arg_one', type: 'input' }, { id: 'arg_two', type: 'input' }, { id: 'output', type: 'output' } ] },
          { id: 'subprocess_two', ports: [ { id: 'arg_one', type: 'input' }, { id: 'arg_two', type: 'input' }, { id: 'output', type: 'output' } ] }
        ],
        edges: [
          { source: { nodeId: 'input_node', portId: 'input_one' }, target: { nodeId: 'subprocess_one', portId: 'arg_one' } },
          { source: { nodeId: 'input_node', portId: 'input_two' }, target: { nodeId: 'subprocess_two', portId: 'arg_one' } },
          { source: { nodeId: 'subprocess_two', portId: 'output' }, target: { nodeId: 'subprocess_one', portId: 'arg_two' } }
        ],
        options: {
          nodeWidth: 200,
          nodeHeight: 40,
          portRadius: 10,
          graphPadding: 20
        }
      }
    };
  },
  methods: {
    handleConnection (connection) {
      // update config as necessary if connection is valid
    }
  },
  components: {
    PortGraph
  }
}
</script>

Props

graphConfig (object)

The configuration of the graph to render. Has the following shape:

{
  nodes: [
    { id: 'node_id', canCreateOutputPorts: true, ports: [ { id: 'input_one', type: 'input' }, { id: 'output_one', type: 'output' } ] }
    { id: 'node_2_id', canCreateInputPorts: true, ports: [ { id: 'input_one', type: 'input' }, { id: 'output_one', type: 'output' } ] }
  ],
  edges: [
    { source: { nodeId: 'input_id', portId: 'output_one' }, target: { nodeId: 'node_2_id', portId: 'input_one' } },
  ],
  options: {
    nodeWidth: 200,
    nodeHeight: 40,
    portRadius: 10,
    graphPadding: 20
  }
}

onConnection (function)

The callback invoked when one node or port is dropped onto another node or port.

The callback receives a connection object as the only parameter. connection has the following shape:

{
  from: { type: 'node|port', data: { nodeId, portId, type ('source' | 'target'), point { x, y } } },
  to: { type: 'node|port', data: { nodeId, portId, type ('source' | 'target'), point { x, y } } }
}

This callback is only invoked if the dragged node or port can legally be connected to the dropped node or port (they are of opposite types, different nodes, and aren't excluded by the filterDropCandidates filter).

filterDropCandidates (function)

An optional filter to apply to the droppable ports when a port drag is started.

This callback receives 2 args: portBeingDragged and candidatePort and should return true to include the candidatePort as a legal drop target.

Example

Demo: https://lukepur.github.io/vue-port-graph

Related Packages

@21cnfe/onekit-mp-cli

小程序框架开发工具

1,063
duplicate-dependencies-webpack-plugin

webpack plugin to find duplicated dependencies from your bundle

332,104 6
@debut/plugin-report

Report generation for strategy backtesting in debut

4,011 18
@amilochau/core-vue3

Core plugin for vue.js (v3) projects

3,802 0
@lg2/nuxt3-plugin-link-resolver

link resolver plugin fro nuxt3

3,544 0

Version History

Version Released Vue License
0.0.16 ^2.3.4 MIT
0.0.15 ^2.3.4 MIT
0.0.14 ^2.3.4 MIT
0.0.13 ^2.3.4 MIT
0.0.12 ^2.3.4 MIT