ice-entity-designer 0.0.22 → 0.0.24

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 (39) hide show
  1. package/README.md +85 -0
  2. package/dist/index.cjs +3 -3
  3. package/dist/index.mjs +3 -3
  4. package/dist/index.umd.js +3 -3
  5. package/dist/react.cjs +3 -3
  6. package/dist/react.mjs +3 -3
  7. package/dist/types/flow/FlowDesigner.d.mts +23 -5
  8. package/dist/types/flow/FlowDesigner.d.ts +23 -5
  9. package/dist/types/ice-render/ICE.d.mts +55 -0
  10. package/dist/types/ice-render/ICE.d.ts +55 -0
  11. package/dist/types/ice-render/cross-platform/Path2DRecorder.d.mts +76 -0
  12. package/dist/types/ice-render/cross-platform/Path2DRecorder.d.ts +76 -0
  13. package/dist/types/ice-render/cross-platform/PolyfillPath2D.d.mts +8 -18
  14. package/dist/types/ice-render/cross-platform/PolyfillPath2D.d.ts +8 -18
  15. package/dist/types/ice-render/event/DOMEventDispatcher.d.mts +9 -2
  16. package/dist/types/ice-render/event/DOMEventDispatcher.d.ts +9 -2
  17. package/dist/types/ice-render/export/SvgExporter.d.mts +54 -0
  18. package/dist/types/ice-render/export/SvgExporter.d.ts +54 -0
  19. package/dist/types/ice-render/graphic/ICEComponent.d.mts +31 -1
  20. package/dist/types/ice-render/graphic/ICEComponent.d.ts +31 -1
  21. package/dist/types/ice-render/graphic/ICEPath.d.mts +7 -0
  22. package/dist/types/ice-render/graphic/ICEPath.d.ts +7 -0
  23. package/dist/types/ice-render/graphic/link/ICEPolyLine.d.mts +17 -0
  24. package/dist/types/ice-render/graphic/link/ICEPolyLine.d.ts +17 -0
  25. package/dist/types/ice-render/graphic/text/ICEText.d.mts +21 -0
  26. package/dist/types/ice-render/graphic/text/ICEText.d.ts +21 -0
  27. package/dist/types/ice-render/index.d.mts +2 -0
  28. package/dist/types/ice-render/index.d.ts +2 -0
  29. package/dist/types/index.d.mts +8 -0
  30. package/dist/types/index.d.ts +8 -0
  31. package/dist/types/uml/UmlClass.d.mts +46 -0
  32. package/dist/types/uml/UmlClass.d.ts +46 -0
  33. package/dist/types/uml/UmlDesigner.d.mts +53 -0
  34. package/dist/types/uml/UmlDesigner.d.ts +53 -0
  35. package/dist/types/uml/UmlRelation.d.mts +63 -0
  36. package/dist/types/uml/UmlRelation.d.ts +63 -0
  37. package/dist/types/uml/uml_text.d.mts +33 -0
  38. package/dist/types/uml/uml_text.d.ts +33 -0
  39. package/package.json +1 -1
package/README.md CHANGED
@@ -205,6 +205,7 @@ flow.undo(); // 100 步历史
205
205
  | 样式 | 节点:`fillColor` / `strokeColor` / `textColor` / `fontSize`(`updateNode` 即时生效);连线:`style.strokeStyle`(线色,同时作为箭头填充)/ `style.lineWidth`、`labelStyle.fillStyle`(标签颜色),全部随快照存取 |
206
206
  | 增删改查 | `nodes` / `edges` / `selected` / `select()` / `updateNode()` / `updateEdge()` / `remove()`(删节点级联删连线)/ `clear()` |
207
207
  | 历史与快照 | `undo()` / `redo()` / `canUndo()` / `canRedo()`、`serialize()` / `toSnapshot()` / `load()`(返回 `{ loaded, nodes, edges, skipped }`)。文档 **v2 直接复用引擎的序列化机制**:`{ version: 2, kind: 'flowchart', scene: <引擎 Serializer 产物> }`,因此自定义 `data` 与任何新增 state 字段自动往返;v1(`nodes`/`edges` 数组)仍可读,导出统一为 v2 |
208
+ | 导出 | `toSvg(options)` —— 导出**矢量** SVG(放大不糊、可进设计工具/打印);与画布同一口径 |
208
209
  | 视图与订阅 | `fitViewport(padding)`、`subscribe()`、`dispose()` |
209
210
 
210
211
  自定义形状(判定菱形 / 输入输出平行四边形)在 `src/flow/flow_shapes.ts`,走的是引擎的 `ICEPath` 子类机制。
