npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

yrfe-temp

v0.0.1

Published

yrui-flow-editor是一个流程设计器,依赖于react,react-dom。

Readme

yrui-flow-editor

yrui-flow-editor是一个流程设计器,依赖于react,react-dom。

Index

Install

使用 npm 或 yarn 安装

$ npm install yrui-flow-editor --save
yarn add yrui-flow-editor 

浏览器引入

在浏览器中使用 script 和 link 标签直接引入文件,并使用全局变量window['yrui-flow-editor']

Usage

using Umd build

<!DOCTYPE html>
<html>
  <head>
    <title>Form Design</title>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1, shrink-to-fit=no"
    />
    <style type="text/css">
      #root,
      #root > div {
        display: flex;
        width: 100%;
        height: 100%;
        overflow: hidden;
      }
    </style>
    <link type="text/css" rel="styleSheet" href="path/yrui-flow-editor/dist/index.css" />
  </head>
  <body>
    <div id="root"></div>
    <script
      crossorigin
      src="https://unpkg.com/[email protected]/umd/react.production.min.js"
    ></script>
    <script
      crossorigin
      src="https://unpkg.com/[email protected]/umd/react-dom.production.min.js"
    ></script>
    <script src="path/yrui-flow-editor/dist/index.js"></script>
    <script>
      const nodesData = [
        {
          size: "80*72",
          shape: "flow-rhombus",
          color: "#13C2C2",
          label: "分叉节点fsd",
          dataType: "rhombus"
        },
        {
          size: "80*48",
          shape: "flow-capsule",
          color: "#722ED1",
          label: "模型节点sdf",
          dataType: "capsule"
        }
      ];
      const nodesAttr = {
        rhombus: [
          {
            type: "textfield",
            label: "单行文本框",
            name: "textfield",
            isRequired: "true",
            errorTip: "请输入"
          }
        ],
        capsule: [
          {
            type: "textfield",
            label: "单行文本框",
            name: "textfield",
            isRequired: "true",
            errorTip: "只支持xyz",
            regex: "[xyz]",
            flags: "i"
          }
        ]
      };
      const edgesAttr = [
        {
          type: "textfield",
          label: "单行文本框",
          name: "textfield",
          isRequired: "true",
          errorTip: "请输入"
        }
      ];
      const aa = new window["yrui-flow-editor"]({
        nodesData: nodesData,
        nodesAttr: nodesAttr,
        edgesAttr: edgesAttr,
        onSave: function(values) {
          console.log(values);
        }
      });
      const domContainer = document.getElementById("root");
      ReactDOM.render(aa.render(), domContainer);
    </script>
  </body>
</html>

using ES6 modules


import "yrui-flow-editor/dist/index.css";
import FlowPage from "yrui-flow-editor";

