@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.
Files changed (193) hide show
  1. package/dist/es/compile/compile.d.ts +6 -13
  2. package/dist/es/compile/compile.d.ts.map +1 -1
  3. package/dist/es/compile/compile.js +4 -10
  4. package/dist/es/compile/node.d.ts +40 -59
  5. package/dist/es/compile/node.d.ts.map +1 -1
  6. package/dist/es/compile/node.js +51 -43
  7. package/dist/es/compile/parseTarget.d.ts +3 -8
  8. package/dist/es/compile/parseTarget.d.ts.map +1 -1
  9. package/dist/es/compile/parseTarget.js +7 -19
  10. package/dist/es/compile/path.d.ts +2 -19
  11. package/dist/es/compile/path.d.ts.map +1 -1
  12. package/dist/es/compile/path.js +232 -213
  13. package/dist/es/compile/position.d.ts +4 -8
  14. package/dist/es/compile/position.d.ts.map +1 -1
  15. package/dist/es/compile/position.js +10 -10
  16. package/dist/es/compile/text-metrics.d.ts +2 -4
  17. package/dist/es/compile/text-metrics.d.ts.map +1 -1
  18. package/dist/es/compile/view-box.d.ts +1 -4
  19. package/dist/es/compile/view-box.d.ts.map +1 -1
  20. package/dist/es/compile/view-box.js +1 -4
  21. package/dist/es/geometry/arc.d.ts +3 -28
  22. package/dist/es/geometry/arc.d.ts.map +1 -1
  23. package/dist/es/geometry/arc.js +4 -31
  24. package/dist/es/geometry/bend.d.ts +2 -13
  25. package/dist/es/geometry/bend.d.ts.map +1 -1
  26. package/dist/es/geometry/bend.js +2 -13
  27. package/dist/es/geometry/circle.d.ts +5 -13
  28. package/dist/es/geometry/circle.d.ts.map +1 -1
  29. package/dist/es/geometry/circle.js +1 -4
  30. package/dist/es/geometry/diamond.d.ts +9 -24
  31. package/dist/es/geometry/diamond.d.ts.map +1 -1
  32. package/dist/es/geometry/diamond.js +4 -14
  33. package/dist/es/geometry/ellipse.d.ts +9 -15
  34. package/dist/es/geometry/ellipse.d.ts.map +1 -1
  35. package/dist/es/geometry/ellipse.js +4 -8
  36. package/dist/es/geometry/point.d.ts +8 -9
  37. package/dist/es/geometry/point.d.ts.map +1 -1
  38. package/dist/es/geometry/point.js +8 -9
  39. package/dist/es/geometry/polar.d.ts +12 -21
  40. package/dist/es/geometry/polar.d.ts.map +1 -1
  41. package/dist/es/geometry/polar.js +7 -14
  42. package/dist/es/geometry/rect.d.ts +8 -32
  43. package/dist/es/geometry/rect.d.ts.map +1 -1
  44. package/dist/es/geometry/rect.js +7 -33
  45. package/dist/es/geometry/segment.d.ts +11 -18
  46. package/dist/es/geometry/segment.d.ts.map +1 -1
  47. package/dist/es/geometry/segment.js +9 -16
  48. package/dist/es/index.d.ts +6 -10
  49. package/dist/es/index.d.ts.map +1 -1
  50. package/dist/es/index.js +4 -3
  51. package/dist/es/ir/coordinate.d.ts +18 -10
  52. package/dist/es/ir/coordinate.d.ts.map +1 -1
  53. package/dist/es/ir/coordinate.js +6 -11
  54. package/dist/es/ir/node.d.ts +46 -65
  55. package/dist/es/ir/node.d.ts.map +1 -1
  56. package/dist/es/ir/node.js +15 -46
  57. package/dist/es/ir/path/arrow.d.ts +210 -12
  58. package/dist/es/ir/path/arrow.d.ts.map +1 -1
  59. package/dist/es/ir/path/arrow.js +39 -12
  60. package/dist/es/ir/path/path.d.ts +477 -153
  61. package/dist/es/ir/path/path.d.ts.map +1 -1
  62. package/dist/es/ir/path/path.js +2 -2
  63. package/dist/es/ir/path/step.d.ts +395 -223
  64. package/dist/es/ir/path/step.d.ts.map +1 -1
  65. package/dist/es/ir/path/step.js +13 -14
  66. package/dist/es/ir/path/target.d.ts +25 -16
  67. package/dist/es/ir/path/target.d.ts.map +1 -1
  68. package/dist/es/ir/path/target.js +8 -6
  69. package/dist/es/ir/position/at-position.d.ts +4 -11
  70. package/dist/es/ir/position/at-position.d.ts.map +1 -1
  71. package/dist/es/ir/position/at-position.js +2 -9
  72. package/dist/es/ir/position/index.d.ts +1 -0
  73. package/dist/es/ir/position/index.d.ts.map +1 -1
  74. package/dist/es/ir/position/offset-position.d.ts +14 -0
  75. package/dist/es/ir/position/offset-position.d.ts.map +1 -0
  76. package/dist/es/ir/position/offset-position.js +14 -0
  77. package/dist/es/ir/position/polar-position.d.ts +1 -4
  78. package/dist/es/ir/position/polar-position.d.ts.map +1 -1
  79. package/dist/es/ir/position/polar-position.js +1 -4
  80. package/dist/es/ir/scene.d.ts +1200 -386
  81. package/dist/es/ir/scene.d.ts.map +1 -1
  82. package/dist/es/parsers/parseTargetSugar.d.ts.map +1 -1
  83. package/dist/es/parsers/parseTargetSugar.js +6 -19
  84. package/dist/es/parsers/parseWay.d.ts +26 -118
  85. package/dist/es/parsers/parseWay.d.ts.map +1 -1
  86. package/dist/es/parsers/parseWay.js +19 -61
  87. package/dist/es/primitive/ellipse.d.ts +4 -14
  88. package/dist/es/primitive/ellipse.d.ts.map +1 -1
  89. package/dist/es/primitive/group.d.ts +21 -3
  90. package/dist/es/primitive/group.d.ts.map +1 -1
  91. package/dist/es/primitive/path.d.ts +67 -7
  92. package/dist/es/primitive/path.d.ts.map +1 -1
  93. package/dist/es/primitive/scene.d.ts +2 -4
  94. package/dist/es/primitive/scene.d.ts.map +1 -1
  95. package/dist/es/primitive/text.d.ts +9 -32
  96. package/dist/es/primitive/text.d.ts.map +1 -1
  97. package/dist/lib/compile/compile.cjs +4 -10
  98. package/dist/lib/compile/compile.d.ts +6 -13
  99. package/dist/lib/compile/compile.d.ts.map +1 -1
  100. package/dist/lib/compile/node.cjs +51 -43
  101. package/dist/lib/compile/node.d.ts +40 -59
  102. package/dist/lib/compile/node.d.ts.map +1 -1
  103. package/dist/lib/compile/parseTarget.cjs +7 -19
  104. package/dist/lib/compile/parseTarget.d.ts +3 -8
  105. package/dist/lib/compile/parseTarget.d.ts.map +1 -1
  106. package/dist/lib/compile/path.cjs +231 -212
  107. package/dist/lib/compile/path.d.ts +2 -19
  108. package/dist/lib/compile/path.d.ts.map +1 -1
  109. package/dist/lib/compile/position.cjs +10 -10
  110. package/dist/lib/compile/position.d.ts +4 -8
  111. package/dist/lib/compile/position.d.ts.map +1 -1
  112. package/dist/lib/compile/text-metrics.d.ts +2 -4
  113. package/dist/lib/compile/text-metrics.d.ts.map +1 -1
  114. package/dist/lib/compile/view-box.cjs +1 -4
  115. package/dist/lib/compile/view-box.d.ts +1 -4
  116. package/dist/lib/compile/view-box.d.ts.map +1 -1
  117. package/dist/lib/geometry/arc.cjs +3 -31
  118. package/dist/lib/geometry/arc.d.ts +3 -28
  119. package/dist/lib/geometry/arc.d.ts.map +1 -1
  120. package/dist/lib/geometry/bend.cjs +2 -13
  121. package/dist/lib/geometry/bend.d.ts +2 -13
  122. package/dist/lib/geometry/bend.d.ts.map +1 -1
  123. package/dist/lib/geometry/circle.cjs +1 -4
  124. package/dist/lib/geometry/circle.d.ts +5 -13
  125. package/dist/lib/geometry/circle.d.ts.map +1 -1
  126. package/dist/lib/geometry/diamond.cjs +4 -14
  127. package/dist/lib/geometry/diamond.d.ts +9 -24
  128. package/dist/lib/geometry/diamond.d.ts.map +1 -1
  129. package/dist/lib/geometry/ellipse.cjs +4 -8
  130. package/dist/lib/geometry/ellipse.d.ts +9 -15
  131. package/dist/lib/geometry/ellipse.d.ts.map +1 -1
  132. package/dist/lib/geometry/point.cjs +8 -9
  133. package/dist/lib/geometry/point.d.ts +8 -9
  134. package/dist/lib/geometry/point.d.ts.map +1 -1
  135. package/dist/lib/geometry/polar.cjs +7 -14
  136. package/dist/lib/geometry/polar.d.ts +12 -21
  137. package/dist/lib/geometry/polar.d.ts.map +1 -1
  138. package/dist/lib/geometry/rect.cjs +7 -33
  139. package/dist/lib/geometry/rect.d.ts +8 -32
  140. package/dist/lib/geometry/rect.d.ts.map +1 -1
  141. package/dist/lib/geometry/segment.cjs +9 -16
  142. package/dist/lib/geometry/segment.d.ts +11 -18
  143. package/dist/lib/geometry/segment.d.ts.map +1 -1
  144. package/dist/lib/index.cjs +9 -2
  145. package/dist/lib/index.d.ts +6 -10
  146. package/dist/lib/index.d.ts.map +1 -1
  147. package/dist/lib/ir/coordinate.cjs +6 -11
  148. package/dist/lib/ir/coordinate.d.ts +18 -10
  149. package/dist/lib/ir/coordinate.d.ts.map +1 -1
  150. package/dist/lib/ir/node.cjs +15 -46
  151. package/dist/lib/ir/node.d.ts +46 -65
  152. package/dist/lib/ir/node.d.ts.map +1 -1
  153. package/dist/lib/ir/path/arrow.cjs +43 -11
  154. package/dist/lib/ir/path/arrow.d.ts +210 -12
  155. package/dist/lib/ir/path/arrow.d.ts.map +1 -1
  156. package/dist/lib/ir/path/path.cjs +1 -1
  157. package/dist/lib/ir/path/path.d.ts +477 -153
  158. package/dist/lib/ir/path/path.d.ts.map +1 -1
  159. package/dist/lib/ir/path/step.cjs +13 -14
  160. package/dist/lib/ir/path/step.d.ts +395 -223
  161. package/dist/lib/ir/path/step.d.ts.map +1 -1
  162. package/dist/lib/ir/path/target.cjs +9 -7
  163. package/dist/lib/ir/path/target.d.ts +25 -16
  164. package/dist/lib/ir/path/target.d.ts.map +1 -1
  165. package/dist/lib/ir/position/at-position.cjs +2 -9
  166. package/dist/lib/ir/position/at-position.d.ts +4 -11
  167. package/dist/lib/ir/position/at-position.d.ts.map +1 -1
  168. package/dist/lib/ir/position/index.d.ts +1 -0
  169. package/dist/lib/ir/position/index.d.ts.map +1 -1
  170. package/dist/lib/ir/position/offset-position.cjs +14 -0
  171. package/dist/lib/ir/position/offset-position.d.ts +14 -0
  172. package/dist/lib/ir/position/offset-position.d.ts.map +1 -0
  173. package/dist/lib/ir/position/polar-position.cjs +1 -4
  174. package/dist/lib/ir/position/polar-position.d.ts +1 -4
  175. package/dist/lib/ir/position/polar-position.d.ts.map +1 -1
  176. package/dist/lib/ir/scene.d.ts +1200 -386
  177. package/dist/lib/ir/scene.d.ts.map +1 -1
  178. package/dist/lib/parsers/parseTargetSugar.cjs +6 -19
  179. package/dist/lib/parsers/parseTargetSugar.d.ts.map +1 -1
  180. package/dist/lib/parsers/parseWay.cjs +19 -61
  181. package/dist/lib/parsers/parseWay.d.ts +26 -118
  182. package/dist/lib/parsers/parseWay.d.ts.map +1 -1
  183. package/dist/lib/primitive/ellipse.d.ts +4 -14
  184. package/dist/lib/primitive/ellipse.d.ts.map +1 -1
  185. package/dist/lib/primitive/group.d.ts +21 -3
  186. package/dist/lib/primitive/group.d.ts.map +1 -1
  187. package/dist/lib/primitive/path.d.ts +67 -7
  188. package/dist/lib/primitive/path.d.ts.map +1 -1
  189. package/dist/lib/primitive/scene.d.ts +2 -4
  190. package/dist/lib/primitive/scene.d.ts.map +1 -1
  191. package/dist/lib/primitive/text.d.ts +9 -32
  192. package/dist/lib/primitive/text.d.ts.map +1 -1
  193. package/package.json +1 -1