@@ -252,6 +253,67 @@ const report = fromBpmnXml(xml, bpmn); // 导入并重建(含池 / 泳道容
252
253
  BPMN 节点同样是**复合组件**(形状 + 角标 + 标记由 state 派生),内部子组件不写进文档、载入时重建。
253
254
  AI Agent 生成 BPMN 的 JSON DSL(`kind: 'bpmn'`)见 `ice-entity-designer-dsl`。
254
255
 
256
+ #### 5.4 导出:矢量 SVG(与画布同一口径)
257
+
258
+ 画布的 `toDataURL()` 是**光栅快照**(分辨率写死、放大就糊)。需要出图给文档、打印或设计工具时用
259
+ **矢量导出** —— 它复用引擎的 `exportSvg()`,从组件树 + 路径命令流重新生成 SVG,与画布逐像素同一口径
260
+ (绘制顺序、世界矩阵、样式合并、透明度、祖先裁剪、虚线、渐变、阴影、连线标签):
261
+
262
+ ```js
263
+ // 流程图 / BPMN(应用层,FlowDesigner 与 BpmnDesigner 都有)
264
+ const svg = designer.toSvg(); // 内容自适应 + 透明背景
265
+ const svg = designer.toSvg({ background: '#ffffff', padding: 16 });
266
+ const svg = designer.toSvg({ area: 'viewport' }); // 当前视口所见即所导
267
+
268
+ // 任何场景(ER / 流程图 / BPMN 都能用,含 `{ svg, width, height }` 版本)
269
+ const svg = IED.exportSvg(ice, { scale: 2 });
270
+ const { svg, width, height } = IED.exportSvgResult(ice, { padding: 12 });
271
+ ```
272
+
273
+ `tests/bpmn-editor.html` 与 `tests/flowchart-editor.html` 上都有「导出 SVG」按钮,点一下即可下载
274
+ (BPMN 案例导出的池/泳道/事件/网关/连线/标签都是矢量)。服务端出图见引擎的 `ICE.headless()`。
275
+
276
+ 限制(与引擎一致):阴影用 `feDropShadow` 近似(模糊观感不会与画布逐像素相同);SVG 与 canvas 的
277
+ 字形栅格化是两套实现,文字位置**对齐口径一致、逐像素允许微差**;导出的是**静态瞬间**(蚂蚁线动画
278
+ 只保留当前相位)。
279
+
280
+ #### 5.5 UML 类图(域包示例)
281
+
282
+ UML 是**域包(domain pack)**的第一个完整示例:形状 + 应用层 + 语义校验,其余(选择/增删改/连线/
283
+ 撤销重做/快照/适应视图/矢量导出)全部沿用引擎与 `FlowDesigner`。
284
+
285
+ ```js
286
+ import { ICE, UmlDesigner } from 'ice-entity-designer';
287
+
288
+ const ice = new ICE().init('canvas-1');
289
+ const uml = new UmlDesigner(ice);
290
+
291
+ const entity = uml.createClass({ kind: 'class', className: 'Entity', abstract: true, methods: ['+ save(): void'] });
292
+ const user = uml.createClass({ className: 'User', attributes: ['- email: string'], methods: ['+ placeOrder(): Order'] });
293
+ const payable = uml.createClass({ kind: 'interface', className: 'Payable', methods: ['+ pay(amount: number): void'] });
294
+
295
+ uml.createRelation({ sourceId: user.state.id, targetId: entity.state.id, relationKind: 'inheritance' });
296
+ uml.createRelation({ sourceId: payable.state.id, targetId: user.state.id, relationKind: 'realization' });
297
+
298
+ uml.validateUml(); // 重名类 / 悬空关系 / 继承成环
299
+ const svg = uml.toSvg({ background: '#ffffff', padding: 16 });
300
+ ```
301
+
302
+ | 记法 | 线型 + 端点标记 |
303
+ |---|---|
304
+ | `inheritance` 继承 | 实线 + 空心三角(指向父类) |
305
+ | `realization` 实现 | 虚线 + 空心三角(指向接口) |
306
+ | `association` 关联 | 实线 |
307
+ | `aggregation` 聚合 | 实线 + **空心菱形**(整体一侧) |
308
+ | `composition` 组合 | 实线 + **实心菱形**(整体一侧) |
309
+ | `dependency` 依赖 | 虚线 + 开放箭头 |
310
+
311
+ 类框是**三段式**(类名 / 属性 / 方法):成员是自由文本(`- id: string`、`+ pay(): void`),
312
+ 可见性/静态/泛型都由文本表达 —— 与 PlantUML/Mermaid 的通行写法一致,AI 生成不必学另一套结构化语法;
313
+ 接口与枚举带构造型,抽象类标 «abstract»;**框高随成员自动增长**,成员不会被画到框外。
314
+
315
+ 可运行示例:`tests/uml-editor.html`(电商支付的类模型:继承 / 实现 / 组合 / 关联 / 依赖)。
316
+
255
317
  ## 6. 在 React 中使用