class App extends Component {
  state = {
    data: {
      nodes: [
        {
          checkbox: ["0"],
          color: "#FA8C16",
          dataType: "circle",
          datepicker: "2019-01-05",
          dropdown: "0",
          id: "63016fd9",
          index: 0,
          label: "起止节点1",
          textfield: "textfieldtextfield",
          radio: "0",
          shape: "flow-circle",
          size: "72*72",
          textareafield: "只需向大V",
          type: "node",
          x: 191.34375,
          y: 158
        },
        {
          color: "#7d69ff",
          dataType: "circle2",
          id: "3fdf6380",
          index: 1,
          label: "起止节点2",
          shape: "flow-circle",
          size: "72*72",
          type: "node",
          x: 547.34375,
          y: 133
        }
      ],
      edges: [
        {
          checkbox: ["1"],
          datepicker: "2019-01-20",
          dropdown: "1",
          id: "2d528056",
          index: 2,
          label: "箭头1",
          textfield: "textfieldtextfield",
          radio: "0",
          shape: "flow-polyline-round",
          source: "63016fd9",
          sourceAnchor: 1,
          target: "3fdf6380",
          targetAnchor: 3,
          textareafield: "水电费水电费"
        }
      ]
    },
    nodesData: [
      {
        size: "72*72",
        shape: "flow-circle",
        color: "#FA8C16",
        label: "起止节点1",
        dataType: "circle"
      },
      {
        size: "72*72",
        shape: "flow-circle",
        color: "#7d69ff",
        label: "起止节点2",
        dataType: "circle2"
      },
      {
        size: "80*48",
        shape: "flow-rect",
        color: "#1890FF",
        label: "常规节点1",
        dataType: "rect"
      },
      {
        size: "80*72",
        shape: "flow-rhombus",
        color: "#13C2C2",
        label: "分叉节点1",
        dataType: "rhombus"
      },
      {
        size: "80*48",
        shape: "flow-capsule",
        color: "#722ED1",
        label: "模型节点1",
        dataType: "capsule"
      }
    ],
    nodesAttr: {
      circle: [
        {
          type: "textfield",
          label: "单行文本框",
          name: "textfield",
          isRequired: "true",
          errorTip: "请输入",
          onChange: (e, form) => {
            const data = this.flowPage.getCanvasData();
            form.setFieldsValue({
              textareafield: e.target.value + data.nodes[0].label
            });
          }
        },
        {
          type: "textareafield",
          label: "多行文本框",
          name: "textareafield",
          isRequired: "true",
          errorTip: "请输入"
        },
        {
          type: "datepicker",
          label: "日期",
          name: "datepicker",
          isRequired: "true"
        },
        {
          type: "checkbox",
          label: "多选框",
          name: "checkbox",
          isRequired: "true",
          options: [
            { label: "Apple", value: "0" },
            { label: "Pear", value: "1" },
            { label: "bananan", value: "2" }
          ]
        },
        {
          type: "radio",
          label: "单选框",
          name: "radio",
          isRequired: "true",
          defaultValue: "0",
          options: [
            { label: "选项一", value: "0" },
            { label: "选项二", value: "1" },
            { label: "选项三", value: "2" }
          ]
        },
        {
          type: "dropdown",
          label: "下拉框",
          name: "dropdown",
          isRequired: "true",
          options: [
            { label: "选项一", value: "0" },
            { label: "选项二", value: "1" },
            { label: "选项三", value: "2" }
          ]
        }
      ],
      rect: [
        {
          type: "textfield",
          label: "单行文本框",
          name: "textfield",
          isRequired: "true"
        }
      ],
      rhombus: [
        {
          type: "textfield",
          label: "单行文本框",
          name: "textfield",
          isRequired: "true",
          errorTip: "请输入"
        }
      ],
      capsule: [
        {
          type: "textfield",
          label: "单行文本框",
          name: "textfield",
          isRequired: "true",
          errorTip: "只支持xyz",
          regex: "[xyz]",
          flags:"i"
        }
      ]
    },
    edgesAttr: [
      {
        type: "textfield",
        label: "单行文本框",
        name: "textfield",
        isRequired: "true",
        errorTip: "请输入"
      },
      {
        type: "textareafield",
        label: "多行文本框",
        name: "textareafield",
        isRequired: "true",
        errorTip: "请输入"
      },
      {
        type: "datepicker",
        label: "日期",
        name: "datepicker",
        isRequired: "true"
      },
      {
        type: "checkbox",
        label: "多选框",
        name: "checkbox",
        isRequired: "true",
        options: [
          { label: "Apple", value: "0" },
          { label: "Pear", value: "1" },
          { label: "bananan", value: "2" }
        ]
      },
      {
        type: "radio",
        label: "单选框",
        name: "radio",
        isRequired: "true",
        defaultValue: "0",
        options: [
          { label: "选项一", value: "0" },
          { label: "选项二", value: "1" },
          { label: "选项三", value: "2" }
        ]
      },
      {
        type: "dropdown",
        label: "下拉框",
        name: "dropdown",
        isRequired: "true",
        options: [
          { label: "选项一", value: "0" },
          { label: "选项二", value: "1" },
          { label: "选项三", value: "2" }
        ]
      }
    ]
  };
  save = values => {
    console.log(values);
  };
  getFlowPage = comp => {
    this.flowPage = comp;
  };
  render() {
    const { data, nodesAttr, nodesData, edgesAttr } = this.state;
    return (
      <FlowPage
        data={data}
        nodesAttr={nodesAttr}
        nodesData={nodesData}
        edgesAttr={edgesAttr}
        onSave={this.save}
        ref={this.getFlowPage}
      />
    );
  }
}
ReactDOM.render(<App />,mountNode);

