@retikz/core 0.1.0-alpha.4 → 0.1.0-alpha.5
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/compile.d.ts +6 -13
- package/dist/es/compile/compile.d.ts.map +1 -1
- package/dist/es/compile/compile.js +4 -10
- package/dist/es/compile/node.d.ts +40 -59
- package/dist/es/compile/node.d.ts.map +1 -1
- package/dist/es/compile/node.js +51 -43
- package/dist/es/compile/parseTarget.d.ts +3 -8
- package/dist/es/compile/parseTarget.d.ts.map +1 -1
- package/dist/es/compile/parseTarget.js +7 -19
- package/dist/es/compile/path.d.ts +2 -19
- package/dist/es/compile/path.d.ts.map +1 -1
- package/dist/es/compile/path.js +232 -213
- package/dist/es/compile/position.d.ts +4 -8
- package/dist/es/compile/position.d.ts.map +1 -1
- package/dist/es/compile/position.js +10 -10
- package/dist/es/compile/text-metrics.d.ts +2 -4
- package/dist/es/compile/text-metrics.d.ts.map +1 -1
- package/dist/es/compile/view-box.d.ts +1 -4
- package/dist/es/compile/view-box.d.ts.map +1 -1
- package/dist/es/compile/view-box.js +1 -4
- package/dist/es/geometry/arc.d.ts +3 -28
- package/dist/es/geometry/arc.d.ts.map +1 -1
- package/dist/es/geometry/arc.js +4 -31
- package/dist/es/geometry/bend.d.ts +2 -13
- package/dist/es/geometry/bend.d.ts.map +1 -1
- package/dist/es/geometry/bend.js +2 -13
- package/dist/es/geometry/circle.d.ts +5 -13
- package/dist/es/geometry/circle.d.ts.map +1 -1
- package/dist/es/geometry/circle.js +1 -4
- package/dist/es/geometry/diamond.d.ts +9 -24
- package/dist/es/geometry/diamond.d.ts.map +1 -1
- package/dist/es/geometry/diamond.js +4 -14
- package/dist/es/geometry/ellipse.d.ts +9 -15
- package/dist/es/geometry/ellipse.d.ts.map +1 -1
- package/dist/es/geometry/ellipse.js +4 -8
- package/dist/es/geometry/point.d.ts +8 -9
- package/dist/es/geometry/point.d.ts.map +1 -1
- package/dist/es/geometry/point.js +8 -9
- package/dist/es/geometry/polar.d.ts +12 -21
- package/dist/es/geometry/polar.d.ts.map +1 -1
- package/dist/es/geometry/polar.js +7 -14
- package/dist/es/geometry/rect.d.ts +8 -32
- package/dist/es/geometry/rect.d.ts.map +1 -1
- package/dist/es/geometry/rect.js +7 -33
- package/dist/es/geometry/segment.d.ts +11 -18
- package/dist/es/geometry/segment.d.ts.map +1 -1
- package/dist/es/geometry/segment.js +9 -16
- package/dist/es/index.d.ts +6 -10
- package/dist/es/index.d.ts.map +1 -1
- package/dist/es/index.js +4 -3
- package/dist/es/ir/coordinate.d.ts +18 -10
- package/dist/es/ir/coordinate.d.ts.map +1 -1
- package/dist/es/ir/coordinate.js +6 -11
- package/dist/es/ir/node.d.ts +46 -65
- package/dist/es/ir/node.d.ts.map +1 -1
- package/dist/es/ir/node.js +15 -46
- package/dist/es/ir/path/arrow.d.ts +210 -12
- package/dist/es/ir/path/arrow.d.ts.map +1 -1
- package/dist/es/ir/path/arrow.js +39 -12
- package/dist/es/ir/path/path.d.ts +477 -153
- package/dist/es/ir/path/path.d.ts.map +1 -1
- package/dist/es/ir/path/path.js +2 -2
- package/dist/es/ir/path/step.d.ts +395 -223
- package/dist/es/ir/path/step.d.ts.map +1 -1
- package/dist/es/ir/path/step.js +13 -14
- package/dist/es/ir/path/target.d.ts +25 -16
- package/dist/es/ir/path/target.d.ts.map +1 -1
- package/dist/es/ir/path/target.js +8 -6
- package/dist/es/ir/position/at-position.d.ts +4 -11
- package/dist/es/ir/position/at-position.d.ts.map +1 -1
- package/dist/es/ir/position/at-position.js +2 -9
- package/dist/es/ir/position/index.d.ts +1 -0
- package/dist/es/ir/position/index.d.ts.map +1 -1
- package/dist/es/ir/position/offset-position.d.ts +14 -0
- package/dist/es/ir/position/offset-position.d.ts.map +1 -0
- package/dist/es/ir/position/offset-position.js +14 -0
- package/dist/es/ir/position/polar-position.d.ts +1 -4
- package/dist/es/ir/position/polar-position.d.ts.map +1 -1
- package/dist/es/ir/position/polar-position.js +1 -4
- package/dist/es/ir/scene.d.ts +1200 -386
- package/dist/es/ir/scene.d.ts.map +1 -1
- package/dist/es/parsers/parseTargetSugar.d.ts.map +1 -1
- package/dist/es/parsers/parseTargetSugar.js +6 -19
- package/dist/es/parsers/parseWay.d.ts +26 -118
- package/dist/es/parsers/parseWay.d.ts.map +1 -1
- package/dist/es/parsers/parseWay.js +19 -61
- package/dist/es/primitive/ellipse.d.ts +4 -14
- package/dist/es/primitive/ellipse.d.ts.map +1 -1
- package/dist/es/primitive/group.d.ts +21 -3
- package/dist/es/primitive/group.d.ts.map +1 -1
- package/dist/es/primitive/path.d.ts +67 -7
- package/dist/es/primitive/path.d.ts.map +1 -1
- package/dist/es/primitive/scene.d.ts +2 -4
- package/dist/es/primitive/scene.d.ts.map +1 -1
- package/dist/es/primitive/text.d.ts +9 -32
- package/dist/es/primitive/text.d.ts.map +1 -1
- package/dist/lib/compile/compile.cjs +4 -10
- package/dist/lib/compile/compile.d.ts +6 -13
- package/dist/lib/compile/compile.d.ts.map +1 -1
- package/dist/lib/compile/node.cjs +51 -43
- package/dist/lib/compile/node.d.ts +40 -59
- package/dist/lib/compile/node.d.ts.map +1 -1
- package/dist/lib/compile/parseTarget.cjs +7 -19
- package/dist/lib/compile/parseTarget.d.ts +3 -8
- package/dist/lib/compile/parseTarget.d.ts.map +1 -1
- package/dist/lib/compile/path.cjs +231 -212
- package/dist/lib/compile/path.d.ts +2 -19
- package/dist/lib/compile/path.d.ts.map +1 -1
- package/dist/lib/compile/position.cjs +10 -10
- package/dist/lib/compile/position.d.ts +4 -8
- package/dist/lib/compile/position.d.ts.map +1 -1
- package/dist/lib/compile/text-metrics.d.ts +2 -4
- package/dist/lib/compile/text-metrics.d.ts.map +1 -1
- package/dist/lib/compile/view-box.cjs +1 -4
- package/dist/lib/compile/view-box.d.ts +1 -4
- package/dist/lib/compile/view-box.d.ts.map +1 -1
- package/dist/lib/geometry/arc.cjs +3 -31
- package/dist/lib/geometry/arc.d.ts +3 -28
- package/dist/lib/geometry/arc.d.ts.map +1 -1
- package/dist/lib/geometry/bend.cjs +2 -13
- package/dist/lib/geometry/bend.d.ts +2 -13
- package/dist/lib/geometry/bend.d.ts.map +1 -1
- package/dist/lib/geometry/circle.cjs +1 -4
- package/dist/lib/geometry/circle.d.ts +5 -13
- package/dist/lib/geometry/circle.d.ts.map +1 -1
- package/dist/lib/geometry/diamond.cjs +4 -14
- package/dist/lib/geometry/diamond.d.ts +9 -24
- package/dist/lib/geometry/diamond.d.ts.map +1 -1
- package/dist/lib/geometry/ellipse.cjs +4 -8
- package/dist/lib/geometry/ellipse.d.ts +9 -15
- package/dist/lib/geometry/ellipse.d.ts.map +1 -1
- package/dist/lib/geometry/point.cjs +8 -9
- package/dist/lib/geometry/point.d.ts +8 -9
- package/dist/lib/geometry/point.d.ts.map +1 -1
- package/dist/lib/geometry/polar.cjs +7 -14
- package/dist/lib/geometry/polar.d.ts +12 -21
- package/dist/lib/geometry/polar.d.ts.map +1 -1
- package/dist/lib/geometry/rect.cjs +7 -33
- package/dist/lib/geometry/rect.d.ts +8 -32
- package/dist/lib/geometry/rect.d.ts.map +1 -1
- package/dist/lib/geometry/segment.cjs +9 -16
- package/dist/lib/geometry/segment.d.ts +11 -18
- package/dist/lib/geometry/segment.d.ts.map +1 -1
- package/dist/lib/index.cjs +9 -2
- package/dist/lib/index.d.ts +6 -10
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/ir/coordinate.cjs +6 -11
- package/dist/lib/ir/coordinate.d.ts +18 -10
- package/dist/lib/ir/coordinate.d.ts.map +1 -1
- package/dist/lib/ir/node.cjs +15 -46
- package/dist/lib/ir/node.d.ts +46 -65
- package/dist/lib/ir/node.d.ts.map +1 -1
- package/dist/lib/ir/path/arrow.cjs +43 -11
- package/dist/lib/ir/path/arrow.d.ts +210 -12
- package/dist/lib/ir/path/arrow.d.ts.map +1 -1
- package/dist/lib/ir/path/path.cjs +1 -1
- package/dist/lib/ir/path/path.d.ts +477 -153
- package/dist/lib/ir/path/path.d.ts.map +1 -1
- package/dist/lib/ir/path/step.cjs +13 -14
- package/dist/lib/ir/path/step.d.ts +395 -223
- package/dist/lib/ir/path/step.d.ts.map +1 -1
- package/dist/lib/ir/path/target.cjs +9 -7
- package/dist/lib/ir/path/target.d.ts +25 -16
- package/dist/lib/ir/path/target.d.ts.map +1 -1
- package/dist/lib/ir/position/at-position.cjs +2 -9
- package/dist/lib/ir/position/at-position.d.ts +4 -11
- package/dist/lib/ir/position/at-position.d.ts.map +1 -1
- package/dist/lib/ir/position/index.d.ts +1 -0
- package/dist/lib/ir/position/index.d.ts.map +1 -1
- package/dist/lib/ir/position/offset-position.cjs +14 -0
- package/dist/lib/ir/position/offset-position.d.ts +14 -0
- package/dist/lib/ir/position/offset-position.d.ts.map +1 -0
- package/dist/lib/ir/position/polar-position.cjs +1 -4
- package/dist/lib/ir/position/polar-position.d.ts +1 -4
- package/dist/lib/ir/position/polar-position.d.ts.map +1 -1
- package/dist/lib/ir/scene.d.ts +1200 -386
- package/dist/lib/ir/scene.d.ts.map +1 -1
- package/dist/lib/parsers/parseTargetSugar.cjs +6 -19
- package/dist/lib/parsers/parseTargetSugar.d.ts.map +1 -1
- package/dist/lib/parsers/parseWay.cjs +19 -61
- package/dist/lib/parsers/parseWay.d.ts +26 -118
- package/dist/lib/parsers/parseWay.d.ts.map +1 -1
- package/dist/lib/primitive/ellipse.d.ts +4 -14
- package/dist/lib/primitive/ellipse.d.ts.map +1 -1
- package/dist/lib/primitive/group.d.ts +21 -3
- package/dist/lib/primitive/group.d.ts.map +1 -1
- package/dist/lib/primitive/path.d.ts +67 -7
- package/dist/lib/primitive/path.d.ts.map +1 -1
- package/dist/lib/primitive/scene.d.ts +2 -4
- package/dist/lib/primitive/scene.d.ts.map +1 -1
- package/dist/lib/primitive/text.d.ts +9 -32
- package/dist/lib/primitive/text.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/lib/ir/node.cjs
CHANGED
|
@@ -1,22 +1,12 @@
|
|
|
1
1
|
const require_position = require("./position/position.cjs");
|
|
2
2
|
const require_polar_position = require("./position/polar-position.cjs");
|
|
3
3
|
const require_at_position = require("./position/at-position.cjs");
|
|
4
|
+
const require_offset_position = require("./position/offset-position.cjs");
|
|
4
5
|
let zod = require("zod");
|
|
5
6
|
//#region src/ir/node.ts
|
|
6
7
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* - `rectangle`:矩形(默认;UML 类、流程图常规节点)
|
|
11
|
-
* - `circle`:圆形(流程图起止、状态机)
|
|
12
|
-
* - `ellipse`:椭圆(状态机、集合图)
|
|
13
|
-
* - `diamond`:菱形(流程图判定)
|
|
14
|
-
*
|
|
15
|
-
* 每个 shape 的几何语义:node 的视觉边界包住"text 矩形 + padding"——
|
|
16
|
-
* - rectangle: 视觉 rect = text rect
|
|
17
|
-
* - circle: 外接圆,r = √(innerHalfW² + innerHalfH²)
|
|
18
|
-
* - ellipse: 外接椭圆,rx = innerHalfW×√2、ry = innerHalfH×√2
|
|
19
|
-
* - diamond: 外接菱形,halfA = 2×innerHalfW、halfB = 2×innerHalfH
|
|
8
|
+
* 节点形状常量(用 const + ValueOf 派生,不用 TS enum)
|
|
9
|
+
* @description rectangle 默认;circle/ellipse/diamond 几何语义:node 视觉边界包"text 矩形 + padding";rectangle: 视觉=text;circle: r=√(innerHalfW²+innerHalfH²);ellipse: rx=innerHalfW×√2,ry=innerHalfH×√2;diamond: halfA=2×innerHalfW,halfB=2×innerHalfH
|
|
20
10
|
*/
|
|
21
11
|
var NODE_SHAPES = {
|
|
22
12
|
rectangle: "rectangle",
|
|
@@ -24,12 +14,7 @@ var NODE_SHAPES = {
|
|
|
24
14
|
ellipse: "ellipse",
|
|
25
15
|
diamond: "diamond"
|
|
26
16
|
};
|
|
27
|
-
/**
|
|
28
|
-
* 节点字体规格——family / size / weight / style 全部可选;
|
|
29
|
-
* 单字段透传到 SVG `<text>` 的 `font-*` 属性 / `font-size`。
|
|
30
|
-
*
|
|
31
|
-
* 取代 alpha.1 的标量 `fontSize` 字段(已删)。
|
|
32
|
-
*/
|
|
17
|
+
/** 节点字体规格:family/size/weight/style 全部可选,透传 SVG `<text>` font-* 属性 */
|
|
33
18
|
var FontSchema = zod.z.object({
|
|
34
19
|
family: zod.z.string().optional().describe("CSS font-family string, e.g. \"serif\", \"monospace\", \"Inter, sans-serif\""),
|
|
35
20
|
size: zod.z.number().positive().optional().describe("Font size in user units; falls back to the renderer default when omitted"),
|
|
@@ -39,16 +24,10 @@ var FontSchema = zod.z.object({
|
|
|
39
24
|
"italic",
|
|
40
25
|
"oblique"
|
|
41
26
|
]).optional().describe("CSS font-style")
|
|
42
|
-
}).describe("Font properties for the node text label; all fields optional, nested object form
|
|
27
|
+
}).describe("Font properties for the node text label; all fields optional, nested object form.");
|
|
43
28
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* 行级覆盖只生效于本行的 `<tspan>`:
|
|
47
|
-
* - `fill`:仅这一行颜色
|
|
48
|
-
* - `opacity`:仅这一行 0~1 透明度
|
|
49
|
-
* - `font`:family / size / weight / style 任意子集;未填字段继承块级 font
|
|
50
|
-
*
|
|
51
|
-
* 块级 `align` / `lineHeight` 不可被行覆盖(多行块整体属性)。
|
|
29
|
+
* 单行文本规格:纯字符串走块级默认,对象形式可覆盖 fill/opacity/font
|
|
30
|
+
* @description 行级覆盖只生效于本行 `<tspan>`;font 子字段未填则继承块级;align/lineHeight 不可被行覆盖
|
|
52
31
|
*/
|
|
53
32
|
var LineSpecSchema = zod.z.union([zod.z.string(), zod.z.object({
|
|
54
33
|
text: zod.z.string().describe("Line content"),
|
|
@@ -57,30 +36,19 @@ var LineSpecSchema = zod.z.union([zod.z.string(), zod.z.object({
|
|
|
57
36
|
font: FontSchema.optional().describe("Per-line font overrides; missing fields inherit from block-level `font`")
|
|
58
37
|
})]).describe("Single line of text: bare string for default styling, or an object with per-line `fill` / `opacity` / `font` overrides.");
|
|
59
38
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* - `['Line 1', 'Line 2']` 两行无样式覆盖
|
|
63
|
-
* - `[{ text: 'Heading', fill: 'red', font: { weight: 'bold' } }, 'body']` 混排
|
|
64
|
-
*
|
|
65
|
-
* 选 `Array<LineSpec>` 而非 `'\n'` 字符串:JSON 友好(无 escape);行级覆盖天然落字段。
|
|
39
|
+
* 节点文本:单字符串或非空多行 LineSpec 数组
|
|
40
|
+
* @description 选数组而非 `\n` 字符串:JSON 友好无 escape,行级覆盖天然落字段
|
|
66
41
|
*/
|
|
67
42
|
var NodeTextSchema = zod.z.union([zod.z.string(), zod.z.array(LineSpecSchema).min(1)]).describe("Text label rendered inside the node: a single string for one line, or a non-empty array of line specs (string for default, object for per-line overrides).");
|
|
68
|
-
/**
|
|
43
|
+
/** 节点文本对齐(TikZ `align=` 同义) */
|
|
69
44
|
var NODE_TEXT_ALIGNS = {
|
|
70
45
|
left: "left",
|
|
71
46
|
center: "center",
|
|
72
47
|
right: "right"
|
|
73
48
|
};
|
|
74
49
|
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* 一个 Node 可挂多个 label(数组形态);label 自身不参与 viewBox(视觉外延少时可接受)。
|
|
78
|
-
*
|
|
79
|
-
* `position` 接受两种形态:
|
|
80
|
-
* - 8 方向枚举(`above` / `right` / `above-left` ...):标签贴在 node 该方向边界外
|
|
81
|
-
* - 数字角度:以 node 中心为原点,按该角度方向投射;约定与 polar 一致(0° = +x,90° = +y 屏幕下方)
|
|
82
|
-
*
|
|
83
|
-
* 默认 `position = 'above'`,`distance = 4`(user units,标签与 node 边界的距离)。
|
|
50
|
+
* 节点附属标签 label(TikZ `[label=above:foo]` 同义)
|
|
51
|
+
* @description 可挂多个;label 不参与 viewBox。position 支持 8 方向枚举或数字角度(polar 约定:0°=+x,90°=+y 屏幕下方);默认 position='above',distance=4
|
|
84
52
|
*/
|
|
85
53
|
var NodeLabelSchema = zod.z.object({
|
|
86
54
|
text: zod.z.string().describe("Label text content; rendered as a single line."),
|
|
@@ -97,8 +65,9 @@ var NodeSchema = zod.z.object({
|
|
|
97
65
|
position: zod.z.union([
|
|
98
66
|
require_position.PositionSchema,
|
|
99
67
|
require_polar_position.PolarPositionSchema,
|
|
100
|
-
require_at_position.AtPositionSchema
|
|
101
|
-
|
|
68
|
+
require_at_position.AtPositionSchema,
|
|
69
|
+
require_offset_position.OffsetPositionSchema
|
|
70
|
+
]).describe("Center point of the node content box; Cartesian [x, y], polar, relative-to-another-node (`at`-style with `direction` / `of` / `distance?`), or offset from a base point (`{ of, offset }` form mirroring TikZ `calc`). All non-Cartesian forms resolve at compile time."),
|
|
102
71
|
rotate: zod.z.number().optional().describe("Rotation in degrees around the node center; positive = clockwise (matches TikZ rotate=...)"),
|
|
103
72
|
text: NodeTextSchema.optional(),
|
|
104
73
|
align: zod.z.nativeEnum(NODE_TEXT_ALIGNS).optional().describe("Multi-line text alignment within the text block; `left` / `center` / `right`. Defaults to `center` (matches TikZ)."),
|
package/dist/lib/ir/node.d.ts
CHANGED
|
@@ -1,19 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { ValueOf } from '../types';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* - `rectangle`:矩形(默认;UML 类、流程图常规节点)
|
|
8
|
-
* - `circle`:圆形(流程图起止、状态机)
|
|
9
|
-
* - `ellipse`:椭圆(状态机、集合图)
|
|
10
|
-
* - `diamond`:菱形(流程图判定)
|
|
11
|
-
*
|
|
12
|
-
* 每个 shape 的几何语义:node 的视觉边界包住"text 矩形 + padding"——
|
|
13
|
-
* - rectangle: 视觉 rect = text rect
|
|
14
|
-
* - circle: 外接圆,r = √(innerHalfW² + innerHalfH²)
|
|
15
|
-
* - ellipse: 外接椭圆,rx = innerHalfW×√2、ry = innerHalfH×√2
|
|
16
|
-
* - diamond: 外接菱形,halfA = 2×innerHalfW、halfB = 2×innerHalfH
|
|
4
|
+
* 节点形状常量(用 const + ValueOf 派生,不用 TS enum)
|
|
5
|
+
* @description rectangle 默认;circle/ellipse/diamond 几何语义:node 视觉边界包"text 矩形 + padding";rectangle: 视觉=text;circle: r=√(innerHalfW²+innerHalfH²);ellipse: rx=innerHalfW×√2,ry=innerHalfH×√2;diamond: halfA=2×innerHalfW,halfB=2×innerHalfH
|
|
17
6
|
*/
|
|
18
7
|
export declare const NODE_SHAPES: {
|
|
19
8
|
readonly rectangle: "rectangle";
|
|
@@ -21,14 +10,9 @@ export declare const NODE_SHAPES: {
|
|
|
21
10
|
readonly ellipse: "ellipse";
|
|
22
11
|
readonly diamond: "diamond";
|
|
23
12
|
};
|
|
24
|
-
/**
|
|
13
|
+
/** 节点形状字面量类型 */
|
|
25
14
|
export type NodeShape = ValueOf<typeof NODE_SHAPES>;
|
|
26
|
-
/**
|
|
27
|
-
* 节点字体规格——family / size / weight / style 全部可选;
|
|
28
|
-
* 单字段透传到 SVG `<text>` 的 `font-*` 属性 / `font-size`。
|
|
29
|
-
*
|
|
30
|
-
* 取代 alpha.1 的标量 `fontSize` 字段(已删)。
|
|
31
|
-
*/
|
|
15
|
+
/** 节点字体规格:family/size/weight/style 全部可选,透传 SVG `<text>` font-* 属性 */
|
|
32
16
|
export declare const FontSchema: z.ZodObject<{
|
|
33
17
|
family: z.ZodOptional<z.ZodString>;
|
|
34
18
|
size: z.ZodOptional<z.ZodNumber>;
|
|
@@ -45,17 +29,11 @@ export declare const FontSchema: z.ZodObject<{
|
|
|
45
29
|
weight?: number | "normal" | "bold" | undefined;
|
|
46
30
|
style?: "normal" | "italic" | "oblique" | undefined;
|
|
47
31
|
}>;
|
|
48
|
-
/**
|
|
32
|
+
/** 节点字体规格 IR 类型(所有字段可选,编译期解析默认值) */
|
|
49
33
|
export type IRFont = z.infer<typeof FontSchema>;
|
|
50
34
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* 行级覆盖只生效于本行的 `<tspan>`:
|
|
54
|
-
* - `fill`:仅这一行颜色
|
|
55
|
-
* - `opacity`:仅这一行 0~1 透明度
|
|
56
|
-
* - `font`:family / size / weight / style 任意子集;未填字段继承块级 font
|
|
57
|
-
*
|
|
58
|
-
* 块级 `align` / `lineHeight` 不可被行覆盖(多行块整体属性)。
|
|
35
|
+
* 单行文本规格:纯字符串走块级默认,对象形式可覆盖 fill/opacity/font
|
|
36
|
+
* @description 行级覆盖只生效于本行 `<tspan>`;font 子字段未填则继承块级;align/lineHeight 不可被行覆盖
|
|
59
37
|
*/
|
|
60
38
|
export declare const LineSpecSchema: z.ZodUnion<[z.ZodString, z.ZodObject<{
|
|
61
39
|
text: z.ZodString;
|
|
@@ -98,15 +76,11 @@ export declare const LineSpecSchema: z.ZodUnion<[z.ZodString, z.ZodObject<{
|
|
|
98
76
|
style?: "normal" | "italic" | "oblique" | undefined;
|
|
99
77
|
} | undefined;
|
|
100
78
|
}>]>;
|
|
101
|
-
/** 行规格 IR
|
|
79
|
+
/** 行规格 IR 类型 */
|
|
102
80
|
export type IRLineSpec = z.infer<typeof LineSpecSchema>;
|
|
103
81
|
/**
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* - `['Line 1', 'Line 2']` 两行无样式覆盖
|
|
107
|
-
* - `[{ text: 'Heading', fill: 'red', font: { weight: 'bold' } }, 'body']` 混排
|
|
108
|
-
*
|
|
109
|
-
* 选 `Array<LineSpec>` 而非 `'\n'` 字符串:JSON 友好(无 escape);行级覆盖天然落字段。
|
|
82
|
+
* 节点文本:单字符串或非空多行 LineSpec 数组
|
|
83
|
+
* @description 选数组而非 `\n` 字符串:JSON 友好无 escape,行级覆盖天然落字段
|
|
110
84
|
*/
|
|
111
85
|
export declare const NodeTextSchema: z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
|
|
112
86
|
text: z.ZodString;
|
|
@@ -149,24 +123,16 @@ export declare const NodeTextSchema: z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodUn
|
|
|
149
123
|
style?: "normal" | "italic" | "oblique" | undefined;
|
|
150
124
|
} | undefined;
|
|
151
125
|
}>]>, "many">]>;
|
|
152
|
-
/**
|
|
126
|
+
/** 节点文本对齐(TikZ `align=` 同义) */
|
|
153
127
|
export declare const NODE_TEXT_ALIGNS: {
|
|
154
128
|
readonly left: "left";
|
|
155
129
|
readonly center: "center";
|
|
156
130
|
readonly right: "right";
|
|
157
131
|
};
|
|
158
|
-
/** 多行文本对齐字面量类型 */
|
|
159
132
|
export type NodeTextAlign = ValueOf<typeof NODE_TEXT_ALIGNS>;
|
|
160
133
|
/**
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
* 一个 Node 可挂多个 label(数组形态);label 自身不参与 viewBox(视觉外延少时可接受)。
|
|
164
|
-
*
|
|
165
|
-
* `position` 接受两种形态:
|
|
166
|
-
* - 8 方向枚举(`above` / `right` / `above-left` ...):标签贴在 node 该方向边界外
|
|
167
|
-
* - 数字角度:以 node 中心为原点,按该角度方向投射;约定与 polar 一致(0° = +x,90° = +y 屏幕下方)
|
|
168
|
-
*
|
|
169
|
-
* 默认 `position = 'above'`,`distance = 4`(user units,标签与 node 边界的距离)。
|
|
134
|
+
* 节点附属标签 label(TikZ `[label=above:foo]` 同义)
|
|
135
|
+
* @description 可挂多个;label 不参与 viewBox。position 支持 8 方向枚举或数字角度(polar 约定:0°=+x,90°=+y 屏幕下方);默认 position='above',distance=4
|
|
170
136
|
*/
|
|
171
137
|
export declare const NodeLabelSchema: z.ZodObject<{
|
|
172
138
|
text: z.ZodString;
|
|
@@ -202,8 +168,8 @@ export declare const NodeLabelSchema: z.ZodObject<{
|
|
|
202
168
|
}, "strip", z.ZodTypeAny, {
|
|
203
169
|
text: string;
|
|
204
170
|
distance?: number | undefined;
|
|
205
|
-
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
206
171
|
opacity?: number | undefined;
|
|
172
|
+
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
207
173
|
font?: {
|
|
208
174
|
family?: string | undefined;
|
|
209
175
|
size?: number | undefined;
|
|
@@ -214,8 +180,8 @@ export declare const NodeLabelSchema: z.ZodObject<{
|
|
|
214
180
|
}, {
|
|
215
181
|
text: string;
|
|
216
182
|
distance?: number | undefined;
|
|
217
|
-
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
218
183
|
opacity?: number | undefined;
|
|
184
|
+
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
219
185
|
font?: {
|
|
220
186
|
family?: string | undefined;
|
|
221
187
|
size?: number | undefined;
|
|
@@ -224,7 +190,7 @@ export declare const NodeLabelSchema: z.ZodObject<{
|
|
|
224
190
|
} | undefined;
|
|
225
191
|
textColor?: string | undefined;
|
|
226
192
|
}>;
|
|
227
|
-
/** Node label IR
|
|
193
|
+
/** Node label IR 类型 */
|
|
228
194
|
export type IRNodeLabel = z.infer<typeof NodeLabelSchema>;
|
|
229
195
|
export declare const NodeSchema: z.ZodObject<{
|
|
230
196
|
type: z.ZodLiteral<"node">;
|
|
@@ -256,6 +222,15 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
256
222
|
direction: "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right";
|
|
257
223
|
of: string;
|
|
258
224
|
distance?: number | undefined;
|
|
225
|
+
}>, z.ZodObject<{
|
|
226
|
+
of: z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodType<import('./position').PolarPosition, z.ZodTypeDef, import('./position').PolarPosition>]>;
|
|
227
|
+
offset: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
228
|
+
}, "strip", z.ZodTypeAny, {
|
|
229
|
+
of: string | [number, number] | import('./position').PolarPosition;
|
|
230
|
+
offset: [number, number];
|
|
231
|
+
}, {
|
|
232
|
+
of: string | [number, number] | import('./position').PolarPosition;
|
|
233
|
+
offset: [number, number];
|
|
259
234
|
}>]>;
|
|
260
235
|
rotate: z.ZodOptional<z.ZodNumber>;
|
|
261
236
|
text: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
|
|
@@ -377,8 +352,8 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
377
352
|
}, "strip", z.ZodTypeAny, {
|
|
378
353
|
text: string;
|
|
379
354
|
distance?: number | undefined;
|
|
380
|
-
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
381
355
|
opacity?: number | undefined;
|
|
356
|
+
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
382
357
|
font?: {
|
|
383
358
|
family?: string | undefined;
|
|
384
359
|
size?: number | undefined;
|
|
@@ -389,8 +364,8 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
389
364
|
}, {
|
|
390
365
|
text: string;
|
|
391
366
|
distance?: number | undefined;
|
|
392
|
-
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
393
367
|
opacity?: number | undefined;
|
|
368
|
+
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
394
369
|
font?: {
|
|
395
370
|
family?: string | undefined;
|
|
396
371
|
size?: number | undefined;
|
|
@@ -432,8 +407,8 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
432
407
|
}, "strip", z.ZodTypeAny, {
|
|
433
408
|
text: string;
|
|
434
409
|
distance?: number | undefined;
|
|
435
|
-
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
436
410
|
opacity?: number | undefined;
|
|
411
|
+
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
437
412
|
font?: {
|
|
438
413
|
family?: string | undefined;
|
|
439
414
|
size?: number | undefined;
|
|
@@ -444,8 +419,8 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
444
419
|
}, {
|
|
445
420
|
text: string;
|
|
446
421
|
distance?: number | undefined;
|
|
447
|
-
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
448
422
|
opacity?: number | undefined;
|
|
423
|
+
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
449
424
|
font?: {
|
|
450
425
|
family?: string | undefined;
|
|
451
426
|
size?: number | undefined;
|
|
@@ -460,8 +435,14 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
460
435
|
direction: "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right";
|
|
461
436
|
of: string;
|
|
462
437
|
distance?: number | undefined;
|
|
438
|
+
} | {
|
|
439
|
+
of: string | [number, number] | import('./position').PolarPosition;
|
|
440
|
+
offset: [number, number];
|
|
463
441
|
};
|
|
464
442
|
fill?: string | undefined;
|
|
443
|
+
shape?: "diamond" | "circle" | "rectangle" | "ellipse" | undefined;
|
|
444
|
+
scale?: number | undefined;
|
|
445
|
+
opacity?: number | undefined;
|
|
465
446
|
text?: string | (string | {
|
|
466
447
|
text: string;
|
|
467
448
|
fill?: string | undefined;
|
|
@@ -476,8 +457,8 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
476
457
|
label?: {
|
|
477
458
|
text: string;
|
|
478
459
|
distance?: number | undefined;
|
|
479
|
-
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
480
460
|
opacity?: number | undefined;
|
|
461
|
+
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
481
462
|
font?: {
|
|
482
463
|
family?: string | undefined;
|
|
483
464
|
size?: number | undefined;
|
|
@@ -488,8 +469,8 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
488
469
|
} | {
|
|
489
470
|
text: string;
|
|
490
471
|
distance?: number | undefined;
|
|
491
|
-
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
492
472
|
opacity?: number | undefined;
|
|
473
|
+
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
493
474
|
font?: {
|
|
494
475
|
family?: string | undefined;
|
|
495
476
|
size?: number | undefined;
|
|
@@ -498,10 +479,8 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
498
479
|
} | undefined;
|
|
499
480
|
textColor?: string | undefined;
|
|
500
481
|
}[] | undefined;
|
|
501
|
-
shape?: "diamond" | "circle" | "rectangle" | "ellipse" | undefined;
|
|
502
482
|
stroke?: string | undefined;
|
|
503
483
|
strokeWidth?: number | undefined;
|
|
504
|
-
opacity?: number | undefined;
|
|
505
484
|
fillOpacity?: number | undefined;
|
|
506
485
|
drawOpacity?: number | undefined;
|
|
507
486
|
font?: {
|
|
@@ -522,7 +501,6 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
522
501
|
minimumWidth?: number | undefined;
|
|
523
502
|
minimumHeight?: number | undefined;
|
|
524
503
|
minimumSize?: number | undefined;
|
|
525
|
-
scale?: number | undefined;
|
|
526
504
|
xScale?: number | undefined;
|
|
527
505
|
yScale?: number | undefined;
|
|
528
506
|
innerXSep?: number | undefined;
|
|
@@ -536,8 +514,14 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
536
514
|
direction: "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right";
|
|
537
515
|
of: string;
|
|
538
516
|
distance?: number | undefined;
|
|
517
|
+
} | {
|
|
518
|
+
of: string | [number, number] | import('./position').PolarPosition;
|
|
519
|
+
offset: [number, number];
|
|
539
520
|
};
|
|
540
521
|
fill?: string | undefined;
|
|
522
|
+
shape?: "diamond" | "circle" | "rectangle" | "ellipse" | undefined;
|
|
523
|
+
scale?: number | undefined;
|
|
524
|
+
opacity?: number | undefined;
|
|
541
525
|
text?: string | (string | {
|
|
542
526
|
text: string;
|
|
543
527
|
fill?: string | undefined;
|
|
@@ -552,8 +536,8 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
552
536
|
label?: {
|
|
553
537
|
text: string;
|
|
554
538
|
distance?: number | undefined;
|
|
555
|
-
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
556
539
|
opacity?: number | undefined;
|
|
540
|
+
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
557
541
|
font?: {
|
|
558
542
|
family?: string | undefined;
|
|
559
543
|
size?: number | undefined;
|
|
@@ -564,8 +548,8 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
564
548
|
} | {
|
|
565
549
|
text: string;
|
|
566
550
|
distance?: number | undefined;
|
|
567
|
-
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
568
551
|
opacity?: number | undefined;
|
|
552
|
+
position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
|
|
569
553
|
font?: {
|
|
570
554
|
family?: string | undefined;
|
|
571
555
|
size?: number | undefined;
|
|
@@ -574,10 +558,8 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
574
558
|
} | undefined;
|
|
575
559
|
textColor?: string | undefined;
|
|
576
560
|
}[] | undefined;
|
|
577
|
-
shape?: "diamond" | "circle" | "rectangle" | "ellipse" | undefined;
|
|
578
561
|
stroke?: string | undefined;
|
|
579
562
|
strokeWidth?: number | undefined;
|
|
580
|
-
opacity?: number | undefined;
|
|
581
563
|
fillOpacity?: number | undefined;
|
|
582
564
|
drawOpacity?: number | undefined;
|
|
583
565
|
font?: {
|
|
@@ -598,7 +580,6 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
598
580
|
minimumWidth?: number | undefined;
|
|
599
581
|
minimumHeight?: number | undefined;
|
|
600
582
|
minimumSize?: number | undefined;
|
|
601
|
-
scale?: number | undefined;
|
|
602
583
|
xScale?: number | undefined;
|
|
603
584
|
yScale?: number | undefined;
|
|
604
585
|
innerXSep?: number | undefined;
|
|
@@ -607,6 +588,6 @@ export declare const NodeSchema: z.ZodObject<{
|
|
|
607
588
|
padding?: number | undefined;
|
|
608
589
|
margin?: number | undefined;
|
|
609
590
|
}>;
|
|
610
|
-
/**
|
|
591
|
+
/** 节点:可定位的形状容器(矩形/圆/椭圆/菱形)+ 可选文本标签 */
|
|
611
592
|
export type IRNode = z.infer<typeof NodeSchema>;
|
|
612
593
|
//# sourceMappingURL=node.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/ir/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGxC
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/ir/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGxC;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;CAKd,CAAC;AAEX,gBAAgB;AAChB,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC;AAEpD,qEAAqE;AACrE,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;EAwBpB,CAAC;AAEJ,oCAAoC;AACpC,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsBxB,CAAC;AAEJ,gBAAgB;AAChB,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAIxB,CAAC;AAEJ,+BAA+B;AAC/B,eAAO,MAAM,gBAAgB;;;;CAInB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE7D;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCzB,CAAC;AAEJ,uBAAuB;AACvB,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE1D,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+KpB,CAAC;AAEJ,sCAAsC;AACtC,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC"}
|
|
@@ -1,16 +1,8 @@
|
|
|
1
|
+
let zod = require("zod");
|
|
1
2
|
//#region src/ir/path/arrow.ts
|
|
2
3
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* 在 string 场景与字面量类型不互通的两个坑。
|
|
6
|
-
*
|
|
7
|
-
* - `normal`:实心三角(默认;最常见)
|
|
8
|
-
* - `open`:空心三角(UML 泛化 / 继承)
|
|
9
|
-
* - `stealth`:尖锐倒钩三角(流图常见、视觉锐利)
|
|
10
|
-
* - `diamond`:实心菱形(UML 组合)
|
|
11
|
-
* - `openDiamond`:空心菱形(UML 聚合)
|
|
12
|
-
* - `circle`:实心圆点(连接点 / dot end)
|
|
13
|
-
* - `openCircle`:空心圆点(白圈 / o-end)
|
|
4
|
+
* 箭头形状常量(用 const 而非 TS enum 避免 reverse-mapping 和字面量不互通)
|
|
5
|
+
* @description normal 实心三角(默认);open 空心三角(UML 泛化/继承);stealth 尖锐倒钩;diamond 实心菱形(UML 组合);openDiamond 空心菱形(聚合);circle 实心圆点;openCircle 空心圆点
|
|
14
6
|
*/
|
|
15
7
|
var ARROW_SHAPES = {
|
|
16
8
|
normal: "normal",
|
|
@@ -21,5 +13,45 @@ var ARROW_SHAPES = {
|
|
|
21
13
|
circle: "circle",
|
|
22
14
|
openCircle: "openCircle"
|
|
23
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* 空心 shape 集合(fill 字段在这些 shape 上 silent no-op)
|
|
18
|
+
* @description compile 与 render 都引用此表判定 fill 是否丢弃;空心 shape 用 color 主导描边、lineWidth 控描边粗
|
|
19
|
+
*/
|
|
20
|
+
var HOLLOW_ARROW_SHAPES = new Set([
|
|
21
|
+
"open",
|
|
22
|
+
"openDiamond",
|
|
23
|
+
"openCircle"
|
|
24
|
+
]);
|
|
25
|
+
/** marker 默认尺寸(length / width 的 fallback;arrowMarkers viewBox 内的几何也按 10 单位定义) */
|
|
26
|
+
var ARROW_MARKER_DEFAULT_SIZE = 6;
|
|
27
|
+
/** 空心 shape 描边默认粗细(lineWidth fallback;refX / shrink 计算都用它做"back stroke 半宽") */
|
|
28
|
+
var ARROW_MARKER_HOLLOW_DEFAULT_LINE_WIDTH = 1.5;
|
|
29
|
+
/**
|
|
30
|
+
* 端点级箭头视觉规格 schema
|
|
31
|
+
* @description 顶层 8 字段全 optional;fill 在空心 shape 上 silent no-op(schema 不拒绝、compile/render 丢字段);start/end 子对象用相同字段集(无 start/end 递归)
|
|
32
|
+
*/
|
|
33
|
+
var ArrowEndDetailSchema = zod.z.object({
|
|
34
|
+
shape: zod.z.nativeEnum(ARROW_SHAPES).optional().describe("Arrow tip shape. Defaults to `normal` (filled triangle). Other values: `open` (hollow triangle), `stealth` (sharp barb), `diamond`, `openDiamond`, `circle`, `openCircle`."),
|
|
35
|
+
scale: zod.z.number().positive().optional().describe("Uniform tip scale factor; multiplies `length` and `width` (e.g. `length=10, scale=1.5` → effective 15). Defaults to 1."),
|
|
36
|
+
length: zod.z.number().nonnegative().optional().describe("Tip length in user units (the dimension along the path direction). Defaults to ~6 (matching the legacy hardcoded markerWidth)."),
|
|
37
|
+
width: zod.z.number().nonnegative().optional().describe("Tip width in user units (perpendicular to the path). Defaults to ~6 (matching the legacy hardcoded markerHeight)."),
|
|
38
|
+
color: zod.z.string().optional().describe("Stroke color override. When omitted, the marker inherits the path stroke via `context-stroke`."),
|
|
39
|
+
fill: zod.z.string().optional().describe("Fill color override (effective only on solid shapes). Hollow shapes (`open` / `openDiamond` / `openCircle`) silently ignore this field — `color` drives the stroke."),
|
|
40
|
+
opacity: zod.z.number().min(0).max(1).optional().describe("Arrow opacity 0..1, independent from the path opacity. When omitted, inherits the path opacity."),
|
|
41
|
+
lineWidth: zod.z.number().nonnegative().optional().describe("Stroke width for hollow shapes (user units). Defaults to 1.5. Solid shapes ignore this field.")
|
|
42
|
+
}).describe("Per-end arrow visual spec: shape + visual fields (scale / length / width / color / fill / opacity / lineWidth). All optional; omitted fields fall through to top-level `arrowDetail` defaults and then built-in defaults.");
|
|
43
|
+
/**
|
|
44
|
+
* Path 级箭头详细配置 schema
|
|
45
|
+
* @description 顶层视觉字段(与 `ArrowEndDetailSchema` 同字段集)作为起末共享默认;`start` / `end` 子对象逐字段 merge 顶层(缺省字段继承,已填字段 override)
|
|
46
|
+
*/
|
|
47
|
+
var ArrowDetailSchema = ArrowEndDetailSchema.extend({
|
|
48
|
+
start: ArrowEndDetailSchema.optional().describe("Start-end override (effective only when `arrow` includes a start arrow: `<-` / `<->`). Fields merge into the top-level defaults; omitted fields inherit, present fields override."),
|
|
49
|
+
end: ArrowEndDetailSchema.optional().describe("End-end override (effective only when `arrow` includes an end arrow: `->` / `<->`). Fields merge into the top-level defaults; omitted fields inherit, present fields override.")
|
|
50
|
+
}).describe("Path-level arrow detail. Top-level visual fields (shape / scale / length / width / color / fill / opacity / lineWidth) act as shared defaults for both ends; `start` / `end` sub-objects per-field override the defaults.");
|
|
24
51
|
//#endregion
|
|
52
|
+
exports.ARROW_MARKER_DEFAULT_SIZE = ARROW_MARKER_DEFAULT_SIZE;
|
|
53
|
+
exports.ARROW_MARKER_HOLLOW_DEFAULT_LINE_WIDTH = ARROW_MARKER_HOLLOW_DEFAULT_LINE_WIDTH;
|
|
25
54
|
exports.ARROW_SHAPES = ARROW_SHAPES;
|
|
55
|
+
exports.ArrowDetailSchema = ArrowDetailSchema;
|
|
56
|
+
exports.ArrowEndDetailSchema = ArrowEndDetailSchema;
|
|
57
|
+
exports.HOLLOW_ARROW_SHAPES = HOLLOW_ARROW_SHAPES;
|