@retikz/core 0.1.0-alpha.4 → 0.1.0-beta.1

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 (275) hide show
  1. package/dist/es/compile/compile.d.ts +23 -13
  2. package/dist/es/compile/compile.d.ts.map +1 -1
  3. package/dist/es/compile/compile.js +44 -25
  4. package/dist/es/compile/index.d.ts +1 -1
  5. package/dist/es/compile/index.d.ts.map +1 -1
  6. package/dist/es/compile/node.d.ts +40 -59
  7. package/dist/es/compile/node.d.ts.map +1 -1
  8. package/dist/es/compile/node.js +51 -43
  9. package/dist/es/compile/parseTarget.d.ts +3 -8
  10. package/dist/es/compile/parseTarget.d.ts.map +1 -1
  11. package/dist/es/compile/parseTarget.js +7 -19
  12. package/dist/es/compile/path/anchor.d.ts +19 -0
  13. package/dist/es/compile/path/anchor.d.ts.map +1 -0
  14. package/dist/es/compile/path/anchor.js +54 -0
  15. package/dist/es/compile/path/index.d.ts +24 -0
  16. package/dist/es/compile/path/index.d.ts.map +1 -0
  17. package/dist/es/compile/path/index.js +308 -0
  18. package/dist/es/compile/path/label.d.ts +18 -0
  19. package/dist/es/compile/path/label.d.ts.map +1 -0
  20. package/dist/es/compile/path/label.js +102 -0
  21. package/dist/es/compile/path/relative.d.ts +8 -0
  22. package/dist/es/compile/path/relative.d.ts.map +1 -0
  23. package/dist/es/compile/path/relative.js +48 -0
  24. package/dist/es/compile/path/shrink.d.ts +24 -0
  25. package/dist/es/compile/path/shrink.d.ts.map +1 -0
  26. package/dist/es/compile/path/shrink.js +136 -0
  27. package/dist/es/compile/path/split.d.ts +15 -0
  28. package/dist/es/compile/path/split.d.ts.map +1 -0
  29. package/dist/es/compile/path/split.js +46 -0
  30. package/dist/es/compile/position.d.ts +4 -8
  31. package/dist/es/compile/position.d.ts.map +1 -1
  32. package/dist/es/compile/position.js +10 -10
  33. package/dist/es/compile/text-metrics.d.ts +6 -5
  34. package/dist/es/compile/text-metrics.d.ts.map +1 -1
  35. package/dist/es/compile/text-metrics.js +11 -5
  36. package/dist/es/compile/view-box.d.ts +1 -4
  37. package/dist/es/compile/view-box.d.ts.map +1 -1
  38. package/dist/es/compile/view-box.js +1 -4
  39. package/dist/es/geometry/_transform.d.ts +21 -0
  40. package/dist/es/geometry/_transform.d.ts.map +1 -0
  41. package/dist/es/geometry/_transform.js +27 -0
  42. package/dist/es/geometry/arc.d.ts +3 -28
  43. package/dist/es/geometry/arc.d.ts.map +1 -1
  44. package/dist/es/geometry/arc.js +4 -31
  45. package/dist/es/geometry/bend.d.ts +2 -13
  46. package/dist/es/geometry/bend.d.ts.map +1 -1
  47. package/dist/es/geometry/bend.js +2 -13
  48. package/dist/es/geometry/circle.d.ts +6 -15
  49. package/dist/es/geometry/circle.d.ts.map +1 -1
  50. package/dist/es/geometry/circle.js +2 -20
  51. package/dist/es/geometry/diamond.d.ts +10 -26
  52. package/dist/es/geometry/diamond.d.ts.map +1 -1
  53. package/dist/es/geometry/diamond.js +5 -30
  54. package/dist/es/geometry/ellipse.d.ts +10 -17
  55. package/dist/es/geometry/ellipse.d.ts.map +1 -1
  56. package/dist/es/geometry/ellipse.js +5 -24
  57. package/dist/es/geometry/point.d.ts +8 -9
  58. package/dist/es/geometry/point.d.ts.map +1 -1
  59. package/dist/es/geometry/point.js +8 -9
  60. package/dist/es/geometry/polar.d.ts +12 -21
  61. package/dist/es/geometry/polar.d.ts.map +1 -1
  62. package/dist/es/geometry/polar.js +8 -19
  63. package/dist/es/geometry/rect.d.ts +8 -32
  64. package/dist/es/geometry/rect.d.ts.map +1 -1
  65. package/dist/es/geometry/rect.js +6 -49
  66. package/dist/es/geometry/segment.d.ts +15 -18
  67. package/dist/es/geometry/segment.d.ts.map +1 -1
  68. package/dist/es/geometry/segment.js +9 -16
  69. package/dist/es/index.d.ts +13 -13
  70. package/dist/es/index.d.ts.map +1 -1
  71. package/dist/es/index.js +7 -4
  72. package/dist/es/ir/coordinate.d.ts +18 -10
  73. package/dist/es/ir/coordinate.d.ts.map +1 -1
  74. package/dist/es/ir/coordinate.js +6 -11
  75. package/dist/es/ir/font.d.ts +21 -0
  76. package/dist/es/ir/font.d.ts.map +1 -0
  77. package/dist/es/ir/font.js +15 -0
  78. package/dist/es/ir/index.d.ts +2 -0
  79. package/dist/es/ir/index.d.ts.map +1 -1
  80. package/dist/es/ir/node.d.ts +51 -181
  81. package/dist/es/ir/node.d.ts.map +1 -1
  82. package/dist/es/ir/node.js +15 -70
  83. package/dist/es/ir/path/arrow.d.ts +210 -12
  84. package/dist/es/ir/path/arrow.d.ts.map +1 -1
  85. package/dist/es/ir/path/arrow.js +39 -12
  86. package/dist/es/ir/path/path.d.ts +477 -153
  87. package/dist/es/ir/path/path.d.ts.map +1 -1
  88. package/dist/es/ir/path/path.js +6 -6
  89. package/dist/es/ir/path/step.d.ts +395 -223
  90. package/dist/es/ir/path/step.d.ts.map +1 -1
  91. package/dist/es/ir/path/step.js +21 -22
  92. package/dist/es/ir/path/target.d.ts +25 -16
  93. package/dist/es/ir/path/target.d.ts.map +1 -1
  94. package/dist/es/ir/path/target.js +8 -6
  95. package/dist/es/ir/position/at-position.d.ts +4 -11
  96. package/dist/es/ir/position/at-position.d.ts.map +1 -1
  97. package/dist/es/ir/position/at-position.js +2 -9
  98. package/dist/es/ir/position/index.d.ts +1 -0
  99. package/dist/es/ir/position/index.d.ts.map +1 -1
  100. package/dist/es/ir/position/offset-position.d.ts +14 -0
  101. package/dist/es/ir/position/offset-position.d.ts.map +1 -0
  102. package/dist/es/ir/position/offset-position.js +14 -0
  103. package/dist/es/ir/position/polar-position.d.ts +1 -4
  104. package/dist/es/ir/position/polar-position.d.ts.map +1 -1
  105. package/dist/es/ir/position/polar-position.js +3 -6
  106. package/dist/es/ir/position/position.d.ts.map +1 -1
  107. package/dist/es/ir/position/position.js +1 -1
  108. package/dist/es/ir/scene.d.ts +1236 -422
  109. package/dist/es/ir/scene.d.ts.map +1 -1
  110. package/dist/es/ir/text.d.ts +96 -0
  111. package/dist/es/ir/text.d.ts.map +1 -0
  112. package/dist/es/ir/text.js +20 -0
  113. package/dist/es/parsers/parseTargetSugar.d.ts +4 -0
  114. package/dist/es/parsers/parseTargetSugar.d.ts.map +1 -1
  115. package/dist/es/parsers/parseTargetSugar.js +7 -19
  116. package/dist/es/parsers/parseWay.d.ts +26 -118
  117. package/dist/es/parsers/parseWay.d.ts.map +1 -1
  118. package/dist/es/parsers/parseWay.js +19 -61
  119. package/dist/es/primitive/ellipse.d.ts +4 -14
  120. package/dist/es/primitive/ellipse.d.ts.map +1 -1
  121. package/dist/es/primitive/group.d.ts +37 -3
  122. package/dist/es/primitive/group.d.ts.map +1 -1
  123. package/dist/es/primitive/path.d.ts +107 -7
  124. package/dist/es/primitive/path.d.ts.map +1 -1
  125. package/dist/es/primitive/rect.d.ts +2 -2
  126. package/dist/es/primitive/rect.d.ts.map +1 -1
  127. package/dist/es/primitive/scene.d.ts +2 -4
  128. package/dist/es/primitive/scene.d.ts.map +1 -1
  129. package/dist/es/primitive/text.d.ts +16 -32
  130. package/dist/es/primitive/text.d.ts.map +1 -1
  131. package/dist/es/primitive/view-box.d.ts +1 -1
  132. package/dist/es/primitive/view-box.d.ts.map +1 -1
  133. package/dist/es/types.d.ts +8 -0
  134. package/dist/es/types.d.ts.map +1 -1
  135. package/dist/lib/compile/compile.cjs +44 -25
  136. package/dist/lib/compile/compile.d.ts +23 -13
  137. package/dist/lib/compile/compile.d.ts.map +1 -1
  138. package/dist/lib/compile/index.d.ts +1 -1
  139. package/dist/lib/compile/index.d.ts.map +1 -1
  140. package/dist/lib/compile/node.cjs +51 -43
  141. package/dist/lib/compile/node.d.ts +40 -59
  142. package/dist/lib/compile/node.d.ts.map +1 -1
  143. package/dist/lib/compile/parseTarget.cjs +7 -19
  144. package/dist/lib/compile/parseTarget.d.ts +3 -8
  145. package/dist/lib/compile/parseTarget.d.ts.map +1 -1
  146. package/dist/lib/compile/path/anchor.cjs +58 -0
  147. package/dist/lib/compile/path/anchor.d.ts +19 -0
  148. package/dist/lib/compile/path/anchor.d.ts.map +1 -0
  149. package/dist/lib/compile/path/index.cjs +308 -0
  150. package/dist/lib/compile/path/index.d.ts +24 -0
  151. package/dist/lib/compile/path/index.d.ts.map +1 -0
  152. package/dist/lib/compile/path/label.cjs +103 -0
  153. package/dist/lib/compile/path/label.d.ts +18 -0
  154. package/dist/lib/compile/path/label.d.ts.map +1 -0
  155. package/dist/lib/compile/path/relative.cjs +48 -0
  156. package/dist/lib/compile/path/relative.d.ts +8 -0
  157. package/dist/lib/compile/path/relative.d.ts.map +1 -0
  158. package/dist/lib/compile/path/shrink.cjs +138 -0
  159. package/dist/lib/compile/path/shrink.d.ts +24 -0
  160. package/dist/lib/compile/path/shrink.d.ts.map +1 -0
  161. package/dist/lib/compile/path/split.cjs +46 -0
  162. package/dist/lib/compile/path/split.d.ts +15 -0
  163. package/dist/lib/compile/path/split.d.ts.map +1 -0
  164. package/dist/lib/compile/position.cjs +10 -10
  165. package/dist/lib/compile/position.d.ts +4 -8
  166. package/dist/lib/compile/position.d.ts.map +1 -1
  167. package/dist/lib/compile/text-metrics.cjs +11 -5
  168. package/dist/lib/compile/text-metrics.d.ts +6 -5
  169. package/dist/lib/compile/text-metrics.d.ts.map +1 -1
  170. package/dist/lib/compile/view-box.cjs +1 -4
  171. package/dist/lib/compile/view-box.d.ts +1 -4
  172. package/dist/lib/compile/view-box.d.ts.map +1 -1
  173. package/dist/lib/geometry/_transform.cjs +28 -0
  174. package/dist/lib/geometry/_transform.d.ts +21 -0
  175. package/dist/lib/geometry/_transform.d.ts.map +1 -0
  176. package/dist/lib/geometry/arc.cjs +3 -31
  177. package/dist/lib/geometry/arc.d.ts +3 -28
  178. package/dist/lib/geometry/arc.d.ts.map +1 -1
  179. package/dist/lib/geometry/bend.cjs +2 -13
  180. package/dist/lib/geometry/bend.d.ts +2 -13
  181. package/dist/lib/geometry/bend.d.ts.map +1 -1
  182. package/dist/lib/geometry/circle.cjs +6 -24
  183. package/dist/lib/geometry/circle.d.ts +6 -15
  184. package/dist/lib/geometry/circle.d.ts.map +1 -1
  185. package/dist/lib/geometry/diamond.cjs +9 -34
  186. package/dist/lib/geometry/diamond.d.ts +10 -26
  187. package/dist/lib/geometry/diamond.d.ts.map +1 -1
  188. package/dist/lib/geometry/ellipse.cjs +9 -28
  189. package/dist/lib/geometry/ellipse.d.ts +10 -17
  190. package/dist/lib/geometry/ellipse.d.ts.map +1 -1
  191. package/dist/lib/geometry/point.cjs +8 -9
  192. package/dist/lib/geometry/point.d.ts +8 -9
  193. package/dist/lib/geometry/point.d.ts.map +1 -1
  194. package/dist/lib/geometry/polar.cjs +8 -19
  195. package/dist/lib/geometry/polar.d.ts +12 -21
  196. package/dist/lib/geometry/polar.d.ts.map +1 -1
  197. package/dist/lib/geometry/rect.cjs +10 -53
  198. package/dist/lib/geometry/rect.d.ts +8 -32
  199. package/dist/lib/geometry/rect.d.ts.map +1 -1
  200. package/dist/lib/geometry/segment.cjs +9 -16
  201. package/dist/lib/geometry/segment.d.ts +15 -18
  202. package/dist/lib/geometry/segment.d.ts.map +1 -1
  203. package/dist/lib/index.cjs +14 -5
  204. package/dist/lib/index.d.ts +13 -13
  205. package/dist/lib/index.d.ts.map +1 -1
  206. package/dist/lib/ir/coordinate.cjs +6 -11
  207. package/dist/lib/ir/coordinate.d.ts +18 -10
  208. package/dist/lib/ir/coordinate.d.ts.map +1 -1
  209. package/dist/lib/ir/font.cjs +15 -0
  210. package/dist/lib/ir/font.d.ts +21 -0
  211. package/dist/lib/ir/font.d.ts.map +1 -0
  212. package/dist/lib/ir/index.d.ts +2 -0
  213. package/dist/lib/ir/index.d.ts.map +1 -1
  214. package/dist/lib/ir/node.cjs +16 -74
  215. package/dist/lib/ir/node.d.ts +51 -181
  216. package/dist/lib/ir/node.d.ts.map +1 -1
  217. package/dist/lib/ir/path/arrow.cjs +43 -11
  218. package/dist/lib/ir/path/arrow.d.ts +210 -12
  219. package/dist/lib/ir/path/arrow.d.ts.map +1 -1
  220. package/dist/lib/ir/path/path.cjs +5 -5
  221. package/dist/lib/ir/path/path.d.ts +477 -153
  222. package/dist/lib/ir/path/path.d.ts.map +1 -1
  223. package/dist/lib/ir/path/step.cjs +21 -22
  224. package/dist/lib/ir/path/step.d.ts +395 -223
  225. package/dist/lib/ir/path/step.d.ts.map +1 -1
  226. package/dist/lib/ir/path/target.cjs +9 -7
  227. package/dist/lib/ir/path/target.d.ts +25 -16
  228. package/dist/lib/ir/path/target.d.ts.map +1 -1
  229. package/dist/lib/ir/position/at-position.cjs +2 -9
  230. package/dist/lib/ir/position/at-position.d.ts +4 -11
  231. package/dist/lib/ir/position/at-position.d.ts.map +1 -1
  232. package/dist/lib/ir/position/index.d.ts +1 -0
  233. package/dist/lib/ir/position/index.d.ts.map +1 -1
  234. package/dist/lib/ir/position/offset-position.cjs +14 -0
  235. package/dist/lib/ir/position/offset-position.d.ts +14 -0
  236. package/dist/lib/ir/position/offset-position.d.ts.map +1 -0
  237. package/dist/lib/ir/position/polar-position.cjs +3 -6
  238. package/dist/lib/ir/position/polar-position.d.ts +1 -4
  239. package/dist/lib/ir/position/polar-position.d.ts.map +1 -1
  240. package/dist/lib/ir/position/position.cjs +1 -1
  241. package/dist/lib/ir/position/position.d.ts.map +1 -1
  242. package/dist/lib/ir/scene.d.ts +1236 -422
  243. package/dist/lib/ir/scene.d.ts.map +1 -1
  244. package/dist/lib/ir/text.cjs +21 -0
  245. package/dist/lib/ir/text.d.ts +96 -0
  246. package/dist/lib/ir/text.d.ts.map +1 -0
  247. package/dist/lib/parsers/parseTargetSugar.cjs +7 -19
  248. package/dist/lib/parsers/parseTargetSugar.d.ts +4 -0
  249. package/dist/lib/parsers/parseTargetSugar.d.ts.map +1 -1
  250. package/dist/lib/parsers/parseWay.cjs +19 -61
  251. package/dist/lib/parsers/parseWay.d.ts +26 -118
  252. package/dist/lib/parsers/parseWay.d.ts.map +1 -1
  253. package/dist/lib/primitive/ellipse.d.ts +4 -14
  254. package/dist/lib/primitive/ellipse.d.ts.map +1 -1
  255. package/dist/lib/primitive/group.d.ts +37 -3
  256. package/dist/lib/primitive/group.d.ts.map +1 -1
  257. package/dist/lib/primitive/path.d.ts +107 -7
  258. package/dist/lib/primitive/path.d.ts.map +1 -1
  259. package/dist/lib/primitive/rect.d.ts +2 -2
  260. package/dist/lib/primitive/rect.d.ts.map +1 -1
  261. package/dist/lib/primitive/scene.d.ts +2 -4
  262. package/dist/lib/primitive/scene.d.ts.map +1 -1
  263. package/dist/lib/primitive/text.d.ts +16 -32
  264. package/dist/lib/primitive/text.d.ts.map +1 -1
  265. package/dist/lib/primitive/view-box.d.ts +1 -1
  266. package/dist/lib/primitive/view-box.d.ts.map +1 -1
  267. package/dist/lib/types.d.ts +8 -0
  268. package/dist/lib/types.d.ts.map +1 -1
  269. package/package.json +13 -4
  270. package/dist/es/compile/path.d.ts +0 -30
  271. package/dist/es/compile/path.d.ts.map +0 -1
  272. package/dist/es/compile/path.js +0 -617
  273. package/dist/lib/compile/path.cjs +0 -617
  274. package/dist/lib/compile/path.d.ts +0 -30
  275. package/dist/lib/compile/path.d.ts.map +0 -1