@@ -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
- * 节点形状常量。值是 IR `shape` 字段的字面字符串;
8
- * const + ValueOf 派生(不用 TS enum)。
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 (replaces the alpha.1 `fontSize` scalar).");
27
+ }).describe("Font properties for the node text label; all fields optional, nested object form.");
43
28
  /**
44
- * 单行文本规格——纯字符串走块级默认样式;对象形式可对该行覆盖 fill / opacity / font
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
- * 节点文本——单行字符串或非空多行数组(每元素一个 LineSpec):
61
- * - `'Hello'` 等价于 `[{ text: 'Hello' }]`,按一行渲染
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
- /** 节点文本对齐(多行内文本对齐)——TikZ `align=` 同义词 */
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
- * 节点附属标签(label)——TikZ `[label=above:foo]` / `[label={[red]30:foo}]` 同义。
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
+ * 节点附属标签 labelTikZ `[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
- ]).describe("Center point of the node content box; Cartesian [x, y], polar, or relative-to-another-node (`at`-style with `direction` / `of` / `distance?`). All non-Cartesian forms resolve at compile time."),
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)."),
@@ -1,19 +1,8 @@
1
1
  import { z } from 'zod';
2
2
  import { ValueOf } from '../types';
3
3
  /**
4
- * 节点形状常量。值是 IR `shape` 字段的字面字符串;
5
- * const + ValueOf 派生(不用 TS enum)。
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
- /** 节点形状字面量类型,由 `NODE_SHAPES` 派生 */
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
- /** 节点字体规格(IR 层)——所有字段可选,编译期解析默认值 */
32
+ /** 节点字体规格 IR 类型(所有字段可选,编译期解析默认值) */
49
33
  export type IRFont = z.infer<typeof FontSchema>;
50
34
  /**
51
- * 单行文本规格——纯字符串走块级默认样式;对象形式可对该行覆盖 fill / opacity / font
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 类型(string 或对象) */
79
+ /** 行规格 IR 类型 */
102
80
  export type IRLineSpec = z.infer<typeof LineSpecSchema>;
103
81
  /**
104
- * 节点文本——单行字符串或非空多行数组(每元素一个 LineSpec):
105
- * - `'Hello'` 等价于 `[{ text: 'Hello' }]`,按一行渲染
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
- /** 节点文本对齐(多行内文本对齐)——TikZ `align=` 同义词 */
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
- * 节点附属标签(label)——TikZ `[label=above:foo]` / `[label={[red]30:foo}]` 同义。
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
+ * 节点附属标签 labelTikZ `[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 类型——单条 label 的字段集 */
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;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW;;;;;CAKd,CAAC;AAEX,mCAAmC;AACnC,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;EAwBpB,CAAC;AAEJ,oCAAoC;AACpC,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEhD;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsBxB,CAAC;AAEJ,4BAA4B;AAC5B,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAIxB,CAAC;AAEJ,yCAAyC;AACzC,eAAO,MAAM,gBAAgB;;;;CAInB,CAAC;AAEX,kBAAkB;AAClB,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCzB,CAAC;AAEJ,sCAAsC;AACtC,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE1D,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+KpB,CAAC;AAEJ,4CAA4C;AAC5C,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC"}
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
- * 箭头形状常量。值就是 IR / Scene arrow 字段的字面字符串;
4
- * const 而不是 TS enum——避免 enum 在数值场景生成 reverse-mapping、
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;