@retikz/core 0.3.0-alpha.4 → 0.3.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 (417) hide show
  1. package/dist/es/arrows/define.d.ts +9 -0
  2. package/dist/es/arrows/define.d.ts.map +1 -0
  3. package/dist/es/arrows/define.js +10 -0
  4. package/dist/es/arrows/index.d.ts +3 -1
  5. package/dist/es/arrows/index.d.ts.map +1 -1
  6. package/dist/es/arrows/index.js +14 -1
  7. package/dist/es/arrows/types.d.ts +4 -2
  8. package/dist/es/arrows/types.d.ts.map +1 -1
  9. package/dist/es/compile/anchor-cache.d.ts +3 -3
  10. package/dist/es/compile/anchor-cache.d.ts.map +1 -1
  11. package/dist/es/compile/anchor-cache.js +18 -5
  12. package/dist/es/compile/compile.d.ts +5 -14
  13. package/dist/es/compile/compile.d.ts.map +1 -1
  14. package/dist/es/compile/compile.js +73 -41
  15. package/dist/es/compile/{lowerComposites.d.ts → composite.d.ts} +9 -2
  16. package/dist/es/compile/composite.d.ts.map +1 -0
  17. package/dist/es/compile/{lowerComposites.js → composite.js} +9 -1
  18. package/dist/es/compile/constant.d.ts +32 -0
  19. package/dist/es/compile/constant.d.ts.map +1 -0
  20. package/dist/es/compile/constant.js +23 -0
  21. package/dist/es/compile/direction.d.ts +27 -0
  22. package/dist/es/compile/direction.d.ts.map +1 -0
  23. package/dist/es/compile/direction.js +30 -0
  24. package/dist/es/compile/index.d.ts +3 -1
  25. package/dist/es/compile/index.d.ts.map +1 -1
  26. package/dist/es/compile/name-stack.d.ts +3 -1
  27. package/dist/es/compile/name-stack.d.ts.map +1 -1
  28. package/dist/es/compile/name-stack.js +5 -1
  29. package/dist/es/compile/node.d.ts +20 -7
  30. package/dist/es/compile/node.d.ts.map +1 -1
  31. package/dist/es/compile/node.js +42 -63
  32. package/dist/es/compile/paint.js +1 -1
  33. package/dist/es/compile/path/anchor.d.ts +4 -3
  34. package/dist/es/compile/path/anchor.d.ts.map +1 -1
  35. package/dist/es/compile/path/anchor.js +9 -12
  36. package/dist/es/compile/path/index.d.ts +6 -8
  37. package/dist/es/compile/path/index.d.ts.map +1 -1
  38. package/dist/es/compile/path/index.js +59 -34
  39. package/dist/es/compile/path/relative.d.ts +1 -1
  40. package/dist/es/compile/path/relative.js +1 -1
  41. package/dist/es/compile/path/shrink.d.ts +3 -1
  42. package/dist/es/compile/path/shrink.d.ts.map +1 -1
  43. package/dist/es/compile/path/shrink.js +16 -11
  44. package/dist/es/compile/position.d.ts +2 -2
  45. package/dist/es/compile/position.d.ts.map +1 -1
  46. package/dist/es/compile/position.js +6 -19
  47. package/dist/es/compile/precision.d.ts +1 -1
  48. package/dist/es/compile/precision.d.ts.map +1 -1
  49. package/dist/es/compile/precision.js +2 -2
  50. package/dist/es/compile/scope.d.ts +7 -5
  51. package/dist/es/compile/scope.d.ts.map +1 -1
  52. package/dist/es/compile/scope.js +29 -13
  53. package/dist/es/compile/style.d.ts +2 -2
  54. package/dist/es/compile/style.d.ts.map +1 -1
  55. package/dist/es/compile/style.js +2 -2
  56. package/dist/es/composites/define.d.ts +8 -0
  57. package/dist/es/composites/define.d.ts.map +1 -0
  58. package/dist/es/composites/{types.js → define.js} +2 -2
  59. package/dist/es/composites/index.d.ts +1 -1
  60. package/dist/es/composites/index.d.ts.map +1 -1
  61. package/dist/es/composites/types.d.ts +0 -6
  62. package/dist/es/composites/types.d.ts.map +1 -1
  63. package/dist/es/geometry/anchor.d.ts +33 -0
  64. package/dist/es/geometry/anchor.d.ts.map +1 -0
  65. package/dist/es/geometry/anchor.js +45 -0
  66. package/dist/es/geometry/bend.d.ts +1 -1
  67. package/dist/es/geometry/bend.js +2 -2
  68. package/dist/es/geometry/circle.d.ts +4 -4
  69. package/dist/es/geometry/circle.d.ts.map +1 -1
  70. package/dist/es/geometry/circle.js +3 -3
  71. package/dist/es/geometry/{roundedContour.d.ts → contour.d.ts} +4 -5
  72. package/dist/es/geometry/contour.d.ts.map +1 -0
  73. package/dist/es/geometry/{roundedContour.js → contour.js} +22 -34
  74. package/dist/es/geometry/diamond.d.ts +3 -3
  75. package/dist/es/geometry/diamond.d.ts.map +1 -1
  76. package/dist/es/geometry/diamond.js +2 -2
  77. package/dist/{lib/geometry/_edge.d.ts → es/geometry/edge.d.ts} +1 -1
  78. package/dist/es/geometry/edge.d.ts.map +1 -0
  79. package/dist/es/geometry/{_edge.js → edge.js} +1 -1
  80. package/dist/es/geometry/ellipse.d.ts +3 -3
  81. package/dist/es/geometry/ellipse.d.ts.map +1 -1
  82. package/dist/es/geometry/ellipse.js +2 -2
  83. package/dist/es/geometry/index.d.ts +2 -1
  84. package/dist/es/geometry/index.d.ts.map +1 -1
  85. package/dist/es/geometry/point.d.ts +6 -0
  86. package/dist/es/geometry/point.d.ts.map +1 -1
  87. package/dist/es/geometry/point.js +17 -0
  88. package/dist/es/geometry/rect.d.ts +4 -17
  89. package/dist/es/geometry/rect.d.ts.map +1 -1
  90. package/dist/es/geometry/rect.js +4 -16
  91. package/dist/es/geometry/segment.d.ts.map +1 -1
  92. package/dist/es/geometry/segment.js +25 -47
  93. package/dist/{lib/geometry/_transform.d.ts → es/geometry/transform.d.ts} +1 -1
  94. package/dist/es/geometry/transform.d.ts.map +1 -0
  95. package/dist/es/geometry/{_transform.js → transform.js} +1 -1
  96. package/dist/es/index.d.ts +13 -10
  97. package/dist/es/index.d.ts.map +1 -1
  98. package/dist/es/index.js +19 -14
  99. package/dist/es/ir/animation.d.ts +219 -0
  100. package/dist/es/ir/animation.d.ts.map +1 -0
  101. package/dist/es/ir/animation.js +118 -0
  102. package/dist/es/ir/boundary.d.ts +1 -1
  103. package/dist/es/ir/boundary.d.ts.map +1 -1
  104. package/dist/es/ir/coordinate.d.ts +8 -8
  105. package/dist/es/ir/index.d.ts +1 -0
  106. package/dist/es/ir/index.d.ts.map +1 -1
  107. package/dist/es/ir/node.d.ts +249 -92
  108. package/dist/es/ir/node.d.ts.map +1 -1
  109. package/dist/es/ir/node.js +25 -23
  110. package/dist/es/ir/paint.d.ts +19 -18
  111. package/dist/es/ir/paint.d.ts.map +1 -1
  112. package/dist/es/ir/paint.js +10 -10
  113. package/dist/es/ir/path/arrow.d.ts +39 -38
  114. package/dist/es/ir/path/arrow.d.ts.map +1 -1
  115. package/dist/es/ir/path/arrow.js +18 -16
  116. package/dist/es/ir/path/path.d.ts +1106 -209
  117. package/dist/es/ir/path/path.d.ts.map +1 -1
  118. package/dist/es/ir/path/path.js +3 -1
  119. package/dist/es/ir/path/step.d.ts +932 -20
  120. package/dist/es/ir/path/step.d.ts.map +1 -1
  121. package/dist/es/ir/path/step.js +73 -22
  122. package/dist/es/ir/path/target.js +3 -3
  123. package/dist/es/ir/position/at-position.d.ts +18 -18
  124. package/dist/es/ir/position/at-position.d.ts.map +1 -1
  125. package/dist/es/ir/position/at-position.js +11 -11
  126. package/dist/es/ir/scene.d.ts +156 -0
  127. package/dist/es/ir/scene.d.ts.map +1 -1
  128. package/dist/es/ir/scene.js +3 -1
  129. package/dist/es/ir/scope.d.ts +3446 -1306
  130. package/dist/es/ir/scope.d.ts.map +1 -1
  131. package/dist/es/ir/scope.js +10 -6
  132. package/dist/es/ir/transform.d.ts +44 -17
  133. package/dist/es/ir/transform.d.ts.map +1 -1
  134. package/dist/es/ir/transform.js +10 -3
  135. package/dist/es/parsers/index.d.ts +3 -3
  136. package/dist/es/parsers/index.d.ts.map +1 -1
  137. package/dist/es/parsers/{parseNodeTarget.d.ts → node-target.d.ts} +1 -1
  138. package/dist/es/parsers/node-target.d.ts.map +1 -0
  139. package/dist/es/parsers/{parseNodeTarget.js → node-target.js} +10 -8
  140. package/dist/{lib/parsers/parseTargetSugar.d.ts → es/parsers/target-sugar.d.ts} +1 -1
  141. package/dist/es/parsers/target-sugar.d.ts.map +1 -0
  142. package/dist/es/parsers/{parseTargetSugar.js → target-sugar.js} +9 -4
  143. package/dist/{lib/parsers/parseWay.d.ts → es/parsers/way.d.ts} +1 -1
  144. package/dist/es/parsers/way.d.ts.map +1 -0
  145. package/dist/es/parsers/{parseWay.js → way.js} +9 -5
  146. package/dist/es/path-generators/define.d.ts.map +1 -0
  147. package/dist/es/{pathGenerators → path-generators}/define.js +1 -1
  148. package/dist/es/path-generators/index.d.ts.map +1 -0
  149. package/dist/es/path-generators/types.d.ts.map +1 -0
  150. package/dist/es/patterns/define.d.ts +9 -0
  151. package/dist/es/patterns/define.d.ts.map +1 -0
  152. package/dist/es/patterns/define.js +10 -0
  153. package/dist/es/patterns/index.d.ts +1 -0
  154. package/dist/es/patterns/index.d.ts.map +1 -1
  155. package/dist/es/patterns/index.js +42 -35
  156. package/dist/es/presets/animation.d.ts +123 -0
  157. package/dist/es/presets/animation.d.ts.map +1 -0
  158. package/dist/es/presets/animation.js +272 -0
  159. package/dist/es/presets/index.d.ts +3 -0
  160. package/dist/es/presets/index.d.ts.map +1 -0
  161. package/dist/es/primitive/ellipse.d.ts +3 -0
  162. package/dist/es/primitive/ellipse.d.ts.map +1 -1
  163. package/dist/es/primitive/group.d.ts +3 -0
  164. package/dist/es/primitive/group.d.ts.map +1 -1
  165. package/dist/es/primitive/marker.d.ts +1 -1
  166. package/dist/es/primitive/paint.d.ts +1 -1
  167. package/dist/es/primitive/path.d.ts +4 -1
  168. package/dist/es/primitive/path.d.ts.map +1 -1
  169. package/dist/es/primitive/rect.d.ts +3 -0
  170. package/dist/es/primitive/rect.d.ts.map +1 -1
  171. package/dist/es/primitive/scene.d.ts +3 -0
  172. package/dist/es/primitive/scene.d.ts.map +1 -1
  173. package/dist/es/primitive/text.d.ts +3 -0
  174. package/dist/es/primitive/text.d.ts.map +1 -1
  175. package/dist/es/shapes/arc.js +2 -2
  176. package/dist/{lib/shapes/_contour.d.ts → es/shapes/contour.d.ts} +6 -3
  177. package/dist/es/shapes/contour.d.ts.map +1 -0
  178. package/dist/es/shapes/{_contour.js → contour.js} +14 -2
  179. package/dist/es/shapes/ellipse.js +2 -2
  180. package/dist/es/shapes/index.d.ts +1 -1
  181. package/dist/es/shapes/index.d.ts.map +1 -1
  182. package/dist/es/shapes/index.js +1 -1
  183. package/dist/es/shapes/polygon.d.ts +1 -1
  184. package/dist/es/shapes/polygon.d.ts.map +1 -1
  185. package/dist/es/shapes/polygon.js +26 -21
  186. package/dist/es/shapes/rectangle.js +5 -5
  187. package/dist/es/shapes/sector.d.ts.map +1 -1
  188. package/dist/es/shapes/sector.js +30 -22
  189. package/dist/es/shapes/{_shared.d.ts → shared.d.ts} +4 -8
  190. package/dist/es/shapes/shared.d.ts.map +1 -0
  191. package/dist/es/shapes/{_shared.js → shared.js} +8 -12
  192. package/dist/es/shapes/star.d.ts.map +1 -1
  193. package/dist/es/shapes/star.js +4 -14
  194. package/dist/lib/arrows/define.cjs +10 -0
  195. package/dist/lib/arrows/define.d.ts +9 -0
  196. package/dist/lib/arrows/define.d.ts.map +1 -0
  197. package/dist/lib/arrows/index.cjs +14 -1
  198. package/dist/lib/arrows/index.d.ts +3 -1
  199. package/dist/lib/arrows/index.d.ts.map +1 -1
  200. package/dist/lib/arrows/types.d.ts +4 -2
  201. package/dist/lib/arrows/types.d.ts.map +1 -1
  202. package/dist/lib/compile/anchor-cache.cjs +17 -4
  203. package/dist/lib/compile/anchor-cache.d.ts +3 -3
  204. package/dist/lib/compile/anchor-cache.d.ts.map +1 -1
  205. package/dist/lib/compile/compile.cjs +71 -39
  206. package/dist/lib/compile/compile.d.ts +5 -14
  207. package/dist/lib/compile/compile.d.ts.map +1 -1
  208. package/dist/lib/compile/{lowerComposites.cjs → composite.cjs} +9 -1
  209. package/dist/lib/compile/{lowerComposites.d.ts → composite.d.ts} +9 -2
  210. package/dist/lib/compile/composite.d.ts.map +1 -0
  211. package/dist/lib/compile/constant.cjs +24 -0
  212. package/dist/lib/compile/constant.d.ts +32 -0
  213. package/dist/lib/compile/constant.d.ts.map +1 -0
  214. package/dist/lib/compile/direction.cjs +31 -0
  215. package/dist/lib/compile/direction.d.ts +27 -0
  216. package/dist/lib/compile/direction.d.ts.map +1 -0
  217. package/dist/lib/compile/index.d.ts +3 -1
  218. package/dist/lib/compile/index.d.ts.map +1 -1
  219. package/dist/lib/compile/name-stack.cjs +5 -1
  220. package/dist/lib/compile/name-stack.d.ts +3 -1
  221. package/dist/lib/compile/name-stack.d.ts.map +1 -1
  222. package/dist/lib/compile/node.cjs +42 -62
  223. package/dist/lib/compile/node.d.ts +20 -7
  224. package/dist/lib/compile/node.d.ts.map +1 -1
  225. package/dist/lib/compile/paint.cjs +1 -1
  226. package/dist/lib/compile/path/anchor.cjs +10 -12
  227. package/dist/lib/compile/path/anchor.d.ts +4 -3
  228. package/dist/lib/compile/path/anchor.d.ts.map +1 -1
  229. package/dist/lib/compile/path/index.cjs +58 -33
  230. package/dist/lib/compile/path/index.d.ts +6 -8
  231. package/dist/lib/compile/path/index.d.ts.map +1 -1
  232. package/dist/lib/compile/path/relative.cjs +1 -1
  233. package/dist/lib/compile/path/relative.d.ts +1 -1
  234. package/dist/lib/compile/path/shrink.cjs +16 -11
  235. package/dist/lib/compile/path/shrink.d.ts +3 -1
  236. package/dist/lib/compile/path/shrink.d.ts.map +1 -1
  237. package/dist/lib/compile/position.cjs +6 -19
  238. package/dist/lib/compile/position.d.ts +2 -2
  239. package/dist/lib/compile/position.d.ts.map +1 -1
  240. package/dist/lib/compile/precision.cjs +2 -2
  241. package/dist/lib/compile/precision.d.ts +1 -1
  242. package/dist/lib/compile/precision.d.ts.map +1 -1
  243. package/dist/lib/compile/scope.cjs +29 -13
  244. package/dist/lib/compile/scope.d.ts +7 -5
  245. package/dist/lib/compile/scope.d.ts.map +1 -1
  246. package/dist/lib/compile/style.cjs +2 -2
  247. package/dist/lib/compile/style.d.ts +2 -2
  248. package/dist/lib/compile/style.d.ts.map +1 -1
  249. package/dist/lib/composites/{types.cjs → define.cjs} +2 -2
  250. package/dist/lib/composites/define.d.ts +8 -0
  251. package/dist/lib/composites/define.d.ts.map +1 -0
  252. package/dist/lib/composites/index.d.ts +1 -1
  253. package/dist/lib/composites/index.d.ts.map +1 -1
  254. package/dist/lib/composites/types.d.ts +0 -6
  255. package/dist/lib/composites/types.d.ts.map +1 -1
  256. package/dist/lib/geometry/anchor.cjs +47 -0
  257. package/dist/lib/geometry/anchor.d.ts +33 -0
  258. package/dist/lib/geometry/anchor.d.ts.map +1 -0
  259. package/dist/lib/geometry/bend.cjs +2 -2
  260. package/dist/lib/geometry/bend.d.ts +1 -1
  261. package/dist/lib/geometry/circle.cjs +9 -9
  262. package/dist/lib/geometry/circle.d.ts +4 -4
  263. package/dist/lib/geometry/circle.d.ts.map +1 -1
  264. package/dist/lib/geometry/{roundedContour.cjs → contour.cjs} +21 -32
  265. package/dist/lib/geometry/{roundedContour.d.ts → contour.d.ts} +4 -5
  266. package/dist/lib/geometry/contour.d.ts.map +1 -0
  267. package/dist/lib/geometry/diamond.cjs +7 -7
  268. package/dist/lib/geometry/diamond.d.ts +3 -3
  269. package/dist/lib/geometry/diamond.d.ts.map +1 -1
  270. package/dist/lib/geometry/{_edge.cjs → edge.cjs} +1 -1
  271. package/dist/{es/geometry/_edge.d.ts → lib/geometry/edge.d.ts} +1 -1
  272. package/dist/lib/geometry/edge.d.ts.map +1 -0
  273. package/dist/lib/geometry/ellipse.cjs +8 -8
  274. package/dist/lib/geometry/ellipse.d.ts +3 -3
  275. package/dist/lib/geometry/ellipse.d.ts.map +1 -1
  276. package/dist/lib/geometry/index.d.ts +2 -1
  277. package/dist/lib/geometry/index.d.ts.map +1 -1
  278. package/dist/lib/geometry/point.cjs +17 -0
  279. package/dist/lib/geometry/point.d.ts +6 -0
  280. package/dist/lib/geometry/point.d.ts.map +1 -1
  281. package/dist/lib/geometry/rect.cjs +9 -22
  282. package/dist/lib/geometry/rect.d.ts +4 -17
  283. package/dist/lib/geometry/rect.d.ts.map +1 -1
  284. package/dist/lib/geometry/segment.cjs +25 -47
  285. package/dist/lib/geometry/segment.d.ts.map +1 -1
  286. package/dist/lib/geometry/{_transform.cjs → transform.cjs} +1 -1
  287. package/dist/{es/geometry/_transform.d.ts → lib/geometry/transform.d.ts} +1 -1
  288. package/dist/lib/geometry/transform.d.ts.map +1 -0
  289. package/dist/lib/index.cjs +56 -22
  290. package/dist/lib/index.d.ts +13 -10
  291. package/dist/lib/index.d.ts.map +1 -1
  292. package/dist/lib/ir/animation.cjs +127 -0
  293. package/dist/lib/ir/animation.d.ts +219 -0
  294. package/dist/lib/ir/animation.d.ts.map +1 -0
  295. package/dist/lib/ir/boundary.d.ts +1 -1
  296. package/dist/lib/ir/boundary.d.ts.map +1 -1
  297. package/dist/lib/ir/coordinate.d.ts +8 -8
  298. package/dist/lib/ir/index.d.ts +1 -0
  299. package/dist/lib/ir/index.d.ts.map +1 -1
  300. package/dist/lib/ir/node.cjs +25 -23
  301. package/dist/lib/ir/node.d.ts +249 -92
  302. package/dist/lib/ir/node.d.ts.map +1 -1
  303. package/dist/lib/ir/paint.cjs +10 -10
  304. package/dist/lib/ir/paint.d.ts +19 -18
  305. package/dist/lib/ir/paint.d.ts.map +1 -1
  306. package/dist/lib/ir/path/arrow.cjs +18 -16
  307. package/dist/lib/ir/path/arrow.d.ts +39 -38
  308. package/dist/lib/ir/path/arrow.d.ts.map +1 -1
  309. package/dist/lib/ir/path/path.cjs +3 -1
  310. package/dist/lib/ir/path/path.d.ts +1106 -209
  311. package/dist/lib/ir/path/path.d.ts.map +1 -1
  312. package/dist/lib/ir/path/step.cjs +73 -21
  313. package/dist/lib/ir/path/step.d.ts +932 -20
  314. package/dist/lib/ir/path/step.d.ts.map +1 -1
  315. package/dist/lib/ir/path/target.cjs +3 -3
  316. package/dist/lib/ir/position/at-position.cjs +11 -11
  317. package/dist/lib/ir/position/at-position.d.ts +18 -18
  318. package/dist/lib/ir/position/at-position.d.ts.map +1 -1
  319. package/dist/lib/ir/scene.cjs +3 -1
  320. package/dist/lib/ir/scene.d.ts +156 -0
  321. package/dist/lib/ir/scene.d.ts.map +1 -1
  322. package/dist/lib/ir/scope.cjs +10 -6
  323. package/dist/lib/ir/scope.d.ts +3446 -1306
  324. package/dist/lib/ir/scope.d.ts.map +1 -1
  325. package/dist/lib/ir/transform.cjs +9 -2
  326. package/dist/lib/ir/transform.d.ts +44 -17
  327. package/dist/lib/ir/transform.d.ts.map +1 -1
  328. package/dist/lib/parsers/index.d.ts +3 -3
  329. package/dist/lib/parsers/index.d.ts.map +1 -1
  330. package/dist/lib/parsers/{parseNodeTarget.cjs → node-target.cjs} +10 -8
  331. package/dist/lib/parsers/{parseNodeTarget.d.ts → node-target.d.ts} +1 -1
  332. package/dist/lib/parsers/node-target.d.ts.map +1 -0
  333. package/dist/lib/parsers/{parseTargetSugar.cjs → target-sugar.cjs} +9 -4
  334. package/dist/{es/parsers/parseTargetSugar.d.ts → lib/parsers/target-sugar.d.ts} +1 -1
  335. package/dist/lib/parsers/target-sugar.d.ts.map +1 -0
  336. package/dist/lib/parsers/{parseWay.cjs → way.cjs} +12 -8
  337. package/dist/{es/parsers/parseWay.d.ts → lib/parsers/way.d.ts} +1 -1
  338. package/dist/lib/parsers/way.d.ts.map +1 -0
  339. package/dist/lib/{pathGenerators → path-generators}/define.cjs +1 -1
  340. package/dist/lib/path-generators/define.d.ts.map +1 -0
  341. package/dist/lib/path-generators/index.d.ts.map +1 -0
  342. package/dist/lib/path-generators/types.d.ts.map +1 -0
  343. package/dist/lib/patterns/define.cjs +10 -0
  344. package/dist/lib/patterns/define.d.ts +9 -0
  345. package/dist/lib/patterns/define.d.ts.map +1 -0
  346. package/dist/lib/patterns/index.cjs +42 -35
  347. package/dist/lib/patterns/index.d.ts +1 -0
  348. package/dist/lib/patterns/index.d.ts.map +1 -1
  349. package/dist/lib/presets/animation.cjs +286 -0
  350. package/dist/lib/presets/animation.d.ts +123 -0
  351. package/dist/lib/presets/animation.d.ts.map +1 -0
  352. package/dist/lib/presets/index.d.ts +3 -0
  353. package/dist/lib/presets/index.d.ts.map +1 -0
  354. package/dist/lib/primitive/ellipse.d.ts +3 -0
  355. package/dist/lib/primitive/ellipse.d.ts.map +1 -1
  356. package/dist/lib/primitive/group.d.ts +3 -0
  357. package/dist/lib/primitive/group.d.ts.map +1 -1
  358. package/dist/lib/primitive/marker.d.ts +1 -1
  359. package/dist/lib/primitive/paint.d.ts +1 -1
  360. package/dist/lib/primitive/path.d.ts +4 -1
  361. package/dist/lib/primitive/path.d.ts.map +1 -1
  362. package/dist/lib/primitive/rect.d.ts +3 -0
  363. package/dist/lib/primitive/rect.d.ts.map +1 -1
  364. package/dist/lib/primitive/scene.d.ts +3 -0
  365. package/dist/lib/primitive/scene.d.ts.map +1 -1
  366. package/dist/lib/primitive/text.d.ts +3 -0
  367. package/dist/lib/primitive/text.d.ts.map +1 -1
  368. package/dist/lib/shapes/arc.cjs +4 -4
  369. package/dist/lib/shapes/{_contour.cjs → contour.cjs} +14 -1
  370. package/dist/{es/shapes/_contour.d.ts → lib/shapes/contour.d.ts} +6 -3
  371. package/dist/lib/shapes/contour.d.ts.map +1 -0
  372. package/dist/lib/shapes/ellipse.cjs +2 -2
  373. package/dist/lib/shapes/index.cjs +1 -1
  374. package/dist/lib/shapes/index.d.ts +1 -1
  375. package/dist/lib/shapes/index.d.ts.map +1 -1
  376. package/dist/lib/shapes/polygon.cjs +29 -24
  377. package/dist/lib/shapes/polygon.d.ts +1 -1
  378. package/dist/lib/shapes/polygon.d.ts.map +1 -1
  379. package/dist/lib/shapes/rectangle.cjs +11 -11
  380. package/dist/lib/shapes/sector.cjs +41 -33
  381. package/dist/lib/shapes/sector.d.ts.map +1 -1
  382. package/dist/lib/shapes/{_shared.cjs → shared.cjs} +7 -12
  383. package/dist/lib/shapes/{_shared.d.ts → shared.d.ts} +4 -8
  384. package/dist/lib/shapes/shared.d.ts.map +1 -0
  385. package/dist/lib/shapes/star.cjs +7 -17
  386. package/dist/lib/shapes/star.d.ts.map +1 -1
  387. package/package.json +2 -3
  388. package/dist/es/compile/lowerComposites.d.ts.map +0 -1
  389. package/dist/es/geometry/_edge.d.ts.map +0 -1
  390. package/dist/es/geometry/_transform.d.ts.map +0 -1
  391. package/dist/es/geometry/roundedContour.d.ts.map +0 -1
  392. package/dist/es/parsers/parseNodeTarget.d.ts.map +0 -1
  393. package/dist/es/parsers/parseTargetSugar.d.ts.map +0 -1
  394. package/dist/es/parsers/parseWay.d.ts.map +0 -1
  395. package/dist/es/pathGenerators/define.d.ts.map +0 -1
  396. package/dist/es/pathGenerators/index.d.ts.map +0 -1
  397. package/dist/es/pathGenerators/types.d.ts.map +0 -1
  398. package/dist/es/shapes/_contour.d.ts.map +0 -1
  399. package/dist/es/shapes/_shared.d.ts.map +0 -1
  400. package/dist/lib/compile/lowerComposites.d.ts.map +0 -1
  401. package/dist/lib/geometry/_edge.d.ts.map +0 -1
  402. package/dist/lib/geometry/_transform.d.ts.map +0 -1
  403. package/dist/lib/geometry/roundedContour.d.ts.map +0 -1
  404. package/dist/lib/parsers/parseNodeTarget.d.ts.map +0 -1
  405. package/dist/lib/parsers/parseTargetSugar.d.ts.map +0 -1
  406. package/dist/lib/parsers/parseWay.d.ts.map +0 -1
  407. package/dist/lib/pathGenerators/define.d.ts.map +0 -1
  408. package/dist/lib/pathGenerators/index.d.ts.map +0 -1
  409. package/dist/lib/pathGenerators/types.d.ts.map +0 -1
  410. package/dist/lib/shapes/_contour.d.ts.map +0 -1
  411. package/dist/lib/shapes/_shared.d.ts.map +0 -1
  412. /package/dist/es/{pathGenerators → path-generators}/define.d.ts +0 -0
  413. /package/dist/es/{pathGenerators → path-generators}/index.d.ts +0 -0
  414. /package/dist/es/{pathGenerators → path-generators}/types.d.ts +0 -0
  415. /package/dist/lib/{pathGenerators → path-generators}/define.d.ts +0 -0
  416. /package/dist/lib/{pathGenerators → path-generators}/index.d.ts +0 -0
  417. /package/dist/lib/{pathGenerators → path-generators}/types.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAY9C,OAAO,KAAK,EACV,MAAM,EAEN,UAAU,EAGX,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAIV,cAAc,EACd,SAAS,EACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,iBAAiB,CAAC;AAKtE,OAAO,EAAE,KAAK,eAAe,EAA2D,MAAM,UAAU,CAAC;AA8FzG,mCAAmC;AACnC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iCAAiC;IACjC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,KAAK,IAAI,CAAC;IACX,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACtC,wEAAwE;IACxE,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B;;;;OAIG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACnE,CAAC;AA0EF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,EACZ,WAAW,SAAS,EACpB,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAC5B,cAAa,YAA+B,EAC5C,WAAU,gBAAqB,KAC9B;IAAE,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CAAE,GAAG,IAkvBrE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAY9C,OAAO,KAAK,EACV,MAAM,EAEN,UAAU,EAGX,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAIV,cAAc,EACd,SAAS,EACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,YAAY,EAAoB,MAAM,iBAAiB,CAAC;AAKtE,OAAO,EAAE,KAAK,eAAe,EAA2D,MAAM,UAAU,CAAC;AA8FzG,mCAAmC;AACnC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iCAAiC;IACjC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACtC,wEAAwE;IACxE,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B;;;;OAIG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACnE,CAAC;AA0EF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,EACZ,WAAW,SAAS,EACpB,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAC5B,cAAa,YAA+B,EAC5C,WAAU,gBAAqB,KAC9B;IAAE,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CAAE,GAAG,IA6xBrE,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