256
318
 
257
319
  包内置 React 绑定(子路径导出 `ice-entity-designer/react`),不需要自己写 ref / effect 胶水代码。
@@ -394,6 +456,25 @@ React 里可沿用 `createFlowSession` 的模式自建一层封装。
394
456
 
395
457
  ## 7. 项目结构
396
458
 
459
+ ### 7.1 一个「域包(domain pack)」由什么组成
460
+
461
+ 域包 = **一个领域的记法 + 应用层 + 语义校验**,跑在同一套引擎与同一套应用层机制上。已落地的三个
462
+ 域(ER / 流程图 / BPMN)再加 UML,边际成本主要在「记法本身」,不在编辑器:
463
+
464
+ | 组成 | 复用什么 | 以 UML 为例 |
465
+ |---|---|---|
466
+ | 形状 | 引擎的复合组件(`hasDerivedChildren`):内部子组件按 state 派生、不进文档 | `UmlClass`:三段式类框 |
467
+ | 连线 | 引擎折线(插槽吸附 / 正交·贝塞尔路由 / 标签 / 跟随宿主);**端点标记进路径点集**,因此描边、填充、导出都自动带上 | `UmlRelation`:六种关系 = 线型 + 三角/菱形/开放箭头 |
468
+ | 应用层 | `FlowDesigner`(选择 / 增删改 / 连线 / 撤销重做 / 快照 / 适应视图 / 订阅 / `toSvg`) | `UmlDesigner` 只重写「建什么图元 + 类型过滤」 |
469
+ | 语义校验 | 结构校验之外的部分自写,规则直白 | `validateUml()`:重名类 / 悬空关系 / 继承成环 |
470
+ | 文档格式 | 引擎序列化(typeId 注册表 + `hasDerivedChildren`),零登记 | 类与关系统统自动往返 |
471
+ | 互操作 | 有标准格式的域就做(BPMN 2.0 XML 已有) | UML 的 XMI / PlantUML 互操作待补 |
472
+ | 交付物 | 示例页 + e2e + README + (可选)JSON DSL 与技能 | `tests/uml-editor.html` + `e2e/uml-editor.spec.ts` |
473
+
474
+ 新开一个域包时,按这张表从上往下填即可;**不要**在域包里另造序列化、另造选择/历史、另造导出。
475
+
476
+ ### 7.2 目录一览
477
+
397
478
  ```
398
479
  src/
399
480
  ├── designer/EntityDesigner.ts # 应用层:选择 / 增删改 / 连接 / 校验 / 历史 / 项目存取 / 变更订阅
@@ -402,6 +483,10 @@ src/
402
483
  │ ├── FlowNode.ts # 节点:四类预设(起止 / 处理 / 判定 / 输入输出)+ 居中标题
403
484
  │ ├── FlowEdge.ts # 连线:正交 / 贝塞尔 + 箭头 + 分支标签,插槽吸附
404
485
  │ └── FlowDesigner.ts # 应用层:建节点/连线、选择、增删改、历史、快照存取、适应视图
486
+ ├── uml/ # UML 类图(domain pack:三段式类框 + 六种关系 + 语义校验)
487
+ │ ├── UmlClass.ts # 复合组件:类名 / 属性 / 方法三段,构造型,框高随成员增长
488
+ │ ├── UmlRelation.ts # 六种关系 = 线型 + 端点标记(三角/菱形/开放箭头,标记进路径点集)
489
+ │ └── UmlDesigner.ts # FlowDesigner 薄扩展:建 UML 图元 + 类型过滤 + validateUml()
405
490
  ├── bpmn/ # BPMN 2.0(FlowDesigner 之上的业务记法)
406
491
  │ ├── bpmn_shapes.ts # 形状:事件圆 / 网关菱形 / 任务角标 / 子流程标记 / 数据对象 / 注释 / 池泳道
407
492
  │ ├── BpmnDesigner.ts # 应用层:容器真嵌套(池→泳道→节点)、条件与默认流标记、语义校验