API

FlowPage

一个流程设计器。

| 参数 | 说明 | 类型 | 默认值 | |----------|-------------|-------------|-------| | data | 设计器数据。当是函数时,需返回指定格式的数据 | object | function | { nodes: [], edges: [] }| | nodesData | node数据 | array | object | - | | nodesAttr | 当前node点属性项 | object | - | | edgesAttr | 连接线属性项 | array | - | | groupsAttr | 群组属性项 | array | - | | otherPanelTitle | 底部面板title | string | - | | onSave | 点击工具栏保存按钮事件 | (data)=>void | - | | onAfterNodeAdd | 节点添加事件,节点增加后触发 | ({dataMap,model})=>void | - | | onAfterNodeRemove | 节点删除事件,节点删除后触发 | ({dataMap,model})=>void | - | | onAfterNodeUpdate | 节点数据更新事件,在节点属性或位置被更新后触发 | ({dataMap,originModel,model})=>void | - | | onAfterEdgeAdd | 连接线添加事件,连接线增加后触发 | ({dataMap,model,source,target})=>void | - | | onAfterEdgeRemove | 连接线删除事件,连接线删除后触发 | ({dataMap,model,source,target})=>void | - | | onAfterEdgeUpdate | 连接线数据更新事件,在连接线属性或位置被更新后触发 | ({dataMap,originModel,model,source,target})=>void | - | | onDragBeforeShowAnchor | 从锚点拖出边后,显示锚点前,可用作控制,要去连的锚点是否显示。 |(ev)=>void | - | | onBeforeAddEdge | 鼠标悬浮锚点后,开启添加边模式前,可用作控制,哪些锚点可添加边 | (data)=>void | - | | getCanvasDetail | 自定义画布属性 |function | - | | getMultiDetail | 自定义多选属性 |function | - | | showTip |是否展示Node提示信息,为true时,默认展示节点label信息 |boolean | false | | TipDescFun |自定义Node提示信息 |(model)=>ReactNode | - | |formItemLayout | label标签布局和输入控件布局样式 | object | {labelCol: {sm: { span: 9 }},wrapperCol: {sm: { span: 15 }}} |

labelCol和wrapperCol详见Form.Item的labelCol和wrapperCol

onDragBeforeShowAnchor

const onDragBeforeShowAnchor=(ev)=>{
  // ev.sourceAnchor  源锚点
  // ev.source        源子项
  // ev.targetAnchor  目标锚点
  // ev.target        目标子项
  ev.cancel = true; // 若设置为 true 则取消显示要去连接的锚点
}

onBeforeAddEdge

const onBeforeAddEdge=()=>{
  // ev.anchor  锚点
  // ev.item    子项
  ev.cancel = true; // 若设置该锚点不会触发连接模式
}

nodesData

可自定义需展示的可拖拽node。有两种数据类型,当数据类型是object时,则代表有分组。

const nodesData={
      "起始节点": [
        {
          size: "72*72",
          shape: "flow-circle",
          color: "#FA8C16",
          label: "起止节点1",
          dataType: "circle"
        },
        {
          size: "72*72",
          shape: "flow-circle",
          color: "#7d69ff",
          label: "起止节点2fff",
          dataType: "circle2"
        }
      ],
      "其他节点": [
        {
          size: "80*48",
          shape: "flow-rect",
          color: "#1890FF",
          label: "常规节点sdfsdf",
          dataType: "rect"
        },
        {
          size: "80*72",
          shape: "flow-rhombus",
          color: "#13C2C2",
          label: "分叉节点1sfsd",
          dataType: "rhombus"
        }
      ]
    }

