@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.
Files changed (3) hide show
  1. package/README.en.md +171 -0
  2. package/README.md +171 -0
  3. 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.12",
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.12"
31
+ "@knotx/jsx": "0.4.14"
32
32
  },
33
33
  "dependencies": {
34
34
  "rxjs": "^7.8.1",
35
- "@knotx/core": "0.4.12",
36
- "@knotx/decorators": "0.4.12",
37
- "@knotx/render": "0.4.12"
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.12",
41
- "@knotx/eslint-config": "0.4.12",
42
- "@knotx/jsx": "0.4.12",
43
- "@knotx/typescript-config": "0.4.12"
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",