iop-bpmn-react 0.0.0

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 (69) hide show
  1. package/README.en.md +294 -0
  2. package/README.md +294 -0
  3. package/dist/favicon.svg +1 -0
  4. package/dist/icons.svg +24 -0
  5. package/dist/index.css +2 -0
  6. package/dist/index.js +83511 -0
  7. package/dist/index.umd.cjs +2430 -0
  8. package/dist/types/components/BpmnModeler/ColorPickerPopup.d.ts +2 -0
  9. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/FlowablePropertiesProvider.d.ts +11 -0
  10. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/FlowablePropertiesProvider.d.ts.map +1 -0
  11. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/index.d.ts +7 -0
  12. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/index.d.ts.map +1 -0
  13. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/AssignmentProperties.d.ts +17 -0
  14. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/AssignmentProperties.d.ts.map +1 -0
  15. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/AsyncProperties.d.ts +17 -0
  16. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/AsyncProperties.d.ts.map +1 -0
  17. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/BusinessRuleTaskProperties.d.ts +17 -0
  18. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/BusinessRuleTaskProperties.d.ts.map +1 -0
  19. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/CallActivityProperties.d.ts +27 -0
  20. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/CallActivityProperties.d.ts.map +1 -0
  21. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/EventDefinitionProperties.d.ts +43 -0
  22. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/EventDefinitionProperties.d.ts.map +1 -0
  23. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/ExtensionProperties.d.ts +13 -0
  24. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/ExtensionProperties.d.ts.map +1 -0
  25. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/ExternalTaskProperties.d.ts +17 -0
  26. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/ExternalTaskProperties.d.ts.map +1 -0
  27. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/FieldProperties.d.ts +21 -0
  28. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/FieldProperties.d.ts.map +1 -0
  29. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/FormDataProperties.d.ts +15 -0
  30. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/FormDataProperties.d.ts.map +1 -0
  31. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/FormProperties.d.ts +17 -0
  32. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/FormProperties.d.ts.map +1 -0
  33. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/InitiatorProperties.d.ts +17 -0
  34. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/InitiatorProperties.d.ts.map +1 -0
  35. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/ListenerProperties.d.ts +84 -0
  36. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/ListenerProperties.d.ts.map +1 -0
  37. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/MultiInstanceProperties.d.ts +18 -0
  38. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/MultiInstanceProperties.d.ts.map +1 -0
  39. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/ProcessProperties.d.ts +17 -0
  40. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/ProcessProperties.d.ts.map +1 -0
  41. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/ScriptTaskProperties.d.ts +17 -0
  42. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/ScriptTaskProperties.d.ts.map +1 -0
  43. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/ServiceTaskProperties.d.ts +17 -0
  44. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/ServiceTaskProperties.d.ts.map +1 -0
  45. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/index.d.ts +17 -0
  46. package/dist/types/components/BpmnModeler/FlowablePropertiesProvider/properties/index.d.ts.map +1 -0
  47. package/dist/types/components/BpmnModeler/LintingModule.d.ts +21 -0
  48. package/dist/types/components/BpmnModeler/LintingModule.d.ts.map +1 -0
  49. package/dist/types/components/BpmnModeler/index.d.ts +7 -0
  50. package/dist/types/components/BpmnModeler/index.d.ts.map +1 -0
  51. package/dist/types/components/BpmnViewer/index.d.ts +7 -0
  52. package/dist/types/components/BpmnViewer/index.d.ts.map +1 -0
  53. package/dist/types/hooks/useBpmn.d.ts +26 -0
  54. package/dist/types/hooks/useBpmn.d.ts.map +1 -0
  55. package/dist/types/i18n/LanguageContext.d.ts +48 -0
  56. package/dist/types/i18n/LanguageContext.d.ts.map +1 -0
  57. package/dist/types/i18n/en.d.ts +7 -0
  58. package/dist/types/i18n/en.d.ts.map +1 -0
  59. package/dist/types/i18n/index.d.ts +9 -0
  60. package/dist/types/i18n/index.d.ts.map +1 -0
  61. package/dist/types/i18n/ja.d.ts +7 -0
  62. package/dist/types/i18n/ja.d.ts.map +1 -0
  63. package/dist/types/i18n/zh.d.ts +7 -0
  64. package/dist/types/i18n/zh.d.ts.map +1 -0
  65. package/dist/types/index.d.ts +9 -0
  66. package/dist/types/index.d.ts.map +1 -0
  67. package/dist/types/types/index.d.ts +48 -0
  68. package/dist/types/types/index.d.ts.map +1 -0
  69. package/package.json +54 -0