@@ -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,152 +10,18 @@ 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
- */
32
- export declare const FontSchema: z.ZodObject<{
33
- family: z.ZodOptional<z.ZodString>;
34
- size: z.ZodOptional<z.ZodNumber>;
35
- weight: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["normal", "bold"]>, z.ZodNumber]>>;
36
- style: z.ZodOptional<z.ZodEnum<["normal", "italic", "oblique"]>>;
37
- }, "strip", z.ZodTypeAny, {
38
- family?: string | undefined;
39
- size?: number | undefined;
40
- weight?: number | "normal" | "bold" | undefined;
41
- style?: "normal" | "italic" | "oblique" | undefined;
42
- }, {
43
- family?: string | undefined;
44
- size?: number | undefined;
45
- weight?: number | "normal" | "bold" | undefined;
46
- style?: "normal" | "italic" | "oblique" | undefined;
47
- }>;
48
- /** 节点字体规格(IR 层)——所有字段可选,编译期解析默认值 */
49
- export type IRFont = z.infer<typeof FontSchema>;
50
- /**
51
- * 单行文本规格——纯字符串走块级默认样式;对象形式可对该行覆盖 fill / opacity / font。
52
- *
53
- * 行级覆盖只生效于本行的 `<tspan>`:
54
- * - `fill`:仅这一行颜色
55
- * - `opacity`:仅这一行 0~1 透明度
56
- * - `font`:family / size / weight / style 任意子集;未填字段继承块级 font
57
- *
58
- * 块级 `align` / `lineHeight` 不可被行覆盖(多行块整体属性)。
59
- */
60
- export declare const LineSpecSchema: z.ZodUnion<[z.ZodString, z.ZodObject<{
61
- text: z.ZodString;
62
- fill: z.ZodOptional<z.ZodString>;
63
- opacity: z.ZodOptional<z.ZodNumber>;
64
- font: z.ZodOptional<z.ZodObject<{
65
- family: z.ZodOptional<z.ZodString>;
66
- size: z.ZodOptional<z.ZodNumber>;
67
- weight: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["normal", "bold"]>, z.ZodNumber]>>;
68
- style: z.ZodOptional<z.ZodEnum<["normal", "italic", "oblique"]>>;
69
- }, "strip", z.ZodTypeAny, {
70
- family?: string | undefined;
71
- size?: number | undefined;
72
- weight?: number | "normal" | "bold" | undefined;
73
- style?: "normal" | "italic" | "oblique" | undefined;
74
- }, {
75
- family?: string | undefined;
76
- size?: number | undefined;
77
- weight?: number | "normal" | "bold" | undefined;
78
- style?: "normal" | "italic" | "oblique" | undefined;
79
- }>>;
80
- }, "strip", z.ZodTypeAny, {
81
- text: string;
82
- fill?: string | undefined;
83
- opacity?: number | undefined;
84
- font?: {
85
- family?: string | undefined;
86
- size?: number | undefined;
87
- weight?: number | "normal" | "bold" | undefined;
88
- style?: "normal" | "italic" | "oblique" | undefined;
89
- } | undefined;
90
- }, {
91
- text: string;
92
- fill?: string | undefined;
93
- opacity?: number | undefined;
94
- font?: {
95
- family?: string | undefined;
96
- size?: number | undefined;
97
- weight?: number | "normal" | "bold" | undefined;
98
- style?: "normal" | "italic" | "oblique" | undefined;
99
- } | undefined;
100
- }>]>;
101
- /** 行规格 IR 类型(string 或对象) */
102
- export type IRLineSpec = z.infer<typeof LineSpecSchema>;
103
- /**
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);行级覆盖天然落字段。
110
- */
111
- export declare const NodeTextSchema: z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
112
- text: z.ZodString;
113
- fill: z.ZodOptional<z.ZodString>;
114
- opacity: z.ZodOptional<z.ZodNumber>;
115
- font: z.ZodOptional<z.ZodObject<{
116
- family: z.ZodOptional<z.ZodString>;
117
- size: z.ZodOptional<z.ZodNumber>;
118
- weight: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["normal", "bold"]>, z.ZodNumber]>>;
119
- style: z.ZodOptional<z.ZodEnum<["normal", "italic", "oblique"]>>;
120
- }, "strip", z.ZodTypeAny, {
121
- family?: string | undefined;
122
- size?: number | undefined;
123
- weight?: number | "normal" | "bold" | undefined;
124
- style?: "normal" | "italic" | "oblique" | undefined;
125
- }, {
126
- family?: string | undefined;
127
- size?: number | undefined;
128
- weight?: number | "normal" | "bold" | undefined;
129
- style?: "normal" | "italic" | "oblique" | undefined;
130
- }>>;
131
- }, "strip", z.ZodTypeAny, {
132
- text: string;
133
- fill?: string | undefined;
134
- opacity?: number | undefined;
135
- font?: {
136
- family?: string | undefined;
137
- size?: number | undefined;
138
- weight?: number | "normal" | "bold" | undefined;
139
- style?: "normal" | "italic" | "oblique" | undefined;
140
- } | undefined;
141
- }, {
142
- text: string;
143
- fill?: string | undefined;
144
- opacity?: number | undefined;
145
- font?: {
146
- family?: string | undefined;
147
- size?: number | undefined;
148
- weight?: number | "normal" | "bold" | undefined;
149
- style?: "normal" | "italic" | "oblique" | undefined;
150
- } | undefined;
151
- }>]>, "many">]>;
152
- /** 节点文本对齐(多行内文本对齐)——TikZ `align=` 同义词 */
15
+ /** 节点文本对齐(TikZ `align=` 同义) */
153
16
  export declare const NODE_TEXT_ALIGNS: {
154
17
  readonly left: "left";
155
18
  readonly center: "center";
156
19
  readonly right: "right";
157
20
  };