@@ -2,11 +2,12 @@ import { JsonObjectSchema } from "../../ir/json.js";
2
2
  import { rectOutline } from "../../geometry/rect.js";
3
3
  import { arcBoundingPoints, arcEndPoint, ellipseArcBoundingPoints, ellipseArcPoint } from "../../geometry/arc.js";
4
4
  import { BUILTIN_ARROWS } from "../../arrows/index.js";
5
+ import { CompileWarningCode } from "../constant.js";
5
6
  import { applyTransformChain } from "../scope.js";
6
7
  import { bendControlPoints, outInControlPoints } from "../../geometry/bend.js";
7
8
  import { arcSegmentSample, circleSegmentSample, cubicSegmentSample, ellipseArcSegmentSample, ellipseSegmentSample, foldSegmentSample, lineSegmentSample, quadSegmentSample } from "../../geometry/segment.js";
8
9
  import { fallbackMeasurer } from "../text-metrics.js";
9
- import { clipForTarget, cornerOf, refPointOfTarget, samePoint } from "./anchor.js";
10
+ import { clipForTarget, cornerOf, isAutoBoundaryTarget, refPointOfTarget, samePoint } from "./anchor.js";
10
11
  import { emitLabelPrimitive, tForLabelPosition } from "./label.js";
11
12
  import { normalizeRelativeTargets } from "./relative.js";
