生态产品多个设计器现已发布候选版本

查看生态总览
跳转到内容

查看器 ​

<xh-flow-viewer> 在业务页面里显示流程与运行状态,类在 @xihan-flow/runtime 里导出为 XhFlowViewer,调用 defineFlowViewer() 注册。用法见查看器。

元素 xh-flow-viewer ​

属性 ​

属性attribute类型说明
schema—FlowDocument | undefined要显示的流程定义;从无到有时重新自动适配。
extensions—readonly FlowRuntimeExtension[] | undefined扩展:节点类型、节点渲染等都从这里来,内置扩展自动排在最前。赋值时当场合并查重,冲突抛 DesignerExtensionError、属性保持原值;同一个扩展对象换了引用当作卸下再装上,宿主要保持引用稳定。
statuses—Readonly<Record<string, FlowNodeStatus | null>> | undefined节点 id → 运行状态;null 表示没有状态。
highlighted—readonly string[] | undefined高亮的节点 id。
router—FlowEdgeRouter | undefined连线路由器,缺省为直角路由。
translations—Partial<FlowViewerTranslations> | undefined元素自己的文案,压在全局配置之上。

方法 ​

方法说明
export(format: FlowImageFormat, options?: FlowImageExportOptions): Promise<Blob>把画面上的流程图导出成图片:svg 是能单独打开的 SVG 文件,png 按倍率栅格化;颜色与字体取画面此刻的样式,节点、图标、连线与标签都画进去。选项见 FlowImageExportOptions。流程图是空的、format 不是这两种时以 RangeError 拒绝。
getViewport(): Viewport当前视口。
setViewport(viewport: Viewport): void设置视口;此后尺寸变化不再自动适配。
zoomToFit(): void缩放并平移到让整张图落在视口中央,小图不放大到 100% 以上;此后尺寸变化时重新适配,直到设置视口或在画布上按下指针。
zoomIn(): void以视口中心放大一档。
zoomOut(): void以视口中心缩小一档。
zoomToActual(): void缩放到 100% 并把整张图居中。
scrollToNode(id: string): void把节点居中显示。
revealNode(id: string): void节点没整个落在视口内时把它居中,已在视口内则不动。
setNodeStatus(id: string, status: FlowNodeStatus | null): void设置单个节点的运行状态,传 null 清除。
setNodeStatuses(statuses: Readonly<Record<string, FlowNodeStatus | null>>): void批量设置节点运行状态,未列出的节点保持不变。
highlightNodes(ids: readonly string[]): void高亮一组节点,其余节点取消高亮。
clearHighlights(): void清除全部高亮。

事件 ​

事件都是冒泡的 CustomEvent。

事件detail说明
node-click{ id: string }点了节点;拖动平移之后松手不算点击。
edge-click{ id: string }点了连线或连线标签。
blank-clickRecord<string, never>点了画布空白处。
node-contextmenu{ id: string, x: number, y: number }在节点上打开右键菜单;可以取消,取消后浏览器的右键菜单也不出现。
edge-contextmenu{ id: string, x: number, y: number }在连线上打开右键菜单;可以取消。
blank-contextmenu{ x: number, y: number }在画布空白处打开右键菜单;可以取消。
viewport-change{ viewport: Viewport }视口变了:缩放、平移、适配与 setViewport 都会派发。

注册 ​

defineFlowViewer() ​

ts
declare function defineFlowViewer(): void

注册 <xh-flow-viewer> 与内置节点渲染用到的 <xh-icon>;重复调用不报错。

节点渲染 ​

FlowNodeRenderer ​

ts
type FlowNodeRenderer = (container: HTMLElement, context: FlowNodeRenderContext) => void

自定义节点内容:每次绘制都会调用,把内容写进 container;不给时用 defaultNodeRenderer。

FlowNodeRenderContext ​

自定义节点内容时拿到的上下文。

属性类型说明
nodeFlowNode要画的节点。
nodeTypeFlowNodeType | undefined节点类型;类型没有登记时为 undefined。
labelstring要显示的文字:节点的 label,没有时取节点类型的名称,再没有取节点 id。
statusFlowNodeStatus | undefined节点此刻的运行状态;没有状态时为 undefined。
highlightedboolean节点是否高亮。

defaultNodeRenderer() ​

ts
declare function defaultNodeRenderer(container: HTMLElement, { nodeType, label }: FlowNodeRenderContext): void

内置的节点内容:节点类型给了 icon 时图标(data-part="node-icon")在前、文字(data-part="node-label")在后,没给时节点里只有文字。没有登记渲染的节点类型用它,自定义的渲染也可以调它画出同样的内容。重画时复用已有的图标与文字节点。图标是 <xh-icon>,defineFlowViewer() 与 defineFlowDesigner() 会注册它。