158
- /** 多行文本对齐字面量类型 */
159
21
  export type NodeTextAlign = ValueOf<typeof NODE_TEXT_ALIGNS>;
160
22
  /**
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 边界的距离)。
23
+ * 节点附属标签 labelTikZ `[label=above:foo]` 同义)
24
+ * @description 可挂多个;label 不参与 viewBox。position 支持 8 方向枚举或数字角度(polar 约定:0°=+x,90°=+y 屏幕下方);默认 position='above',distance=4
170
25
  */
171
26
  export declare const NodeLabelSchema: z.ZodObject<{
172
27
  text: z.ZodString;
@@ -202,7 +57,6 @@ export declare const NodeLabelSchema: z.ZodObject<{
202
57
  }, "strip", z.ZodTypeAny, {
203
58
  text: string;
204
59
  distance?: number | undefined;
205
- position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
206
60
  opacity?: number | undefined;
207
61
  font?: {
208
62
  family?: string | undefined;
@@ -210,11 +64,11 @@ export declare const NodeLabelSchema: z.ZodObject<{
210
64
  weight?: number | "normal" | "bold" | undefined;
211
65
  style?: "normal" | "italic" | "oblique" | undefined;
212
66
  } | undefined;
67
+ position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
213
68
  textColor?: string | undefined;
214
69
  }, {
215
70
  text: string;
216
71
  distance?: number | undefined;
217
- position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
218
72
  opacity?: number | undefined;
219
73
  font?: {
220
74
  family?: string | undefined;
@@ -222,9 +76,10 @@ export declare const NodeLabelSchema: z.ZodObject<{
222
76
  weight?: number | "normal" | "bold" | undefined;
223
77
  style?: "normal" | "italic" | "oblique" | undefined;
224
78
  } | undefined;
79
+ position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
225
80
  textColor?: string | undefined;
226
81
  }>;
227
- /** Node label IR 类型——单条 label 的字段集 */
82
+ /** Node label IR 类型 */
228
83
  export type IRNodeLabel = z.infer<typeof NodeLabelSchema>;
229
84
  export declare const NodeSchema: z.ZodObject<{
230
85
  type: z.ZodLiteral<"node">;
@@ -256,6 +111,15 @@ export declare const NodeSchema: z.ZodObject<{
256
111
  direction: "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right";
257
112
  of: string;
258
113
  distance?: number | undefined;
114
+ }>, z.ZodObject<{
115
+ of: z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodType<import('./position').PolarPosition, z.ZodTypeDef, import('./position').PolarPosition>]>;
116
+ offset: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
117
+ }, "strip", z.ZodTypeAny, {
118
+ of: string | [number, number] | import('./position').PolarPosition;
119
+ offset: [number, number];
120
+ }, {
121
+ of: string | [number, number] | import('./position').PolarPosition;
122
+ offset: [number, number];
259
123
  }>]>;
260
124
  rotate: z.ZodOptional<z.ZodNumber>;
261
125
  text: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
@@ -377,7 +241,6 @@ export declare const NodeSchema: z.ZodObject<{
377
241
  }, "strip", z.ZodTypeAny, {
378
242
  text: string;
379
243
  distance?: number | undefined;
380
- position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
381
244
  opacity?: number | undefined;
382
245
  font?: {
383
246
  family?: string | undefined;
@@ -385,11 +248,11 @@ export declare const NodeSchema: z.ZodObject<{
385
248
  weight?: number | "normal" | "bold" | undefined;
386
249
  style?: "normal" | "italic" | "oblique" | undefined;
387
250
  } | undefined;
251
+ position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
388
252
  textColor?: string | undefined;
389
253
  }, {
390
254
  text: string;
391
255
  distance?: number | undefined;
392
- position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
393
256
  opacity?: number | undefined;
394
257
  font?: {
395
258
  family?: string | undefined;
@@ -397,6 +260,7 @@ export declare const NodeSchema: z.ZodObject<{
397
260
  weight?: number | "normal" | "bold" | undefined;
398
261
  style?: "normal" | "italic" | "oblique" | undefined;
399
262
  } | undefined;
263
+ position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
400
264
  textColor?: string | undefined;
401
265
  }>, z.ZodArray<z.ZodObject<{
402
266
  text: z.ZodString;
@@ -432,7 +296,6 @@ export declare const NodeSchema: z.ZodObject<{
432
296
  }, "strip", z.ZodTypeAny, {
433
297
  text: string;
434
298
  distance?: number | undefined;
435
- position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
436
299
  opacity?: number | undefined;
437
300
  font?: {
438
301
  family?: string | undefined;
@@ -440,11 +303,11 @@ export declare const NodeSchema: z.ZodObject<{
440
303
  weight?: number | "normal" | "bold" | undefined;
441
304
  style?: "normal" | "italic" | "oblique" | undefined;
442
305
  } | undefined;
306
+ position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
443
307
  textColor?: string | undefined;
444
308
  }, {
445
309
  text: string;
446
310
  distance?: number | undefined;
447
- position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
448
311
  opacity?: number | undefined;
449
312
  font?: {
450
313
  family?: string | undefined;
@@ -452,6 +315,7 @@ export declare const NodeSchema: z.ZodObject<{
452
315
  weight?: number | "normal" | "bold" | undefined;
453
316
  style?: "normal" | "italic" | "oblique" | undefined;
454
317
  } | undefined;
318
+ position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
455
319
  textColor?: string | undefined;
456
320
  }>, "many">]>>;
457
321
  }, "strip", z.ZodTypeAny, {
@@ -460,6 +324,9 @@ export declare const NodeSchema: z.ZodObject<{
460
324
  direction: "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right";
461
325
  of: string;
462
326
  distance?: number | undefined;
327
+ } | {
328
+ of: string | [number, number] | import('./position').PolarPosition;
329
+ offset: [number, number];
463
330
  };
464
331
  fill?: string | undefined;
465
332
  text?: string | (string | {
@@ -473,10 +340,18 @@ export declare const NodeSchema: z.ZodObject<{
473
340
  style?: "normal" | "italic" | "oblique" | undefined;
474
341
  } | undefined;
475
342
  })[] | undefined;
343
+ opacity?: number | undefined;
344
+ font?: {
345
+ family?: string | undefined;
346
+ size?: number | undefined;
347
+ weight?: number | "normal" | "bold" | undefined;
348
+ style?: "normal" | "italic" | "oblique" | undefined;
349
+ } | undefined;
350
+ shape?: "diamond" | "circle" | "rectangle" | "ellipse" | undefined;
351
+ scale?: number | undefined;
476
352
  label?: {
477
353
  text: string;
478
354
  distance?: number | undefined;
479
- position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
480
355
  opacity?: number | undefined;
481
356
  font?: {
482
357
  family?: string | undefined;
@@ -484,11 +359,11 @@ export declare const NodeSchema: z.ZodObject<{
484
359
  weight?: number | "normal" | "bold" | undefined;
485
360
  style?: "normal" | "italic" | "oblique" | undefined;
486
361
  } | undefined;
362
+ position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
487
363
  textColor?: string | undefined;
488
364
  } | {
489
365
  text: string;
490
366
  distance?: number | undefined;
491
- position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
492
367
  opacity?: number | undefined;
493
368
  font?: {
494
369
  family?: string | undefined;
@@ -496,20 +371,13 @@ export declare const NodeSchema: z.ZodObject<{
496
371
  weight?: number | "normal" | "bold" | undefined;
497
372
  style?: "normal" | "italic" | "oblique" | undefined;
498
373
  } | undefined;
374
+ position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
499
375
  textColor?: string | undefined;
500
376
  }[] | undefined;
501
- shape?: "diamond" | "circle" | "rectangle" | "ellipse" | undefined;
502
377
  stroke?: string | undefined;
503
378
  strokeWidth?: number | undefined;
504
- opacity?: number | undefined;
505
379
  fillOpacity?: number | undefined;
506
380
  drawOpacity?: number | undefined;
507
- font?: {
508
- family?: string | undefined;
509
- size?: number | undefined;
510
- weight?: number | "normal" | "bold" | undefined;
511
- style?: "normal" | "italic" | "oblique" | undefined;
512
- } | undefined;
513
381
  textColor?: string | undefined;
514
382
  id?: string | undefined;
515
383
  rotate?: number | undefined;
@@ -522,7 +390,6 @@ export declare const NodeSchema: z.ZodObject<{
522
390
  minimumWidth?: number | undefined;
523
391
  minimumHeight?: number | undefined;
524
392
  minimumSize?: number | undefined;
525
- scale?: number | undefined;
526
393
  xScale?: number | undefined;
527
394
  yScale?: number | undefined;
528
395
  innerXSep?: number | undefined;
@@ -536,6 +403,9 @@ export declare const NodeSchema: z.ZodObject<{
536
403
  direction: "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right";
537
404
  of: string;
538
405
  distance?: number | undefined;
406
+ } | {
407
+ of: string | [number, number] | import('./position').PolarPosition;
408
+ offset: [number, number];
539
409
  };
540
410
  fill?: string | undefined;
541
411
  text?: string | (string | {
@@ -549,10 +419,18 @@ export declare const NodeSchema: z.ZodObject<{
549
419
  style?: "normal" | "italic" | "oblique" | undefined;
550
420
  } | undefined;
551
421
  })[] | undefined;
422
+ opacity?: number | undefined;
423
+ font?: {
424
+ family?: string | undefined;
425
+ size?: number | undefined;
426
+ weight?: number | "normal" | "bold" | undefined;
427
+ style?: "normal" | "italic" | "oblique" | undefined;
428
+ } | undefined;
429
+ shape?: "diamond" | "circle" | "rectangle" | "ellipse" | undefined;
430
+ scale?: number | undefined;
552
431
  label?: {
553
432
  text: string;
554
433
  distance?: number | undefined;
555
- position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
556
434
  opacity?: number | undefined;
557
435
  font?: {
558
436
  family?: string | undefined;
@@ -560,11 +438,11 @@ export declare const NodeSchema: z.ZodObject<{
560
438
  weight?: number | "normal" | "bold" | undefined;
561
439
  style?: "normal" | "italic" | "oblique" | undefined;
562
440
  } | undefined;
441
+ position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
563
442
  textColor?: string | undefined;
564
443
  } | {
565
444
  text: string;
566
445
  distance?: number | undefined;
567
- position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
568
446
  opacity?: number | undefined;
569
447
  font?: {
570
448
  family?: string | undefined;
@@ -572,20 +450,13 @@ export declare const NodeSchema: z.ZodObject<{
572
450
  weight?: number | "normal" | "bold" | undefined;
573
451
  style?: "normal" | "italic" | "oblique" | undefined;
574
452
  } | undefined;
453
+ position?: number | "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right" | undefined;
575
454
  textColor?: string | undefined;
576
455
  }[] | undefined;
577
- shape?: "diamond" | "circle" | "rectangle" | "ellipse" | undefined;
578
456
  stroke?: string | undefined;
579
457
  strokeWidth?: number | undefined;
580
- opacity?: number | undefined;
581
458
  fillOpacity?: number | undefined;
582
459
  drawOpacity?: number | undefined;
583
- font?: {
584
- family?: string | undefined;
585
- size?: number | undefined;
586
- weight?: number | "normal" | "bold" | undefined;
587
- style?: "normal" | "italic" | "oblique" | undefined;
588
- } | undefined;
589
460
  textColor?: string | undefined;
590
461
  id?: string | undefined;
591
462
  rotate?: number | undefined;
@@ -598,7 +469,6 @@ export declare const NodeSchema: z.ZodObject<{
598
469
  minimumWidth?: number | undefined;
599
470
  minimumHeight?: number | undefined;
600
471
  minimumSize?: number | undefined;
601
- scale?: number | undefined;
602
472
  xScale?: number | undefined;
603
473
  yScale?: number | undefined;
604
474
  innerXSep?: number | undefined;
@@ -607,6 +477,6 @@ export declare const NodeSchema: z.ZodObject<{
607
477
  padding?: number | undefined;
608
478
  margin?: number | undefined;
609
479
  }>;
610
- /** 节点:可定位的形状容器(矩形 / 圆 / 椭圆 / 菱形)+ 可选文本标签 */
480
+ /** 节点:可定位的形状容器(矩形/圆/椭圆/菱形)+ 可选文本标签 */
611
481
  export type IRNode = z.infer<typeof NodeSchema>;
612
482
  //# 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;AAKxC;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;CAKd,CAAC;AAEX,gBAAgB;AAChB,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC;AAEpD,+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,22 +1,14 @@
1
1
  import { PositionSchema } from "./position/position.js";
2
2
  import { PolarPositionSchema } from "./position/polar-position.js";
3
3
  import { AT_DIRECTIONS, AtPositionSchema } from "./position/at-position.js";
4
+ import { OffsetPositionSchema } from "./position/offset-position.js";
5
+ import { FontSchema } from "./font.js";
6
+ import { TextBlockSchema } from "./text.js";
4
7
  import { z } from "zod";
5
8
  //#region src/ir/node.ts
6
9
  /**
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
10
+ * 节点形状常量(用 const + ValueOf 派生,不用 TS enum)
11
+ * @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
12
  */
21
13
  var NODE_SHAPES = {
22
14
  rectangle: "rectangle",
@@ -24,63 +16,15 @@ var NODE_SHAPES = {
24
16
  ellipse: "ellipse",
25
17
  diamond: "diamond"
26
18
  };
27
- /**
28
- * 节点字体规格——family / size / weight / style 全部可选;
29
- * 单字段透传到 SVG `<text>` 的 `font-*` 属性 / `font-size`。
30
- *
31
- * 取代 alpha.1 的标量 `fontSize` 字段(已删)。
32
- */
33
- var FontSchema = z.object({
34
- family: z.string().optional().describe("CSS font-family string, e.g. \"serif\", \"monospace\", \"Inter, sans-serif\""),
35
- size: z.number().positive().optional().describe("Font size in user units; falls back to the renderer default when omitted"),
36
- weight: z.union([z.enum(["normal", "bold"]), z.number()]).optional().describe("CSS font-weight: keyword `normal` / `bold` or numeric 100..900"),
37
- style: z.enum([
38
- "normal",
39
- "italic",
40
- "oblique"
41
- ]).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).");
43
- /**
44
- * 单行文本规格——纯字符串走块级默认样式;对象形式可对该行覆盖 fill / opacity / font。
45
- *
46
- * 行级覆盖只生效于本行的 `<tspan>`:
47
- * - `fill`:仅这一行颜色
48
- * - `opacity`:仅这一行 0~1 透明度
49
- * - `font`:family / size / weight / style 任意子集;未填字段继承块级 font
50
- *
51
- * 块级 `align` / `lineHeight` 不可被行覆盖(多行块整体属性)。
52
- */
53
- var LineSpecSchema = z.union([z.string(), z.object({
54
- text: z.string().describe("Line content"),
55
- fill: z.string().optional().describe("Per-line text color; overrides block default"),
56
- opacity: z.number().min(0).max(1).optional().describe("Per-line opacity 0..1"),
57
- font: FontSchema.optional().describe("Per-line font overrides; missing fields inherit from block-level `font`")
58
- })]).describe("Single line of text: bare string for default styling, or an object with per-line `fill` / `opacity` / `font` overrides.");
59
- /**
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);行级覆盖天然落字段。
66
- */
67
- var NodeTextSchema = z.union([z.string(), 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=` 同义词 */
19
+ /** 节点文本对齐(TikZ `align=` 同义) */
69
20
  var NODE_TEXT_ALIGNS = {
70
21
  left: "left",
71
22
  center: "center",
72
23
  right: "right"
73
24
  };
74
25
  /**
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 边界的距离)。
26
+ * 节点附属标签 labelTikZ `[label=above:foo]` 同义)
27
+ * @description 可挂多个;label 不参与 viewBox。position 支持 8 方向枚举或数字角度(polar 约定:0°=+x,90°=+y 屏幕下方);默认 position='above',distance=4
84
28
  */
85
29
  var NodeLabelSchema = z.object({
86
30
  text: z.string().describe("Label text content; rendered as a single line."),
@@ -97,10 +41,11 @@ var NodeSchema = z.object({
97
41
  position: z.union([
98
42
  PositionSchema,
99
43
  PolarPositionSchema,
100
- 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."),
44
+ AtPositionSchema,
45
+ OffsetPositionSchema
46
+ ]).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
47
  rotate: z.number().optional().describe("Rotation in degrees around the node center; positive = clockwise (matches TikZ rotate=...)"),
103
- text: NodeTextSchema.optional(),
48
+ text: TextBlockSchema.optional(),
104
49
  align: z.nativeEnum(NODE_TEXT_ALIGNS).optional().describe("Multi-line text alignment within the text block; `left` / `center` / `right`. Defaults to `center` (matches TikZ)."),
105
50
  lineHeight: z.number().positive().optional().describe("Line height in user units; falls back to `font.size × 1.2` when omitted."),
106
51
  fill: z.string().optional().describe("Background color of the node shape; any CSS color (e.g. \"lightblue\", \"#fafafa\", \"rgba(...)\")"),
@@ -110,8 +55,8 @@ var NodeSchema = z.object({
110
55
  strokeWidth: z.number().optional().describe("Border width in user units; defaults to 1 when omitted"),
111
56
  dashed: z.boolean().optional().describe("Border style preset: dashed line (TikZ `dashed`); compiled to a default dash pattern. `dashArray` takes precedence."),
112
57
  dotted: z.boolean().optional().describe("Border style preset: dotted line (TikZ `dotted`); compiled to a default dot pattern. `dashArray` and `dashed` take precedence."),
113
- dashArray: z.string().optional().describe("Explicit SVG stroke-dasharray value (e.g. \"4 2\"); overrides `dashed` / `dotted`."),
114
- roundedCorners: z.number().nonnegative().optional().describe("Corner radius in user units; only effective on `rectangle` shape (rx / ry on `<rect>`)."),
58
+ dashArray: z.string().optional().describe("Explicit stroke dash pattern (e.g. \"4 2\"; same format as SVG/CSS `stroke-dasharray`); overrides `dashed` / `dotted`."),
59
+ roundedCorners: z.number().nonnegative().optional().describe("Corner radius in user units; only effective on `rectangle` shape."),
115
60
  minimumWidth: z.number().nonnegative().optional().describe("Minimum visual border width in user units; floors the bounding box width."),
116
61
  minimumHeight: z.number().nonnegative().optional().describe("Minimum visual border height in user units; floors the bounding box height."),
117
62
  minimumSize: z.number().nonnegative().optional().describe("Symmetric alias for `minimumWidth` + `minimumHeight`; axis-specific fields take precedence."),
@@ -129,4 +74,4 @@ var NodeSchema = z.object({
129
74
  label: z.union([NodeLabelSchema, z.array(NodeLabelSchema)]).optional().describe("Extra label(s) attached around the node border (TikZ `[label=above:foo]`); single object or array form. Compiled into one TextPrim per label, positioned by `position` direction / angle and `distance`.")
130
75
  }).describe("Node primitive: a positioned, optionally textual shape (rectangle / circle / ellipse / diamond)");
131
76
  //#endregion
132
- export { FontSchema, LineSpecSchema, NODE_SHAPES, NODE_TEXT_ALIGNS, NodeLabelSchema, NodeSchema, NodeTextSchema };
77
+ export { NODE_SHAPES, NODE_TEXT_ALIGNS, NodeLabelSchema, NodeSchema };