12
13
  import { applyArrowShrinks, endpointArrows, resolveMarkArrowSpec } from "./shrink.js";
@@ -65,7 +66,7 @@ var assertValidGeneratedCommand = (name, cmd) => {
65
66
  /**
66
67
  * 语义 stroke 档位 → 数值(user units)
67
68
  * @description 对齐 TikZ 比例(thin=0.4pt→1=默认 strokeWidth):ultraThin 0.25、veryThin 0.5、thin 1、semithick 1.5、thick 2、veryThick 3、ultraThick 4。显式 strokeWidth 覆盖 thickness。
68
- * `as const satisfies` + `AssertEqual` 双约束:加 IRPath['thickness'] 档位时漏写 TS 报错(字段表互锁,同 ADR-06 主题)
69
+ * `as const satisfies` + `AssertEqual` 双约束:加 IRPath['thickness'] 档位时漏写 TS 报错(字段表互锁)
69
70
  */
70
71
  var THICKNESS_TO_WIDTH = {
71
72
  ultraThin: .25,
@@ -181,7 +182,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
181
182
  const steps = normalizeRelativeTargets(path.children, nameStack, scopeChain);
182
183
  const soloSelfContained = steps.length === 1 && steps[0].kind === "rectangle";
183
184
  if (steps.length < 2 && !soloSelfContained) {
184
- warn("PATH_TOO_SHORT", `Path requires at least 2 steps (got ${steps.length}); the entire path is skipped`, "children");
185
+ warn(CompileWarningCode.PathTooShort, `Path requires at least 2 steps (got ${steps.length}); the entire path is skipped`, "children");
185
186
  return null;
186
187
  }
187
188
  /** 每段 step.label 翻译出的 TextPrim(或 sloped 旋转的 group),与 path 主体同级返回 */
@@ -206,7 +207,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
206
207
  if (!hasTo(s)) return null;
207
208
  const ref = refPointOfTarget(s.to, nameStack, scopeChain);
208
209
  const toId = nodeRefId(s.to);
209
- if (!ref && toId !== void 0) warn("UNRESOLVED_NODE_REFERENCE", `Step.to references undefined node id '${toId}'; the entire path is skipped`, `children[${idx}].to`);
210
+ if (!ref && toId !== void 0) warn(CompileWarningCode.UnresolvedNodeReference, `Step.to references undefined node id '${toId}'; the entire path is skipped`, `children[${idx}].to`);
210
211
  return ref;
211
212
  });
