@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,42 +1,33 @@
1
1
  import { Position } from './point';
2
2
  /**
3
- * 极坐标点:相对 origin 的角度 + 半径偏移。
4
- * - 可进 IR;Scene 编译时统一解析为笛卡尔
5
- * - 不直接参与几何计算,参与时先转为 Position(见本文件顶部说明)
6
- * - origin 可嵌套(PolarPosition),可引用节点 id(string),可直接给坐标(Position),省略表示原点 [0, 0]
3
+ * 极坐标点:相对 origin 的角度 + 半径偏移
4
+ * @description IR 保留 polar 形态,Scene 编译时统一解析为笛卡尔;origin 可嵌套/节点 id/坐标,省略表示 [0,0]
7
5
  */
8
6
  export type PolarPosition = {
9
- /** 极坐标原点:节点 id / 笛卡尔位置 / 嵌套极坐标;省略表示 [0, 0] */
7
+ /** 极坐标原点:节点 id / 笛卡尔 / 嵌套极坐标;省略表示 [0,0] */
10
8
  origin?: string | Position | PolarPosition;
11
- /** 角度(度数,逆时针为正,与 TikZ / 数学习惯一致) */
9
+ /** 角度(度数,逆时针为正) */
12
10
  angle: number;
13
- /** 半径(user units,应为非负) */
11
+ /** 半径(非负) */
14
12
  radius: number;
15
13
  };
