@knotx/plugins-base-render 0.4.12 → 0.4.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +171 -0
- package/README.md +171 -0
- package/package.json +9 -9
package/README.en.md
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# @knotx/plugins-base-render
|
|
2
|
+
|
|
3
|
+
Base rendering plugin that provides basic rendering capabilities for nodes and edges.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @knotx/plugins-base-render
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
`@knotx/plugins-base-render` is the fundamental rendering plugin for the KnotX framework, responsible for providing basic rendering capabilities for nodes and edges. It serves as the foundation for other rendering-related plugins and provides core rendering capabilities for graph visualization.
|
|
14
|
+
|
|
15
|
+
## Implementation Principles
|
|
16
|
+
|
|
17
|
+
The plugin implements a node and edge rendering system through the decorator pattern:
|
|
18
|
+
|
|
19
|
+
1. **Node Rendering**: Registers node types via `@nodeType` decorator and provides default node renderers
|
|
20
|
+
2. **Edge Rendering**: Registers edge types via `@edgeType` decorator and provides default edge renderers
|
|
21
|
+
3. **Layered Rendering**: Implements layered rendering through `@layer` decorator to optimize rendering performance
|
|
22
|
+
4. **Reactive Updates**: Uses RxJS for reactive data updates and re-rendering
|
|
23
|
+
|
|
24
|
+
## Dependencies
|
|
25
|
+
|
|
26
|
+
This plugin depends on the following packages:
|
|
27
|
+
|
|
28
|
+
- `@knotx/core` - Core functionality
|
|
29
|
+
- `@knotx/decorators` - Decorator support
|
|
30
|
+
- `@knotx/render` - Rendering utilities
|
|
31
|
+
- `@knotx/jsx` - JSX support (peer dependency)
|
|
32
|
+
- `rxjs` - Reactive programming
|
|
33
|
+
|
|
34
|
+
## API Usage
|
|
35
|
+
|
|
36
|
+
### Basic Usage
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
import { BaseRender } from '@knotx/plugins-base-render'
|
|
40
|
+
|
|
41
|
+
// Create base render plugin instance
|
|
42
|
+
const baseRender = new BaseRender()
|
|
43
|
+
|
|
44
|
+
// Register plugin in engine
|
|
45
|
+
engine.use(baseRender)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Register Node Types
|
|
49
|
+
|
|
50
|
+
```tsx
|
|
51
|
+
import { nodeType } from '@knotx/decorators'
|
|
52
|
+
|
|
53
|
+
class MyPlugin extends BasePlugin {
|
|
54
|
+
@nodeType('custom-node')
|
|
55
|
+
customNodeRenderer = (props) => {
|
|
56
|
+
return <div>{props.node.data.label}</div>
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Register Edge Types
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
import { edgeType } from '@knotx/decorators'
|
|
65
|
+
import { BezierEdge } from '@knotx/render'
|
|
66
|
+
|
|
67
|
+
class MyPlugin extends BasePlugin {
|
|
68
|
+
@edgeType('bezier')
|
|
69
|
+
bezierEdgeRenderer = BezierEdge
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Register Node Level Getter
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
// Register level getter for node layered rendering
|
|
77
|
+
const unregister = baseRender.registerNodeLevelGetter((node) => {
|
|
78
|
+
return node.data.level || 0
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
// Unregister
|
|
82
|
+
unregister()
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Force Re-render
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
// Force re-render all nodes and edges
|
|
89
|
+
baseRender.forceRerender({ node: true, edge: true })
|
|
90
|
+
|
|
91
|
+
// Only re-render nodes
|
|
92
|
+
baseRender.forceRerender({ node: true, edge: false })
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Custom Render Properties
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
// Override node render properties
|
|
99
|
+
baseRender.overrideNodeRenderProps(props => ({
|
|
100
|
+
...props,
|
|
101
|
+
customProp: 'custom value'
|
|
102
|
+
}))
|
|
103
|
+
|
|
104
|
+
// Override edge render properties
|
|
105
|
+
baseRender.overrideEdgeRenderProps(props => ({
|
|
106
|
+
...props,
|
|
107
|
+
customProp: 'custom value'
|
|
108
|
+
}))
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Interface Definitions
|
|
112
|
+
|
|
113
|
+
### BaseRenderNodeWrapperProps
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
interface BaseRenderNodeWrapperProps {
|
|
117
|
+
id: string
|
|
118
|
+
renderVersion?: number
|
|
119
|
+
useNode: (id: string) => Node | undefined
|
|
120
|
+
getNodeRenderer: (type?: string) => NodeRenderType
|
|
121
|
+
getNodePosition: (node: Node) => NodePosition
|
|
122
|
+
getNodeMeasured: (node: Node) => NodeMeasured | undefined
|
|
123
|
+
getNodeLevel: (node: Node) => number | undefined
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### BaseRenderEdgeWrapperProps
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
interface BaseRenderEdgeWrapperProps {
|
|
131
|
+
id: string
|
|
132
|
+
renderVersion?: number
|
|
133
|
+
useEdge: (id: string) => Edge | undefined
|
|
134
|
+
useNode: (id: string) => Node | undefined
|
|
135
|
+
getEdgeRenderer: (type?: string) => EdgeRender
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Plugin Data Interface
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
declare module '@knotx/core' {
|
|
143
|
+
interface PluginData {
|
|
144
|
+
baseRender: {
|
|
145
|
+
registerNodeLevelGetter: (getter: (node: Node) => number | undefined) => (() => void)
|
|
146
|
+
overrideNodeRenderProps: (fn: (props: BaseRenderNodesWrapperProps) => Partial<BaseRenderNodesWrapperProps>) => void
|
|
147
|
+
overrideEdgeRenderProps: (fn: (props: BaseRenderEdgesWrapperProps) => Partial<BaseRenderEdgesWrapperProps>) => void
|
|
148
|
+
forceRerender: (params: { node?: boolean, edge?: boolean }) => void
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## File Directory Structure
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
packages/plugins-base-render/
|
|
158
|
+
├── src/
|
|
159
|
+
│ ├── base-render.tsx # Base render plugin main file
|
|
160
|
+
│ └── index.ts # Export file
|
|
161
|
+
├── dist/ # Build output directory
|
|
162
|
+
├── CHANGELOG.md # Change log
|
|
163
|
+
├── package.json # Package configuration
|
|
164
|
+
├── build.config.ts # Build configuration
|
|
165
|
+
├── eslint.config.mjs # ESLint configuration
|
|
166
|
+
└── tsconfig.json # TypeScript configuration
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## License
|
|
170
|
+
|
|
171
|
+
MIT
|
package/README.md
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# @knotx/plugins-base-render
|
|
2
|
+
|
|
3
|
+
基础渲染插件,提供节点和边的基本渲染功能。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @knotx/plugins-base-render
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 基本概述
|
|
12
|
+
|
|
13
|
+
`@knotx/plugins-base-render` 是 KnotX 框架的基础渲染插件,负责提供节点和边的基本渲染功能。它是其他渲染相关插件的基础,为图形可视化提供核心的渲染能力。
|
|
14
|
+
|
|
15
|
+
## 实现原理
|
|
16
|
+
|
|
17
|
+
该插件通过装饰器模式实现了节点和边的渲染系统:
|
|
18
|
+
|
|
19
|
+
1. **节点渲染**:通过 `@nodeType` 装饰器注册节点类型,并提供默认的节点渲染器
|
|
20
|
+
2. **边渲染**:通过 `@edgeType` 装饰器注册边类型,并提供默认的边渲染器
|
|
21
|
+
3. **分层渲染**:通过 `@layer` 装饰器实现分层渲染,优化渲染性能
|
|
22
|
+
4. **响应式更新**:使用 RxJS 实现响应式的数据更新和重渲染
|
|
23
|
+
|
|
24
|
+
## 依赖插件
|
|
25
|
+
|
|
26
|
+
该插件依赖以下包:
|
|
27
|
+
|
|
28
|
+
- `@knotx/core` - 核心功能
|
|
29
|
+
- `@knotx/decorators` - 装饰器支持
|
|
30
|
+
- `@knotx/render` - 渲染工具
|
|
31
|
+
- `@knotx/jsx` - JSX 支持(peer dependency)
|
|
32
|
+
- `rxjs` - 响应式编程
|
|
33
|
+
|
|
34
|
+
## API 使用
|
|
35
|
+
|
|
36
|
+
### 基本使用
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
import { BaseRender } from '@knotx/plugins-base-render'
|
|
40
|
+
|
|
41
|
+
// 创建基础渲染插件实例
|
|
42
|
+
const baseRender = new BaseRender()
|
|
43
|
+
|
|
44
|
+
// 在引擎中注册插件
|
|
45
|
+
engine.use(baseRender)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 注册节点类型
|
|
49
|
+
|
|
50
|
+
```tsx
|
|
51
|
+
import { nodeType } from '@knotx/decorators'
|
|
52
|
+
|
|
53
|
+
class MyPlugin extends BasePlugin {
|
|
54
|
+
@nodeType('custom-node')
|
|
55
|
+
customNodeRenderer = (props) => {
|
|
56
|
+
return <div>{props.node.data.label}</div>
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 注册边类型
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
import { edgeType } from '@knotx/decorators'
|
|
65
|
+
import { BezierEdge } from '@knotx/render'
|
|
66
|
+
|
|
67
|
+
class MyPlugin extends BasePlugin {
|
|
68
|
+
@edgeType('bezier')
|
|
69
|
+
bezierEdgeRenderer = BezierEdge
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 注册节点层级获取器
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
// 为节点分层渲染注册层级获取器
|
|
77
|
+
const unregister = baseRender.registerNodeLevelGetter((node) => {
|
|
78
|
+
return node.data.level || 0
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
// 取消注册
|
|
82
|
+
unregister()
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 强制重渲染
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
// 强制重渲染所有节点和边
|
|
89
|
+
baseRender.forceRerender({ node: true, edge: true })
|
|
90
|
+
|
|
91
|
+
// 只重渲染节点
|
|
92
|
+
baseRender.forceRerender({ node: true, edge: false })
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 自定义渲染属性
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
// 覆盖节点渲染属性
|
|
99
|
+
baseRender.overrideNodeRenderProps(props => ({
|
|
100
|
+
...props,
|
|
101
|
+
customProp: 'custom value'
|
|
102
|
+
}))
|
|
103
|
+
|
|
104
|
+
// 覆盖边渲染属性
|
|
105
|
+
baseRender.overrideEdgeRenderProps(props => ({
|
|
106
|
+
...props,
|
|
107
|
+
customProp: 'custom value'
|
|
108
|
+
}))
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## 接口定义
|
|
112
|
+
|
|
113
|
+
### BaseRenderNodeWrapperProps
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
interface BaseRenderNodeWrapperProps {
|
|
117
|
+
id: string
|
|
118
|
+
renderVersion?: number
|
|
119
|
+
useNode: (id: string) => Node | undefined
|
|
120
|
+
getNodeRenderer: (type?: string) => NodeRenderType
|
|
121
|
+
getNodePosition: (node: Node) => NodePosition
|
|
122
|
+
getNodeMeasured: (node: Node) => NodeMeasured | undefined
|
|
123
|
+
getNodeLevel: (node: Node) => number | undefined
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### BaseRenderEdgeWrapperProps
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
interface BaseRenderEdgeWrapperProps {
|
|
131
|
+
id: string
|
|
132
|
+
renderVersion?: number
|
|
133
|
+
useEdge: (id: string) => Edge | undefined
|
|
134
|
+
useNode: (id: string) => Node | undefined
|
|
135
|
+
getEdgeRenderer: (type?: string) => EdgeRender
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 插件数据接口
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
declare module '@knotx/core' {
|
|
143
|
+
interface PluginData {
|
|
144
|
+
baseRender: {
|
|
145
|
+
registerNodeLevelGetter: (getter: (node: Node) => number | undefined) => (() => void)
|
|
146
|
+
overrideNodeRenderProps: (fn: (props: BaseRenderNodesWrapperProps) => Partial<BaseRenderNodesWrapperProps>) => void
|
|
147
|
+
overrideEdgeRenderProps: (fn: (props: BaseRenderEdgesWrapperProps) => Partial<BaseRenderEdgesWrapperProps>) => void
|
|
148
|
+
forceRerender: (params: { node?: boolean, edge?: boolean }) => void
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## 文件目录结构
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
packages/plugins-base-render/
|
|
158
|
+
├── src/
|
|
159
|
+
│ ├── base-render.tsx # 基础渲染插件主文件
|
|
160
|
+
│ └── index.ts # 导出文件
|
|
161
|
+
├── dist/ # 编译输出目录
|
|
162
|
+
├── CHANGELOG.md # 变更日志
|
|
163
|
+
├── package.json # 包配置
|
|
164
|
+
├── build.config.ts # 构建配置
|
|
165
|
+
├── eslint.config.mjs # ESLint 配置
|
|
166
|
+
└── tsconfig.json # TypeScript 配置
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## 许可证
|
|
170
|
+
|
|
171
|
+
MIT
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knotx/plugins-base-render",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.14",
|
|
4
4
|
"description": "Base Render Plugin for Knotx",
|
|
5
5
|
"author": "boenfu",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,19 +28,19 @@
|
|
|
28
28
|
"dist"
|
|
29
29
|
],
|
|
30
30
|
"peerDependencies": {
|
|
31
|
-
"@knotx/jsx": "0.4.
|
|
31
|
+
"@knotx/jsx": "0.4.14"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"rxjs": "^7.8.1",
|
|
35
|
-
"@knotx/core": "0.4.
|
|
36
|
-
"@knotx/decorators": "0.4.
|
|
37
|
-
"@knotx/render": "0.4.
|
|
35
|
+
"@knotx/core": "0.4.14",
|
|
36
|
+
"@knotx/decorators": "0.4.14",
|
|
37
|
+
"@knotx/render": "0.4.14"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@knotx/build-config": "0.4.
|
|
41
|
-
"@knotx/eslint-config": "0.4.
|
|
42
|
-
"@knotx/jsx": "0.4.
|
|
43
|
-
"@knotx/typescript-config": "0.4.
|
|
40
|
+
"@knotx/build-config": "0.4.14",
|
|
41
|
+
"@knotx/eslint-config": "0.4.14",
|
|
42
|
+
"@knotx/jsx": "0.4.14",
|
|
43
|
+
"@knotx/typescript-config": "0.4.14"
|
|
44
44
|
},
|
|
45
45
|
"scripts": {
|
|
46
46
|
"build": "unbuild",
|