212
213
  /**
@@ -244,7 +245,16 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
244
245
  */
245
246
  const readCursor = () => lastEnd;
246
247
  const roundPoint = (p) => [round(p[0]), round(p[1])];
247
- const emitMove = (p) => {
248
+ const endpointSource = {
249
+ firstAutoBoundary: false,
250
+ lastAutoBoundary: false
251
+ };
252
+ const noteEndpointSource = (sourceAutoBoundary) => {
253
+ if (commands.length === 0) endpointSource.firstAutoBoundary = sourceAutoBoundary;
254
+ endpointSource.lastAutoBoundary = sourceAutoBoundary;
255
+ };
256
+ const emitMove = (p, sourceAutoBoundary = false) => {
257
+ noteEndpointSource(sourceAutoBoundary);
248
258
  const rp = roundPoint(p);
249
259
  commands.push({
250
260
  kind: "move",
@@ -254,7 +264,8 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
254
264
  subPathStart = p;
255
265
  lastEnd = p;
256
266
  };
257
- const emitLine = (p) => {
267
+ const emitLine = (p, sourceAutoBoundary = false) => {
268
+ noteEndpointSource(sourceAutoBoundary);
258
269
  const rp = roundPoint(p);
259
270
  commands.push({
260
271
  kind: "line",
@@ -267,7 +278,8 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
267
278
  commands.push({ kind: "close" });
268
279
  lastEnd = subPathStart;
269
280
  };
270
- const emitQuad = (control, p) => {
281
+ const emitQuad = (control, p, sourceAutoBoundary = false) => {
282
+ noteEndpointSource(sourceAutoBoundary);
271
283
  const rc = roundPoint(control);
272
284
  const rp = roundPoint(p);
273
285
  commands.push({
@@ -279,7 +291,8 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
279
291
  points.push(p);
280
292
  lastEnd = p;
281
293
  };
282
- const emitCubic = (c1, c2, p) => {
294
+ const emitCubic = (c1, c2, p, sourceAutoBoundary = false) => {
295
+ noteEndpointSource(sourceAutoBoundary);
283
296
  const rc1 = roundPoint(c1);
284
297
  const rc2 = roundPoint(c2);
285
298
  const rp = roundPoint(p);
@@ -295,6 +308,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
295
308
  lastEnd = p;
296
309
  };
297
310
  const emitArc = (center, radius, startAngle, endAngle) => {
311
+ noteEndpointSource(false);
298
312
  const rc = roundPoint(center);
299
313
  commands.push({
300
314
  kind: "arc",
@@ -307,6 +321,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
307
321
  lastEnd = arcEndPoint(center, radius, endAngle);
308
322
  };
309
323
  const emitEllipseArc = (center, radiusX, radiusY, startAngle, endAngle) => {
324
+ noteEndpointSource(false);
310
325
  const rc = roundPoint(center);
311
326
  commands.push({
312
327
  kind: "ellipseArc",
@@ -321,9 +336,9 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
321
336
  lastEnd = endPt;
322
337
  };
323
338
  /** 段起点:与 lastEnd 相同则复用 cursor(省 move),否则发 move */
324
- const startSegment = (p) => {
339
+ const startSegment = (p, sourceAutoBoundary = false) => {
325
340
  if (samePoint(p, lastEnd)) return;
326
- emitMove(p);
341
+ emitMove(p, sourceAutoBoundary);
327
342
  };
328
343
  /** 部分圆/椭圆的闭合模式:'open' 直接返回;'sector' 连回中心;缺省 / 误给 'closed' 回退 'chord' */
329
344
  const resolvePartialClosed = (closed, idx) => {
@@ -339,7 +354,10 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
339
354
  if (prevStep.kind === "move") lastMoveTo = prevStep.to;
340
355
  }
341
356
  const step = steps[i];
342
- if (step.kind === "move") continue;
357
+ if (step.kind === "move") {
358
+ penOverride = null;
359
+ continue;
360
+ }
343
361
  if (step.kind === "generator") {
344
362
  const generators = warnHook.effectivePathGenerators ?? {};
345
363
  const def = Object.prototype.hasOwnProperty.call(generators, step.name) ? generators[step.name] : void 0;
@@ -407,20 +425,22 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
407
425
  continue;
408
426
  }
409
427
  if (step.kind === "cycle") {
428
+ const usedOverride = penOverride;
429
+ penOverride = null;
410
430
  const moveTo = lastMoveTo;
411
431
  const prev = findPrev();
412
- if (!moveTo || !prev) continue;
432
+ if (!moveTo || !prev && !usedOverride) continue;
413
433
  const moveAnchor = refPointOfTarget(moveTo, nameStack, scopeChain);
414
434
  if (!moveAnchor) return null;
415
- const fromClip = clipForTarget(prev.step.to, moveAnchor, nameStack, scopeChain);
416
- const toClip = clipForTarget(moveTo, prev.anchor, nameStack, scopeChain);
435
+ const fromClip = usedOverride ?? (prev ? clipForTarget(prev.step.to, moveAnchor, nameStack, scopeChain) : null);
436
+ const toClip = clipForTarget(moveTo, fromClip ?? prev?.anchor ?? moveAnchor, nameStack, scopeChain);
417
437
  if (!fromClip || !toClip) return null;
418
438
  if (samePoint(fromClip, lastEnd) && samePoint(toClip, subPathStart)) {
419
439
  emitClose();
420
440
  continue;
421
441
  }
422
- startSegment(fromClip);
423
- emitLine(toClip);
442
+ startSegment(fromClip, usedOverride === null && prev !== null && isAutoBoundaryTarget(prev.step.to));
443
+ emitLine(toClip, isAutoBoundaryTarget(moveTo));
424
444
  continue;
425
445
  }
426
446
  if (step.kind === "rectangle") {
@@ -429,8 +449,8 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
429
449
  if (!fromPt || !toPt) {
430
450
  const fromId = nodeRefId(step.from);
431
451
  const rectToId = nodeRefId(step.to);
432
- if (!fromPt && fromId !== void 0) warn("UNRESOLVED_NODE_REFERENCE", `Rectangle from references undefined node id '${fromId}'; the entire path is skipped`, `children[${i}].from`);
433
- if (!toPt && rectToId !== void 0) warn("UNRESOLVED_NODE_REFERENCE", `Rectangle to references undefined node id '${rectToId}'; the entire path is skipped`, `children[${i}].to`);
452
+ if (!fromPt && fromId !== void 0) warn(CompileWarningCode.UnresolvedNodeReference, `Rectangle from references undefined node id '${fromId}'; the entire path is skipped`, `children[${i}].from`);
453
+ if (!toPt && rectToId !== void 0) warn(CompileWarningCode.UnresolvedNodeReference, `Rectangle to references undefined node id '${rectToId}'; the entire path is skipped`, `children[${i}].to`);
434
454
  return null;
435
455
  }
436
456
  let rectStart = null;
@@ -449,14 +469,17 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
449
469
  continue;
450
470
  }
451
471
  const prev = findPrev();
452
- if (!prev) return null;
472
+ if (!prev) {
473
+ warn(CompileWarningCode.PathTooShort, `Step '${step.kind}' requires a previous position; the entire path is skipped`, `children[${i}]`);
474
+ return null;
475
+ }
453
476
  if (step.kind === "arc") {
454
477
  let center;
455
478
  if (step.center !== void 0) {
456
479
  const c = refPointOfTarget(step.center, nameStack, scopeChain);
457
480
  if (!c) {
458
481
  const centerId = nodeRefId(step.center);
459
- if (centerId !== void 0) warn("UNRESOLVED_NODE_REFERENCE", `Arc step center references undefined node id '${centerId}'; the entire path is skipped`, `children[${i}].center`);
482
+ if (centerId !== void 0) warn(CompileWarningCode.UnresolvedNodeReference, `Arc step center references undefined node id '${centerId}'; the entire path is skipped`, `children[${i}].center`);
460
483
  return null;
461
484
  }
462
485
  center = c;
@@ -480,7 +503,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
480
503
  penOverride = arcEndPoint(center, r, step.endAngle);
481
504
  continue;
482
505
  }
483
- warn("ARC_MISSING_RADIUS", "Arc step requires radius (circular) or both radiusX and radiusY (elliptical); the entire path is skipped", `children[${i}]`);
506
+ warn(CompileWarningCode.ArcMissingRadius, "Arc step requires radius (circular) or both radiusX and radiusY (elliptical); the entire path is skipped", `children[${i}]`);
484
507
  return null;
485
508
  }
486
509
  if (step.kind === "circlePath") {
@@ -504,7 +527,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
504
527
  } else penOverride = ellipseArcPoint(center, r, r, endA);
505
528
  continue;
506
529
  }
507
- if (step.startAngle !== void 0 || step.endAngle !== void 0) warn("PARTIAL_ARC_NEEDS_BOTH_ANGLES", "circlePath needs both startAngle and endAngle for a partial circle; treated as a full circle", `children[${i}]`);
530
+ if (step.startAngle !== void 0 || step.endAngle !== void 0) warn(CompileWarningCode.PartialArcNeedsBothAngles, "circlePath needs both startAngle and endAngle for a partial circle; treated as a full circle", `children[${i}]`);
508
531
  startSegment([center[0] + r, center[1]]);
509
532
  emitEllipseArc(center, r, r, 0, 360);
510
533
  points.push([center[0] + r, center[1]]);
@@ -537,7 +560,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
537
560
  } else penOverride = ellipseArcPoint(center, rx, ry, endA);
538
561
  continue;
539
562
  }
540
- if (step.startAngle !== void 0 || step.endAngle !== void 0) warn("PARTIAL_ARC_NEEDS_BOTH_ANGLES", "ellipsePath needs both startAngle and endAngle for a partial ellipse; treated as a full ellipse", `children[${i}]`);
563
+ if (step.startAngle !== void 0 || step.endAngle !== void 0) warn(CompileWarningCode.PartialArcNeedsBothAngles, "ellipsePath needs both startAngle and endAngle for a partial ellipse; treated as a full ellipse", `children[${i}]`);
541
564
  startSegment([center[0] + rx, center[1]]);
542
565
  emitEllipseArc(center, rx, ry, 0, 360);
543
566
  points.push([center[0] + rx, center[1]]);
@@ -556,8 +579,8 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
556
579
  const fromClip = usedOverride ?? clipForTarget(prev.step.to, currAnchor, nameStack, scopeChain);
557
580
  const toClip = clipForTarget(step.to, prev.anchor, nameStack, scopeChain);
558
581
  if (!fromClip || !toClip) return null;
559
- startSegment(fromClip);
560
- emitLine(toClip);
582
+ startSegment(fromClip, usedOverride === null && isAutoBoundaryTarget(prev.step.to));
583
+ emitLine(toClip, isAutoBoundaryTarget(step.to));
561
584
  collectLabel(step, (t) => lineSegmentSample(fromClip, toClip, t));
562
585
  continue;
563
586
  }
@@ -565,8 +588,8 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
565
588
  const fromClip = usedOverride ?? clipForTarget(prev.step.to, step.control, nameStack, scopeChain);
566
589
  const toClip = clipForTarget(step.to, step.control, nameStack, scopeChain);
567
590
  if (!fromClip || !toClip) return null;
568
- startSegment(fromClip);
569
- emitQuad(step.control, toClip);
591
+ startSegment(fromClip, usedOverride === null && isAutoBoundaryTarget(prev.step.to));
592
+ emitQuad(step.control, toClip, isAutoBoundaryTarget(step.to));
570
593
  collectLabel(step, (t) => quadSegmentSample(fromClip, step.control, toClip, t));
571
594
  continue;
572
595
  }
@@ -574,8 +597,8 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
574
597
  const fromClip = usedOverride ?? clipForTarget(prev.step.to, step.control1, nameStack, scopeChain);
575
598
  const toClip = clipForTarget(step.to, step.control2, nameStack, scopeChain);
576
599
  if (!fromClip || !toClip) return null;
577
- startSegment(fromClip);
578
- emitCubic(step.control1, step.control2, toClip);
600
+ startSegment(fromClip, usedOverride === null && isAutoBoundaryTarget(prev.step.to));
601
+ emitCubic(step.control1, step.control2, toClip, isAutoBoundaryTarget(step.to));
579
602
  collectLabel(step, (t) => cubicSegmentSample(fromClip, step.control1, step.control2, toClip, t));
580
603
  continue;
581
604
  }
@@ -585,8 +608,8 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
585
608
  const fromClip = usedOverride ?? clipForTarget(prev.step.to, c1, nameStack, scopeChain);
586
609
  const toClip = clipForTarget(step.to, c2, nameStack, scopeChain);
587
610
  if (!fromClip || !toClip) return null;
588
- startSegment(fromClip);
589
- emitCubic(c1, c2, toClip);
611
+ startSegment(fromClip, usedOverride === null && isAutoBoundaryTarget(prev.step.to));
612
+ emitCubic(c1, c2, toClip, isAutoBoundaryTarget(step.to));
590
613
  collectLabel(step, (t) => cubicSegmentSample(fromClip, c1, c2, toClip, t));
591
614
  continue;
592
615
  }
@@ -594,9 +617,9 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
594
617
  const fromClip = usedOverride ?? clipForTarget(prev.step.to, corner, nameStack, scopeChain);
595
618
  const toClip = clipForTarget(step.to, corner, nameStack, scopeChain);
596
619
  if (!fromClip || !toClip) return null;
597
- startSegment(fromClip);
620
+ startSegment(fromClip, usedOverride === null && isAutoBoundaryTarget(prev.step.to));
598
621
  emitLine(corner);
599
- emitLine(toClip);
622
+ emitLine(toClip, isAutoBoundaryTarget(step.to));
600
623
  collectLabel(step, (t) => foldSegmentSample(fromClip, corner, toClip, t));
601
624
  }
602
625
  const strokeWidth = path.strokeWidth ?? (path.thickness ? THICKNESS_TO_WIDTH[path.thickness] : 1);
@@ -627,7 +650,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
627
650
  points.push(sample.point);
628
651
  }
629
652
  }
630
- applyArrowShrinks(commands, arrows.shrinkStart, arrows.shrinkEnd, strokeWidth, round);
653
+ applyArrowShrinks(commands, arrows.shrinkStart + (endpointSource.firstAutoBoundary ? arrows.boundaryOuterInsetStart : 0), arrows.shrinkEnd + (endpointSource.lastAutoBoundary ? arrows.boundaryOuterInsetEnd : 0), strokeWidth, round);
631
654
  const endpointSpecs = {};
632
655
  if (arrows.arrowStart) endpointSpecs.arrowStart = arrows.arrowStart;
633
656
  if (arrows.arrowEnd) endpointSpecs.arrowEnd = arrows.arrowEnd;
@@ -648,6 +671,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
648
671
  };
649
672
  if (path.id !== void 0) group.id = path.id;
650
673
  if (path.meta !== void 0) group.meta = path.meta;
674
+ if (path.animations !== void 0) group.animations = path.animations;
651
675
  const transformedPoints = points.map((p) => applyTransformChain(p, transforms));
652
676
  if (!transformedPoints.every(isFinitePoint)) throw new Error("Path rotate / scale produced a non-finite coordinate (scale too large); use a smaller scale.");
653
677
  return {
@@ -658,6 +682,7 @@ var emitPathPrimitive = (path, nameStack, round, measureText = fallbackMeasurer,
658
682
  }
659
683
  if (path.id !== void 0) primitive.id = path.id;
660
684
  if (path.meta !== void 0) primitive.meta = path.meta;
685
+ if (path.animations !== void 0) primitive.animations = path.animations;
661
686
  return {
662
687
  primitives: bodyPrims,
663
688
  points
@@ -8,7 +8,7 @@ import { NameStack } from '../name-stack';
8
8
  * 先反向投影 prevEnd 到 scope 局部 + 加 (dx, dy) 得局部 tuple,写回 step.to。下游
9
9
  * `refPointOfTarget` / `clipForTarget` 把 tuple 视作 scope 局部字面量,统一 `applyTransformChain` 投回全局——
10
10
  * relative 分支只负责"折算到局部",不能在此处提前投影到全局,否则与下游 chain apply 形成 double-apply。
11
- * `scopeChain=[]` 时 inverse 恒等,等价 v0.1 行为。
11
+ * `scopeChain=[]` 时 inverse 恒等,保持全局坐标语义。
12
12
  */
13
13
  export declare const normalizeRelativeTargets: (steps: ReadonlyArray<IRStep>, nameStack: NameStack, scopeChain?: ReadonlyArray<Transform>) => Array<IRStep>;
14
14
  //# sourceMappingURL=relative.d.ts.map
@@ -9,7 +9,7 @@ import { refPointOfTarget } from "./anchor.js";
9
9
  * 先反向投影 prevEnd 到 scope 局部 + 加 (dx, dy) 得局部 tuple,写回 step.to。下游
10
10
  * `refPointOfTarget` / `clipForTarget` 把 tuple 视作 scope 局部字面量,统一 `applyTransformChain` 投回全局——
11
11
  * relative 分支只负责"折算到局部",不能在此处提前投影到全局,否则与下游 chain apply 形成 double-apply。
12
- * `scopeChain=[]` 时 inverse 恒等,等价 v0.1 行为。
12
+ * `scopeChain=[]` 时 inverse 恒等,保持全局坐标语义。
13
13
  */
14
14
  var normalizeRelativeTargets = (steps, nameStack, scopeChain = []) => {
15
15
  let prevEnd = null;
@@ -1,7 +1,7 @@
1
1
  import { IRArrowDetail, IRArrowMark } from '../../ir';
2
2
  import { ArrowDefinition } from '../../arrows';
3
3
  import { ArrowEndSpec, PathCommand } from '../../primitive';
4
- /** 有效 arrow 表:内置 7 + 注入(同名注入覆盖内置) */
4
+ /** 有效 arrow 表:内置 8 + 注入(同名注入覆盖内置) */
5
5
  export type EffectiveArrows = Record<string, ArrowDefinition>;
6
6
  /**
7
7
  * IR path-level `arrow` + `arrowDetail` → PathPrim 起末端点已解析 marker 描述
@@ -14,6 +14,8 @@ export declare const endpointArrows: (arrow: "none" | "->" | "<-" | "<->" | unde
14
14
  arrowEnd?: ArrowEndSpec;
15
15
  shrinkStart: number;
16
16
  shrinkEnd: number;
17
+ boundaryOuterInsetStart: number;
18
+ boundaryOuterInsetEnd: number;
17
19
  };
18
20
  /**
19
21
  * 解析一个中段标记 `IRArrowMark` 为已物化的 marker 描述(`ArrowEndSpec`)
@@ -1 +1 @@
1
- {"version":3,"file":"shrink.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/shrink.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,aAAa,EAElB,KAAK,WAAW,EAEjB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAA+B,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI9F,qCAAqC;AACrC,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAwM9D;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,OAAO,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,SAAS,EAC/C,QAAQ,aAAa,GAAG,SAAS,EACjC,WAAW,eAAe,EAC1B,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAC3B;IACD,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CAyBnB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,WAAW,EACjB,WAAW,eAAe,EAC1B,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAC3B,YAaF,CAAC;AAiDF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,KAAK,CAAC,WAAW,CAAC,EAC5B,aAAa,MAAM,EACnB,WAAW,MAAM,EACjB,aAAa,MAAM,EACnB,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAC3B,IA4CF,CAAC"}
1
+ {"version":3,"file":"shrink.d.ts","sourceRoot":"","sources":["../../../../src/compile/path/shrink.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,aAAa,EAElB,KAAK,WAAW,EAEjB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,cAAc,CAAC;AAEtE,OAAO,KAAK,EAAE,YAAY,EAA+B,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI9F,qCAAqC;AACrC,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAsN9D;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,OAAO,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,SAAS,EAC/C,QAAQ,aAAa,GAAG,SAAS,EACjC,WAAW,eAAe,EAC1B,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAC3B;IACD,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;CAyC/B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,WAAW,EACjB,WAAW,eAAe,EAC1B,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAC3B,YAaF,CAAC;AAuCF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,KAAK,CAAC,WAAW,CAAC,EAC5B,aAAa,MAAM,EACnB,WAAW,MAAM,EACjB,aAAa,MAAM,EACnB,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAC3B,IA4CF,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { DEFAULT_ARROW_SHAPE } from "../../ir/path/arrow.js";
2
+ import { arcEndPoint, ellipseArcPoint } from "../../geometry/arc.js";
2
3
  import { validateMarkerPrimitives } from "../marker-prim.js";
3
4
  import { shiftToward } from "./anchor.js";
4
5
  //#region src/compile/path/shrink.ts
@@ -45,6 +46,7 @@ var assertFiniteGeometry = (shape, def) => {
45
46
  if (!Number.isFinite(def.lineContactX)) throw new Error(`Arrow '${shape}' has a non-finite lineContactX (${String(def.lineContactX)}); it must be a finite number.`);
46
47
  if (def.baseSize !== void 0 && (!Number.isFinite(def.baseSize) || def.baseSize <= 0)) throw new Error(`Arrow '${shape}' has an invalid baseSize (${String(def.baseSize)}); it must be a finite number greater than 0.`);
47
48
  if (def.tipX !== void 0 && !Number.isFinite(def.tipX)) throw new Error(`Arrow '${shape}' has a non-finite tipX (${String(def.tipX)}); it must be a finite number.`);
49
+ if (def.outerInset !== void 0 && !Number.isFinite(def.outerInset)) throw new Error(`Arrow '${shape}' has a non-finite outerInset (${String(def.outerInset)}); it must be a finite number.`);
48
50
  };
49
51
  /**
50
52
  * 调 def.emit 收集 marker 并跑窄子集 + JSON-safe 校验
@@ -73,7 +75,9 @@ var resolveGeometry = (visual, effective) => {
73
75
  const scale = visual.scale ?? 1;
74
76
  const resolvedLength = (visual.length ?? def.defaultLength ?? 6) * scale;
75
77
  const resolvedWidth = (visual.width ?? def.defaultWidth ?? 6) * scale;
78
+ const boundaryOuterInset = (def.outerInset ?? (def.hollow ? lineWidth / 2 : 0)) * resolvedLength / baseSize;
76
79
  if (!Number.isFinite(resolvedLength) || !Number.isFinite(resolvedWidth)) throw new Error(`Arrow '${visual.shape}' resolved length/width is non-finite (length × scale overflowed); use smaller length / scale values.`);
80
+ if (!Number.isFinite(boundaryOuterInset)) throw new Error(`Arrow '${visual.shape}' resolved outerInset is non-finite; use smaller outerInset / length / scale values.`);
77
81
  return {
78
82
  def,
79
83
  baseSize,
@@ -81,7 +85,8 @@ var resolveGeometry = (visual, effective) => {
81
85
  contactX,
82
86
  lineWidth,
83
87
  resolvedLength,
84
- resolvedWidth
88
+ resolvedWidth,
89
+ boundaryOuterInset
85
90
  };
86
91
  };
87
92
  /**
@@ -131,26 +136,32 @@ var materializeArrowEndSpec = (visual, geometry, round) => {
131
136
  var endpointArrows = (arrow, detail, effective, round) => {
132
137
  if (!arrow || arrow === "none") return {
133
138
  shrinkStart: 0,
134
- shrinkEnd: 0
139
+ shrinkEnd: 0,
140
+ boundaryOuterInsetStart: 0,
141
+ boundaryOuterInsetEnd: 0
135
142
  };
136
143
  const top = detail ?? {};
137
144
  const wantStart = arrow === "<-" || arrow === "<->";
138
145
  const wantEnd = arrow === "->" || arrow === "<->";
139
146
  const result = {
140
147
  shrinkStart: 0,
141
- shrinkEnd: 0
148
+ shrinkEnd: 0,
149
+ boundaryOuterInsetStart: 0,
150
+ boundaryOuterInsetEnd: 0
142
151
  };
143
152
  if (wantStart) {
144
153
  const visual = resolveArrowVisual(top, top.start, effective);
145
154
  const geometry = resolveGeometry(visual, effective);
146
155
  result.arrowStart = materializeArrowEndSpec(visual, geometry, round);
147
156
  result.shrinkStart = computeShrink(geometry);
157
+ result.boundaryOuterInsetStart = geometry.boundaryOuterInset;
148
158
  }
149
159
  if (wantEnd) {
150
160
  const visual = resolveArrowVisual(top, top.end, effective);
151
161
  const geometry = resolveGeometry(visual, effective);
152
162
  result.arrowEnd = materializeArrowEndSpec(visual, geometry, round);
153
163
  result.shrinkEnd = computeShrink(geometry);
164
+ result.boundaryOuterInsetEnd = geometry.boundaryOuterInset;
154
165
  }
155
166
  return result;
156
167
  };
@@ -180,14 +191,8 @@ var endpointOf = (cmd) => {
180
191
  case "line":
181
192
  case "quad":
182
193
  case "cubic": return [cmd.to[0], cmd.to[1]];
183
- case "arc": {
184
- const rad = cmd.endAngle * Math.PI / 180;
185
- return [cmd.center[0] + Math.cos(rad) * cmd.radius, cmd.center[1] + Math.sin(rad) * cmd.radius];
186
- }
187
- case "ellipseArc": {
188
- const rad = cmd.endAngle * Math.PI / 180;
189
- return [cmd.center[0] + Math.cos(rad) * cmd.radiusX, cmd.center[1] + Math.sin(rad) * cmd.radiusY];
190
- }
194
+ case "arc": return arcEndPoint(cmd.center, cmd.radius, cmd.endAngle);
195
+ case "ellipseArc": return ellipseArcPoint(cmd.center, cmd.radiusX, cmd.radiusY, cmd.endAngle);
191
196
  case "close": return null;
192
197
  }
193
198
  };
@@ -12,14 +12,14 @@ export type ResolveBetweenGlobal = (between: IRBetweenPosition, nameStack: NameS
12
12
  * @description
13
13
  * - **返回值语义**:当 `scopeChain` 非空时,返回**当前 scope 局部坐标系**下的笛卡尔位置;
14
14
  * 调用方负责走 `applyTransformChain(local, scopeChain)` 投回全局。当 `scopeChain` 为空时
15
- * 等价于 v0.1 行为(全局坐标)。
15
+ * 直接按全局坐标返回。
16
16
  * - **referent 处理**:node id lookup 拿到的 layout.rect 已是全局坐标;本函数内部用
17
17
  * `inverseTransformChain` 把全局 referent 反向投影到当前 scope 局部坐标系作为"在当前
18
18
  * scope 局部的固定点"基准。relative 部分(polar 的 angle/radius、at 的 direction/distance、
19
19
  * offset 的 dx/dy)在当前 scope 局部度量后加到 referent 局部坐标上。
20
20
  * - **嵌套**:PolarPosition.origin / OffsetPosition.of 是嵌套 polar 时,递归调用传同样
21
21
  * scopeChain——整条嵌套链都在当前 scope 局部度量。
22
- * - **笛卡尔字面量**:`Position` 形态直接返回(v0.1 行为延续:scope 内笛卡尔字面量在
22
+ * - **笛卡尔字面量**:`Position` 形态直接返回(scope 内笛卡尔字面量在
23
23
  * 当前 scope 局部度量;调用方走 applyTransformChain 投全局)。
24
24
  * - 极坐标 origin / 偏移定位 of 均可递归引用节点 id 或字面坐标;relative `AtPosition` of
25
25
  * 必须引用已定义节点/coordinate;解析失败返回 null。
@@ -1 +1 @@
1
- {"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../../src/compile/position.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACvH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,KACjC,UAAU,GAAG,IAAI,CAAC;AAoBvB;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,eAAe,GAC1B,KAAK,UAAU,GAAG,aAAa,GAAG,YAAY,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,EAC9F,WAAW,SAAS,EACpB,eAAc,MAA8B,EAC5C,aAAY,aAAa,CAAC,SAAS,CAAM,EACzC,uBAAuB,oBAAoB,KAC1C,UAAU,GAAG,IAiDf,CAAC"}
1
+ {"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../../src/compile/position.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE1G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,KACjC,UAAU,GAAG,IAAI,CAAC;AAKvB;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,eAAe,GAC1B,KAAK,UAAU,GAAG,aAAa,GAAG,YAAY,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,EAC9F,WAAW,SAAS,EACpB,eAAc,MAA8B,EAC5C,aAAY,aAAa,CAAC,SAAS,CAAM,EACzC,uBAAuB,oBAAoB,KAC1C,UAAU,GAAG,IA6Cf,CAAC"}
@@ -1,34 +1,22 @@
1
+ import { arcEndPoint } from "../geometry/arc.js";
2
+ import { DirectionVectorByAtDirection } from "./direction.js";
1
3
  import { inverseTransformChain } from "./scope.js";
2
4
  //#region src/compile/position.ts
3
5
  /** 默认相对定位距离(CompileOptions.nodeDistance 未配时使用) */
4
6
  var DEFAULT_NODE_DISTANCE = 1;
5
7
  /**
6
- * 8 方向 → 屏幕坐标系(y 向下)单位向量
7
- * @description above=视觉上方 (y 减小);4 对角分量 1/√2 保证斜向与水平/垂直距离等长(对角点落在半径=distance 圆周上)
8
- */
9
- var DIRECTION_VECTOR = {
10
- above: [0, -1],
11
- below: [0, 1],
12
- left: [-1, 0],
13
- right: [1, 0],
14
- "above-left": [-Math.SQRT1_2, -Math.SQRT1_2],
15
- "above-right": [Math.SQRT1_2, -Math.SQRT1_2],
16
- "below-left": [-Math.SQRT1_2, Math.SQRT1_2],
17
- "below-right": [Math.SQRT1_2, Math.SQRT1_2]
18
- };
19
- /**
20
8
  * IR 各种位置形态(笛卡尔/极坐标/相对定位/偏移定位/节点 id)→ 笛卡尔位置
21
9
  * @description
22
10
  * - **返回值语义**:当 `scopeChain` 非空时,返回**当前 scope 局部坐标系**下的笛卡尔位置;
23
11
  * 调用方负责走 `applyTransformChain(local, scopeChain)` 投回全局。当 `scopeChain` 为空时
24
- * 等价于 v0.1 行为(全局坐标)。
12
+ * 直接按全局坐标返回。
25
13
  * - **referent 处理**:node id lookup 拿到的 layout.rect 已是全局坐标;本函数内部用
26
14
  * `inverseTransformChain` 把全局 referent 反向投影到当前 scope 局部坐标系作为"在当前
27
15
  * scope 局部的固定点"基准。relative 部分(polar 的 angle/radius、at 的 direction/distance、
28
16
  * offset 的 dx/dy)在当前 scope 局部度量后加到 referent 局部坐标上。
29
17
  * - **嵌套**:PolarPosition.origin / OffsetPosition.of 是嵌套 polar 时,递归调用传同样
30
18
  * scopeChain——整条嵌套链都在当前 scope 局部度量。
31
- * - **笛卡尔字面量**:`Position` 形态直接返回(v0.1 行为延续:scope 内笛卡尔字面量在
19
+ * - **笛卡尔字面量**:`Position` 形态直接返回(scope 内笛卡尔字面量在
32
20
  * 当前 scope 局部度量;调用方走 applyTransformChain 投全局)。
33
21
  * - 极坐标 origin / 偏移定位 of 均可递归引用节点 id 或字面坐标;relative `AtPosition` of
34
22
  * 必须引用已定义节点/coordinate;解析失败返回 null。
@@ -49,7 +37,7 @@ var resolvePosition = (pos, nameStack, nodeDistance = DEFAULT_NODE_DISTANCE, sco
49
37
  const refGlobal = [ref.rect.x, ref.rect.y];
50
38
  const refLocal = scopeChain.length === 0 ? refGlobal : inverseTransformChain(refGlobal, scopeChain);
51
39
  const distance = pos.distance ?? nodeDistance;
52
- const [dx, dy] = DIRECTION_VECTOR[pos.direction];
40
+ const [dx, dy] = DirectionVectorByAtDirection[pos.direction];
53
41
  return [refLocal[0] + dx * distance, refLocal[1] + dy * distance];
54
42
  }
55
43
  if ("offset" in pos) {
@@ -70,8 +58,7 @@ var resolvePosition = (pos, nameStack, nodeDistance = DEFAULT_NODE_DISTANCE, sco
70
58
  if (!resolved) return null;
71
59
  origin = resolved;
72
60
  }
73
- const rad = pos.angle * Math.PI / 180;
74
- return [origin[0] + Math.cos(rad) * pos.radius, origin[1] + Math.sin(rad) * pos.radius];
61
+ return arcEndPoint(origin, pos.radius, pos.angle);
75
62
  };
76
63
  //#endregion
77
64
  export { resolvePosition };
@@ -6,5 +6,5 @@ export declare const DEFAULT_PRECISION = 2;
6
6
  * 而 `JSON.stringify(-0) === '0'` 会让 Scene round-trip 在 `Object.is` 层失真(`-0 !== 0` 于 Object.is)。
7
7
  * 归一让序列化往返稳定;数值上 `-0 === 0`,渲染 / 计算无影响。
8
8
  */
9
- export declare const makeRound: (precision: number) => (n: number) => number;
9
+ export declare const createRound: (precision: number) => (n: number) => number;
10
10
  //# sourceMappingURL=precision.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"precision.d.ts","sourceRoot":"","sources":["../../../src/compile/precision.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAI,WAAW,MAAM,MAEjC,GAAG,MAAM,WAIlB,CAAC"}
1
+ {"version":3,"file":"precision.d.ts","sourceRoot":"","sources":["../../../src/compile/precision.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM,MAEnC,GAAG,MAAM,WAIlB,CAAC"}
@@ -5,7 +5,7 @@
5
5
  * 而 `JSON.stringify(-0) === '0'` 会让 Scene round-trip 在 `Object.is` 层失真(`-0 !== 0` 于 Object.is)。
6
6
  * 归一让序列化往返稳定;数值上 `-0 === 0`,渲染 / 计算无影响。
7
7
  */
8
- var makeRound = (precision) => {
8
+ var createRound = (precision) => {
9
9
  const factor = 10 ** precision;
10
10
  return (n) => {
11
11
  const r = Math.round(n * factor) / factor;
@@ -13,4 +13,4 @@ var makeRound = (precision) => {
13
13
  };
14
14
  };
15
15
  //#endregion
16
- export { makeRound };
16
+ export { createRound };
@@ -1,14 +1,16 @@
1
1
  import { IRPosition, IRTransform } from '../ir';
2
2
  import { Transform } from '../primitive';
3
+ import { ShapeDefinition } from '../shapes';
3
4
  import { NameStack } from './name-stack';
4
5
  import { NodeLayout } from './node';
6
+ import { ResolveBetweenGlobal } from './position';
5
7
  /**
6
- * 把 IR 6 变体 transforms 展平为 Scene 3 变体(Cartesian translate / rotate / scale)
7
- * @description 4 个 translate 变体(translate / polar-translate / at-translate / offset-translate)
8
+ * 把 IR 7 变体 transforms 展平为 Scene 3 变体(Cartesian translate / rotate / scale)
9
+ * @description 5 个 translate 变体(translate / polar-translate / at-translate / offset-translate / between-translate
8
10
  * 各自构造对应 Position 字面量并调用 `resolvePosition` 拿到 Cartesian (x, y),再写成 Cartesian translate;
9
11
  * rotate / scale 直接透传。referent 未解析时返回 null(上游负责发 warn / throw)
10
12
  */
11
- export declare const lowerScopeTransforms: (transforms: ReadonlyArray<IRTransform>, nameStack: NameStack, nodeDistance?: number) => Array<Transform> | null;
13
+ export declare const lowerScopeTransforms: (transforms: ReadonlyArray<IRTransform>, nameStack: NameStack, nodeDistance?: number, resolveBetweenGlobal?: ResolveBetweenGlobal) => Array<Transform> | null;
12
14
  /**
13
15
  * 把局部坐标点 (x, y) 按 Cartesian-only transform 链 apply 到全局坐标
14
16
  * @description 数组语义与 SVG `transform="t0 t1 t2"` / TikZ scope option 顺序一致:
@@ -33,7 +35,7 @@ export declare const inverseTransformChain: (global: IRPosition, chain: Readonly
33
35
  * scale 乘进 rect.width / height / margin——这样 path 端点的 boundary clip 取的是与 SVG `<g>`
34
36
  * 实际渲染一致的视觉尺寸 / 朝向,跨 / 入 / 出 rotate / scale scope 的 path 都贴节点视觉边界。
35
37
  * 非均匀 scale 与 rotate 在 chain 中混合时,按"累加 rotate + 分量相乘 scale"近似(uniform scale 精确,
36
- * anisotropic + rotate 的剪切耦合不展开——alpha 阶段限制)。
38
+ * anisotropic + rotate 的剪切耦合不展开——当前投影模型限制)。
37
39
  */
38
40
  export declare const projectLayoutToGlobal: (layout: NodeLayout, chain: ReadonlyArray<Transform>) => NodeLayout;
39
41
  /** scope bbox 计算结果:bbox 几何中心 + 尺寸(width/height ≥ 0;空 scope 退化为 0×0 占位时仍合法) */
@@ -62,5 +64,5 @@ export declare const computeScopeBoundingBox: (layouts: ReadonlyArray<NodeLayout
62
64
  * synthetic layout 完全复用 rectangle 路径:`scope.id.<keyword>` / `scope.id.<deg>` / `scope.id` 作为 referent
63
65
  * 走与普通 rectangle Node 完全一致的 anchorOf / boundaryPointOf / 中心点取值
64
66
  */
65
- export declare const registerScopeAsLayout: (id: string, bbox: ScopeBoundingBox | null, fallbackOrigin: IRPosition) => NodeLayout;
67
+ export declare const registerScopeAsLayout: (id: string, bbox: ScopeBoundingBox | null, fallbackOrigin: IRPosition, shapes?: Record<string, ShapeDefinition>) => NodeLayout;
66
68
  //# sourceMappingURL=scope.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/compile/scope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,UAAU,EACV,WAAW,EAEZ,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGzC;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,YAAY,aAAa,CAAC,WAAW,CAAC,EACtC,WAAW,SAAS,EACpB,eAAe,MAAM,KACpB,KAAK,CAAC,SAAS,CAAC,GAAG,IAiDrB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,UAAU,EACjB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UAyBF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,UAAU,EAClB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UAgCF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,UAAU,EAClB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UAuBF,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wBAAwB;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,wBAAwB;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAClC,SAAS,aAAa,CAAC,UAAU,CAAC,KACjC,gBAAgB,GAAG,IA2BrB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,IAAI,MAAM,EACV,MAAM,gBAAgB,GAAG,IAAI,EAC7B,gBAAgB,UAAU,KACzB,UAiBF,CAAC"}
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/compile/scope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,UAAU,EACV,WAAW,EAEZ,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,KAAK,UAAU,EAAe,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,KAAK,oBAAoB,EAAmB,MAAM,YAAY,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,YAAY,aAAa,CAAC,WAAW,CAAC,EACtC,WAAW,SAAS,EACpB,eAAe,MAAM,EACrB,uBAAuB,oBAAoB,KAC1C,KAAK,CAAC,SAAS,CAAC,GAAG,IAwDrB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,UAAU,EACjB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UAyBF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,UAAU,EAClB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UAgCF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,UAAU,EAClB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UA4BF,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wBAAwB;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,wBAAwB;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAClC,SAAS,aAAa,CAAC,UAAU,CAAC,KACjC,gBAAgB,GAAG,IA6BrB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,IAAI,MAAM,EACV,MAAM,gBAAgB,GAAG,IAAI,EAC7B,gBAAgB,UAAU,EAC1B,SAAQ,MAAM,CAAC,MAAM,EAAE,eAAe,CAAkB,KACvD,UAiBF,CAAC"}