| 参数 | 说明 | 类型 | 默认值 | |----------|-------------|-------------|-------| | dataType | node点类型 | string | - | | size | 大小,格式为50*50 | string | -| | shape | 形状,内部自定义四种形状:flow-circle,flow-rect,flow-rhombus,flow-capsule | string | - | | color | 颜色 | string | - | | label | 标签名 | string | - | | src | 概览图像路径 | string | - |

nodesAttr

可拖拽node的自定义属性。

| 参数 | 说明 | 类型 | 默认值 | |----------|-------------|-------------|-------| | type | 类型,默认有textfield,textareafield,datepicker,checkbox,radio,dropdown | string | - | | label | 标题 | string | -| | name | 字段名 | string | - | | defaultValue | 默认值 | string|array | - | | disabled | 是否禁用状态,默认为 false | boolean | false | | isRequired | 是否必填 | string | - | | errorTip | 错误提示信息 | string | - | | regex | 正则表达式的文本 | string | - | | flags | 正则表达式标志 | string | - | | render | 自定义表单组件 | (item,form,model)=> ReactNode | - | | placement | 放置位置,右边"right",底部"bottom" | string | "bottom" |

edgesAttr

连线的自定义属性。

| 参数 | 说明 | 类型 | 默认值 | |----------|-------------|-------------|-------| | type | 类型,默认有textfield,textareafield,datepicker,checkbox,radio,dropdown | string | - | | label | 标题 | string | -| | name | 字段名 | string | - | | defaultValue | 默认值 | string|array | - | | disabled | 是否禁用状态,默认为 false | boolean | false | | isRequired | 是否必填 | string | - | | errorTip | 错误提示信息 | string | - | | regex | 正则表达式的文本 | string | - | | flags | 正则表达式标志 | string | - | | render | 自定义表单组件 | (item,form,model)=> ReactNode | - |

type

node的type默认有textfield(文本框),textareafield(多行文本框),datepicker(日期选择框),checkbox(多选框),radio(单选框),dropdown(下拉框)这几种。

textfield

| 参数 | 说明 | 类型 | 默认值 | |----------|-------------|-------------|-------| | onChange | 输入框内容变化时的回调 | function(e:Event,form) | -|

textareafield

| 参数 | 说明 | 类型 | 默认值 | |----------|-------------|-------------|-------| | onChange | 输入框内容变化时的回调 | function(e:Event,form) | -|

datepicker

mode仅在type为datepicker时可传。

| 参数 | 说明 | 类型 | 默认值 | |----------|-------------|-------------|-------| | mode | 类型,默认有month,year,week,range | string | - | | onChange | 时间发生变化的回调 | function(dateStrings: string | [string, string],form) | -|

checkbox

当type为checkbox时,可传options。选中的数据格式为['Apple']

| 参数 | 说明 | 类型 | 默认值 | |----------|-------------|-------------|-------| | options | 格式为[{ label: 'Apple', value: 'Apple',disabled: false }] 或函数,当是函数时,需返回指定格式 | array |function | - | | fieldNames | 自定义 options 中 label value disabled 字段 | object | -| | onChange | 变化时回调函数 | function(value,form) | -|

radio

当type为radio时,可传options。

| 参数 | 说明 | 类型 | 默认值 | |----------|-------------|-------------|-------| | options | 格式为[{ label: 'Apple', value: 'Apple',disabled: false }] 或函数,当是函数时,需返回指定格式 | array |function | - | | fieldNames | 自定义 options 中 label value disabled 字段 | object | -| | onChange | 选项变化时的回调函数 | function(e:Event,form) | -|

dropdown

当type为radio时,可传options。

| 参数 | 说明 | 类型 | 默认值 | |----------|-------------|-------------|-------| | options | 格式为[{ label: 'Apple', value: 'Apple'}] 或函数,当是函数时,需返回指定格式 | array |function | - | | fieldNames | 自定义 options 中 label value 字段 | object | { label: "label", value: "value" }| | mode | 为多选或标签 | 'multiple' | 'tags' | - | | onChange | 选中option时调用此函数。当mode为multiple或tags时,value为[string, string]类型,否则,value为string类型 | function(value:string | [string, string],form) | -|

Compatibility

该插件支持chrome,firefox最新两个版本。

License

Licensed under the MIT License