FlowRuntimeExtension ​

流程运行时层的扩展:在 core 层之上加节点内容的渲染,查看器与设计器都读它。

继承 FlowCoreExtension。

属性类型说明
nodeRenderers?Readonly<Record<string, FlowNodeRenderer>>节点内容的渲染,键是节点类型;没给渲染的类型用 defaultNodeRenderer 画图标与文字。

createFlowRuntimeModel() ​

ts
declare function createFlowRuntimeModel(extensions?: readonly FlowRuntimeExtension[]): FlowRuntimeModel

合出运行时用的流程模型;同一节点类型在两个扩展里都给了渲染时抛 DesignerExtensionError。同一个数组只合一次。

导出图片 ​

FlowImageFormat ​

ts
type FlowImageFormat = 'svg' | 'png'

导出图片的格式。

FlowImageExportOptions ​

导出图片的选项。

属性类型说明
scale?number倍率,只对 PNG 有效:PNG 的像素宽高是图的宽高乘它,缺省 1;超过浏览器画布的上限时自动降倍率,图按比例缩小。
background?string底色,任何 CSS 颜色;缺省取画布此刻的底色(画布透明时往外找到第一层不透明的),写 'transparent' 不铺。
padding?number流程图四周的留白,缺省 24。

exportFlowImage() ​

ts
declare function exportFlowImage(source: FlowImageSource, format: FlowImageFormat, options?: FlowImageExportOptions): Promise<Blob>

导出成图片:SVG 是 flowImageSvg 的文本,PNG 在它上面按倍率栅格化(底色已画进 SVG),超过画布上限时按比例缩小。PNG 里的文字用本机的系统字体画,不加载网页字体。

flowImageSvg() ​

ts
declare function flowImageSvg(source: FlowImageSource, options?: FlowImageExportOptions): SVGSVGElement

把画面上的流程图画成一份能单独打开的 SVG:连线层经 standaloneSvg 克隆(只供命中的透明粗线不要,克隆根上的表现属性挪到放连线的组上),节点按计算样式画成框、图标与文字,连线标签画成底框与文字;四周留白,按选项铺底色。颜色写成 sRGB 的 #rrggbb,透明度写进 fill-opacity / stroke-opacity;画布的字体写在根上,文字只写与它不同的那几项。坐标是世界坐标,1 个单位即 1 像素。流程图是空的时抛 RangeError。

FlowImageSource ​

画出图片要读的活元素:场景、画布上的连线层、节点与连线标签的元素,以及视口的缩放。

属性类型说明
sceneFlowScene
canvasElement画布元素:缺省底色从它开始找。
edgesSVGSVGElement连线所在的 SVG 层,里面的坐标是世界坐标。
zoomnumber视口的缩放:元素在屏幕上的尺寸除以它即世界尺寸。
方法说明
node(id: string): HTMLElement | null节点 id → 画面上的节点元素。
label(id: string): HTMLElement | null连线 id → 画面上的连线标签元素。

连线路由 ​

createOrthogonalRouter() ​

ts
declare function createOrthogonalRouter(options?: OrthogonalRouterOptions): FlowEdgeRouter

创建直角路由器;找不到绕开全部节点的通路时,返回不看障碍物的直角折线。

OrthogonalRouterOptions ​

属性类型说明
margin?number与节点保持的距离,也是从端口引出的长度,缺省 16。
bendCost?number每个拐弯折合的长度,缺省 margin 的两倍。

文案 ​

FlowViewerTranslations ​

查看器的文案。

属性类型说明
labelstring视口区域的可访问名。

语言包 ​

locale/de-DE ​

名称种类说明
flowDeDE常量流程的德语文案:查看器、设计器与 designer-shell 零件。

locale/en-US ​

名称种类说明
flowEnUS常量流程的英文文案:查看器、设计器与 designer-shell 零件。

locale/es-ES ​

名称种类说明
flowEsES常量流程的西班牙语文案:查看器、设计器与 designer-shell 零件。

locale/fr-FR ​

名称种类说明
flowFrFR常量流程的法语文案:查看器、设计器与 designer-shell 零件。

locale/ja-JP ​

名称种类说明
flowJaJP常量流程的日语文案:查看器、设计器与 designer-shell 零件。

locale/ko-KR ​

名称种类说明
flowKoKR常量流程的韩语文案:查看器、设计器与 designer-shell 零件。

locale/pt-BR ​

名称种类说明
flowPtBR常量流程的巴西葡萄牙语文案:查看器、设计器与 designer-shell 零件。

locale/ru-RU ​