16
- /**
17
- * 极坐标 ↔ 笛卡尔坐标 转换工具集。
18
- *
19
- * 注意 polar 不参与几何计算——参与计算时一律先用 `polar.toPosition` 转成 Position。
20
- * 详见本文件顶部的整体说明。
21
- */
14
+ /** 极坐标 ↔ 笛卡尔转换工具集(polar 不参与几何计算,参与时先 toPosition) */
22
15
  export declare const polar: {
23
16
  /**
24
- * 极坐标 → 笛卡尔位置(递归处理 origin)。
25
- * **限制**:origin 为字符串(节点 id)时本方法无法解析,会抛错——
26
- * 字符串解析依赖 Scene 编译器的 nodeIndex 上下文。
17
+ * 极坐标 → 笛卡尔位置(递归处理 origin
18
+ * @description origin 为字符串(节点 id)时抛错——字符串解析依赖 Scene 编译器 nodeIndex
27
19
  */
28
20
  toPosition: (p: PolarPosition) => Position;
29
- /** 笛卡尔位置 → 极坐标(angle 落在 (-180, 180],origin 取默认 [0, 0]) */
21
+ /** 笛卡尔 → 极坐标(angle (-180,180],origin 默认 [0,0]) */
30
22
  fromPosition: (p: Position) => PolarPosition;
31
- /** 在某个原点附近按极坐标偏移;返回结果点的世界笛卡尔坐标 */
23
+ /** 在原点附近按极坐标偏移,返回结果点的世界笛卡尔坐标 */
32
24
  offsetFrom: (origin: Position, offset: {
33
25
  angle: number;
34
26
  radius: number;
35
27
  }) => Position;
36
28
  /**
37
- * 判断两个点是否相同(跨坐标系)。每个参数可以是笛卡尔 [x, y] 或 PolarPosition;
38
- * 极坐标先转为笛卡尔,再按 precision 指定的小数位数四舍五入比较。
39
- * 实际是 `point.equalPolar` 的别名(同一份实现,两处可发现)。
29
+ * 跨坐标系两点相同判断(point.equalPolar 别名)
30
+ * @description 极坐标先转笛卡尔再按 precision 四舍五入比较
40
31
  * @param precision 小数点后位数;默认 2
41
32
  */
42
33
  equal: (a: Position | PolarPosition, b: Position | PolarPosition, precision?: number) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"polar.d.ts","sourceRoot":"","sources":["../../../src/geometry/polar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAS,MAAM,SAAS,CAAC;AAkB/C;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,aAAa,CAAC;IAC3C,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAKF;;;;;GAKG;AACH,eAAO,MAAM,KAAK;IAChB;;;;OAIG;oBACa,aAAa,KAAG,QAAQ;IAmBxC,0DAA0D;sBACxC,QAAQ,KAAG,aAAa;IAI1C,kCAAkC;yBAExB,QAAQ,UACR;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KACxC,QAAQ;IAOX;;;;;OAKG;eAEE,QAAQ,GAAG,aAAa,KACxB,QAAQ,GAAG,aAAa,yBAE1B,OAAO;CACX,CAAC"}
1
+ {"version":3,"file":"polar.d.ts","sourceRoot":"","sources":["../../../src/geometry/polar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAS,MAAM,SAAS,CAAC;AAS/C;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,aAAa,CAAC;IAC3C,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAKF,oDAAoD;AACpD,eAAO,MAAM,KAAK;IAChB;;;OAGG;oBACa,aAAa,KAAG,QAAQ;IAmBxC,oDAAoD;sBAClC,QAAQ,KAAG,aAAa;IAI1C,gCAAgC;yBAEtB,QAAQ,UACR;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KACxC,QAAQ;IAOb;;;;OAIG;eAEI,QAAQ,GAAG,aAAa,KACxB,QAAQ,GAAG,aAAa,yBAE1B,OAAO;CACX,CAAC"}
@@ -2,17 +2,11 @@ import { point } from "./point.js";
2
2
  //#region src/geometry/polar.ts
3
3
  var DEG_TO_RAD = Math.PI / 180;
4
4
  var RAD_TO_DEG = 180 / Math.PI;
5
- /**
6
- * 极坐标 ↔ 笛卡尔坐标 转换工具集。
7
- *
8
- * 注意 polar 不参与几何计算——参与计算时一律先用 `polar.toPosition` 转成 Position。
9
- * 详见本文件顶部的整体说明。
10
- */
5
+ /** 极坐标 ↔ 笛卡尔转换工具集(polar 不参与几何计算,参与时先 toPosition) */
11
6
  var polar = {
12
7
  /**
13
- * 极坐标 → 笛卡尔位置(递归处理 origin)。
14
- * **限制**:origin 为字符串(节点 id)时本方法无法解析,会抛错——
15
- * 字符串解析依赖 Scene 编译器的 nodeIndex 上下文。
8
+ * 极坐标 → 笛卡尔位置(递归处理 origin
9
+ * @description origin 为字符串(节点 id)时抛错——字符串解析依赖 Scene 编译器 nodeIndex
16
10
  */
17
11
  toPosition: (p) => {
18
12
  let origin;
@@ -23,20 +17,19 @@ var polar = {
23
17
  const rad = p.angle * DEG_TO_RAD;
24
18
  return [origin[0] + Math.cos(rad) * p.radius, origin[1] + Math.sin(rad) * p.radius];
25
19
  },
26
- /** 笛卡尔位置 → 极坐标(angle 落在 (-180, 180],origin 取默认 [0, 0]) */
20
+ /** 笛卡尔 → 极坐标(angle (-180,180],origin 默认 [0,0]) */
27
21
  fromPosition: (p) => ({
28
22
  angle: Math.atan2(p[1], p[0]) * RAD_TO_DEG,
29
23
  radius: Math.hypot(p[0], p[1])
30
24
  }),
31
- /** 在某个原点附近按极坐标偏移;返回结果点的世界笛卡尔坐标 */
25
+ /** 在原点附近按极坐标偏移,返回结果点的世界笛卡尔坐标 */
32
26
  offsetFrom: (origin, offset) => {
33
27
  const rad = offset.angle * DEG_TO_RAD;
34
28
  return [origin[0] + Math.cos(rad) * offset.radius, origin[1] + Math.sin(rad) * offset.radius];
35
29
  },
36
30
  /**
37
- * 判断两个点是否相同(跨坐标系)。每个参数可以是笛卡尔 [x, y] 或 PolarPosition;
38
- * 极坐标先转为笛卡尔,再按 precision 指定的小数位数四舍五入比较。
39
- * 实际是 `point.equalPolar` 的别名(同一份实现,两处可发现)。
31
+ * 跨坐标系两点相同判断(point.equalPolar 别名)
32
+ * @description 极坐标先转笛卡尔再按 precision 四舍五入比较
40
33
  * @param precision 小数点后位数;默认 2
41
34
  */
42
35
  equal: (a, b, precision = 2) => point.equalPolar(a, b, precision)
@@ -1,59 +1,35 @@
1
1
  import { Position } from './point';
2
- /** 轴对齐矩形:几何中心 (x, y) + 宽高 + 可选绕中心旋转 */
2
+ /** 轴对齐矩形:几何中心 + 宽高 + 可选绕中心旋转 */
3
3
  export type Rect = {
4
- /** 矩形几何中心横坐标 */
5
4
  x: number;
6
- /** 矩形几何中心纵坐标 */
7
5
  y: number;
8
- /** 矩形宽度(user units) */
9
6
  width: number;
10
- /** 矩形高度(user units) */
11
7
  height: number;
12
- /** 绕几何中心的旋转角(弧度);省略或 0 表示不旋转 */
8
+ /** 绕中心旋转弧度 */
13
9
  rotate?: number;
14
10
  };
15
- /**
16
- * 矩形 9 个标准 anchor 名常量集合,对应 TikZ 节点的 9 个标准 anchor。
17
- * 与 `RectAnchor` 类型配对使用——值用 `RECT_ANCHORS.NORTH` 避免拼错,
18
- * 类型位置用 `RectAnchor`。
19
- */
11
+ /** 矩形 9 个标准 anchor 名常量(与 RectAnchor 配对,用 RECT_ANCHORS.NORTH 避免拼错) */
20
12
  export declare const RECT_ANCHORS: {
21
- /** 几何中心 */
22
13
  readonly CENTER: "center";
23
- /** 上边中点 */
24
14
  readonly NORTH: "north";
25
- /** 下边中点 */
26
15
  readonly SOUTH: "south";
27
- /** 右边中点 */
28
16
  readonly EAST: "east";
29
- /** 左边中点 */
30
17
  readonly WEST: "west";
31
- /** 右上角 */
32
18
  readonly NORTH_EAST: "north-east";
33
- /** 左上角 */
34
19
  readonly NORTH_WEST: "north-west";
35
- /** 右下角 */
36
20
  readonly SOUTH_EAST: "south-east";
37
- /** 左下角 */
38
21
  readonly SOUTH_WEST: "south-west";
39
22
  };
40
- /** 矩形 anchor 名(与 TikZ 命名约定一致),由 `RECT_ANCHORS` 常量集合派生 */
23
+ /** 矩形 anchor 名(与 TikZ 命名一致) */
41
24
  export type RectAnchor = (typeof RECT_ANCHORS)[keyof typeof RECT_ANCHORS];
42
- /** 矩形相关基础工具 */
43
25
  export declare const rect: {
44
- /** 矩形几何中心点 */
26
+ /** 几何中心 */
45
27
  center: (r: Rect) => Position;
46
- /** 判断点是否落在矩形范围内(含边界,考虑旋转) */
28
+ /** 点是否在矩形内(含边界,含旋转) */
47
29
  contains: (r: Rect, p: Position) => boolean;
48
- /**
49
- * 取矩形 9 个标准 anchor 之一的世界坐标,考虑旋转。
50
- * 名字与 TikZ 节点 anchor 一致(north / south / east / west / north-east / ... / center)。
51
- */
30
+ /** 9 个 anchor 之一的世界坐标(含旋转),TikZ 命名 */
52
31
  anchor: (r: Rect, name: RectAnchor) => Position;
53
- /**
54
- * 从矩形中心向 toward 方向画射线,求与矩形边界的交点(考虑旋转)。
55
- * 用于把 Path 端点贴到 Node 边界(避免线段穿过节点内部)。
56
- */
32
+ /** 从中心向 toward 方向射线与矩形边界交点(含旋转),Path 端点贴 Node 边界用 */
57
33
  boundaryPoint: (r: Rect, toward: Position) => Position;
58
34
  };
59
35
  //# sourceMappingURL=rect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rect.d.ts","sourceRoot":"","sources":["../../../src/geometry/rect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,uCAAuC;AACvC,MAAM,MAAM,IAAI,GAAG;IACjB,gBAAgB;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,gBAAgB;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY;IACvB,WAAW;;IAEX,WAAW;;IAEX,WAAW;;IAEX,WAAW;;IAEX,WAAW;;IAEX,UAAU;;IAEV,UAAU;;IAEV,UAAU;;IAEV,UAAU;;CAEF,CAAC;AAEX,yDAAyD;AACzD,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAgC1E,eAAe;AACf,eAAO,MAAM,IAAI;IACf,cAAc;gBACF,IAAI,KAAG,QAAQ;IAC3B,6BAA6B;kBACf,IAAI,KAAK,QAAQ,KAAG,OAAO;IAMzC;;;OAGG;gBACS,IAAI,QAAQ,UAAU,KAAG,QAAQ;IAuC7C;;;OAGG;uBACgB,IAAI,UAAU,QAAQ,KAAG,QAAQ;CAUrD,CAAC"}
1
+ {"version":3,"file":"rect.d.ts","sourceRoot":"","sources":["../../../src/geometry/rect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,gCAAgC;AAChC,MAAM,MAAM,IAAI,GAAG;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,cAAc;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,YAAY;;;;;;;;;;CAUf,CAAC;AAEX,+BAA+B;AAC/B,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AA0B1E,eAAO,MAAM,IAAI;IACf,WAAW;gBACC,IAAI,KAAG,QAAQ;IAC3B,uBAAuB;kBACT,IAAI,KAAK,QAAQ,KAAG,OAAO;IAMzC,sCAAsC;gBAC1B,IAAI,QAAQ,UAAU,KAAG,QAAQ;IAuC7C,qDAAqD;uBAClC,IAAI,UAAU,QAAQ,KAAG,QAAQ;CAUrD,CAAC"}
@@ -1,33 +1,17 @@
1
1
  //#region src/geometry/rect.ts
2
- /**
3
- * 矩形 9 个标准 anchor 名常量集合,对应 TikZ 节点的 9 个标准 anchor。
4
- * 与 `RectAnchor` 类型配对使用——值用 `RECT_ANCHORS.NORTH` 避免拼错,
5
- * 类型位置用 `RectAnchor`。
6
- */
2
+ /** 矩形 9 个标准 anchor 名常量(与 RectAnchor 配对,用 RECT_ANCHORS.NORTH 避免拼错) */
7
3
  var RECT_ANCHORS = {
8
- /** 几何中心 */
9
4
  CENTER: "center",
10
- /** 上边中点 */
11
5
  NORTH: "north",
12
- /** 下边中点 */
13
6
  SOUTH: "south",
14
- /** 右边中点 */
15
7
  EAST: "east",
16
- /** 左边中点 */
17
8
  WEST: "west",
18
- /** 右上角 */
19
9
  NORTH_EAST: "north-east",
20
- /** 左上角 */
21
10
  NORTH_WEST: "north-west",
22
- /** 右下角 */
23
11
  SOUTH_EAST: "south-east",
24
- /** 左下角 */
25
12
  SOUTH_WEST: "south-west"
26
13
  };
27
- /**
28
- * 把"以矩形中心为原点的本地坐标"转换为世界坐标。
29
- * 考虑 rect.rotate(弧度)的旋转。
30
- */
14
+ /** 本地坐标(以中心为原点)→ 世界坐标,考虑 rect.rotate */
31
15
  var localToWorld = (r, local) => {
32
16
  const angle = r.rotate ?? 0;
33
17
  if (angle === 0) return [r.x + local[0], r.y + local[1]];
@@ -35,10 +19,7 @@ var localToWorld = (r, local) => {
35
19
  const sin = Math.sin(angle);
36
20
  return [r.x + local[0] * cos - local[1] * sin, r.y + local[0] * sin + local[1] * cos];
37
21
  };
38
- /**
39
- * 把世界坐标转换为"以矩形中心为原点的本地坐标"。
40
- * 与 localToWorld 互为逆变换。
41
- */
22
+ /** 世界坐标 → 本地坐标(localToWorld 逆变换) */
42
23
  var worldToLocal = (r, world) => {
43
24
  const tx = world[0] - r.x;
44
25
  const ty = world[1] - r.y;
@@ -48,21 +29,17 @@ var worldToLocal = (r, world) => {
48
29
  const sin = Math.sin(angle);
49
30
  return [tx * cos + ty * sin, -tx * sin + ty * cos];
50
31
  };
51
- /** 矩形相关基础工具 */
52
32
  var rect = {
53
- /** 矩形几何中心点 */
33
+ /** 几何中心 */
54
34
  center: (r) => [r.x, r.y],
55
- /** 判断点是否落在矩形范围内(含边界,考虑旋转) */
35
+ /** 点是否在矩形内(含边界,含旋转) */
56
36
  contains: (r, p) => {
57
37
  const [lx, ly] = worldToLocal(r, p);
58
38
  const halfW = r.width / 2;
59
39
  const halfH = r.height / 2;
60
40
  return lx >= -halfW && lx <= halfW && ly >= -halfH && ly <= halfH;
61
41
  },
62
- /**
63
- * 取矩形 9 个标准 anchor 之一的世界坐标,考虑旋转。
64
- * 名字与 TikZ 节点 anchor 一致(north / south / east / west / north-east / ... / center)。
65
- */
42
+ /** 9 个 anchor 之一的世界坐标(含旋转),TikZ 命名 */
66
43
  anchor: (r, name) => {
67
44
  const halfW = r.width / 2;
68
45
  const halfH = r.height / 2;
@@ -101,10 +78,7 @@ var rect = {
101
78
  }
102
79
  return localToWorld(r, [lx, ly]);
103
80
  },
104
- /**
105
- * 从矩形中心向 toward 方向画射线,求与矩形边界的交点(考虑旋转)。
106
- * 用于把 Path 端点贴到 Node 边界(避免线段穿过节点内部)。
107
- */
81
+ /** 从中心向 toward 方向射线与矩形边界交点(含旋转),Path 端点贴 Node 边界用 */
108
82
  boundaryPoint: (r, toward) => {
109
83
  const [localX, localY] = worldToLocal(r, toward);
110
84
  if (localX === 0 && localY === 0) return [r.x, r.y];
@@ -1,38 +1,31 @@
1
1
  import { Position } from './point';
2
2
  export type SegmentSample = {
3
- /** t 处的点坐标 */
3
+ /** t 处的点 */
4
4
  point: Position;
5
- /** t 处的切线方向(单位向量;零向量时回退到 [1, 0]) */
5
+ /** t 处的切线(单位向量;零向量时回退 [1, 0]) */
6
6
  tangent: Position;
7
7
  };
8
8
  /** 直线段 from → to */
9
9
  export declare const lineSegmentSample: (from: Position, to: Position, t: number) => SegmentSample;
10
10
  /**
11
- * 二次贝塞尔 from → control → to
12
- * P(t) = (1-t)²·P0 + 2(1-t)t·P1 + t²·P2
13
- * P'(t) = 2(1-t)(P1-P0) + 2t(P2-P1)
11
+ * 二次贝塞尔 from → control → to
12
+ * @description P(t) = (1-t)²P0 + 2(1-t)t·P1 + t²P2;P'(t) = 2(1-t)(P1-P0) + 2t(P2-P1)
14
13
  */
15
14
  export declare const quadSegmentSample: (from: Position, control: Position, to: Position, t: number) => SegmentSample;
16
15
  /**
17
- * 三次贝塞尔 from → c1 → c2 → to
18
- * P'(t) = 3(1-t)²(P1-P0) + 6(1-t)t(P2-P1) + 3t²(P3-P2)
16
+ * 三次贝塞尔 from → c1 → c2 → to
17
+ * @description P'(t) = 3(1-t)²(P1-P0) + 6(1-t)t(P2-P1) + 3t²(P3-P2)
19
18
  */
20
19
  export declare const cubicSegmentSample: (from: Position, c1: Position, c2: Position, to: Position, t: number) => SegmentSample;
21
20
  /**
22
- * 折角段 from → corner → to
23
- * t∈[0, 0.5] 走第一段(参数 2t);t∈(0.5, 1] 走第二段(参数 2t-1)。
24
- * t=0.5 落在 corner,切线取第一段方向(与"靠近 prev 一侧"一致)。
21
+ * 折角段 from → corner → to
22
+ * @description t∈[0,0.5] 走第一段(参数 2t);t∈(0.5,1] 走第二段(参数 2t-1);t=0.5 落 corner 切线取第一段方向
25
23
  */
26
24
  export declare const foldSegmentSample: (from: Position, corner: Position, to: Position, t: number) => SegmentSample;
27
- /**
28
- * 弧段(与 ir/path arc 同约定,角度单位为度)。
29
- * 切线沿"扫描方向"——endAngle ≥ startAngle 时为 (-sin, cos),否则反向。
30
- */
25
+ /** 弧段(角度度数,与 ir/path arc 同约定);切线沿扫描方向:endAngle ≥ start 取 (-sin,cos),否则反向 */
31
26
  export declare const arcSegmentSample: (center: Position, radius: number, startAngleDeg: number, endAngleDeg: number, t: number) => SegmentSample;
32
- /**
33
- * 整圆——从 0°(east)开始,与 compile/path circlePath 输出方向(右→左→右,sweep=1)一致。
34
- */
27
+ /** 整圆,从 0°(east) 开始,与 compile/path circlePath 输出方向(右→左→右,sweep=1)一致 */
35
28
  export declare const circleSegmentSample: (center: Position, radius: number, t: number) => SegmentSample;
36
- /** 整椭圆——参数化 (rx·cos(2πt), ry·sin(2πt)) */
29
+ /** 整椭圆,参数化 (rx·cos(2πt), ry·sin(2πt)) */
37
30
  export declare const ellipseSegmentSample: (center: Position, rx: number, ry: number, t: number) => SegmentSample;
38
31
  //# sourceMappingURL=segment.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../../src/geometry/segment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAuBxC,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc;IACd,KAAK,EAAE,QAAQ,CAAC;IAChB,oCAAoC;IACpC,OAAO,EAAE,QAAQ,CAAC;CACnB,CAAC;AAQF,oBAAoB;AACpB,eAAO,MAAM,iBAAiB,GAC5B,MAAM,QAAQ,EACd,IAAI,QAAQ,EACZ,GAAG,MAAM,KACR,aAGD,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,QAAQ,EACd,SAAS,QAAQ,EACjB,IAAI,QAAQ,EACZ,GAAG,MAAM,KACR,aASF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,QAAQ,EACd,IAAI,QAAQ,EACZ,IAAI,QAAQ,EACZ,IAAI,QAAQ,EACZ,GAAG,MAAM,KACR,aAqBF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,QAAQ,EACd,QAAQ,QAAQ,EAChB,IAAI,QAAQ,EACZ,GAAG,MAAM,KACR,aAGF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,QAAQ,EAChB,QAAQ,MAAM,EACd,eAAe,MAAM,EACrB,aAAa,MAAM,EACnB,GAAG,MAAM,KACR,aAUF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,QAAQ,EAChB,QAAQ,MAAM,EACd,GAAG,MAAM,KACR,aASF,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,QAAQ,EAChB,IAAI,MAAM,EACV,IAAI,MAAM,EACV,GAAG,MAAM,KACR,aASF,CAAC"}
1
+ {"version":3,"file":"segment.d.ts","sourceRoot":"","sources":["../../../src/geometry/segment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAiBxC,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY;IACZ,KAAK,EAAE,QAAQ,CAAC;IAChB,iCAAiC;IACjC,OAAO,EAAE,QAAQ,CAAC;CACnB,CAAC;AAQF,oBAAoB;AACpB,eAAO,MAAM,iBAAiB,GAC5B,MAAM,QAAQ,EACd,IAAI,QAAQ,EACZ,GAAG,MAAM,KACR,aAGD,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,QAAQ,EACd,SAAS,QAAQ,EACjB,IAAI,QAAQ,EACZ,GAAG,MAAM,KACR,aASF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,QAAQ,EACd,IAAI,QAAQ,EACZ,IAAI,QAAQ,EACZ,IAAI,QAAQ,EACZ,GAAG,MAAM,KACR,aAqBF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,QAAQ,EACd,QAAQ,QAAQ,EAChB,IAAI,QAAQ,EACZ,GAAG,MAAM,KACR,aAGF,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,QAAQ,EAChB,QAAQ,MAAM,EACd,eAAe,MAAM,EACrB,aAAa,MAAM,EACnB,GAAG,MAAM,KACR,aAUF,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,QAAQ,EAChB,QAAQ,MAAM,EACd,GAAG,MAAM,KACR,aASF,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,QAAQ,EAChB,IAAI,MAAM,EACV,IAAI,MAAM,EACV,GAAG,MAAM,KACR,aASF,CAAC"}
@@ -11,9 +11,8 @@ var lineSegmentSample = (from, to, t) => ({
11
11
  tangent: normalize([to[0] - from[0], to[1] - from[1]])
12
12
  });
13
13
  /**
14
- * 二次贝塞尔 from → control → to
15
- * P(t) = (1-t)²·P0 + 2(1-t)t·P1 + t²·P2
16
- * P'(t) = 2(1-t)(P1-P0) + 2t(P2-P1)
14
+ * 二次贝塞尔 from → control → to
15
+ * @description P(t) = (1-t)²P0 + 2(1-t)t·P1 + t²P2;P'(t) = 2(1-t)(P1-P0) + 2t(P2-P1)
17
16
  */
18
17
  var quadSegmentSample = (from, control, to, t) => {
19
18
  const u = 1 - t;
@@ -23,8 +22,8 @@ var quadSegmentSample = (from, control, to, t) => {
23
22
  };
24
23
  };
25
24
  /**
26
- * 三次贝塞尔 from → c1 → c2 → to
27
- * P'(t) = 3(1-t)²(P1-P0) + 6(1-t)t(P2-P1) + 3t²(P3-P2)
25
+ * 三次贝塞尔 from → c1 → c2 → to
26
+ * @description P'(t) = 3(1-t)²(P1-P0) + 6(1-t)t(P2-P1) + 3t²(P3-P2)
28
27
  */
29
28
  var cubicSegmentSample = (from, c1, c2, to, t) => {
30
29
  const u = 1 - t;
@@ -34,18 +33,14 @@ var cubicSegmentSample = (from, c1, c2, to, t) => {
34
33
  };
35
34
  };
36
35
  /**
37
- * 折角段 from → corner → to
38
- * t∈[0, 0.5] 走第一段(参数 2t);t∈(0.5, 1] 走第二段(参数 2t-1)。
39
- * t=0.5 落在 corner,切线取第一段方向(与"靠近 prev 一侧"一致)。
36
+ * 折角段 from → corner → to
37
+ * @description t∈[0,0.5] 走第一段(参数 2t);t∈(0.5,1] 走第二段(参数 2t-1);t=0.5 落 corner 切线取第一段方向
40
38
  */
41
39
  var foldSegmentSample = (from, corner, to, t) => {
42
40
  if (t <= .5) return lineSegmentSample(from, corner, t * 2);
43
41
  return lineSegmentSample(corner, to, t * 2 - 1);
44
42
  };
45
- /**
46
- * 弧段(与 ir/path arc 同约定,角度单位为度)。
47
- * 切线沿"扫描方向"——endAngle ≥ startAngle 时为 (-sin, cos),否则反向。
48
- */
43
+ /** 弧段(角度度数,与 ir/path arc 同约定);切线沿扫描方向:endAngle ≥ start 取 (-sin,cos),否则反向 */
49
44
  var arcSegmentSample = (center, radius, startAngleDeg, endAngleDeg, t) => {
50
45
  const rad = (startAngleDeg + t * (endAngleDeg - startAngleDeg)) * DEG_TO_RAD;
51
46
  const cos = Math.cos(rad);
@@ -56,9 +51,7 @@ var arcSegmentSample = (center, radius, startAngleDeg, endAngleDeg, t) => {
56
51
  tangent: normalize([-sin * sweepSign, cos * sweepSign])
57
52
  };
58
53
  };
59
- /**
60
- * 整圆——从 0°(east)开始,与 compile/path circlePath 输出方向(右→左→右,sweep=1)一致。
61
- */
54
+ /** 整圆,从 0°(east) 开始,与 compile/path circlePath 输出方向(右→左→右,sweep=1)一致 */
62
55
  var circleSegmentSample = (center, radius, t) => {
63
56
  const rad = t * 360 * DEG_TO_RAD;
64
57
  const cos = Math.cos(rad);
@@ -68,7 +61,7 @@ var circleSegmentSample = (center, radius, t) => {
68
61
  tangent: normalize([-sin, cos])
69
62
  };
70
63
  };
71
- /** 整椭圆——参数化 (rx·cos(2πt), ry·sin(2πt)) */
64
+ /** 整椭圆,参数化 (rx·cos(2πt), ry·sin(2πt)) */
72
65
  var ellipseSegmentSample = (center, rx, ry, t) => {
73
66
  const rad = t * 360 * DEG_TO_RAD;
74
67
  const cos = Math.cos(rad);
@@ -1,18 +1,14 @@
1
1
  /**
2
2
  * @retikz/core 公开 API
3
- *
4
- * 任何 framework adapter(@retikz/react、@retikz/vue、@retikz/canvas、@retikz/ssr)
5
- * 只能 import 本文件导出的内容,不准走子路径。
6
- *
7
- * 本包零 React、零 DOM 依赖。
3
+ * @description 任何 framework adapter(@retikz/react、@retikz/vue、@retikz/canvas、@retikz/ssr)只能 import 本文件导出内容,不准走子路径。本包零 React/零 DOM 依赖
8
4
  */
9
- export { PositionSchema, PolarPositionSchema, AtPositionSchema, AT_DIRECTIONS, TargetSchema, RelTargetSchema, RelAccumulateTargetSchema, MoveStepSchema, LineStepSchema, FoldStepSchema, CycleStepSchema, CurveStepSchema, CubicStepSchema, BendStepSchema, ArcStepSchema, CirclePathStepSchema, EllipsePathStepSchema, ControlPointSchema, StepLabelSchema, StepSchema, NodeSchema, NodeLabelSchema, CoordinateSchema, FontSchema, NodeTextSchema, LineSpecSchema, PathSchema, ChildSchema, SceneSchema, CURRENT_IR_VERSION, } from './ir';
10
- export type { IRPosition, IRAtPosition, AtDirection, IRTarget, IRRelTarget, IRRelAccumulateTarget, IRMoveStep, IRLineStep, IRFoldStep, IRCycleStep, IRCurveStep, IRCubicStep, IRBendStep, IRArcStep, IRCirclePathStep, IREllipsePathStep, IRControlPoint, IRStepLabel, IRStep, IRNode, IRNodeLabel, IRCoordinate, IRFont, IRLineSpec, IRPath, IRChild, IR, ArrowShape, NodeShape, NodeTextAlign, } from './ir';
11
- export { ARROW_SHAPES, NODE_SHAPES, NODE_TEXT_ALIGNS } from './ir';
12
- export type { ScenePrimitive, RectPrim, EllipsePrim, TextPrim, TextLine, PathPrim, GroupPrim, ViewBox, Scene, } from './primitive';
5
+ export { PositionSchema, PolarPositionSchema, AtPositionSchema, OffsetPositionSchema, AT_DIRECTIONS, TargetSchema, RelativeTargetSchema, RelativeAccumulateTargetSchema, MoveStepSchema, LineStepSchema, FoldStepSchema, CycleStepSchema, CurveStepSchema, CubicStepSchema, BendStepSchema, ArcStepSchema, CirclePathStepSchema, EllipsePathStepSchema, ControlPointSchema, StepLabelSchema, StepSchema, NodeSchema, NodeLabelSchema, CoordinateSchema, FontSchema, NodeTextSchema, LineSpecSchema, PathSchema, ArrowDetailSchema, ArrowEndDetailSchema, ChildSchema, SceneSchema, CURRENT_IR_VERSION, } from './ir';
6
+ export type { IRPosition, IRAtPosition, IROffsetPosition, AtDirection, IRTarget, IRRelativeTarget, IRRelativeAccumulateTarget, IRMoveStep, IRLineStep, IRFoldStep, IRCycleStep, IRCurveStep, IRCubicStep, IRBendStep, IRArcStep, IRCirclePathStep, IREllipsePathStep, IRControlPoint, IRStepLabel, IRStep, IRNode, IRNodeLabel, IRCoordinate, IRFont, IRLineSpec, IRPath, IRChild, IR, ArrowShape, IRArrowDetail, IRArrowEndDetail, NodeShape, NodeTextAlign, } from './ir';
7
+ export { ARROW_SHAPES, HOLLOW_ARROW_SHAPES, ARROW_MARKER_DEFAULT_SIZE, ARROW_MARKER_HOLLOW_DEFAULT_LINE_WIDTH, NODE_SHAPES, NODE_TEXT_ALIGNS, } from './ir';
8
+ export type { ScenePrimitive, RectPrim, EllipsePrim, TextPrim, TextLine, PathPrim, PathCommand, ArrowEndSpec, GroupPrim, Transform, ViewBox, Scene, } from './primitive';
13
9
  export type { FontSpec, TextMetrics, TextMeasurer, CompileOptions, } from './compile';
14
10
  export { fallbackMeasurer, compileToScene } from './compile';
15
- export type { WayItem, WayDSL, WayCycle, WayVia, WayRelItem, WayLabel, WayLabelOp, } from './parsers';
11
+ export type { WayItem, WayDSL, WayCycle, WayVia, WayRelativeItem, WayLabel, WayLabelOp, } from './parsers';
16
12
  export { parseWay, DrawWay, parseTargetSugar } from './parsers';
17
13
  export type { Position, Rect, RectAnchor, Circle, CircleAnchor, Ellipse, EllipseAnchor, Diamond, DiamondAnchor, PolarPosition, } from './geometry';
18
14
  export { point, rect, circle, ellipse, diamond, RECT_ANCHORS, polar } from './geometry';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,yBAAyB,EACzB,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,WAAW,EACX,WAAW,EACX,kBAAkB,GACnB,MAAM,MAAM,CAAC;AACd,YAAY,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,WAAW,EACX,qBAAqB,EACrB,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,MAAM,EACN,MAAM,EACN,WAAW,EACX,YAAY,EACZ,MAAM,EACN,UAAU,EACV,MAAM,EACN,OAAO,EACP,EAAE,EACF,UAAU,EACV,SAAS,EACT,aAAa,GACd,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAGnE,YAAY,EACV,cAAc,EACd,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,OAAO,EACP,KAAK,GACN,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG7D,YAAY,EACV,OAAO,EACP,MAAM,EACN,QAAQ,EACR,MAAM,EACN,UAAU,EACV,QAAQ,EACR,UAAU,GACX,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAIhE,YAAY,EACV,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,MAAM,EACN,YAAY,EACZ,OAAO,EACP,aAAa,EACb,OAAO,EACP,aAAa,EACb,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGxF,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,8BAA8B,EAC9B,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,kBAAkB,GACnB,MAAM,MAAM,CAAC;AACd,YAAY,EACV,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,0BAA0B,EAC1B,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,MAAM,EACN,MAAM,EACN,WAAW,EACX,YAAY,EACZ,MAAM,EACN,UAAU,EACV,MAAM,EACN,OAAO,EACP,EAAE,EACF,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,aAAa,GACd,MAAM,MAAM,CAAC;AACd,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,yBAAyB,EACzB,sCAAsC,EACtC,WAAW,EACX,gBAAgB,GACjB,MAAM,MAAM,CAAC;AAGd,YAAY,EACV,cAAc,EACd,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,OAAO,EACP,KAAK,GACN,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG7D,YAAY,EACV,OAAO,EACP,MAAM,EACN,QAAQ,EACR,MAAM,EACN,eAAe,EACf,QAAQ,EACR,UAAU,GACX,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAIhE,YAAY,EACV,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,MAAM,EACN,YAAY,EACZ,OAAO,EACP,aAAa,EACb,OAAO,EACP,aAAa,EACb,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGxF,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC"}
package/dist/es/index.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import { PositionSchema } from "./ir/position/position.js";
2
2
  import { PolarPositionSchema } from "./ir/position/polar-position.js";
3
3
  import { AT_DIRECTIONS, AtPositionSchema } from "./ir/position/at-position.js";
4
- import { ARROW_SHAPES } from "./ir/path/arrow.js";
5
- import { RelAccumulateTargetSchema, RelTargetSchema, TargetSchema } from "./ir/path/target.js";
4
+ import { OffsetPositionSchema } from "./ir/position/offset-position.js";
5
+ import { ARROW_MARKER_DEFAULT_SIZE, ARROW_MARKER_HOLLOW_DEFAULT_LINE_WIDTH, ARROW_SHAPES, ArrowDetailSchema, ArrowEndDetailSchema, HOLLOW_ARROW_SHAPES } from "./ir/path/arrow.js";
6
+ import { RelativeAccumulateTargetSchema, RelativeTargetSchema, TargetSchema } from "./ir/path/target.js";
6
7
  import { ArcStepSchema, BendStepSchema, CirclePathStepSchema, ControlPointSchema, CubicStepSchema, CurveStepSchema, CycleStepSchema, EllipsePathStepSchema, FoldStepSchema, LineStepSchema, MoveStepSchema, StepLabelSchema, StepSchema } from "./ir/path/step.js";
7
8
  import { PathSchema } from "./ir/path/path.js";
8
9
  import { FontSchema, LineSpecSchema, NODE_SHAPES, NODE_TEXT_ALIGNS, NodeLabelSchema, NodeSchema, NodeTextSchema } from "./ir/node.js";
@@ -18,4 +19,4 @@ import { parseTargetSugar } from "./parsers/parseTargetSugar.js";
18
19
  import { DrawWay, parseWay } from "./parsers/parseWay.js";
19
20
  import { polar } from "./geometry/polar.js";
20
21
  import { point } from "./geometry/point.js";
21
- export { ARROW_SHAPES, AT_DIRECTIONS, ArcStepSchema, AtPositionSchema, BendStepSchema, CURRENT_IR_VERSION, ChildSchema, CirclePathStepSchema, ControlPointSchema, CoordinateSchema, CubicStepSchema, CurveStepSchema, CycleStepSchema, DrawWay, EllipsePathStepSchema, FoldStepSchema, FontSchema, LineSpecSchema, LineStepSchema, MoveStepSchema, NODE_SHAPES, NODE_TEXT_ALIGNS, NodeLabelSchema, NodeSchema, NodeTextSchema, PathSchema, PolarPositionSchema, PositionSchema, RECT_ANCHORS, RelAccumulateTargetSchema, RelTargetSchema, SceneSchema, StepLabelSchema, StepSchema, TargetSchema, circle, compileToScene, diamond, ellipse, fallbackMeasurer, parseTargetSugar, parseWay, point, polar, rect };
22
+ export { ARROW_MARKER_DEFAULT_SIZE, ARROW_MARKER_HOLLOW_DEFAULT_LINE_WIDTH, ARROW_SHAPES, AT_DIRECTIONS, ArcStepSchema, ArrowDetailSchema, ArrowEndDetailSchema, AtPositionSchema, BendStepSchema, CURRENT_IR_VERSION, ChildSchema, CirclePathStepSchema, ControlPointSchema, CoordinateSchema, CubicStepSchema, CurveStepSchema, CycleStepSchema, DrawWay, EllipsePathStepSchema, FoldStepSchema, FontSchema, HOLLOW_ARROW_SHAPES, LineSpecSchema, LineStepSchema, MoveStepSchema, NODE_SHAPES, NODE_TEXT_ALIGNS, NodeLabelSchema, NodeSchema, NodeTextSchema, OffsetPositionSchema, PathSchema, PolarPositionSchema, PositionSchema, RECT_ANCHORS, RelativeAccumulateTargetSchema, RelativeTargetSchema, SceneSchema, StepLabelSchema, StepSchema, TargetSchema, circle, compileToScene, diamond, ellipse, fallbackMeasurer, parseTargetSugar, parseWay, point, polar, rect };
@@ -1,14 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  /**
3
- * Coordinate(占位节点)——TikZ `\coordinate (m) at (3,2);` 同义。
4
- *
5
- * 命名一个点供后续 path / at 引用,自身不绘制任何图形。
6
- * 支持笛卡尔 / 极坐标 / 相对定位三种 position 形态,与 `Node.position` 完全一致。
7
- *
8
- * 特点:
9
- * - 必须有 `id`(无 id 的占位节点没有意义)
10
- * - 不参与 viewBox 扩展(无视觉边界);只在被引用时才间接影响 viewBox(通过引用它的 node / path)
11
- * - 与 Node 在同一个 nodeIndex 中注册——path target 字符串、`Node.position.of` 都能命中 coordinate id
3
+ * Coordinate 占位节点(TikZ `\coordinate (m) at (3,2);` 同义)
4
+ * @description 命名一个点供 path/at 引用,不绘制任何图形;支持笛卡尔/极坐标/相对定位三种 position 形态。必须有 id,不参与 viewBox 扩展,与 Node 在同一 nodeIndex 注册
12
5
  */
13
6
  export declare const CoordinateSchema: z.ZodObject<{
14
7
  type: z.ZodLiteral<"coordinate">;
@@ -34,6 +27,15 @@ export declare const CoordinateSchema: z.ZodObject<{
34
27
  direction: "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right";
35
28
  of: string;
36
29
  distance?: number | undefined;
30
+ }>, z.ZodObject<{
31
+ of: z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>, z.ZodType<import('./position').PolarPosition, z.ZodTypeDef, import('./position').PolarPosition>]>;
32
+ offset: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
33
+ }, "strip", z.ZodTypeAny, {
34
+ of: string | [number, number] | import('./position').PolarPosition;
35
+ offset: [number, number];
36
+ }, {
37
+ of: string | [number, number] | import('./position').PolarPosition;
38
+ offset: [number, number];
37
39
  }>]>;
38
40
  }, "strip", z.ZodTypeAny, {
39
41
  type: "coordinate";
@@ -41,6 +43,9 @@ export declare const CoordinateSchema: z.ZodObject<{
41
43
  direction: "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right";
42
44
  of: string;
43
45
  distance?: number | undefined;
46
+ } | {
47
+ of: string | [number, number] | import('./position').PolarPosition;
48
+ offset: [number, number];
44
49
  };
45
50
  id: string;
46
51
  }, {
@@ -49,9 +54,12 @@ export declare const CoordinateSchema: z.ZodObject<{
49
54
  direction: "above" | "below" | "left" | "right" | "above-left" | "above-right" | "below-left" | "below-right";
50
55
  of: string;
51
56
  distance?: number | undefined;
57
+ } | {
58
+ of: string | [number, number] | import('./position').PolarPosition;
59
+ offset: [number, number];
52
60
  };
53
61
  id: string;
54
62
  }>;
55
- /** Coordinate IR 类型——`{ type: 'coordinate', id, position }` */
63
+ /** Coordinate IR 类型 `{ type:'coordinate', id, position }` */
56
64
  export type IRCoordinate = z.infer<typeof CoordinateSchema>;
57
65
  //# sourceMappingURL=coordinate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"coordinate.d.ts","sourceRoot":"","sources":["../../../src/ir/coordinate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmB1B,CAAC;AAEJ,+DAA+D;AAC/D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"coordinate.d.ts","sourceRoot":"","sources":["../../../src/ir/coordinate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmB1B,CAAC;AAEJ,6DAA6D;AAC7D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -1,18 +1,12 @@
1
1
  import { PositionSchema } from "./position/position.js";
2
2
  import { PolarPositionSchema } from "./position/polar-position.js";
3
3
  import { AtPositionSchema } from "./position/at-position.js";
4
+ import { OffsetPositionSchema } from "./position/offset-position.js";
4
5
  import { z } from "zod";
5
6
  //#region src/ir/coordinate.ts
6
7
  /**
7
- * Coordinate(占位节点)——TikZ `\coordinate (m) at (3,2);` 同义。
8
- *
9
- * 命名一个点供后续 path / at 引用,自身不绘制任何图形。
10
- * 支持笛卡尔 / 极坐标 / 相对定位三种 position 形态,与 `Node.position` 完全一致。
11
- *
12
- * 特点:
13
- * - 必须有 `id`(无 id 的占位节点没有意义)
14
- * - 不参与 viewBox 扩展(无视觉边界);只在被引用时才间接影响 viewBox(通过引用它的 node / path)
15
- * - 与 Node 在同一个 nodeIndex 中注册——path target 字符串、`Node.position.of` 都能命中 coordinate id
8
+ * Coordinate 占位节点(TikZ `\coordinate (m) at (3,2);` 同义)
9
+ * @description 命名一个点供 path/at 引用,不绘制任何图形;支持笛卡尔/极坐标/相对定位三种 position 形态。必须有 id,不参与 viewBox 扩展,与 Node 在同一 nodeIndex 注册
16
10
  */
17
11
  var CoordinateSchema = z.object({
18
12
  type: z.literal("coordinate").describe("Discriminator marking this child as a coordinate placeholder"),
@@ -20,8 +14,9 @@ var CoordinateSchema = z.object({
20
14
  position: z.union([
21
15
  PositionSchema,
22
16
  PolarPositionSchema,
23
- AtPositionSchema
24
- ]).describe("Coordinate position; Cartesian [x, y], polar, or relative-to-another-node (`at`-style). Resolved at compile time.")
17
+ AtPositionSchema,
18
+ OffsetPositionSchema
19
+ ]).describe("Coordinate position; Cartesian [x, y], polar, relative-to-another-node (`at`-style), or offset from a base point (`{ of, offset }` form). Resolved at compile time.")
25
20
  }).describe("Coordinate placeholder: a named point with no visual; usable as a target for paths and as an anchor for relative positioning. Mirrors TikZ `\\coordinate (id) at (...);`");
26
21
  //#endregion
27
22
  export { CoordinateSchema };