ice-entity-designer 0.0.22 → 0.0.23

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.
@@ -251,6 +251,23 @@ declare class ICEPolyLine extends ICEDotPath {
251
251
  * `__measureLabelBoxForBounds()`(盒子计算不应留下渲染副作用)。
252
252
  */
253
253
  private __labelMetrics;
254
+ /**
255
+ * 连线标签的**渲染信息**(公开口径):位置、尺寸、字体与配色。
256
+ *
257
+ * 与 `drawLabel()` / `__labelMetrics()` 同源 —— 画布怎么画,导出(SVG)就怎么描述。
258
+ * 连线标签是画布 `fillText` 出来的,不像节点标题那样是独立的 ICEText 子组件,
259
+ * 所以导出器必须显式问它,否则「是/否」「条件」这类标签会在导出里凭空消失。
260
+ */
261
+ getLabelRenderInfo(): {
262
+ text: string;
263
+ x: number;
264
+ y: number;
265
+ halfW: number;
266
+ halfH: number;
267
+ fontSize: number;
268
+ fillStyle: string;
269
+ backgroundColor: string;
270
+ } | null;
254
271
  /** `__localBox()` 专用包装:算完把 `ctx.font` 恢复 —— 盒子计算不该改变渲染状态。 */
255
272
  private __measureLabelBoxForBounds;
256
273
  /**
@@ -91,6 +91,15 @@ declare class ICEText extends ICEComponent {
91
91
  width: any;
92
92
  height: any;
93
93
  };
94
+ /**
95
+ * 多行文本的行距系数。
96
+ *
97
+ * 为什么不能直接用 `actualBoundingBoxAscent + Descent`(字形墨迹高度)当行距:
98
+ * 墨迹只覆盖「有笔画的部分」,拉丁字母的 cap-height 比 em 小得多 —— 14px Tahoma 的
99
+ * 墨迹高 ≈ 12px,拿它当行距时中文(墨迹接近满 em)会**上下叠在一起**,看起来像文字被压扁。
100
+ * 按字号 × 1.35 取行距更接近系统的自然行高,同时保证 ≥ 墨迹高度(不会挤)。
101
+ */
102
+ private static readonly LINE_HEIGHT_RATIO;
94
103
  /**
95
104
  * @method measureText
96
105
  *
@@ -126,6 +135,18 @@ declare class ICEText extends ICEComponent {
126
135
  private __applyMeasuredSize;
127
136
  /** DOM 降级测量:line-height 归一为 1,减少 leading 干扰(旧环境/小程序)。 */
128
137
  private __measureByDOM;
138
+ /**
139
+ * 文本的**渲染行布局**:每一行的内容与基线坐标(组件本地坐标)。
140
+ *
141
+ * 画布渲染与 SVG 导出共用这一份口径 —— 两处各算一遍必然漂移(改了对齐公式忘了另一处,
142
+ * 表现为「导出的文字整体偏移」)。返回的 `x` 是**文字左边缘**(左/居中/右对齐都按画布公式算好),
143
+ * `y` 是 baseline 位置。
144
+ */
145
+ getRenderLines(): Array<{
146
+ text: string;
147
+ x: number;
148
+ y: number;
149
+ }>;
129
150
  /**
130
151
  * @method doRender
131
152
  * @overwrite
@@ -91,6 +91,15 @@ declare class ICEText extends ICEComponent {
91
91
  width: any;
92
92
  height: any;
93
93
  };
94
+ /**
95
+ * 多行文本的行距系数。
96
+ *
97
+ * 为什么不能直接用 `actualBoundingBoxAscent + Descent`(字形墨迹高度)当行距:
98
+ * 墨迹只覆盖「有笔画的部分」,拉丁字母的 cap-height 比 em 小得多 —— 14px Tahoma 的
99
+ * 墨迹高 ≈ 12px,拿它当行距时中文(墨迹接近满 em)会**上下叠在一起**,看起来像文字被压扁。
100
+ * 按字号 × 1.35 取行距更接近系统的自然行高,同时保证 ≥ 墨迹高度(不会挤)。
101
+ */
102
+ private static readonly LINE_HEIGHT_RATIO;
94
103
  /**
95
104
  * @method measureText
96
105
  *
@@ -126,6 +135,18 @@ declare class ICEText extends ICEComponent {
126
135
  private __applyMeasuredSize;
127
136
  /** DOM 降级测量:line-height 归一为 1,减少 leading 干扰(旧环境/小程序)。 */
128
137
  private __measureByDOM;
138
+ /**
139
+ * 文本的**渲染行布局**:每一行的内容与基线坐标(组件本地坐标)。
140
+ *
141
+ * 画布渲染与 SVG 导出共用这一份口径 —— 两处各算一遍必然漂移(改了对齐公式忘了另一处,
142
+ * 表现为「导出的文字整体偏移」)。返回的 `x` 是**文字左边缘**(左/居中/右对齐都按画布公式算好),
143
+ * `y` 是 baseline 位置。
144
+ */
145
+ getRenderLines(): Array<{
146
+ text: string;
147
+ x: number;
148
+ y: number;
149
+ }>;
129
150
  /**
130
151
  * @method doRender
131
152
  * @overwrite
@@ -49,6 +49,8 @@ export { default as ICELayeredLayout } from './layout/ICELayeredLayout.mjs';
49
49
  export { default as ICETheme, baseTokens, DEFAULT_THEME, DARK_THEME, registerTheme, setTheme, getTheme, STYLE_PRESETS, } from './theme/ICETheme.mjs';
50
50
  export { default as ICE } from './ICE.mjs';
51
51
  export { default as CanvasRenderer } from './renderer/CanvasRenderer.mjs';
52
+ export { exportSvg, exportSvgResult } from './export/SvgExporter.mjs';
53
+ export type { SvgExportOptions, SvgExportResult } from './export/SvgExporter.mjs';
52
54
  export { default as PluginHost } from './plugin/PluginHost.mjs';
53
55
  export type { ICEPlugin, ICEPluginTool, ICERenderHook, ICERenderFrame } from './plugin/PluginHost.mjs';
54
56
  export { default as Serializer, SERIALIZATION_VERSION } from './persistence/Serializer.mjs';
@@ -49,6 +49,8 @@ export { default as ICELayeredLayout } from './layout/ICELayeredLayout';
49
49
  export { default as ICETheme, baseTokens, DEFAULT_THEME, DARK_THEME, registerTheme, setTheme, getTheme, STYLE_PRESETS, } from './theme/ICETheme';
50
50
  export { default as ICE } from './ICE';
51
51
  export { default as CanvasRenderer } from './renderer/CanvasRenderer';
52
+ export { exportSvg, exportSvgResult } from './export/SvgExporter';
53
+ export type { SvgExportOptions, SvgExportResult } from './export/SvgExporter';
52
54
  export { default as PluginHost } from './plugin/PluginHost';
53
55
  export type { ICEPlugin, ICEPluginTool, ICERenderHook, ICERenderFrame } from './plugin/PluginHost';
54
56
  export { default as Serializer, SERIALIZATION_VERSION } from './persistence/Serializer';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "author": "大漠穷秋",
3
3
  "name": "ice-entity-designer",
4
- "version": "0.0.22",
4
+ "version": "0.0.23",
5
5
  "description": "An entity designer based on ice-render.",
6
6
  "repository": {
7
7
  "type": "git",