名称种类说明
flowRuRU常量流程的俄语文案:查看器、设计器与 designer-shell 零件。

locale/types ​

名称种类说明
FlowLocale接口流程一种语言的全部文案。

locale/zh-CN ​

名称种类说明
flowZhCN常量流程的简体中文文案:查看器、设计器与 designer-shell 零件。

locale/zh-TW ​

名称种类说明
flowZhTW常量流程的繁体中文文案:查看器、设计器与 designer-shell 零件。

全部导出 ​

designer-locale ​

名称种类说明
DEFAULT_FLOW_DESIGNER_TRANSLATIONS常量设计器不配语言包时的缺省文案。
FLOW_DESIGNER_EN_US常量设计器的英文文案,也是不配语言包时的缺省。
FlowBuiltinPropertyKey类型设计器内建的属性路径,formatJsonPath 的写法。
FlowDesignerLocale接口一种语言的设计器文案:问题说明与内建属性名写成表,其余与 FlowDesignerTranslations 相同。
flowDesignerTranslations函数把一种语言的设计器文案换成设计器读的形状:问题按码查表,表里没有的(扩展的问题码)显示问题码。
FlowIssueMessage类型一条问题说明:text 取参数的文字,type 取参数里那个节点类型的显示名。

extensions ​

名称种类说明
createFlowRuntimeModel函数合出运行时用的流程模型;同一节点类型在两个扩展里都给了渲染时抛 DesignerExtensionError。
FlowRuntimeExtension接口流程运行时层的扩展:在 core 层之上加节点内容的渲染,查看器与设计器都读它。
FlowRuntimeModel接口运行时用的流程模型:core 的模型加上各节点类型的渲染。

flow-viewer ​

名称种类说明
defineFlowViewer函数注册 <xh-flow-viewer> 与内置节点渲染用到的 <xh-icon>;重复调用不报错。
FLOW_VIEWER_TAG常量查看器的标签名。
FlowNodeRenderContext接口自定义节点内容时拿到的上下文。
FlowNodeRenderer类型自定义节点内容:每次绘制都会调用,把内容写进 container;不给时用 defaultNodeRenderer。
FlowViewerEventMap接口查看器派发的事件;x / y 为浏览器视口坐标。
XhFlowViewer类流程查看器 <xh-flow-viewer>:只读显示流程、运行状态与高亮。

image-export ​

名称种类说明
exportFlowImage函数导出成图片:SVG 是 flowImageSvg 的文本,PNG 在它上面按倍率栅格化(底色已画进 SVG),超过画布上限时按比例缩小。
FlowImageExportOptions接口导出图片的选项。
FlowImageFormat类型导出图片的格式。
FlowImageSource接口画出图片要读的活元素:场景、画布上的连线层、节点与连线标签的元素,以及视口的缩放。
flowImageSvg函数把画面上的流程图画成一份能单独打开的 SVG:连线层经 standaloneSvg 克隆(只供命中的透明粗线不要,克隆根上的表现属性挪到放连线的组上),节点按计算样式画成框、图标与文字,连线标签画成底框与文字;四周留白,按选项铺底色。

node-renderer ​

名称种类说明
defaultNodeRenderer函数内置的节点内容:节点类型给了 icon 时图标(data-part="node-icon")在前、文字(data-part="node-label")在后,没给时节点里只有文字。

router ​

名称种类说明
createOrthogonalRouter函数创建直角路由器;找不到绕开全部节点的通路时,返回不看障碍物的直角折线。
OrthogonalRouterOptions接口

scene ​

名称种类说明
buildScene函数算出整张图的场景。
FlowNodeStatus类型节点运行状态;内置样式覆盖 running / completed / faulted / waiting / canceled / compensated,其余取值由使用方自行着色。
FlowScene接口
FlowSceneEdge接口
FlowSceneNode接口
FlowSceneOptions接口

translations ​

名称种类说明
DEFAULT_FLOW_VIEWER_TRANSLATIONS常量查看器的英文文案,也是不配语言包时的缺省。
FlowDesignerTranslations接口设计器的文案。
FlowHistoryTranslations接口撤销历史里一步的说明:单个节点写「种类 名称」(见 node,没有名称时名称是 id),几个节点写个数。
FlowIssueNames接口拼问题说明时用到的名称。
FlowOutlineTranslations接口流程结构面板的几处文案。
FlowStartVariableColumn类型启动变量表的列:变量名、必填、缺省值、说明。
FlowTourStepKey类型新手引导里流程自己的几步:连线、自动布局与导出图片。
FlowTourStepTranslations接口新手引导一步的文案。
FlowViewerTranslations接口查看器的文案。

Released under The MIT License