package/README.en.md ADDED
@@ -0,0 +1,294 @@
1
+ # IOP BPMN React Plugin
2
+
3
+ A React component library based on [bpmn.js](https://bpmn.io/toolkit/bpmn-js/) with complete Flowable extension property support.
4
+
5
+ ## Features
6
+
7
+ - 🎨 **Out of the box** - Provides BpmnViewer and BpmnModeler React components
8
+ - 📝 **Flowable Extensions** - Complete support for 26 Flowable/activiti extension types
9
+ - 🌐 **Internationalization** - Built-in Chinese translation support
10
+ - 🎯 **TypeScript** - Full type definitions
11
+ - 📦 **Multiple formats** - ES Module and UMD formats
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ npm install iop-bpmn-react
17
+ ```
18
+
19
+ ## Quick Start
20
+
21
+ ```tsx
22
+ import { BpmnViewer, BpmnModeler } from 'iop-bpmn-react'
23
+ import 'iop-bpmn-react/style.css'
24
+
25
+ // Read-only viewer
26
+ function Viewer() {
27
+ return <BpmnViewer bpmnXml={xml} />
28
+ }
29
+
30
+ // Editable modeler
31
+ function Modeler() {
32
+ return <BpmnModeler bpmnXml={xml} />
33
+ }
34
+ ```
35
+
36
+ ## Development Commands
37
+
38
+ | Task | Command |
39
+ |------|---------|
40
+ | Dev server | `npm run dev` |
41
+ | Build library | `npm run build` |
42
+ | Lint | `npm run lint` |
43
+ | Preview build | `npm run preview` |
44
+
45
+ ## Project Structure
46
+
47
+ ```
48
+ src/
49
+ ├── lib/ # Library source (build entry)
50
+ │ ├── index.ts # Unified exports + bpmn-js styles
51
+ │ ├── components/
52
+ │ │ ├── BpmnViewer/ # Read-only viewer component
53
+ │ │ └── BpmnModeler/ # Editable modeler component
54
+ │ │ ├── FlowablePropertiesProvider/ # Flowable properties panel
55
+ │ │ └── flowable-bpmn-moddle/ # Flowable moddle extension
56
+ │ ├── hooks/
57
+ │ │ └── useBpmn.ts # Common hook (bpmn-js lifecycle)
58
+ │ ├── i18n/
59
+ │ │ └── zh.ts # Chinese translations
60
+ │ ├── resources/
61
+ │ │ └── flowable.json # Flowable moddle descriptor
62
+ │ └── types/
63
+ │ └── index.ts # Type definitions
64
+ ├── App.tsx # Demo app (development)
65
+ ├── main.tsx # Demo entry
66
+ └── ...
67
+ ```
68
+
69
+ ## Flowable Extension Properties Support
70
+
71
+ This project provides complete support for Flowable/activiti BPMN extension properties through `FlowablePropertiesProvider` with visual editing in the properties panel.
72
+
73
+ ### Moddle Descriptor Types
74
+
75
+ A total of **26** Flowable extension types are defined:
76
+
77
+ | Type Name | Extends | Properties |
78
+ |-----------|---------|------------|
79
+ | `Process` | bpmn:Process | candidateStarterGroups, candidateStarterUsers |
80
+ | `Assignable` | bpmn:UserTask | assignee, candidateUsers, candidateGroups, dueDate, followUpDate, priority |
81
+ | `TaskFormSupported` | bpmn:UserTask | formKey, formFieldValidation |
82
+ | `StartFormSupported` | bpmn:StartEvent | formKey, formFieldValidation |
83
+ | `Initiator` | bpmn:StartEvent | initiator |
84
+ | `AsyncCapable` | bpmn:Activity, bpmn:Gateway, bpmn:Event | async, asyncBefore, asyncAfter, exclusive |
85
+ | `ServiceTaskLike` | bpmn:ServiceTask, bpmn:BusinessRuleTask, bpmn:SendTask | class, delegateExpression, expression, resultVariable |
86
+ | `ScriptTaskLike` | bpmn:ScriptTask | autoStoreVariables, resultVariable, failedJobRetryTimeCycle |
87
+ | `DmnCapable` | bpmn:BusinessRuleTask | decisionTable, decisionRef, decisionRefBinding, mapDecisionResult, resultVariable |
88
+ | `ExternalCapable` | bpmn:ServiceTask | topic, taskPriority |
89
+ | `VariableMappingCapable` | bpmn:CallActivity | variableMappingClass, variableMappingDelegateExpression |
90
+ | `Collectable` | bpmn:MultiInstanceLoopCharacteristics | collection, elementVariable |
91
+ | `FormData` | — | formProperty[] |
92
+ | `FormProperty` | — | id, name, type, expression, variable, default, datePattern, readable, writable, required, formValues[] |
93
+ | `FormValue` | — | id, name |
94
+ | `Properties` | — | values (Property[]) |
95
+ | `Property` | — | id, name, value |
96
+ | `In` | — | source, sourceExpression, target, variables |
97
+ | `Out` | — | source, sourceExpression, target, variables |
98
+ | `Field` | — | name, stringValue, expression |
99
+ | `ExecutionListener` | — | expression, class, delegateExpression, event, field[] |
100
+ | `TaskListener` | — | expression, class, delegateExpression, event, field[] |
101
+ | `FailedJobRetryTimeCycle` | — | body |
102
+ | `SignalEventDefinitionExtension` | bpmn:SignalEventDefinition | signalExpression |
103
+ | `ErrorEventDefinitionExtension` | bpmn:ErrorEventDefinition | errorCodeVariable, errorMessageVariable |
104
+ | `ConditionalEventDefinitionExtension` | bpmn:ConditionalEventDefinition | variableName, variableEvents |
105
+
106
+ ### Properties Panel Groups
107
+
108
+ The properties panel automatically displays relevant property groups based on the element type:
109
+
110
+ #### Process
111
+ - **Process** - Candidate starter groups, candidate starter users
112
+
113
+ #### Start Event
114
+ - **Form** - Form key, form field validation
115
+ - **Form Data** - Form properties list (with enum values)
116
+ - **Initiator** - Initiator variable name
117
+ - **Execution Listeners** - With field injection support
118
+
119
+ #### User Task
120
+ - **Assignment** - Assignee, candidate users, candidate groups, due date, follow-up date, priority
121
+ - **Form** - Form key, form field validation
122
+ - **Form Data** - Form properties list (with enum values)
123
+ - **Async** - Async before, async after, exclusive, failed job retry time cycle
124
+ - **Task Listeners** - With field injection support
125
+
126
+ #### Service Task
127
+ - **Implementation** - Java class, delegate expression, expression, result variable
128
+ - **External Task** - Topic, task priority
129
+ - **Async** - Async before, async after, exclusive, failed job retry time cycle
130
+ - **Execution Listeners** - With field injection support
131
+ - **Field Injection** - Field name, string value, expression
132
+ - **Extension Properties** - Custom key-value pairs
133
+
134
+ #### Business Rule Task
135
+ - **Implementation** - Java class, delegate expression, expression, result variable
136
+ - **Decision** - Decision reference, decision binding, map decision result, result variable
137
+ - **Async** - Async before, async after, exclusive, failed job retry time cycle
138
+ - **Execution Listeners** - With field injection support
139
+ - **Field Injection** - Field name, string value, expression
140
+ - **Extension Properties** - Custom key-value pairs
141
+
142
+ #### Script Task
143
+ - **Script** - Script format, result variable, auto store variables
144
+ - **Async** - Async before, async after, exclusive, failed job retry time cycle
145
+ - **Execution Listeners** - With field injection support
146
+ - **Field Injection** - Field name, string value, expression
147
+ - **Extension Properties** - Custom key-value pairs
148
+
149
+ #### Call Activity
150
+ - **Variable Mapping** - Variable mapping class, variable mapping delegate expression
151
+ - **In/Out Mappings** - In/Out mapping list
152
+ - **Async** - Async before, async after, exclusive, failed job retry time cycle
153
+ - **Execution Listeners** - With field injection support
154
+ - **Extension Properties** - Custom key-value pairs
155
+
156
+ #### Gateway
157
+ - **Async** - Async before, async after, exclusive, failed job retry time cycle
158
+ - **Execution Listeners** - With field injection support
159
+ - **Extension Properties** - Custom key-value pairs
160
+
161
+ #### Event
162
+ - **Async** - Async before, async after, exclusive, failed job retry time cycle
163
+ - **Execution Listeners** - With field injection support
164
+ - **Extension Properties** - Custom key-value pairs
165
+
166
+ #### Signal Event Definition
167
+ - **Signal** - Signal expression
168
+
169
+ #### Error Event Definition
170
+ - **Error** - Error code variable, error message variable
171
+
172
+ #### Conditional Event Definition
173
+ - **Condition** - Variable name, variable events
174
+
175
+ #### Multi-Instance
176
+ - **Multi-Instance** - Collection, element variable
177
+
178
+ ### Property Descriptions
179
+
180
+ #### Assignment Properties
181
+ | Property | Description | Example |
182
+ |----------|-------------|---------|
183
+ | assignee | Task assignee | `john` or `${assignee}` |
184
+ | candidateUsers | Candidate users (comma-separated) | `user1,user2` |
185
+ | candidateGroups | Candidate groups (comma-separated) | `group1,group2` |
186
+ | dueDate | Due date | `2024-12-31` or `${dueDate}` |
187
+ | followUpDate | Follow-up date | `2024-12-31` or `${followUpDate}` |
188
+ | priority | Priority | `50` or `${priority}` |
189
+
190
+ #### Form Properties
191
+ | Property | Description | Example |
192
+ |----------|-------------|---------|
193
+ | formKey | Form key | `embedded:app:forms/start.html` |
194
+ | formFieldValidation | Form field validation | `true` / `false` |
195
+
196
+ #### Async Configuration
197
+ | Property | Description | Default |
198
+ |----------|-------------|---------|
199
+ | asyncBefore | Async before | `false` |
200
+ | asyncAfter | Async after | `false` |
201
+ | exclusive | Exclusive | `true` |
202
+ | failedJobRetryTimeCycle | Failed job retry time cycle | `R3/PT10M` |
203
+
204
+ #### Service Task Implementation
205
+ | Property | Description | Example |
206
+ |----------|-------------|---------|
207
+ | class | Java class | `com.example.MyDelegate` |
208
+ | delegateExpression | Delegate expression | `${myDelegate}` |
209
+ | expression | Expression | `${myService.execute(execution)}` |
210
+ | resultVariable | Result variable | `result` |
211
+
212
+ #### Business Rule Task Decision
213
+ | Property | Description | Example |
214
+ |----------|-------------|---------|
215
+ | decisionRef | Decision reference | `myDecision` |
216
+ | decisionRefBinding | Decision binding | `latest` / `deployment` / `versionTag` |
217
+ | mapDecisionResult | Map decision result | `singleEntry` / `singleResult` / `collectEntries` / `resultList` |
218
+ | resultVariable | Result variable | `result` |
219
+
220
+ #### Script Task
221
+ | Property | Description | Example |
222
+ |----------|-------------|---------|
223
+ | scriptFormat | Script format | `groovy` / `javascript` |
224
+ | resultVariable | Result variable | `result` |
225
+ | autoStoreVariables | Auto store variables | `true` / `false` |
226
+
227
+ #### External Task
228
+ | Property | Description | Example |
229
+ |----------|-------------|---------|
230
+ | topic | Topic | `myTopic` |
231
+ | taskPriority | Task priority | `50` |
232
+
233
+ #### Call Activity Variable Mapping
234
+ | Property | Description | Example |
235
+ |----------|-------------|---------|
236
+ | variableMappingClass | Variable mapping class | `com.example.MyMapping` |
237
+ | variableMappingDelegateExpression | Variable mapping delegate expression | `${myMapping}` |
238
+
239
+ #### Initiator
240
+ | Property | Description | Example |
241
+ |----------|-------------|---------|
242
+ | initiator | Initiator variable name | `initiator` |
243
+
244
+ #### Listeners
245
+ | Property | Description | Example |
246
+ |----------|-------------|---------|
247
+ | event | Event type | `start` / `end` / `create` / `assignment` / `complete` / `delete` / `update` / `timeout` |
248
+ | class | Java class | `com.example.MyListener` |
249
+ | expression | Expression | `${myListener.notify(execution)}` |
250
+ | delegateExpression | Delegate expression | `${myListener}` |
251
+ | field | Field injection | Supports name, stringValue, expression |
252
+
253
+ #### Field Injection
254
+ | Property | Description | Example |
255
+ |----------|-------------|---------|
256
+ | name | Field name | `myField` |
257
+ | stringValue | String value | `hello` |
258
+ | expression | Expression | `${myVariable}` |
259
+
260
+ #### Extension Properties
261
+ Custom key-value pairs for storing arbitrary extension information.
262
+
263
+ #### Multi-Instance
264
+ | Property | Description | Example |
265
+ |----------|-------------|---------|
266
+ | collection | Collection variable or expression | `${users}` |
267
+ | elementVariable | Element variable name | `user` |
268
+
269
+ #### Form Data
270
+ Supports `flowable:formData` and `flowable:formProperty`, including:
271
+ - Form properties: id, name, type, expression, variable, default, datePattern
272
+ - Property options: readable, writable, required
273
+ - Enum values: formValues (id, name)
274
+
275
+ #### Event Definition Extensions
276
+ | Event Type | Property | Description |
277
+ |------------|----------|-------------|
278
+ | Signal Event | signalExpression | Signal expression |
279
+ | Error Event | errorCodeVariable | Error code variable |
280
+ | Error Event | errorMessageVariable | Error message variable |
281
+ | Conditional Event | variableName | Variable name |
282
+ | Conditional Event | variableEvents | Variable events (comma-separated) |
283
+
284
+ ## Tech Stack
285
+
286
+ - **Vite** - Build tool
287
+ - **React 18** + TypeScript
288
+ - **bpmn-js** - BPMN 2.0 process diagram engine
289
+ - **bpmn-js-properties-panel** - Properties panel component
290
+ - **bpmn-js-i18n** - Internationalization translations
291
+
292
+ ## License
293
+
294
+ MIT
package/README.md ADDED
@@ -0,0 +1,294 @@
1
+ # 智能运维与IT工作台前端BPMN流程插件
2
+
3
+ 基于 [bpmn.js](https://bpmn.io/toolkit/bpmn-js/) 封装的 React 组件库,同时提供 Viewer(只读查看)和 Modeler(可编辑建模)两个组件,并深度集成了 Flowable 扩展属性支持。
4
+
5
+ ## 特性
6
+
7
+ - 🎨 **开箱即用** - 提供 BpmnViewer 和 BpmnModeler 两个 React 组件
8
+ - 📝 **Flowable 扩展属性** - 完整支持 26 种 Flowable/activiti 扩展类型
9
+ - 🌐 **国际化** - 内置中文翻译支持
10
+ - 🎯 **TypeScript** - 完整的类型定义
11
+ - 📦 **多种构建格式** - 支持 ES Module 和 UMD 格式
12
+
13
+ ## 安装
14
+
15
+ ```bash
16
+ npm install iop-bpmn-react
17
+ ```
18
+
19
+ ## 快速开始
20
+
21
+ ```tsx
22
+ import { BpmnViewer, BpmnModeler } from 'iop-bpmn-react'
23
+ import 'iop-bpmn-react/style.css'
24
+
25
+ // 只读查看
26
+ function Viewer() {
27
+ return <BpmnViewer bpmnXml={xml} />
28
+ }
29
+
30
+ // 可编辑建模
31
+ function Modeler() {
32
+ return <BpmnModeler bpmnXml={xml} />
33
+ }
34
+ ```
35
+
36
+ ## 开发命令
37
+
38
+ | 任务 | 命令 |
39
+ |------|------|
40
+ | 启动开发服务器 | `npm run dev` |
41
+ | 构建库 | `npm run build` |
42
+ | 代码检查 | `npm run lint` |
43
+ | 预览构建产物 | `npm run preview` |
44
+
45
+ ## 项目结构
46
+
47
+ ```
48
+ src/
49
+ ├── lib/ # 库源码(构建入口)
50
+ │ ├── index.ts # 统一导出 + bpmn-js 样式引入
51
+ │ ├── components/
52
+ │ │ ├── BpmnViewer/ # 只读查看器组件
53
+ │ │ └── BpmnModeler/ # 可编辑建模器组件
54
+ │ │ ├── FlowablePropertiesProvider/ # Flowable 属性面板
55
+ │ │ └── flowable-bpmn-moddle/ # Flowable moddle 扩展
56
+ │ ├── hooks/
57
+ │ │ └── useBpmn.ts # 公共 hook(封装 bpmn-js 生命周期)
58
+ │ ├── i18n/
59
+ │ │ └── zh.ts # 中文翻译
60
+ │ ├── resources/
61
+ │ │ └── flowable.json # Flowable moddle 描述符
62
+ │ └── types/
63
+ │ └── index.ts # 类型定义
64
+ ├── App.tsx # Demo 应用(开发调试用)
65
+ ├── main.tsx # Demo 入口
66
+ └── ...
67
+ ```
68
+
69
+ ## Flowable 扩展属性支持
70
+
71
+ 本项目完整支持 Flowable/activiti 的 BPMN 扩展属性,通过 `FlowablePropertiesProvider` 在属性面板中提供可视化编辑。
72
+
73
+ ### Moddle 描述符类型
74
+
75
+ 共定义 **26 种** Flowable 扩展类型:
76
+
77
+ | 类型名称 | 扩展目标 | 属性 |
78
+ |----------|----------|------|
79
+ | `Process` | bpmn:Process | candidateStarterGroups, candidateStarterUsers |
80
+ | `Assignable` | bpmn:UserTask | assignee, candidateUsers, candidateGroups, dueDate, followUpDate, priority |
81
+ | `TaskFormSupported` | bpmn:UserTask | formKey, formFieldValidation |
82
+ | `StartFormSupported` | bpmn:StartEvent | formKey, formFieldValidation |
83
+ | `Initiator` | bpmn:StartEvent | initiator |
84
+ | `AsyncCapable` | bpmn:Activity, bpmn:Gateway, bpmn:Event | async, asyncBefore, asyncAfter, exclusive |
85
+ | `ServiceTaskLike` | bpmn:ServiceTask, bpmn:BusinessRuleTask, bpmn:SendTask | class, delegateExpression, expression, resultVariable |
86
+ | `ScriptTaskLike` | bpmn:ScriptTask | autoStoreVariables, resultVariable, failedJobRetryTimeCycle |
87
+ | `DmnCapable` | bpmn:BusinessRuleTask | decisionTable, decisionRef, decisionRefBinding, mapDecisionResult, resultVariable |
88
+ | `ExternalCapable` | bpmn:ServiceTask | topic, taskPriority |
89
+ | `VariableMappingCapable` | bpmn:CallActivity | variableMappingClass, variableMappingDelegateExpression |
90
+ | `Collectable` | bpmn:MultiInstanceLoopCharacteristics | collection, elementVariable |
91
+ | `FormData` | — | formProperty[] |
92
+ | `FormProperty` | — | id, name, type, expression, variable, default, datePattern, readable, writable, required, formValues[] |
93
+ | `FormValue` | — | id, name |
94
+ | `Properties` | — | values (Property[]) |
95
+ | `Property` | — | id, name, value |
96
+ | `In` | — | source, sourceExpression, target, variables |
97
+ | `Out` | — | source, sourceExpression, target, variables |
98
+ | `Field` | — | name, stringValue, expression |
99
+ | `ExecutionListener` | — | expression, class, delegateExpression, event, field[] |
100
+ | `TaskListener` | — | expression, class, delegateExpression, event, field[] |
101
+ | `FailedJobRetryTimeCycle` | — | body |
102
+ | `SignalEventDefinitionExtension` | bpmn:SignalEventDefinition | signalExpression |
103
+ | `ErrorEventDefinitionExtension` | bpmn:ErrorEventDefinition | errorCodeVariable, errorMessageVariable |
104
+ | `ConditionalEventDefinitionExtension` | bpmn:ConditionalEventDefinition | variableName, variableEvents |
105
+
106
+ ### 属性面板分组
107
+
108
+ 属性面板根据元素类型自动显示对应的属性分组:
109
+
110
+ #### 流程 (Process)
111
+ - **流程属性** - 候选启动组、候选启动用户
112
+
113
+ #### 开始事件 (StartEvent)
114
+ - **表单** - 表单键、表单字段验证
115
+ - **表单数据** - 表单属性列表(支持枚举值)
116
+ - **发起者** - 发起者变量名
117
+ - **执行监听器** - 支持字段注入
118
+
119
+ #### 用户任务 (UserTask)
120
+ - **分配** - 负责人、候选用户、候选组、到期日期、跟进日期、优先级
121
+ - **表单** - 表单键、表单字段验证
122
+ - **表单数据** - 表单属性列表(支持枚举值)
123
+ - **异步配置** - 异步前、异步后、排他、失败重试周期
124
+ - **任务监听器** - 支持字段注入
125
+
126
+ #### 服务任务 (ServiceTask)
127
+ - **实现** - Java类、委托表达式、表达式、结果变量
128
+ - **外部任务** - 主题、任务优先级
129
+ - **异步配置** - 异步前、异步后、排他、失败重试周期
130
+ - **执行监听器** - 支持字段注入
131
+ - **字段注入** - 字段名、字符串值、表达式
132
+ - **扩展属性** - 自定义键值对
133
+
134
+ #### 业务规则任务 (BusinessRuleTask)
135
+ - **实现** - Java类、委托表达式、表达式、结果变量
136
+ - **决策** - 决策引用、决策绑定、映射决策结果、结果变量
137
+ - **异步配置** - 异步前、异步后、排他、失败重试周期
138
+ - **执行监听器** - 支持字段注入
139
+ - **字段注入** - 字段名、字符串值、表达式
140
+ - **扩展属性** - 自定义键值对
141
+
142
+ #### 脚本任务 (ScriptTask)
143
+ - **脚本** - 脚本格式、结果变量、自动存储变量
144
+ - **异步配置** - 异步前、异步后、排他、失败重试周期
145
+ - **执行监听器** - 支持字段注入
146
+ - **字段注入** - 字段名、字符串值、表达式
147
+ - **扩展属性** - 自定义键值对
148
+
149
+ #### 调用活动 (CallActivity)
150
+ - **变量映射** - 变量映射类、变量映射委托表达式
151
+ - **输入/输出映射** - In/Out 映射列表
152
+ - **异步配置** - 异步前、异步后、排他、失败重试周期
153
+ - **执行监听器** - 支持字段注入
154
+ - **扩展属性** - 自定义键值对
155
+
156
+ #### 网关 (Gateway)
157
+ - **异步配置** - 异步前、异步后、排他、失败重试周期
158
+ - **执行监听器** - 支持字段注入
159
+ - **扩展属性** - 自定义键值对
160
+
161
+ #### 事件 (Event)
162
+ - **异步配置** - 异步前、异步后、排他、失败重试周期
163
+ - **执行监听器** - 支持字段注入
164
+ - **扩展属性** - 自定义键值对
165
+
166
+ #### 信号事件定义 (SignalEventDefinition)
167
+ - **信号** - 信号表达式
168
+
169
+ #### 错误事件定义 (ErrorEventDefinition)
170
+ - **错误** - 错误代码变量、错误消息变量
171
+
172
+ #### 条件事件定义 (ConditionalEventDefinition)
173
+ - **条件** - 变量名、变量事件
174
+
175
+ #### 多实例 (MultiInstance)
176
+ - **多实例** - 集合、元素变量
177
+
178
+ ### 属性说明
179
+
180
+ #### 分配属性
181
+ | 属性 | 说明 | 示例 |
182
+ |------|------|------|
183
+ | assignee | 任务负责人 | `张三` 或 `${assignee}` |
184
+ | candidateUsers | 候选用户(逗号分隔) | `user1,user2` |
185
+ | candidateGroups | 候选组(逗号分隔) | `group1,group2` |
186
+ | dueDate | 到期日期 | `2024-12-31` 或 `${dueDate}` |
187
+ | followUpDate | 跟进日期 | `2024-12-31` 或 `${followUpDate}` |
188
+ | priority | 优先级 | `50` 或 `${priority}` |
189
+
190
+ #### 表单属性
191
+ | 属性 | 说明 | 示例 |
192
+ |------|------|------|
193
+ | formKey | 表单键 | `embedded:app:forms/start.html` |
194
+ | formFieldValidation | 表单字段验证 | `true` / `false` |
195
+
196
+ #### 异步配置
197
+ | 属性 | 说明 | 默认值 |
198
+ |------|------|--------|
199
+ | asyncBefore | 异步前 | `false` |
200
+ | asyncAfter | 异步后 | `false` |
201
+ | exclusive | 排他 | `true` |
202
+ | failedJobRetryTimeCycle | 失败重试周期 | `R3/PT10M` |
203
+
204
+ #### 服务任务实现
205
+ | 属性 | 说明 | 示例 |
206
+ |------|------|------|
207
+ | class | Java类 | `com.example.MyDelegate` |
208
+ | delegateExpression | 委托表达式 | `${myDelegate}` |
209
+ | expression | 表达式 | `${myService.execute(execution)}` |
210
+ | resultVariable | 结果变量 | `result` |
211
+
212
+ #### 业务规则任务决策
213
+ | 属性 | 说明 | 示例 |
214
+ |------|------|------|
215
+ | decisionRef | 决策引用 | `myDecision` |
216
+ | decisionRefBinding | 决策绑定 | `latest` / `deployment` / `versionTag` |
217
+ | mapDecisionResult | 映射决策结果 | `singleEntry` / `singleResult` / `collectEntries` / `resultList` |
218
+ | resultVariable | 结果变量 | `result` |
219
+
220
+ #### 脚本任务
221
+ | 属性 | 说明 | 示例 |
222
+ |------|------|------|
223
+ | scriptFormat | 脚本格式 | `groovy` / `javascript` |
224
+ | resultVariable | 结果变量 | `result` |
225
+ | autoStoreVariables | 自动存储变量 | `true` / `false` |
226
+
227
+ #### 外部任务
228
+ | 属性 | 说明 | 示例 |
229
+ |------|------|------|
230
+ | topic | 主题 | `myTopic` |
231
+ | taskPriority | 任务优先级 | `50` |
232
+
233
+ #### 调用活动变量映射
234
+ | 属性 | 说明 | 示例 |
235
+ |------|------|------|
236
+ | variableMappingClass | 变量映射类 | `com.example.MyMapping` |
237
+ | variableMappingDelegateExpression | 变量映射委托表达式 | `${myMapping}` |
238
+
239
+ #### 发起者
240
+ | 属性 | 说明 | 示例 |
241
+ |------|------|------|
242
+ | initiator | 发起者变量名 | `initiator` |
243
+
244
+ #### 监听器
245
+ | 属性 | 说明 | 示例 |
246
+ |------|------|------|
247
+ | event | 事件类型 | `start` / `end` / `create` / `assignment` / `complete` / `delete` / `update` / `timeout` |
248
+ | class | Java类 | `com.example.MyListener` |
249
+ | expression | 表达式 | `${myListener.notify(execution)}` |
250
+ | delegateExpression | 委托表达式 | `${myListener}` |
251
+ | field | 字段注入 | 支持 name, stringValue, expression |
252
+
253
+ #### 字段注入
254
+ | 属性 | 说明 | 示例 |
255
+ |------|------|------|
256
+ | name | 字段名 | `myField` |
257
+ | stringValue | 字段值 | `hello` |
258
+ | expression | 表达式 | `${myVariable}` |
259
+
260
+ #### 扩展属性
261
+ 自定义键值对,可用于存储任意扩展信息。
262
+
263
+ #### 多实例
264
+ | 属性 | 说明 | 示例 |
265
+ |------|------|------|
266
+ | collection | 集合变量或表达式 | `${users}` |
267
+ | elementVariable | 元素变量名 | `user` |
268
+
269
+ #### 表单数据
270
+ 支持 `flowable:formData` 和 `flowable:formProperty`,包括:
271
+ - 表单属性:id, name, type, expression, variable, default, datePattern
272
+ - 属性选项:readable, writable, required
273
+ - 枚举值:formValues (id, name)
274
+
275
+ #### 事件定义扩展
276
+ | 事件类型 | 属性 | 说明 |
277
+ |----------|------|------|
278
+ | 信号事件 | signalExpression | 信号表达式 |
279
+ | 错误事件 | errorCodeVariable | 错误代码变量 |
280
+ | 错误事件 | errorMessageVariable | 错误消息变量 |
281
+ | 条件事件 | variableName | 变量名 |
282
+ | 条件事件 | variableEvents | 变量事件(逗号分隔) |
283
+
284
+ ## 技术栈
285
+
286
+ - **Vite** - 构建工具
287
+ - **React 18** + TypeScript
288
+ - **bpmn-js** - BPMN 2.0 流程图引擎
289
+ - **bpmn-js-properties-panel** - 属性面板组件
290
+ - **bpmn-js-i18n** - 国际化翻译
291
+
292
+ ## 许可证
293
+
294
+ MIT
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="48" height="46" fill="none" viewBox="0 0 48 46"><path fill="#863bff" d="M25.946 44.938c-.664.845-2.021.375-2.021-.698V33.937a2.26 2.26 0 0 0-2.262-2.262H10.287c-.92 0-1.456-1.04-.92-1.788l7.48-10.471c1.07-1.497 0-3.578-1.842-3.578H1.237c-.92 0-1.456-1.04-.92-1.788L10.013.474c.214-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.471c-1.07 1.498 0 3.579 1.842 3.579h11.377c.943 0 1.473 1.088.89 1.83L25.947 44.94z" style="fill:#863bff;fill:color(display-p3 .5252 .23 1);fill-opacity:1"/><mask id="a" width="48" height="46" x="0" y="0" maskUnits="userSpaceOnUse" style="mask-type:alpha"><path fill="#000" d="M25.842 44.938c-.664.844-2.021.375-2.021-.698V33.937a2.26 2.26 0 0 0-2.262-2.262H10.183c-.92 0-1.456-1.04-.92-1.788l7.48-10.471c1.07-1.498 0-3.579-1.842-3.579H1.133c-.92 0-1.456-1.04-.92-1.787L9.91.473c.214-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.471c-1.07 1.498 0 3.578 1.842 3.578h11.377c.943 0 1.473 1.088.89 1.832L25.843 44.94z" style="fill:#000;fill-opacity:1"/></mask><g mask="url(#a)"><g filter="url(#b)"><ellipse cx="5.508" cy="14.704" fill="#ede6ff" rx="5.508" ry="14.704" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -4.47 31.516)"/></g><g filter="url(#c)"><ellipse cx="10.399" cy="29.851" fill="#ede6ff" rx="10.399" ry="29.851" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -39.328 7.883)"/></g><g filter="url(#d)"><ellipse cx="5.508" cy="30.487" fill="#7e14ff" rx="5.508" ry="30.487" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.814 -25.913 -14.639)scale(1 -1)"/></g><g filter="url(#e)"><ellipse cx="5.508" cy="30.599" fill="#7e14ff" rx="5.508" ry="30.599" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.814 -32.644 -3.334)scale(1 -1)"/></g><g filter="url(#f)"><ellipse cx="5.508" cy="30.599" fill="#7e14ff" rx="5.508" ry="30.599" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -34.34 30.47)"/></g><g filter="url(#g)"><ellipse cx="14.072" cy="22.078" fill="#ede6ff" rx="14.072" ry="22.078" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="rotate(93.35 24.506 48.493)scale(-1 1)"/></g><g filter="url(#h)"><ellipse cx="3.47" cy="21.501" fill="#7e14ff" rx="3.47" ry="21.501" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.009 28.708 47.59)scale(-1 1)"/></g><g filter="url(#i)"><ellipse cx="3.47" cy="21.501" fill="#7e14ff" rx="3.47" ry="21.501" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.009 28.708 47.59)scale(-1 1)"/></g><g filter="url(#j)"><ellipse cx=".387" cy="8.972" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(39.51 .387 8.972)"/></g><g filter="url(#k)"><ellipse cx="47.523" cy="-6.092" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 47.523 -6.092)"/></g><g filter="url(#l)"><ellipse cx="41.412" cy="6.333" fill="#47bfff" rx="5.971" ry="9.665" style="fill:#47bfff;fill:color(display-p3 .2799 .748 1);fill-opacity:1" transform="rotate(37.892 41.412 6.333)"/></g><g filter="url(#m)"><ellipse cx="-1.879" cy="38.332" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 -1.88 38.332)"/></g><g filter="url(#n)"><ellipse cx="-1.879" cy="38.332" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 -1.88 38.332)"/></g><g filter="url(#o)"><ellipse cx="35.651" cy="29.907" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 35.651 29.907)"/></g><g filter="url(#p)"><ellipse cx="38.418" cy="32.4" fill="#47bfff" rx="5.971" ry="15.297" style="fill:#47bfff;fill:color(display-p3 .2799 .748 1);fill-opacity:1" transform="rotate(37.892 38.418 32.4)"/></g></g><defs><filter id="b" width="60.045" height="41.654" x="-19.77" y="16.149" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="c" width="90.34" height="51.437" x="-54.613" y="-7.533" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="d" width="79.355" height="29.4" x="-49.64" y="2.03" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="e" width="79.579" height="29.4" x="-45.045" y="20.029" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="f" width="79.579" height="29.4" x="-43.513" y="21.178" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="g" width="74.749" height="58.852" x="15.756" y="-17.901" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="h" width="61.377" height="25.362" x="23.548" y="2.284" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="i" width="61.377" height="25.362" x="23.548" y="2.284" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="j" width="56.045" height="63.649" x="-27.636" y="-22.853" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="k" width="54.814" height="64.646" x="20.116" y="-38.415" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="l" width="33.541" height="35.313" x="24.641" y="-11.323" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="m" width="54.814" height="64.646" x="-29.286" y="6.009" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="n" width="54.814" height="64.646" x="-29.286" y="6.009" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="o" width="54.814" height="64.646" x="8.244" y="-2.416" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="p" width="39.409" height="43.623" x="18.713" y="10.588" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter></defs></svg>
package/dist/icons.svg ADDED
@@ -0,0 +1,24 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <symbol id="bluesky-icon" viewBox="0 0 16 17">
3
+ <g clip-path="url(#bluesky-clip)"><path fill="#08060d" d="M7.75 7.735c-.693-1.348-2.58-3.86-4.334-5.097-1.68-1.187-2.32-.981-2.74-.79C.188 2.065.1 2.812.1 3.251s.241 3.602.398 4.13c.52 1.744 2.367 2.333 4.07 2.145-2.495.37-4.71 1.278-1.805 4.512 3.196 3.309 4.38-.71 4.987-2.746.608 2.036 1.307 5.91 4.93 2.746 2.72-2.746.747-4.143-1.747-4.512 1.702.189 3.55-.4 4.07-2.145.156-.528.397-3.691.397-4.13s-.088-1.186-.575-1.406c-.42-.19-1.06-.395-2.741.79-1.755 1.24-3.64 3.752-4.334 5.099"/></g>
4
+ <defs><clipPath id="bluesky-clip"><path fill="#fff" d="M.1.85h15.3v15.3H.1z"/></clipPath></defs>
5
+ </symbol>
6
+ <symbol id="discord-icon" viewBox="0 0 20 19">
7
+ <path fill="#08060d" d="M16.224 3.768a14.5 14.5 0 0 0-3.67-1.153c-.158.286-.343.67-.47.976a13.5 13.5 0 0 0-4.067 0c-.128-.306-.317-.69-.476-.976A14.4 14.4 0 0 0 3.868 3.77C1.546 7.28.916 10.703 1.231 14.077a14.7 14.7 0 0 0 4.5 2.306q.545-.748.965-1.587a9.5 9.5 0 0 1-1.518-.74q.191-.14.372-.293c2.927 1.369 6.107 1.369 8.999 0q.183.152.372.294-.723.437-1.52.74.418.838.963 1.588a14.6 14.6 0 0 0 4.504-2.308c.37-3.911-.63-7.302-2.644-10.309m-9.13 8.234c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.894 0 1.614.82 1.599 1.82.001 1-.705 1.82-1.6 1.82m5.91 0c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.893 0 1.614.82 1.599 1.82 0 1-.706 1.82-1.6 1.82"/>
8
+ </symbol>
9
+ <symbol id="documentation-icon" viewBox="0 0 21 20">
10
+ <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="m15.5 13.333 1.533 1.322c.645.555.967.833.967 1.178s-.322.623-.967 1.179L15.5 18.333m-3.333-5-1.534 1.322c-.644.555-.966.833-.966 1.178s.322.623.966 1.179l1.534 1.321"/>
11
+ <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M17.167 10.836v-4.32c0-1.41 0-2.117-.224-2.68-.359-.906-1.118-1.621-2.08-1.96-.599-.21-1.349-.21-2.848-.21-2.623 0-3.935 0-4.983.369-1.684.591-3.013 1.842-3.641 3.428C3 6.449 3 7.684 3 10.154v2.122c0 2.558 0 3.838.706 4.726q.306.383.713.671c.76.536 1.79.64 3.581.66"/>
12
+ <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M3 10a2.78 2.78 0 0 1 2.778-2.778c.555 0 1.209.097 1.748-.047.48-.129.854-.503.982-.982.145-.54.048-1.194.048-1.749a2.78 2.78 0 0 1 2.777-2.777"/>
13
+ </symbol>
14
+ <symbol id="github-icon" viewBox="0 0 19 19">
15
+ <path fill="#08060d" fill-rule="evenodd" d="M9.356 1.85C5.05 1.85 1.57 5.356 1.57 9.694a7.84 7.84 0 0 0 5.324 7.44c.387.079.528-.168.528-.376 0-.182-.013-.805-.013-1.454-2.165.467-2.616-.935-2.616-.935-.349-.91-.864-1.143-.864-1.143-.71-.48.051-.48.051-.48.787.051 1.2.805 1.2.805.695 1.194 1.817.857 2.268.649.064-.507.27-.857.49-1.052-1.728-.182-3.545-.857-3.545-3.87 0-.857.31-1.558.8-2.104-.078-.195-.349-1 .077-2.078 0 0 .657-.208 2.14.805a7.5 7.5 0 0 1 1.946-.26c.657 0 1.328.092 1.946.26 1.483-1.013 2.14-.805 2.14-.805.426 1.078.155 1.883.078 2.078.502.546.799 1.247.799 2.104 0 3.013-1.818 3.675-3.558 3.87.284.247.528.714.528 1.454 0 1.052-.012 1.896-.012 2.156 0 .208.142.455.528.377a7.84 7.84 0 0 0 5.324-7.441c.013-4.338-3.48-7.844-7.773-7.844" clip-rule="evenodd"/>
16
+ </symbol>
17
+ <symbol id="social-icon" viewBox="0 0 20 20">
18
+ <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M12.5 6.667a4.167 4.167 0 1 0-8.334 0 4.167 4.167 0 0 0 8.334 0"/>
19
+ <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M2.5 16.667a5.833 5.833 0 0 1 8.75-5.053m3.837.474.513 1.035c.07.144.257.282.414.309l.93.155c.596.1.736.536.307.965l-.723.73a.64.64 0 0 0-.152.531l.207.903c.164.715-.213.991-.84.618l-.872-.52a.63.63 0 0 0-.577 0l-.872.52c-.624.373-1.003.094-.84-.618l.207-.903a.64.64 0 0 0-.152-.532l-.723-.729c-.426-.43-.289-.864.306-.964l.93-.156a.64.64 0 0 0 .412-.31l.513-1.034c.28-.562.735-.562 1.012 0"/>
20
+ </symbol>
21
+ <symbol id="x-icon" viewBox="0 0 19 19">
22
+ <path fill="#08060d" fill-rule="evenodd" d="M1.893 1.98c.052.072 1.245 1.769 2.653 3.77l2.892 4.114c.183.261.333.48.333.486s-.068.089-.152.183l-.522.593-.765.867-3.597 4.087c-.375.426-.734.834-.798.905a1 1 0 0 0-.118.148c0 .01.236.017.664.017h.663l.729-.83c.4-.457.796-.906.879-.999a692 692 0 0 0 1.794-2.038c.034-.037.301-.34.594-.675l.551-.624.345-.392a7 7 0 0 1 .34-.374c.006 0 .93 1.306 2.052 2.903l2.084 2.965.045.063h2.275c1.87 0 2.273-.003 2.266-.021-.008-.02-1.098-1.572-3.894-5.547-2.013-2.862-2.28-3.246-2.273-3.266.008-.019.282-.332 2.085-2.38l2-2.274 1.567-1.782c.022-.028-.016-.03-.65-.03h-.674l-.3.342a871 871 0 0 1-1.782 2.025c-.067.075-.405.458-.75.852a100 100 0 0 1-.803.91c-.148.172-.299.344-.99 1.127-.304.343-.32.358-.345.327-.015-.019-.904-1.282-1.976-2.808L6.365 1.85H1.8zm1.782.91 8.078 11.294c.772 1.08 1.413 1.973 1.425 1.984.016.017.241.02 1.05.017l1.03-.004-2.694-3.766L7.796 5.75 5.722 2.852l-1.039-.004-1.039-.004z" clip-rule="evenodd"/>
23
+ </symbol>
24
+ </svg>