@retikz/core 0.2.0-alpha.5 → 0.2.0-alpha.6
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/dist/es/compile/anchor-cache.d.ts +10 -0
- package/dist/es/compile/anchor-cache.d.ts.map +1 -1
- package/dist/es/compile/anchor-cache.js +25 -1
- package/dist/es/compile/index.d.ts +0 -1
- package/dist/es/compile/index.d.ts.map +1 -1
- package/dist/es/compile/path/anchor.d.ts.map +1 -1
- package/dist/es/compile/path/anchor.js +17 -18
- package/dist/es/compile/path/index.d.ts.map +1 -1
- package/dist/es/compile/path/index.js +10 -4
- package/dist/es/geometry/_edge.d.ts +29 -0
- package/dist/es/geometry/_edge.d.ts.map +1 -0
- package/dist/es/geometry/_edge.js +35 -0
- package/dist/es/geometry/circle.d.ts +3 -0
- package/dist/es/geometry/circle.d.ts.map +1 -1
- package/dist/es/geometry/circle.js +7 -0
- package/dist/es/geometry/diamond.d.ts +3 -0
- package/dist/es/geometry/diamond.d.ts.map +1 -1
- package/dist/es/geometry/diamond.js +29 -0
- package/dist/es/geometry/ellipse.d.ts +3 -0
- package/dist/es/geometry/ellipse.d.ts.map +1 -1
- package/dist/es/geometry/ellipse.js +7 -0
- package/dist/es/geometry/rect.d.ts +3 -0
- package/dist/es/geometry/rect.d.ts.map +1 -1
- package/dist/es/geometry/rect.js +6 -0
- package/dist/es/index.d.ts +3 -3
- package/dist/es/index.d.ts.map +1 -1
- package/dist/es/index.js +5 -4
- package/dist/es/ir/coordinate.d.ts +2 -2
- package/dist/es/ir/node.d.ts +2 -2
- package/dist/es/ir/path/path.d.ts +662 -167
- package/dist/es/ir/path/path.d.ts.map +1 -1
- package/dist/es/ir/path/step.d.ts +930 -192
- package/dist/es/ir/path/step.d.ts.map +1 -1
- package/dist/es/ir/path/target.d.ts +71 -1
- package/dist/es/ir/path/target.d.ts.map +1 -1
- package/dist/es/ir/path/target.js +24 -3
- package/dist/es/ir/scope.d.ts +932 -194
- package/dist/es/ir/scope.d.ts.map +1 -1
- package/dist/es/parsers/index.d.ts +1 -0
- package/dist/es/parsers/index.d.ts.map +1 -1
- package/dist/es/parsers/parseNodeTarget.d.ts +4 -0
- package/dist/es/parsers/parseNodeTarget.d.ts.map +1 -0
- package/dist/es/parsers/parseNodeTarget.js +33 -0
- package/dist/es/parsers/parseTargetSugar.d.ts +4 -2
- package/dist/es/parsers/parseTargetSugar.d.ts.map +1 -1
- package/dist/es/parsers/parseTargetSugar.js +6 -3
- package/dist/es/parsers/parseWay.d.ts +1 -1
- package/dist/es/parsers/parseWay.d.ts.map +1 -1
- package/dist/es/shapes/circle.d.ts.map +1 -1
- package/dist/es/shapes/circle.js +1 -0
- package/dist/es/shapes/diamond.d.ts.map +1 -1
- package/dist/es/shapes/diamond.js +1 -0
- package/dist/es/shapes/ellipse.d.ts.map +1 -1
- package/dist/es/shapes/ellipse.js +1 -0
- package/dist/es/shapes/rectangle.d.ts.map +1 -1
- package/dist/es/shapes/rectangle.js +1 -0
- package/dist/es/shapes/types.d.ts +6 -0
- package/dist/es/shapes/types.d.ts.map +1 -1
- package/dist/lib/compile/anchor-cache.cjs +25 -0
- package/dist/lib/compile/anchor-cache.d.ts +10 -0
- package/dist/lib/compile/anchor-cache.d.ts.map +1 -1
- package/dist/lib/compile/index.d.ts +0 -1
- package/dist/lib/compile/index.d.ts.map +1 -1
- package/dist/lib/compile/path/anchor.cjs +16 -17
- package/dist/lib/compile/path/anchor.d.ts.map +1 -1
- package/dist/lib/compile/path/index.cjs +10 -4
- package/dist/lib/compile/path/index.d.ts.map +1 -1
- package/dist/lib/geometry/_edge.cjs +38 -0
- package/dist/lib/geometry/_edge.d.ts +29 -0
- package/dist/lib/geometry/_edge.d.ts.map +1 -0
- package/dist/lib/geometry/circle.cjs +7 -0
- package/dist/lib/geometry/circle.d.ts +3 -0
- package/dist/lib/geometry/circle.d.ts.map +1 -1
- package/dist/lib/geometry/diamond.cjs +29 -0
- package/dist/lib/geometry/diamond.d.ts +3 -0
- package/dist/lib/geometry/diamond.d.ts.map +1 -1
- package/dist/lib/geometry/ellipse.cjs +7 -0
- package/dist/lib/geometry/ellipse.d.ts +3 -0
- package/dist/lib/geometry/ellipse.d.ts.map +1 -1
- package/dist/lib/geometry/rect.cjs +6 -0
- package/dist/lib/geometry/rect.d.ts +3 -0
- package/dist/lib/geometry/rect.d.ts.map +1 -1
- package/dist/lib/index.cjs +6 -2
- package/dist/lib/index.d.ts +3 -3
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/ir/coordinate.d.ts +2 -2
- package/dist/lib/ir/node.d.ts +2 -2
- package/dist/lib/ir/path/path.d.ts +662 -167
- package/dist/lib/ir/path/path.d.ts.map +1 -1
- package/dist/lib/ir/path/step.d.ts +930 -192
- package/dist/lib/ir/path/step.d.ts.map +1 -1
- package/dist/lib/ir/path/target.cjs +25 -2
- package/dist/lib/ir/path/target.d.ts +71 -1
- package/dist/lib/ir/path/target.d.ts.map +1 -1
- package/dist/lib/ir/scope.d.ts +932 -194
- package/dist/lib/ir/scope.d.ts.map +1 -1
- package/dist/lib/parsers/index.d.ts +1 -0
- package/dist/lib/parsers/index.d.ts.map +1 -1
- package/dist/lib/parsers/parseNodeTarget.cjs +33 -0
- package/dist/lib/parsers/parseNodeTarget.d.ts +4 -0
- package/dist/lib/parsers/parseNodeTarget.d.ts.map +1 -0
- package/dist/lib/parsers/parseTargetSugar.cjs +6 -3
- package/dist/lib/parsers/parseTargetSugar.d.ts +4 -2
- package/dist/lib/parsers/parseTargetSugar.d.ts.map +1 -1
- package/dist/lib/parsers/parseWay.d.ts +1 -1
- package/dist/lib/parsers/parseWay.d.ts.map +1 -1
- package/dist/lib/shapes/circle.cjs +1 -0
- package/dist/lib/shapes/circle.d.ts.map +1 -1
- package/dist/lib/shapes/diamond.cjs +1 -0
- package/dist/lib/shapes/diamond.d.ts.map +1 -1
- package/dist/lib/shapes/ellipse.cjs +1 -0
- package/dist/lib/shapes/ellipse.d.ts.map +1 -1
- package/dist/lib/shapes/rectangle.cjs +1 -0
- package/dist/lib/shapes/rectangle.d.ts.map +1 -1
- package/dist/lib/shapes/types.d.ts +6 -0
- package/dist/lib/shapes/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/es/compile/parseTarget.d.ts +0 -20
- package/dist/es/compile/parseTarget.d.ts.map +0 -1
- package/dist/es/compile/parseTarget.js +0 -36
- package/dist/lib/compile/parseTarget.cjs +0 -36
- package/dist/lib/compile/parseTarget.d.ts +0 -20
- package/dist/lib/compile/parseTarget.d.ts.map +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Side } from '../geometry/_edge';
|
|
1
2
|
import { IRPosition } from '../ir';
|
|
2
3
|
import { NodeLayout } from './node';
|
|
3
4
|
/**
|
|
@@ -9,4 +10,13 @@ import { NodeLayout } from './node';
|
|
|
9
10
|
* @returns 全局坐标系下的 IRPosition `[x, y]`
|
|
10
11
|
*/
|
|
11
12
|
export declare const resolveAnchor: (layout: NodeLayout, anchorName: string) => IRPosition;
|
|
13
|
+
/**
|
|
14
|
+
* 取节点边上比例点 `{ side, t }` 的全局坐标,带 per-layout 缓存
|
|
15
|
+
* @description 走 `layout.shapeDef.edgePoint`——shape 未实现(如自定义 shape)抛"does not support side anchors";
|
|
16
|
+
* 零尺寸 layout(Coordinate)抛错(边上比例点对一个点无意义,报错比退化中心更可诊断,见 alpha.6 ADR-01 决策细节 #10)。
|
|
17
|
+
* 缓存 key = `${side}:${t}`,与命名 anchor(`'north'` / `'30'`)共用 layout 的 Map——key 含 `:` 故命名空间不冲突。
|
|
18
|
+
* @param layout 已 Pass 1 完成的 NodeLayout(rect 已是全局坐标)
|
|
19
|
+
* @returns 全局坐标系下的 IRPosition `[x, y]`
|
|
20
|
+
*/
|
|
21
|
+
export declare const resolveEdgePoint: (layout: NodeLayout, side: Side, t: number) => IRPosition;
|
|
12
22
|
//# sourceMappingURL=anchor-cache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anchor-cache.d.ts","sourceRoot":"","sources":["../../../src/compile/anchor-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"anchor-cache.d.ts","sourceRoot":"","sources":["../../../src/compile/anchor-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AA4BzC;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GACxB,QAAQ,UAAU,EAClB,YAAY,MAAM,KACjB,UAWF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,UAAU,EAClB,MAAM,IAAI,EACV,GAAG,MAAM,KACR,UAuBF,CAAC"}
|
|
@@ -37,5 +37,29 @@ var resolveAnchor = (layout, anchorName) => {
|
|
|
37
37
|
layoutCache.set(anchorName, result);
|
|
38
38
|
return result;
|
|
39
39
|
};
|
|
40
|
+
/**
|
|
41
|
+
* 取节点边上比例点 `{ side, t }` 的全局坐标,带 per-layout 缓存
|
|
42
|
+
* @description 走 `layout.shapeDef.edgePoint`——shape 未实现(如自定义 shape)抛"does not support side anchors";
|
|
43
|
+
* 零尺寸 layout(Coordinate)抛错(边上比例点对一个点无意义,报错比退化中心更可诊断,见 alpha.6 ADR-01 决策细节 #10)。
|
|
44
|
+
* 缓存 key = `${side}:${t}`,与命名 anchor(`'north'` / `'30'`)共用 layout 的 Map——key 含 `:` 故命名空间不冲突。
|
|
45
|
+
* @param layout 已 Pass 1 完成的 NodeLayout(rect 已是全局坐标)
|
|
46
|
+
* @returns 全局坐标系下的 IRPosition `[x, y]`
|
|
47
|
+
*/
|
|
48
|
+
var resolveEdgePoint = (layout, side, t) => {
|
|
49
|
+
const { edgePoint } = layout.shapeDef;
|
|
50
|
+
if (!edgePoint) throw new Error(`shape '${layout.shapeName}' does not support side anchors ({ side, t })`);
|
|
51
|
+
if (layout.rect.width === 0 && layout.rect.height === 0) throw new Error(`{ side, t } is not meaningful on a zero-size Coordinate (shape '${layout.shapeName}')`);
|
|
52
|
+
let layoutCache = cache.get(layout);
|
|
53
|
+
if (!layoutCache) {
|
|
54
|
+
layoutCache = /* @__PURE__ */ new Map();
|
|
55
|
+
cache.set(layout, layoutCache);
|
|
56
|
+
}
|
|
57
|
+
const key = `${side}:${t}`;
|
|
58
|
+
const cached = layoutCache.get(key);
|
|
59
|
+
if (cached !== void 0) return cached;
|
|
60
|
+
const result = positionToIR(edgePoint(layout.rect, side, t));
|
|
61
|
+
layoutCache.set(key, result);
|
|
62
|
+
return result;
|
|
63
|
+
};
|
|
40
64
|
//#endregion
|
|
41
|
-
export { resolveAnchor };
|
|
65
|
+
export { resolveAnchor, resolveEdgePoint };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/compile/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/compile/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anchor.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/anchor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"anchor.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/anchor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAqB/C;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,QAAQ,EAChB,WAAW,SAAS,EACpB,aAAY,aAAa,CAAC,SAAS,CAAM,KACxC,UAAU,GAAG,IAkBf,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,QAAQ,GACnB,MAAM,UAAU,EAChB,MAAM,UAAU,EAChB,KAAK,IAAI,GAAG,IAAI,KACf,UACqD,CAAC;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,QAAQ,QAAQ,EAChB,QAAQ,UAAU,EAClB,WAAW,SAAS,EACpB,aAAY,aAAa,CAAC,SAAS,CAAM,KACxC,UAAU,GAAG,IAkBf,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,SAAS,GAAI,GAAG,UAAU,GAAG,IAAI,EAAE,GAAG,UAAU,GAAG,IAAI,KAAG,OACzB,CAAC;AAE/C,6BAA6B;AAC7B,eAAO,MAAM,WAAW,GAAI,GAAG,UAAU,EAAE,QAAQ,UAAU,EAAE,MAAM,MAAM,KAAG,UAM7E,CAAC"}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { applyTransformChain } from "../scope.js";
|
|
2
2
|
import { resolvePosition } from "../position.js";
|
|
3
3
|
import { boundaryPointOf } from "../node.js";
|
|
4
|
-
import { resolveAnchor } from "../anchor-cache.js";
|
|
5
|
-
import { parseNodeRef } from "../parseTarget.js";
|
|
4
|
+
import { resolveAnchor, resolveEdgePoint } from "../anchor-cache.js";
|
|
6
5
|
//#region src/compile/path/anchor.ts
|
|
6
|
+
/** target 是否对象形态 NodeTarget(`{ id, anchor?, offset? }`);与 Position(array) / Polar / Offset(of) / Relative 区分(独有 `id`) */
|
|
7
|
+
var isNodeTarget = (t) => typeof t === "object" && !Array.isArray(t) && "id" in t;
|
|
8
|
+
/** 解析 NodeTarget 的 anchor(非 undefined)到世界坐标:命名 / 角度走 resolveAnchor,`{ side, t }` 走 resolveEdgePoint */
|
|
9
|
+
var resolveAnchorRef = (node, anchor) => {
|
|
10
|
+
if (typeof anchor === "number") return resolveAnchor(node, String(anchor));
|
|
11
|
+
if (typeof anchor === "string") return resolveAnchor(node, anchor);
|
|
12
|
+
return resolveEdgePoint(node, anchor.side, anchor.t);
|
|
13
|
+
};
|
|
14
|
+
/** anchor/边点解析后叠加世界系 offset(不随节点 rotate 旋转) */
|
|
15
|
+
var addOffset = (base, offset) => offset ? [base[0] + offset[0], base[1] + offset[1]] : base;
|
|
7
16
|
/**
|
|
8
17
|
* 求 step.to 的参考点(给 boundary clip 算方向 / 折角 corner 用)
|
|
9
18
|
* @description 三态:`'A'`(auto) 节点中心;`'A.<anchor>'`/`'A.<deg>'` 显式锚点 refPoint=endpoint 位置不随邻居变。直接坐标/极坐标解析为笛卡尔。
|
|
@@ -12,15 +21,10 @@ import { parseNodeRef } from "../parseTarget.js";
|
|
|
12
21
|
* `applyTransformChain` 投回全局。`scopeChain=[]` 等价 v0.1(恒等)。
|
|
13
22
|
*/
|
|
14
23
|
var refPointOfTarget = (target, nameStack, scopeChain = []) => {
|
|
15
|
-
if (
|
|
16
|
-
const
|
|
17
|
-
const node = nameStack.lookup(ref.id);
|
|
24
|
+
if (isNodeTarget(target)) {
|
|
25
|
+
const node = nameStack.lookup(target.id);
|
|
18
26
|
if (!node) return null;
|
|
19
|
-
|
|
20
|
-
case "node": return [node.rect.x, node.rect.y];
|
|
21
|
-
case "anchor": return resolveAnchor(node, ref.anchor);
|
|
22
|
-
case "angle": return resolveAnchor(node, String(ref.angle));
|
|
23
|
-
}
|
|
27
|
+
return addOffset(target.anchor === void 0 ? [node.rect.x, node.rect.y] : resolveAnchorRef(node, target.anchor), target.offset);
|
|
24
28
|
}
|
|
25
29
|
if (typeof target === "object" && !Array.isArray(target) && ("relative" in target || "relativeAccumulate" in target)) return null;
|
|
26
30
|
const local = resolvePosition(target, nameStack, void 0, scopeChain);
|
|
@@ -36,15 +40,10 @@ var cornerOf = (prev, curr, via) => via === "-|" ? [curr[0], prev[1]] : [prev[0]
|
|
|
36
40
|
* `resolvePosition(..., scopeChain)` 拿到当前 scope 局部坐标后 `applyTransformChain` 投回全局。
|
|
37
41
|
*/
|
|
38
42
|
var clipForTarget = (target, toward, nameStack, scopeChain = []) => {
|
|
39
|
-
if (
|
|
40
|
-
const
|
|
41
|
-
const node = nameStack.lookup(ref.id);
|
|
43
|
+
if (isNodeTarget(target)) {
|
|
44
|
+
const node = nameStack.lookup(target.id);
|
|
42
45
|
if (!node) return null;
|
|
43
|
-
|
|
44
|
-
case "node": return boundaryPointOf(node, toward);
|
|
45
|
-
case "anchor": return resolveAnchor(node, ref.anchor);
|
|
46
|
-
case "angle": return resolveAnchor(node, String(ref.angle));
|
|
47
|
-
}
|
|
46
|
+
return addOffset(target.anchor === void 0 ? boundaryPointOf(node, toward) : resolveAnchorRef(node, target.anchor), target.offset);
|
|
48
47
|
}
|
|
49
48
|
if (typeof target === "object" && !Array.isArray(target) && ("relative" in target || "relativeAccumulate" in target)) return null;
|
|
50
49
|
const local = resolvePosition(target, nameStack, void 0, scopeChain);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/index.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EAGX,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAEV,cAAc,EACd,SAAS,EACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/index.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EACV,MAAM,EACN,UAAU,EAGX,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAEV,cAAc,EACd,SAAS,EACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,iBAAiB,CAAC;AAkCtE,mCAAmC;AACnC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iCAAiC;IACjC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,KAAK,IAAI,CAAC;IACX,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;CACvC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,EACZ,WAAW,SAAS,EACpB,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAC5B,cAAa,YAA+B,EAC5C,WAAU,gBAAqB,KAC9B;IAAE,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CAAE,GAAG,IAkhBrE,CAAC"}
|
|
@@ -9,6 +9,8 @@ import { normalizeRelativeTargets } from "./relative.js";
|
|
|
9
9
|
import { applyArrowShrinks, computeShrink, endpointArrows } from "./shrink.js";
|
|
10
10
|
import { splitSubPathsForEndpointArrows } from "./split.js";
|
|
11
11
|
//#region src/compile/path/index.ts
|
|
12
|
+
/** 目标若是对象 NodeTarget(`{ id, ... }`)返回其 id,否则 undefined——给 UNRESOLVED_NODE_REFERENCE 诊断用 */
|
|
13
|
+
var nodeRefId = (t) => typeof t === "object" && !Array.isArray(t) && "id" in t ? t.id : void 0;
|
|
12
14
|
/**
|
|
13
15
|
* 语义 stroke 档位 → 数值(user units)
|
|
14
16
|
* @description 对齐 TikZ 比例(thin=0.4pt→1=默认 strokeWidth):ultraThin 0.25、veryThin 0.5、thin 1、semithick 1.5、thick 2、veryThick 3、ultraThick 4。显式 strokeWidth 覆盖 thickness。
|
|
@@ -56,7 +58,8 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
|
|
|
56
58
|
const anchors = steps.map((s, idx) => {
|
|
57
59
|
if (!hasTo(s)) return null;
|
|
58
60
|
const ref = refPointOfTarget(s.to, nameStack, scopeChain);
|
|
59
|
-
|
|
61
|
+
const toId = nodeRefId(s.to);
|
|
62
|
+
if (!ref && toId !== void 0) warn("UNRESOLVED_NODE_REFERENCE", `Step.to references undefined node id '${toId}'; the entire path is skipped`, `children[${idx}].to`);
|
|
60
63
|
return ref;
|
|
61
64
|
});
|
|
62
65
|
/**
|
|
@@ -204,8 +207,10 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
|
|
|
204
207
|
const fromPt = refPointOfTarget(step.from, nameStack, scopeChain);
|
|
205
208
|
const toPt = refPointOfTarget(step.to, nameStack, scopeChain);
|
|
206
209
|
if (!fromPt || !toPt) {
|
|
207
|
-
|
|
208
|
-
|
|
210
|
+
const fromId = nodeRefId(step.from);
|
|
211
|
+
const rectToId = nodeRefId(step.to);
|
|
212
|
+
if (!fromPt && fromId !== void 0) warn("UNRESOLVED_NODE_REFERENCE", `Rectangle from references undefined node id '${fromId}'; the entire path is skipped`, `children[${i}].from`);
|
|
213
|
+
if (!toPt && rectToId !== void 0) warn("UNRESOLVED_NODE_REFERENCE", `Rectangle to references undefined node id '${rectToId}'; the entire path is skipped`, `children[${i}].to`);
|
|
209
214
|
return null;
|
|
210
215
|
}
|
|
211
216
|
let rectStart = null;
|
|
@@ -230,7 +235,8 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
|
|
|
230
235
|
if (step.center !== void 0) {
|
|
231
236
|
const c = refPointOfTarget(step.center, nameStack, scopeChain);
|
|
232
237
|
if (!c) {
|
|
233
|
-
|
|
238
|
+
const centerId = nodeRefId(step.center);
|
|
239
|
+
if (centerId !== void 0) warn("UNRESOLVED_NODE_REFERENCE", `Arc step center references undefined node id '${centerId}'; the entire path is skipped`, `children[${i}].center`);
|
|
234
240
|
return null;
|
|
235
241
|
}
|
|
236
242
|
center = c;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Position } from './point';
|
|
2
|
+
/** 边上比例点 `{ side, t }` 的四个 side(north/south/east/west) */
|
|
3
|
+
export type Side = 'north' | 'south' | 'east' | 'west';
|
|
4
|
+
/**
|
|
5
|
+
* rect 四直边 t=0 / t=1 端点对应的角 anchor
|
|
6
|
+
* @description 方向约定单一真源:north/south = 西→东(t=0 在 west 端),east/west = 北→南(t=0 在 north 端)。
|
|
7
|
+
* 仅 rect 直边用两角端点;circle/ellipse 用 `edgeAngleDeg` 角度表、diamond 用过顶点折线。
|
|
8
|
+
*/
|
|
9
|
+
export declare const EDGE_ENDS: {
|
|
10
|
+
readonly north: readonly ["north-west", "north-east"];
|
|
11
|
+
readonly south: readonly ["south-west", "south-east"];
|
|
12
|
+
readonly east: readonly ["north-east", "south-east"];
|
|
13
|
+
readonly west: readonly ["north-west", "south-west"];
|
|
14
|
+
};
|
|
15
|
+
/** 线性插值 a + (b − a)·t */
|
|
16
|
+
export declare const lerpPoint: (a: Position, b: Position, t: number) => Position;
|
|
17
|
+
/**
|
|
18
|
+
* circle / ellipse 周长弧段:side 的局部参数角 θ(t),单位度
|
|
19
|
+
* @description 约定同 geometry 既有 `(cosθ, sinθ)` + y 轴向下 ⇒ east=0° / south=90° / west=180° / north=270°,
|
|
20
|
+
* 顺时针为正。每条 side 是一段 90° 弧(等角插值);三点(t=0/0.5/1)与 9-anchor 重合。
|
|
21
|
+
*/
|
|
22
|
+
export declare const edgeAngleDeg: (side: Side, t: number) => number;
|
|
23
|
+
/**
|
|
24
|
+
* diamond 过 cardinal 顶点的两段折线
|
|
25
|
+
* @description t∈[0,0.5] 走 p0→vertex、t∈[0.5,1] 走 vertex→p1;t=0.5 恰落 vertex。
|
|
26
|
+
* p0/p1 为相邻边中点 anchor、vertex 为 cardinal 顶点 anchor——全落真实斜边
|
|
27
|
+
*/
|
|
28
|
+
export declare const polylineViaVertex: (p0: Position, vertex: Position, p1: Position, t: number) => Position;
|
|
29
|
+
//# sourceMappingURL=_edge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_edge.d.ts","sourceRoot":"","sources":["../../../src/geometry/_edge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGxC,0DAA0D;AAC1D,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;;CAK8C,CAAC;AAErE,yBAAyB;AACzB,eAAO,MAAM,SAAS,GAAI,GAAG,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,KAAG,QAG/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,IAAI,EAAE,GAAG,MAAM,KAAG,MAWpD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAC5B,IAAI,QAAQ,EACZ,QAAQ,QAAQ,EAChB,IAAI,QAAQ,EACZ,GAAG,MAAM,KACR,QAA4F,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
//#region src/geometry/_edge.ts
|
|
2
|
+
/**
|
|
3
|
+
* rect 四直边 t=0 / t=1 端点对应的角 anchor
|
|
4
|
+
* @description 方向约定单一真源:north/south = 西→东(t=0 在 west 端),east/west = 北→南(t=0 在 north 端)。
|
|
5
|
+
* 仅 rect 直边用两角端点;circle/ellipse 用 `edgeAngleDeg` 角度表、diamond 用过顶点折线。
|
|
6
|
+
*/
|
|
7
|
+
var EDGE_ENDS = {
|
|
8
|
+
north: ["north-west", "north-east"],
|
|
9
|
+
south: ["south-west", "south-east"],
|
|
10
|
+
east: ["north-east", "south-east"],
|
|
11
|
+
west: ["north-west", "south-west"]
|
|
12
|
+
};
|
|
13
|
+
/** 线性插值 a + (b − a)·t */
|
|
14
|
+
var lerpPoint = (a, b, t) => [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t];
|
|
15
|
+
/**
|
|
16
|
+
* circle / ellipse 周长弧段:side 的局部参数角 θ(t),单位度
|
|
17
|
+
* @description 约定同 geometry 既有 `(cosθ, sinθ)` + y 轴向下 ⇒ east=0° / south=90° / west=180° / north=270°,
|
|
18
|
+
* 顺时针为正。每条 side 是一段 90° 弧(等角插值);三点(t=0/0.5/1)与 9-anchor 重合。
|
|
19
|
+
*/
|
|
20
|
+
var edgeAngleDeg = (side, t) => {
|
|
21
|
+
switch (side) {
|
|
22
|
+
case "north": return 225 + 90 * t;
|
|
23
|
+
case "south": return 135 - 90 * t;
|
|
24
|
+
case "east": return -45 + 90 * t;
|
|
25
|
+
case "west": return 225 - 90 * t;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* diamond 过 cardinal 顶点的两段折线
|
|
30
|
+
* @description t∈[0,0.5] 走 p0→vertex、t∈[0.5,1] 走 vertex→p1;t=0.5 恰落 vertex。
|
|
31
|
+
* p0/p1 为相邻边中点 anchor、vertex 为 cardinal 顶点 anchor——全落真实斜边
|
|
32
|
+
*/
|
|
33
|
+
var polylineViaVertex = (p0, vertex, p1, t) => t <= .5 ? lerpPoint(p0, vertex, t * 2) : lerpPoint(vertex, p1, (t - .5) * 2);
|
|
34
|
+
//#endregion
|
|
35
|
+
export { EDGE_ENDS, edgeAngleDeg, lerpPoint, polylineViaVertex };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Side } from './_edge';
|
|
1
2
|
import { Position } from './point';
|
|
2
3
|
import { RectAnchor } from './rect';
|
|
3
4
|
/** 圆形:几何中心 + 半径,预留旋转字段保持与 Rect 同形 API */
|
|
@@ -19,5 +20,7 @@ export declare const circle: {
|
|
|
19
20
|
anchor: (c: Circle, name: RectAnchor) => Position;
|
|
20
21
|
/** 从圆心向 toward 方向射线与圆周交点(Path 端点贴 Node 边界用) */
|
|
21
22
|
boundaryPoint: (c: Circle, toward: Position) => Position;
|
|
23
|
+
/** 边上比例点:side 的 90° 周长弧段 t∈[0,1] 处(等角,落真实圆周;含旋转) */
|
|
24
|
+
edgePoint: (c: Circle, side: Side, t: number) => Position;
|
|
22
25
|
};
|
|
23
26
|
//# sourceMappingURL=circle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circle.d.ts","sourceRoot":"","sources":["../../../src/geometry/circle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"circle.d.ts","sourceRoot":"","sources":["../../../src/geometry/circle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAgB,MAAM,SAAS,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAIzC,yCAAyC;AACzC,MAAM,MAAM,MAAM,GAAG;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,SAAS;IACT,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAIF,eAAe;AACf,eAAO,MAAM,MAAM;IACjB,SAAS;gBACG,MAAM,KAAG,QAAQ;IAC7B,oBAAoB;kBACN,MAAM,KAAK,QAAQ,KAAG,OAAO;IAI3C,2BAA2B;gBACf,MAAM,QAAQ,UAAU,KAAG,QAAQ;IAsC/C,+CAA+C;uBAC5B,MAAM,UAAU,QAAQ,KAAG,QAAQ;IAOtD,oDAAoD;mBACrC,MAAM,QAAQ,IAAI,KAAK,MAAM,KAAG,QAAQ;CAIxD,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { localToWorld, worldToLocal } from "./_transform.js";
|
|
2
|
+
import { edgeAngleDeg } from "./_edge.js";
|
|
2
3
|
//#region src/geometry/circle.ts
|
|
4
|
+
var DEG_TO_RAD = Math.PI / 180;
|
|
3
5
|
var SQRT_HALF = Math.SQRT1_2;
|
|
4
6
|
/** 圆形相关基础工具 */
|
|
5
7
|
var circle = {
|
|
@@ -55,6 +57,11 @@ var circle = {
|
|
|
55
57
|
if (len === 0) return [c.x, c.y];
|
|
56
58
|
const t = c.radius / len;
|
|
57
59
|
return localToWorld(c, [lx * t, ly * t]);
|
|
60
|
+
},
|
|
61
|
+
/** 边上比例点:side 的 90° 周长弧段 t∈[0,1] 处(等角,落真实圆周;含旋转) */
|
|
62
|
+
edgePoint: (c, side, t) => {
|
|
63
|
+
const rad = edgeAngleDeg(side, t) * DEG_TO_RAD;
|
|
64
|
+
return localToWorld(c, [c.radius * Math.cos(rad), c.radius * Math.sin(rad)]);
|
|
58
65
|
}
|
|
59
66
|
};
|
|
60
67
|
//#endregion
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Side } from './_edge';
|
|
1
2
|
import { Position } from './point';
|
|
2
3
|
import { RectAnchor } from './rect';
|
|
3
4
|
/** 菱形:中心 + halfA/halfB 半轴长 + 可选旋转;顶点在 (±halfA,0) 与 (0,±halfB) */
|
|
@@ -24,5 +25,7 @@ export declare const diamond: {
|
|
|
24
25
|
* @description 菱形方程 |x|/halfA + |y|/halfB = 1;沿方向 (lx,ly) 缩放 t 倍命中:t = 1 / (|lx|/halfA + |ly|/halfB)
|
|
25
26
|
*/
|
|
26
27
|
boundaryPoint: (d: Diamond, toward: Position) => Position;
|
|
28
|
+
/** 边上比例点:side 过 cardinal 顶点的两段折线 t∈[0,1] 处(落真实斜边;含旋转) */
|
|
29
|
+
edgePoint: (d: Diamond, side: Side, t: number) => Position;
|
|
27
30
|
};
|
|
28
31
|
//# sourceMappingURL=diamond.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diamond.d.ts","sourceRoot":"","sources":["../../../src/geometry/diamond.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"diamond.d.ts","sourceRoot":"","sources":["../../../src/geometry/diamond.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAqB,MAAM,SAAS,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAUzC,iEAAiE;AACjE,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAe;AACf,eAAO,MAAM,OAAO;IAClB,SAAS;gBACG,OAAO,KAAG,QAAQ;IAC9B,oDAAoD;kBACtC,OAAO,KAAK,QAAQ,KAAG,OAAO;IAI5C,sDAAsD;gBAC1C,OAAO,QAAQ,UAAU,KAAG,QAAQ;IAqClD;;;OAGG;uBACkB,OAAO,UAAU,QAAQ,KAAG,QAAQ;IAOvD,yDAAyD;mBAC1C,OAAO,QAAQ,IAAI,KAAK,MAAM,KAAG,QAAQ;CASzD,CAAC"}
|
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
import { localToWorld, worldToLocal } from "./_transform.js";
|
|
2
|
+
import { polylineViaVertex } from "./_edge.js";
|
|
2
3
|
//#region src/geometry/diamond.ts
|
|
4
|
+
/** 每条 side 的过顶点折线三 anchor:[邻边中点, cardinal 顶点, 邻边中点](方向 north/south=西→东、east/west=北→南) */
|
|
5
|
+
var DIAMOND_EDGE = {
|
|
6
|
+
north: [
|
|
7
|
+
"north-west",
|
|
8
|
+
"north",
|
|
9
|
+
"north-east"
|
|
10
|
+
],
|
|
11
|
+
south: [
|
|
12
|
+
"south-west",
|
|
13
|
+
"south",
|
|
14
|
+
"south-east"
|
|
15
|
+
],
|
|
16
|
+
east: [
|
|
17
|
+
"north-east",
|
|
18
|
+
"east",
|
|
19
|
+
"south-east"
|
|
20
|
+
],
|
|
21
|
+
west: [
|
|
22
|
+
"north-west",
|
|
23
|
+
"west",
|
|
24
|
+
"south-west"
|
|
25
|
+
]
|
|
26
|
+
};
|
|
3
27
|
/** 菱形相关基础工具 */
|
|
4
28
|
var diamond = {
|
|
5
29
|
/** 中心 */
|
|
@@ -56,6 +80,11 @@ var diamond = {
|
|
|
56
80
|
if (denom === 0) return [d.x, d.y];
|
|
57
81
|
const t = 1 / denom;
|
|
58
82
|
return localToWorld(d, [lx * t, ly * t]);
|
|
83
|
+
},
|
|
84
|
+
/** 边上比例点:side 过 cardinal 顶点的两段折线 t∈[0,1] 处(落真实斜边;含旋转) */
|
|
85
|
+
edgePoint: (d, side, t) => {
|
|
86
|
+
const [mid0, vertex, mid1] = DIAMOND_EDGE[side];
|
|
87
|
+
return polylineViaVertex(diamond.anchor(d, mid0), diamond.anchor(d, vertex), diamond.anchor(d, mid1), t);
|
|
59
88
|
}
|
|
60
89
|
};
|
|
61
90
|
//#endregion
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Side } from './_edge';
|
|
1
2
|
import { Position } from './point';
|
|
2
3
|
import { RectAnchor } from './rect';
|
|
3
4
|
/** 椭圆:中心 + 半长轴 rx / 半短轴 ry + 可选旋转 */
|
|
@@ -27,5 +28,7 @@ export declare const ellipse: {
|
|
|
27
28
|
* @description 椭圆方程 (x/rx)² + (y/ry)² = 1;沿 (lx,ly) 缩放 t 倍命中 t = 1 / √((lx/rx)² + (ly/ry)²)
|
|
28
29
|
*/
|
|
29
30
|
boundaryPoint: (e: Ellipse, toward: Position) => Position;
|
|
31
|
+
/** 边上比例点:side 的 90° 周长弧段 t∈[0,1] 处(等角,落真实椭圆周;含旋转) */
|
|
32
|
+
edgePoint: (e: Ellipse, side: Side, t: number) => Position;
|
|
30
33
|
};
|
|
31
34
|
//# sourceMappingURL=ellipse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ellipse.d.ts","sourceRoot":"","sources":["../../../src/geometry/ellipse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"ellipse.d.ts","sourceRoot":"","sources":["../../../src/geometry/ellipse.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAgB,MAAM,SAAS,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAIzC,qCAAqC;AACrC,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,aAAa;IACb,EAAE,EAAE,MAAM,CAAC;IACX,aAAa;IACb,EAAE,EAAE,MAAM,CAAC;IACX,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAIF,eAAe;AACf,eAAO,MAAM,OAAO;IAClB,SAAS;gBACG,OAAO,KAAG,QAAQ;IAC9B,0BAA0B;kBACZ,OAAO,KAAK,QAAQ,KAAG,OAAO;IAI9C;;;OAGG;gBACW,OAAO,QAAQ,UAAU,KAAG,QAAQ;IAqClD;;;OAGG;uBACkB,OAAO,UAAU,QAAQ,KAAG,QAAQ;IAQvD,qDAAqD;mBACtC,OAAO,QAAQ,IAAI,KAAK,MAAM,KAAG,QAAQ;CAIzD,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { localToWorld, worldToLocal } from "./_transform.js";
|
|
2
|
+
import { edgeAngleDeg } from "./_edge.js";
|
|
2
3
|
//#region src/geometry/ellipse.ts
|
|
4
|
+
var DEG_TO_RAD = Math.PI / 180;
|
|
3
5
|
var SQRT_HALF = Math.SQRT1_2;
|
|
4
6
|
/** 椭圆相关基础工具 */
|
|
5
7
|
var ellipse = {
|
|
@@ -61,6 +63,11 @@ var ellipse = {
|
|
|
61
63
|
const b = ly / e.ry;
|
|
62
64
|
const t = 1 / Math.sqrt(a * a + b * b);
|
|
63
65
|
return localToWorld(e, [lx * t, ly * t]);
|
|
66
|
+
},
|
|
67
|
+
/** 边上比例点:side 的 90° 周长弧段 t∈[0,1] 处(等角,落真实椭圆周;含旋转) */
|
|
68
|
+
edgePoint: (e, side, t) => {
|
|
69
|
+
const rad = edgeAngleDeg(side, t) * DEG_TO_RAD;
|
|
70
|
+
return localToWorld(e, [e.rx * Math.cos(rad), e.ry * Math.sin(rad)]);
|
|
64
71
|
}
|
|
65
72
|
};
|
|
66
73
|
//#endregion
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Side } from './_edge';
|
|
1
2
|
import { Position } from './point';
|
|
2
3
|
/** 轴对齐矩形:几何中心 + 宽高 + 可选绕中心旋转 */
|
|
3
4
|
export type Rect = {
|
|
@@ -31,6 +32,8 @@ export declare const rect: {
|
|
|
31
32
|
anchor: (r: Rect, name: RectAnchor) => Position;
|
|
32
33
|
/** 从中心向 toward 方向射线与矩形边界交点(含旋转),Path 端点贴 Node 边界用 */
|
|
33
34
|
boundaryPoint: (r: Rect, toward: Position) => Position;
|
|
35
|
+
/** 边上比例点:side 直边 t∈[0,1] 处(两角 anchor 线性插值,含旋转);方向见 EDGE_ENDS */
|
|
36
|
+
edgePoint: (r: Rect, side: Side, t: number) => Position;
|
|
34
37
|
};
|
|
35
38
|
/** rectOutline 的命令算子(供 compile 翻译为 PathCommand;几何在 core 下沉,便于未来 rectangle node shape 复用) */
|
|
36
39
|
export type RectOutlineOp = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rect.d.ts","sourceRoot":"","sources":["../../../src/geometry/rect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,gCAAgC;AAChC,MAAM,MAAM,IAAI,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,YAAY;;;;;;;;;;CAUf,CAAC;AAEX,+BAA+B;AAC/B,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAE1E,eAAO,MAAM,IAAI;IACf,WAAW;gBACC,IAAI,KAAG,QAAQ;IAC3B,uBAAuB;kBACT,IAAI,KAAK,QAAQ,KAAG,OAAO;IAMzC,sCAAsC;gBAC1B,IAAI,QAAQ,UAAU,KAAG,QAAQ;IAuC7C,qDAAqD;uBAClC,IAAI,UAAU,QAAQ,KAAG,QAAQ;
|
|
1
|
+
{"version":3,"file":"rect.d.ts","sourceRoot":"","sources":["../../../src/geometry/rect.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,IAAI,EAAa,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,gCAAgC;AAChC,MAAM,MAAM,IAAI,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,YAAY;;;;;;;;;;CAUf,CAAC;AAEX,+BAA+B;AAC/B,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAE1E,eAAO,MAAM,IAAI;IACf,WAAW;gBACC,IAAI,KAAG,QAAQ;IAC3B,uBAAuB;kBACT,IAAI,KAAK,QAAQ,KAAG,OAAO;IAMzC,sCAAsC;gBAC1B,IAAI,QAAQ,UAAU,KAAG,QAAQ;IAuC7C,qDAAqD;uBAClC,IAAI,UAAU,QAAQ,KAAG,QAAQ;IAUpD,gEAAgE;mBACjD,IAAI,QAAQ,IAAI,KAAK,MAAM,KAAG,QAAQ;CAItD,CAAC;AAEF,4FAA4F;AAC5F,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,QAAQ,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,QAAQ,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACvF;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtB;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GACtB,MAAM,QAAQ,EACd,IAAI,QAAQ,EACZ,iBAAiB,MAAM,KACtB,KAAK,CAAC,aAAa,CAgCrB,CAAC"}
|
package/dist/es/geometry/rect.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { localToWorld, worldToLocal } from "./_transform.js";
|
|
2
|
+
import { EDGE_ENDS, lerpPoint } from "./_edge.js";
|
|
2
3
|
//#region src/geometry/rect.ts
|
|
3
4
|
/** 矩形 9 个标准 anchor 名常量(与 RectAnchor 配对,用 RECT_ANCHORS.NORTH 避免拼错) */
|
|
4
5
|
var RECT_ANCHORS = {
|
|
@@ -71,6 +72,11 @@ var rect = {
|
|
|
71
72
|
const ty = localY === 0 ? Infinity : halfH / Math.abs(localY);
|
|
72
73
|
const t = Math.min(tx, ty);
|
|
73
74
|
return localToWorld(r, [localX * t, localY * t]);
|
|
75
|
+
},
|
|
76
|
+
/** 边上比例点:side 直边 t∈[0,1] 处(两角 anchor 线性插值,含旋转);方向见 EDGE_ENDS */
|
|
77
|
+
edgePoint: (r, side, t) => {
|
|
78
|
+
const [a, b] = EDGE_ENDS[side];
|
|
79
|
+
return lerpPoint(rect.anchor(r, a), rect.anchor(r, b), t);
|
|
74
80
|
}
|
|
75
81
|
};
|
|
76
82
|
/**
|
package/dist/es/index.d.ts
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* @retikz/core 公开 API
|
|
3
3
|
* @description 任何 framework adapter(@retikz/react、@retikz/vue、@retikz/canvas、@retikz/ssr)只能 import 本文件导出内容,不准走子路径。本包零 React/零 DOM 依赖
|
|
4
4
|
*/
|
|
5
|
-
export { PositionSchema, PolarPositionSchema, AtPositionSchema, OffsetPositionSchema, AT_DIRECTIONS, TargetSchema, RelativeTargetSchema, RelativeAccumulateTargetSchema, MoveStepSchema, LineStepSchema, FoldStepSchema, CycleStepSchema, CurveStepSchema, CubicStepSchema, BendStepSchema, ArcStepSchema, CirclePathStepSchema, EllipsePathStepSchema, RectangleStepSchema, ControlPointSchema, StepLabelSchema, StepSchema, NodeSchema, NodeLabelSchema, CoordinateSchema, FontSchema, TextBlockSchema, LineSpecSchema, PathSchema, ArrowDetailSchema, ArrowEndDetailSchema, ScopeSchema, NodeDefaultSchema, PathDefaultSchema, LabelDefaultSchema, ArrowDefaultSchema, TransformSchema, ChildSchema, SceneSchema, CURRENT_IR_VERSION, } from './ir';
|
|
6
|
-
export type { IRPosition, IRAtPosition, IROffsetPosition, AtDirection, IRTarget, IRRelativeTarget, IRRelativeAccumulateTarget, IRMoveStep, IRLineStep, IRFoldStep, IRCycleStep, IRCurveStep, IRCubicStep, IRBendStep, IRArcStep, IRCirclePathStep, IREllipsePathStep, IRRectangleStep, IRControlPoint, IRStepLabel, IRStep, IRNode, IRNodeLabel, IRCoordinate, IRFont, IRLineSpec, IRTextBlock, IRPath, IRScope, IRNodeDefault, IRPathDefault, IRLabelDefault, IRArrowDefault, StyleChannel, IRTransform, IRTranslateTransform, IRPolarTranslateTransform, IRAtTranslateTransform, IROffsetTranslateTransform, IRRotateTransform, IRScaleTransform, IRChild, IR, ArrowShape, IRArrowDetail, IRArrowEndDetail, NodeShape, BuiltinShapeName, NodeTextAlign, } from './ir';
|
|
5
|
+
export { PositionSchema, PolarPositionSchema, AtPositionSchema, OffsetPositionSchema, AT_DIRECTIONS, TargetSchema, AnchorRefSchema, NodeTargetSchema, RelativeTargetSchema, RelativeAccumulateTargetSchema, MoveStepSchema, LineStepSchema, FoldStepSchema, CycleStepSchema, CurveStepSchema, CubicStepSchema, BendStepSchema, ArcStepSchema, CirclePathStepSchema, EllipsePathStepSchema, RectangleStepSchema, ControlPointSchema, StepLabelSchema, StepSchema, NodeSchema, NodeLabelSchema, CoordinateSchema, FontSchema, TextBlockSchema, LineSpecSchema, PathSchema, ArrowDetailSchema, ArrowEndDetailSchema, ScopeSchema, NodeDefaultSchema, PathDefaultSchema, LabelDefaultSchema, ArrowDefaultSchema, TransformSchema, ChildSchema, SceneSchema, CURRENT_IR_VERSION, } from './ir';
|
|
6
|
+
export type { IRPosition, IRAtPosition, IROffsetPosition, AtDirection, IRTarget, IRAnchorRef, IRNodeTarget, IRRelativeTarget, IRRelativeAccumulateTarget, IRMoveStep, IRLineStep, IRFoldStep, IRCycleStep, IRCurveStep, IRCubicStep, IRBendStep, IRArcStep, IRCirclePathStep, IREllipsePathStep, IRRectangleStep, IRControlPoint, IRStepLabel, IRStep, IRNode, IRNodeLabel, IRCoordinate, IRFont, IRLineSpec, IRTextBlock, IRPath, IRScope, IRNodeDefault, IRPathDefault, IRLabelDefault, IRArrowDefault, StyleChannel, IRTransform, IRTranslateTransform, IRPolarTranslateTransform, IRAtTranslateTransform, IROffsetTranslateTransform, IRRotateTransform, IRScaleTransform, IRChild, IR, ArrowShape, IRArrowDetail, IRArrowEndDetail, NodeShape, BuiltinShapeName, NodeTextAlign, } from './ir';
|
|
7
7
|
export { ARROW_SHAPES, DEFAULT_ARROW_SHAPE, HOLLOW_ARROW_SHAPES, ARROW_MARKER_DEFAULT_SIZE, ARROW_MARKER_HOLLOW_DEFAULT_LINE_WIDTH, NODE_SHAPES, NODE_TEXT_ALIGNS, } from './ir';
|
|
8
8
|
export type { ScenePrimitive, RectPrim, EllipsePrim, TextPrim, TextLine, PathPrim, PathCommand,
|
|
9
9
|
/** 7 个 named PathCommand 分支(便于 wrapper / Pick<>) */
|
|
@@ -13,7 +13,7 @@ TranslateTransform, RotateTransform, ScaleTransform, Layout, Scene, } from './pr
|
|
|
13
13
|
export type { FontSpec, TextMetrics, TextMeasurer, CompileOptions, CompileWarning, } from './compile';
|
|
14
14
|
export { computeLayout, fallbackMeasurer, compileToScene } from './compile';
|
|
15
15
|
export type { WayItem, WayDSL, WayCycle, WayVia, WayRelativeItem, WayLabel, WayLabelOp, } from './parsers';
|
|
16
|
-
export { parseWay, DrawWay, parseTargetSugar } from './parsers';
|
|
16
|
+
export { parseWay, DrawWay, parseTargetSugar, parseNodeTarget } from './parsers';
|
|
17
17
|
export type { Position, Rect, RectAnchor, Circle, Ellipse, Diamond, PolarPosition, } from './geometry';
|
|
18
18
|
export { point, rect, circle, ellipse, diamond, RECT_ANCHORS, polar } from './geometry';
|
|
19
19
|
export type { ShapeDefinition, ShapeStyle } from './shapes';
|
package/dist/es/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,8BAA8B,EAC9B,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,WAAW,EACX,kBAAkB,GACnB,MAAM,MAAM,CAAC;AACd,YAAY,EACV,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,0BAA0B,EAC1B,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,WAAW,EACX,MAAM,EACN,MAAM,EACN,WAAW,EACX,YAAY,EACZ,MAAM,EACN,UAAU,EACV,WAAW,EACX,MAAM,EACN,OAAO,EACP,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,iBAAiB,EACjB,gBAAgB,EAChB,OAAO,EACP,EAAE,EACF,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,aAAa,GACd,MAAM,MAAM,CAAC;AACd,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,sCAAsC,EACtC,WAAW,EACX,gBAAgB,GACjB,MAAM,MAAM,CAAC;AAGd,YAAY,EACV,cAAc,EACd,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAAW;AACX,oDAAoD;AACpD,eAAe,EACf,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,SAAS;AACT,6BAA6B;AAC7B,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,MAAM,EACN,KAAK,GACN,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,cAAc,EACd,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG5E,YAAY,EACV,OAAO,EACP,MAAM,EACN,QAAQ,EACR,MAAM,EACN,eAAe,EACf,QAAQ,EACR,UAAU,GACX,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/es/index.js
CHANGED
|
@@ -5,7 +5,9 @@ import { OffsetPositionSchema } from "./ir/position/offset-position.js";
|
|
|
5
5
|
import { FontSchema } from "./ir/font.js";
|
|
6
6
|
import { LineSpecSchema, TextBlockSchema } from "./ir/text.js";
|
|
7
7
|
import { ARROW_MARKER_DEFAULT_SIZE, ARROW_MARKER_HOLLOW_DEFAULT_LINE_WIDTH, ARROW_SHAPES, ArrowDetailSchema, ArrowEndDetailSchema, DEFAULT_ARROW_SHAPE, HOLLOW_ARROW_SHAPES } from "./ir/path/arrow.js";
|
|
8
|
-
import {
|
|
8
|
+
import { localToWorld, worldToLocal } from "./geometry/_transform.js";
|
|
9
|
+
import { RECT_ANCHORS, rect } from "./geometry/rect.js";
|
|
10
|
+
import { AnchorRefSchema, NodeTargetSchema, RelativeAccumulateTargetSchema, RelativeTargetSchema, TargetSchema } from "./ir/path/target.js";
|
|
9
11
|
import { ArcStepSchema, BendStepSchema, CirclePathStepSchema, ControlPointSchema, CubicStepSchema, CurveStepSchema, CycleStepSchema, EllipsePathStepSchema, FoldStepSchema, LineStepSchema, MoveStepSchema, RectangleStepSchema, StepLabelSchema, StepSchema } from "./ir/path/step.js";
|
|
10
12
|
import { PathSchema } from "./ir/path/path.js";
|
|
11
13
|
import { NODE_SHAPES, NODE_TEXT_ALIGNS, NodeLabelSchema, NodeSchema } from "./ir/node.js";
|
|
@@ -13,8 +15,6 @@ import { CoordinateSchema } from "./ir/coordinate.js";
|
|
|
13
15
|
import { TransformSchema } from "./ir/transform.js";
|
|
14
16
|
import { ArrowDefaultSchema, LabelDefaultSchema, NodeDefaultSchema, PathDefaultSchema, ScopeSchema } from "./ir/scope.js";
|
|
15
17
|
import { CURRENT_IR_VERSION, ChildSchema, SceneSchema } from "./ir/scene.js";
|
|
16
|
-
import { localToWorld, worldToLocal } from "./geometry/_transform.js";
|
|
17
|
-
import { RECT_ANCHORS, rect } from "./geometry/rect.js";
|
|
18
18
|
import { circle } from "./geometry/circle.js";
|
|
19
19
|
import { ellipse } from "./geometry/ellipse.js";
|
|
20
20
|
import { diamond } from "./geometry/diamond.js";
|
|
@@ -22,8 +22,9 @@ import { BUILTIN_SHAPES } from "./shapes/index.js";
|
|
|
22
22
|
import { fallbackMeasurer } from "./compile/text-metrics.js";
|
|
23
23
|
import { computeLayout } from "./compile/layout.js";
|
|
24
24
|
import { compileToScene } from "./compile/compile.js";
|
|
25
|
+
import { parseNodeTarget } from "./parsers/parseNodeTarget.js";
|
|
25
26
|
import { parseTargetSugar } from "./parsers/parseTargetSugar.js";
|
|
26
27
|
import { DrawWay, parseWay } from "./parsers/parseWay.js";
|
|
27
28
|
import { polar } from "./geometry/polar.js";
|
|
28
29
|
import { point } from "./geometry/point.js";
|
|
29
|
-
export { ARROW_MARKER_DEFAULT_SIZE, ARROW_MARKER_HOLLOW_DEFAULT_LINE_WIDTH, ARROW_SHAPES, AT_DIRECTIONS, ArcStepSchema, ArrowDefaultSchema, ArrowDetailSchema, ArrowEndDetailSchema, AtPositionSchema, BUILTIN_SHAPES, BendStepSchema, CURRENT_IR_VERSION, ChildSchema, CirclePathStepSchema, ControlPointSchema, CoordinateSchema, CubicStepSchema, CurveStepSchema, CycleStepSchema, DEFAULT_ARROW_SHAPE, DrawWay, EllipsePathStepSchema, FoldStepSchema, FontSchema, HOLLOW_ARROW_SHAPES, LabelDefaultSchema, LineSpecSchema, LineStepSchema, MoveStepSchema, NODE_SHAPES, NODE_TEXT_ALIGNS, NodeDefaultSchema, NodeLabelSchema, NodeSchema, OffsetPositionSchema, PathDefaultSchema, PathSchema, PolarPositionSchema, PositionSchema, RECT_ANCHORS, RectangleStepSchema, RelativeAccumulateTargetSchema, RelativeTargetSchema, SceneSchema, ScopeSchema, StepLabelSchema, StepSchema, TargetSchema, TextBlockSchema, TransformSchema, circle, compileToScene, computeLayout, diamond, ellipse, fallbackMeasurer, localToWorld, parseTargetSugar, parseWay, point, polar, rect, worldToLocal };
|
|
30
|
+
export { ARROW_MARKER_DEFAULT_SIZE, ARROW_MARKER_HOLLOW_DEFAULT_LINE_WIDTH, ARROW_SHAPES, AT_DIRECTIONS, AnchorRefSchema, ArcStepSchema, ArrowDefaultSchema, ArrowDetailSchema, ArrowEndDetailSchema, AtPositionSchema, BUILTIN_SHAPES, BendStepSchema, CURRENT_IR_VERSION, ChildSchema, CirclePathStepSchema, ControlPointSchema, CoordinateSchema, CubicStepSchema, CurveStepSchema, CycleStepSchema, DEFAULT_ARROW_SHAPE, DrawWay, EllipsePathStepSchema, FoldStepSchema, FontSchema, HOLLOW_ARROW_SHAPES, LabelDefaultSchema, LineSpecSchema, LineStepSchema, MoveStepSchema, NODE_SHAPES, NODE_TEXT_ALIGNS, NodeDefaultSchema, NodeLabelSchema, NodeSchema, NodeTargetSchema, OffsetPositionSchema, PathDefaultSchema, PathSchema, PolarPositionSchema, PositionSchema, RECT_ANCHORS, RectangleStepSchema, RelativeAccumulateTargetSchema, RelativeTargetSchema, SceneSchema, ScopeSchema, StepLabelSchema, StepSchema, TargetSchema, TextBlockSchema, TransformSchema, circle, compileToScene, computeLayout, diamond, ellipse, fallbackMeasurer, localToWorld, parseNodeTarget, parseTargetSugar, parseWay, point, polar, rect, worldToLocal };
|
|
@@ -39,6 +39,7 @@ export declare const CoordinateSchema: z.ZodObject<{
|
|
|
39
39
|
}>]>;
|
|
40
40
|
}, "strip", z.ZodTypeAny, {
|
|
41
41
|
type: "coordinate";
|
|
42
|
+
id: string;
|
|
42
43
|
position: [number, number] | import('./position').PolarPosition | {
|
|
43
44
|
direction: "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right";
|
|
44
45
|
of: string;
|
|
@@ -47,9 +48,9 @@ export declare const CoordinateSchema: z.ZodObject<{
|
|
|
47
48
|
of: string | [number, number] | import('./position').PolarPosition;
|
|
48
49
|
offset: [number, number];
|
|
49
50
|
};
|
|
50
|
-
id: string;
|
|
51
51
|
}, {
|
|
52
52
|
type: "coordinate";
|
|
53
|
+
id: string;
|
|
53
54
|
position: [number, number] | import('./position').PolarPosition | {
|
|
54
55
|
direction: "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right";
|
|
55
56
|
of: string;
|
|
@@ -58,7 +59,6 @@ export declare const CoordinateSchema: z.ZodObject<{
|
|
|
58
59
|
of: string | [number, number] | import('./position').PolarPosition;
|
|
59
60
|
offset: [number, number];
|
|
60
61
|
};
|
|
61
|
-
id: string;
|
|
62
62
|
}>;
|
|
63
63
|
/** Coordinate IR 类型 `{ type:'coordinate', id, position }` */
|
|
64
64
|
export type IRCoordinate = z.infer<typeof CoordinateSchema>;
|
package/dist/es/ir/node.d.ts
CHANGED
|
@@ -374,6 +374,7 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
374
374
|
shape?: string | undefined;
|
|
375
375
|
scale?: number | undefined;
|
|
376
376
|
color?: string | undefined;
|
|
377
|
+
id?: string | undefined;
|
|
377
378
|
textColor?: string | undefined;
|
|
378
379
|
label?: {
|
|
379
380
|
text: string;
|
|
@@ -411,7 +412,6 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
411
412
|
drawOpacity?: number | undefined;
|
|
412
413
|
zIndex?: number | undefined;
|
|
413
414
|
rotate?: number | undefined;
|
|
414
|
-
id?: string | undefined;
|
|
415
415
|
align?: "left" | "right" | "center" | undefined;
|
|
416
416
|
lineHeight?: number | undefined;
|
|
417
417
|
dashed?: boolean | undefined;
|
|
@@ -459,6 +459,7 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
459
459
|
shape?: string | undefined;
|
|
460
460
|
scale?: number | undefined;
|
|
461
461
|
color?: string | undefined;
|
|
462
|
+
id?: string | undefined;
|
|
462
463
|
textColor?: string | undefined;
|
|
463
464
|
label?: {
|
|
464
465
|
text: string;
|
|
@@ -496,7 +497,6 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
496
497
|
drawOpacity?: number | undefined;
|
|
497
498
|
zIndex?: number | undefined;
|
|
498
499
|
rotate?: number | undefined;
|
|
499
|
-
id?: string | undefined;
|
|
500
500
|
align?: "left" | "right" | "center" | undefined;
|
|
501
501
|
lineHeight?: number | undefined;
|
|
502
502
|
dashed?: boolean | undefined;
|