@retikz/core 0.3.0-alpha.5 → 0.3.0-beta.2

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 (439) 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 +15 -2
  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 +46 -43
  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 +30 -0
  19. package/dist/es/compile/constant.d.ts.map +1 -0
  20. package/dist/es/compile/constant.js +21 -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 +19 -8
  30. package/dist/es/compile/node.d.ts.map +1 -1
  31. package/dist/es/compile/node.js +56 -70
  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 +97 -44
  39. package/dist/es/compile/path/label.d.ts.map +1 -1
  40. package/dist/es/compile/path/label.js +8 -4
  41. package/dist/es/compile/path/relative.d.ts +1 -1
  42. package/dist/es/compile/path/relative.js +1 -1
  43. package/dist/es/compile/path/shrink.d.ts +3 -1
  44. package/dist/es/compile/path/shrink.d.ts.map +1 -1
  45. package/dist/es/compile/path/shrink.js +16 -11
  46. package/dist/es/compile/position.d.ts +2 -2
  47. package/dist/es/compile/position.d.ts.map +1 -1
  48. package/dist/es/compile/position.js +6 -19
  49. package/dist/es/compile/precision.d.ts +1 -1
  50. package/dist/es/compile/precision.d.ts.map +1 -1
  51. package/dist/es/compile/precision.js +2 -2
  52. package/dist/es/compile/scope.d.ts +7 -5
  53. package/dist/es/compile/scope.d.ts.map +1 -1
  54. package/dist/es/compile/scope.js +44 -16
  55. package/dist/es/compile/style.d.ts +2 -2
  56. package/dist/es/compile/style.d.ts.map +1 -1
  57. package/dist/es/compile/style.js +2 -2
  58. package/dist/es/compile/text-metrics.d.ts +1 -1
  59. package/dist/es/compile/text-metrics.js +2 -2
  60. package/dist/es/composites/define.d.ts +8 -0
  61. package/dist/es/composites/define.d.ts.map +1 -0
  62. package/dist/es/composites/{types.js → define.js} +2 -2
  63. package/dist/es/composites/index.d.ts +1 -1
  64. package/dist/es/composites/index.d.ts.map +1 -1
  65. package/dist/es/composites/types.d.ts +0 -6
  66. package/dist/es/composites/types.d.ts.map +1 -1
  67. package/dist/es/geometry/anchor.d.ts +33 -0
  68. package/dist/es/geometry/anchor.d.ts.map +1 -0
  69. package/dist/es/geometry/anchor.js +45 -0
  70. package/dist/es/geometry/bend.d.ts +1 -1
  71. package/dist/es/geometry/bend.js +3 -3
  72. package/dist/es/geometry/circle.d.ts +4 -4
  73. package/dist/es/geometry/circle.d.ts.map +1 -1
  74. package/dist/es/geometry/circle.js +3 -3
  75. package/dist/es/geometry/{roundedContour.d.ts → contour.d.ts} +9 -5
  76. package/dist/es/geometry/contour.d.ts.map +1 -0
  77. package/dist/es/geometry/{roundedContour.js → contour.js} +27 -37
  78. package/dist/es/geometry/diamond.d.ts +10 -4
  79. package/dist/es/geometry/diamond.d.ts.map +1 -1
  80. package/dist/es/geometry/diamond.js +11 -3
  81. package/dist/{lib/geometry/_edge.d.ts → es/geometry/edge.d.ts} +1 -1
  82. package/dist/es/geometry/edge.d.ts.map +1 -0
  83. package/dist/es/geometry/{_edge.js → edge.js} +1 -1
  84. package/dist/es/geometry/ellipse.d.ts +3 -3
  85. package/dist/es/geometry/ellipse.d.ts.map +1 -1
  86. package/dist/es/geometry/ellipse.js +4 -2
  87. package/dist/es/geometry/index.d.ts +6 -1
  88. package/dist/es/geometry/index.d.ts.map +1 -1
  89. package/dist/es/geometry/point.d.ts +6 -0
  90. package/dist/es/geometry/point.d.ts.map +1 -1
  91. package/dist/es/geometry/point.js +17 -0
  92. package/dist/es/geometry/rect.d.ts +4 -17
  93. package/dist/es/geometry/rect.d.ts.map +1 -1
  94. package/dist/es/geometry/rect.js +4 -16
  95. package/dist/es/geometry/segment.d.ts +7 -0
  96. package/dist/es/geometry/segment.d.ts.map +1 -1
  97. package/dist/es/geometry/segment.js +48 -47
  98. package/dist/{lib/geometry/_transform.d.ts → es/geometry/transform.d.ts} +1 -1
  99. package/dist/es/geometry/transform.d.ts.map +1 -0
  100. package/dist/es/geometry/{_transform.js → transform.js} +1 -1
  101. package/dist/es/index.d.ts +13 -13
  102. package/dist/es/index.d.ts.map +1 -1
  103. package/dist/es/index.js +20 -16
  104. package/dist/es/ir/animation.d.ts +26 -125
  105. package/dist/es/ir/animation.d.ts.map +1 -1
  106. package/dist/es/ir/animation.js +6 -6
  107. package/dist/es/ir/boundary.d.ts +4 -10
  108. package/dist/es/ir/boundary.d.ts.map +1 -1
  109. package/dist/es/ir/clip.d.ts +6 -46
  110. package/dist/es/ir/clip.d.ts.map +1 -1
  111. package/dist/es/ir/composite.d.ts +2 -14
  112. package/dist/es/ir/composite.d.ts.map +1 -1
  113. package/dist/es/ir/coordinate.d.ts +14 -50
  114. package/dist/es/ir/coordinate.d.ts.map +1 -1
  115. package/dist/es/ir/coordinate.js +1 -1
  116. package/dist/es/ir/font.d.ts +10 -13
  117. package/dist/es/ir/font.d.ts.map +1 -1
  118. package/dist/es/ir/json.d.ts +1 -1
  119. package/dist/es/ir/json.d.ts.map +1 -1
  120. package/dist/es/ir/json.js +1 -1
  121. package/dist/es/ir/node.d.ts +175 -821
  122. package/dist/es/ir/node.d.ts.map +1 -1
  123. package/dist/es/ir/node.js +23 -23
  124. package/dist/es/ir/paint.d.ts +23 -100
  125. package/dist/es/ir/paint.d.ts.map +1 -1
  126. package/dist/es/ir/paint.js +10 -10
  127. package/dist/es/ir/path/arrow.d.ts +19 -131
  128. package/dist/es/ir/path/arrow.d.ts.map +1 -1
  129. package/dist/es/ir/path/arrow.js +18 -16
  130. package/dist/es/ir/path/path.d.ts +519 -3065
  131. package/dist/es/ir/path/path.d.ts.map +1 -1
  132. package/dist/es/ir/path/path.js +3 -3
  133. package/dist/es/ir/path/step.d.ts +929 -3474
  134. package/dist/es/ir/path/step.d.ts.map +1 -1
  135. package/dist/es/ir/path/step.js +74 -23
  136. package/dist/es/ir/path/target.d.ts +40 -121
  137. package/dist/es/ir/path/target.d.ts.map +1 -1
  138. package/dist/es/ir/path/target.js +3 -3
  139. package/dist/es/ir/position/at-position.d.ts +20 -28
  140. package/dist/es/ir/position/at-position.d.ts.map +1 -1
  141. package/dist/es/ir/position/at-position.js +11 -11
  142. package/dist/es/ir/position/offset-position.d.ts +2 -8
  143. package/dist/es/ir/position/offset-position.d.ts.map +1 -1
  144. package/dist/es/ir/scene.d.ts +17 -181
  145. package/dist/es/ir/scene.d.ts.map +1 -1
  146. package/dist/es/ir/scope.d.ts +315 -7291
  147. package/dist/es/ir/scope.d.ts.map +1 -1
  148. package/dist/es/ir/scope.js +10 -7
  149. package/dist/es/ir/shape.d.ts +2 -8
  150. package/dist/es/ir/shape.d.ts.map +1 -1
  151. package/dist/es/ir/text.d.ts +24 -70
  152. package/dist/es/ir/text.d.ts.map +1 -1
  153. package/dist/es/ir/transform.d.ts +47 -144
  154. package/dist/es/ir/transform.d.ts.map +1 -1
  155. package/dist/es/ir/transform.js +12 -5
  156. package/dist/es/parsers/index.d.ts +3 -3
  157. package/dist/es/parsers/index.d.ts.map +1 -1
  158. package/dist/es/parsers/{parseNodeTarget.d.ts → node-target.d.ts} +1 -1
  159. package/dist/es/parsers/node-target.d.ts.map +1 -0
  160. package/dist/es/parsers/{parseNodeTarget.js → node-target.js} +10 -8
  161. package/dist/{lib/parsers/parseTargetSugar.d.ts → es/parsers/target-sugar.d.ts} +1 -1
  162. package/dist/es/parsers/target-sugar.d.ts.map +1 -0
  163. package/dist/es/parsers/{parseTargetSugar.js → target-sugar.js} +9 -4
  164. package/dist/{lib/parsers/parseWay.d.ts → es/parsers/way.d.ts} +2 -2
  165. package/dist/es/parsers/way.d.ts.map +1 -0
  166. package/dist/es/parsers/{parseWay.js → way.js} +10 -6
  167. package/dist/es/path-generators/define.d.ts.map +1 -0
  168. package/dist/es/{pathGenerators → path-generators}/define.js +1 -1
  169. package/dist/es/path-generators/index.d.ts.map +1 -0
  170. package/dist/es/path-generators/types.d.ts.map +1 -0
  171. package/dist/es/patterns/define.d.ts +9 -0
  172. package/dist/es/patterns/define.d.ts.map +1 -0
  173. package/dist/es/patterns/define.js +10 -0
  174. package/dist/es/patterns/index.d.ts +1 -0
  175. package/dist/es/patterns/index.d.ts.map +1 -1
  176. package/dist/es/patterns/index.js +42 -35
  177. package/dist/es/presets/animation.js +2 -2
  178. package/dist/es/primitive/marker.d.ts +7 -7
  179. package/dist/es/primitive/marker.d.ts.map +1 -1
  180. package/dist/es/primitive/paint.d.ts +1 -1
  181. package/dist/es/primitive/path.d.ts +1 -1
  182. package/dist/es/shapes/arc.d.ts.map +1 -1
  183. package/dist/es/shapes/arc.js +24 -5
  184. package/dist/{lib/shapes/_contour.d.ts → es/shapes/contour.d.ts} +6 -3
  185. package/dist/es/shapes/contour.d.ts.map +1 -0
  186. package/dist/es/shapes/{_contour.js → contour.js} +14 -2
  187. package/dist/es/shapes/ellipse.js +2 -2
  188. package/dist/es/shapes/index.d.ts +1 -1
  189. package/dist/es/shapes/index.d.ts.map +1 -1
  190. package/dist/es/shapes/index.js +1 -1
  191. package/dist/es/shapes/polygon.d.ts +1 -1
  192. package/dist/es/shapes/polygon.d.ts.map +1 -1
  193. package/dist/es/shapes/polygon.js +26 -21
  194. package/dist/es/shapes/rectangle.js +6 -6
  195. package/dist/es/shapes/sector.d.ts.map +1 -1
  196. package/dist/es/shapes/sector.js +30 -22
  197. package/dist/es/shapes/{_shared.d.ts → shared.d.ts} +7 -10
  198. package/dist/es/shapes/shared.d.ts.map +1 -0
  199. package/dist/es/shapes/{_shared.js → shared.js} +13 -15
  200. package/dist/es/shapes/star.d.ts.map +1 -1
  201. package/dist/es/shapes/star.js +6 -15
  202. package/dist/es/shapes/types.d.ts +10 -3
  203. package/dist/es/shapes/types.d.ts.map +1 -1
  204. package/dist/es/types.d.ts +1 -1
  205. package/dist/lib/arrows/define.cjs +10 -0
  206. package/dist/lib/arrows/define.d.ts +9 -0
  207. package/dist/lib/arrows/define.d.ts.map +1 -0
  208. package/dist/lib/arrows/index.cjs +15 -2
  209. package/dist/lib/arrows/index.d.ts +3 -1
  210. package/dist/lib/arrows/index.d.ts.map +1 -1
  211. package/dist/lib/arrows/types.d.ts +4 -2
  212. package/dist/lib/arrows/types.d.ts.map +1 -1
  213. package/dist/lib/compile/anchor-cache.cjs +17 -4
  214. package/dist/lib/compile/anchor-cache.d.ts +3 -3
  215. package/dist/lib/compile/anchor-cache.d.ts.map +1 -1
  216. package/dist/lib/compile/compile.cjs +44 -41
  217. package/dist/lib/compile/compile.d.ts +5 -14
  218. package/dist/lib/compile/compile.d.ts.map +1 -1
  219. package/dist/lib/compile/{lowerComposites.cjs → composite.cjs} +9 -1
  220. package/dist/lib/compile/{lowerComposites.d.ts → composite.d.ts} +9 -2
  221. package/dist/lib/compile/composite.d.ts.map +1 -0
  222. package/dist/lib/compile/constant.cjs +22 -0
  223. package/dist/lib/compile/constant.d.ts +30 -0
  224. package/dist/lib/compile/constant.d.ts.map +1 -0
  225. package/dist/lib/compile/direction.cjs +31 -0
  226. package/dist/lib/compile/direction.d.ts +27 -0
  227. package/dist/lib/compile/direction.d.ts.map +1 -0
  228. package/dist/lib/compile/index.d.ts +3 -1
  229. package/dist/lib/compile/index.d.ts.map +1 -1
  230. package/dist/lib/compile/name-stack.cjs +5 -1
  231. package/dist/lib/compile/name-stack.d.ts +3 -1
  232. package/dist/lib/compile/name-stack.d.ts.map +1 -1
  233. package/dist/lib/compile/node.cjs +56 -69
  234. package/dist/lib/compile/node.d.ts +19 -8
  235. package/dist/lib/compile/node.d.ts.map +1 -1
  236. package/dist/lib/compile/paint.cjs +1 -1
  237. package/dist/lib/compile/path/anchor.cjs +10 -12
  238. package/dist/lib/compile/path/anchor.d.ts +4 -3
  239. package/dist/lib/compile/path/anchor.d.ts.map +1 -1
  240. package/dist/lib/compile/path/index.cjs +95 -42
  241. package/dist/lib/compile/path/index.d.ts +6 -8
  242. package/dist/lib/compile/path/index.d.ts.map +1 -1
  243. package/dist/lib/compile/path/label.cjs +8 -4
  244. package/dist/lib/compile/path/label.d.ts.map +1 -1
  245. package/dist/lib/compile/path/relative.cjs +1 -1
  246. package/dist/lib/compile/path/relative.d.ts +1 -1
  247. package/dist/lib/compile/path/shrink.cjs +16 -11
  248. package/dist/lib/compile/path/shrink.d.ts +3 -1
  249. package/dist/lib/compile/path/shrink.d.ts.map +1 -1
  250. package/dist/lib/compile/position.cjs +6 -19
  251. package/dist/lib/compile/position.d.ts +2 -2
  252. package/dist/lib/compile/position.d.ts.map +1 -1
  253. package/dist/lib/compile/precision.cjs +2 -2
  254. package/dist/lib/compile/precision.d.ts +1 -1
  255. package/dist/lib/compile/precision.d.ts.map +1 -1
  256. package/dist/lib/compile/scope.cjs +44 -16
  257. package/dist/lib/compile/scope.d.ts +7 -5
  258. package/dist/lib/compile/scope.d.ts.map +1 -1
  259. package/dist/lib/compile/style.cjs +2 -2
  260. package/dist/lib/compile/style.d.ts +2 -2
  261. package/dist/lib/compile/style.d.ts.map +1 -1
  262. package/dist/lib/compile/text-metrics.cjs +2 -2
  263. package/dist/lib/compile/text-metrics.d.ts +1 -1
  264. package/dist/lib/composites/{types.cjs → define.cjs} +2 -2
  265. package/dist/lib/composites/define.d.ts +8 -0
  266. package/dist/lib/composites/define.d.ts.map +1 -0
  267. package/dist/lib/composites/index.d.ts +1 -1
  268. package/dist/lib/composites/index.d.ts.map +1 -1
  269. package/dist/lib/composites/types.d.ts +0 -6
  270. package/dist/lib/composites/types.d.ts.map +1 -1
  271. package/dist/lib/geometry/anchor.cjs +47 -0
  272. package/dist/lib/geometry/anchor.d.ts +33 -0
  273. package/dist/lib/geometry/anchor.d.ts.map +1 -0
  274. package/dist/lib/geometry/bend.cjs +3 -3
  275. package/dist/lib/geometry/bend.d.ts +1 -1
  276. package/dist/lib/geometry/circle.cjs +9 -9
  277. package/dist/lib/geometry/circle.d.ts +4 -4
  278. package/dist/lib/geometry/circle.d.ts.map +1 -1
  279. package/dist/lib/geometry/{roundedContour.cjs → contour.cjs} +26 -35
  280. package/dist/lib/geometry/{roundedContour.d.ts → contour.d.ts} +9 -5
  281. package/dist/lib/geometry/contour.d.ts.map +1 -0
  282. package/dist/lib/geometry/diamond.cjs +16 -8
  283. package/dist/lib/geometry/diamond.d.ts +10 -4
  284. package/dist/lib/geometry/diamond.d.ts.map +1 -1
  285. package/dist/lib/geometry/{_edge.cjs → edge.cjs} +1 -1
  286. package/dist/{es/geometry/_edge.d.ts → lib/geometry/edge.d.ts} +1 -1
  287. package/dist/lib/geometry/edge.d.ts.map +1 -0
  288. package/dist/lib/geometry/ellipse.cjs +10 -8
  289. package/dist/lib/geometry/ellipse.d.ts +3 -3
  290. package/dist/lib/geometry/ellipse.d.ts.map +1 -1
  291. package/dist/lib/geometry/index.d.ts +6 -1
  292. package/dist/lib/geometry/index.d.ts.map +1 -1
  293. package/dist/lib/geometry/point.cjs +17 -0
  294. package/dist/lib/geometry/point.d.ts +6 -0
  295. package/dist/lib/geometry/point.d.ts.map +1 -1
  296. package/dist/lib/geometry/rect.cjs +9 -22
  297. package/dist/lib/geometry/rect.d.ts +4 -17
  298. package/dist/lib/geometry/rect.d.ts.map +1 -1
  299. package/dist/lib/geometry/segment.cjs +48 -46
  300. package/dist/lib/geometry/segment.d.ts +7 -0
  301. package/dist/lib/geometry/segment.d.ts.map +1 -1
  302. package/dist/lib/geometry/{_transform.cjs → transform.cjs} +1 -1
  303. package/dist/{es/geometry/_transform.d.ts → lib/geometry/transform.d.ts} +1 -1
  304. package/dist/lib/geometry/transform.d.ts.map +1 -0
  305. package/dist/lib/index.cjs +35 -22
  306. package/dist/lib/index.d.ts +13 -13
  307. package/dist/lib/index.d.ts.map +1 -1
  308. package/dist/lib/ir/animation.cjs +6 -6
  309. package/dist/lib/ir/animation.d.ts +26 -125
  310. package/dist/lib/ir/animation.d.ts.map +1 -1
  311. package/dist/lib/ir/boundary.d.ts +4 -10
  312. package/dist/lib/ir/boundary.d.ts.map +1 -1
  313. package/dist/lib/ir/clip.d.ts +6 -46
  314. package/dist/lib/ir/clip.d.ts.map +1 -1
  315. package/dist/lib/ir/composite.d.ts +2 -14
  316. package/dist/lib/ir/composite.d.ts.map +1 -1
  317. package/dist/lib/ir/coordinate.cjs +1 -1
  318. package/dist/lib/ir/coordinate.d.ts +14 -50
  319. package/dist/lib/ir/coordinate.d.ts.map +1 -1
  320. package/dist/lib/ir/font.d.ts +10 -13
  321. package/dist/lib/ir/font.d.ts.map +1 -1
  322. package/dist/lib/ir/json.cjs +1 -1
  323. package/dist/lib/ir/json.d.ts +1 -1
  324. package/dist/lib/ir/json.d.ts.map +1 -1
  325. package/dist/lib/ir/node.cjs +23 -23
  326. package/dist/lib/ir/node.d.ts +175 -821
  327. package/dist/lib/ir/node.d.ts.map +1 -1
  328. package/dist/lib/ir/paint.cjs +10 -10
  329. package/dist/lib/ir/paint.d.ts +23 -100
  330. package/dist/lib/ir/paint.d.ts.map +1 -1
  331. package/dist/lib/ir/path/arrow.cjs +18 -16
  332. package/dist/lib/ir/path/arrow.d.ts +19 -131
  333. package/dist/lib/ir/path/arrow.d.ts.map +1 -1
  334. package/dist/lib/ir/path/path.cjs +4 -2
  335. package/dist/lib/ir/path/path.d.ts +519 -3065
  336. package/dist/lib/ir/path/path.d.ts.map +1 -1
  337. package/dist/lib/ir/path/step.cjs +74 -22
  338. package/dist/lib/ir/path/step.d.ts +929 -3474
  339. package/dist/lib/ir/path/step.d.ts.map +1 -1
  340. package/dist/lib/ir/path/target.cjs +3 -3
  341. package/dist/lib/ir/path/target.d.ts +40 -121
  342. package/dist/lib/ir/path/target.d.ts.map +1 -1
  343. package/dist/lib/ir/position/at-position.cjs +11 -11
  344. package/dist/lib/ir/position/at-position.d.ts +20 -28
  345. package/dist/lib/ir/position/at-position.d.ts.map +1 -1
  346. package/dist/lib/ir/position/offset-position.d.ts +2 -8
  347. package/dist/lib/ir/position/offset-position.d.ts.map +1 -1
  348. package/dist/lib/ir/scene.d.ts +17 -181
  349. package/dist/lib/ir/scene.d.ts.map +1 -1
  350. package/dist/lib/ir/scope.cjs +10 -7
  351. package/dist/lib/ir/scope.d.ts +315 -7291
  352. package/dist/lib/ir/scope.d.ts.map +1 -1
  353. package/dist/lib/ir/shape.d.ts +2 -8
  354. package/dist/lib/ir/shape.d.ts.map +1 -1
  355. package/dist/lib/ir/text.d.ts +24 -70
  356. package/dist/lib/ir/text.d.ts.map +1 -1
  357. package/dist/lib/ir/transform.cjs +11 -4
  358. package/dist/lib/ir/transform.d.ts +47 -144
  359. package/dist/lib/ir/transform.d.ts.map +1 -1
  360. package/dist/lib/parsers/index.d.ts +3 -3
  361. package/dist/lib/parsers/index.d.ts.map +1 -1
  362. package/dist/lib/parsers/{parseNodeTarget.cjs → node-target.cjs} +10 -8
  363. package/dist/lib/parsers/{parseNodeTarget.d.ts → node-target.d.ts} +1 -1
  364. package/dist/lib/parsers/node-target.d.ts.map +1 -0
  365. package/dist/lib/parsers/{parseTargetSugar.cjs → target-sugar.cjs} +9 -4
  366. package/dist/{es/parsers/parseTargetSugar.d.ts → lib/parsers/target-sugar.d.ts} +1 -1
  367. package/dist/lib/parsers/target-sugar.d.ts.map +1 -0
  368. package/dist/lib/parsers/{parseWay.cjs → way.cjs} +13 -9
  369. package/dist/{es/parsers/parseWay.d.ts → lib/parsers/way.d.ts} +2 -2
  370. package/dist/lib/parsers/way.d.ts.map +1 -0
  371. package/dist/lib/{pathGenerators → path-generators}/define.cjs +1 -1
  372. package/dist/lib/path-generators/define.d.ts.map +1 -0
  373. package/dist/lib/path-generators/index.d.ts.map +1 -0
  374. package/dist/lib/path-generators/types.d.ts.map +1 -0
  375. package/dist/lib/patterns/define.cjs +10 -0
  376. package/dist/lib/patterns/define.d.ts +9 -0
  377. package/dist/lib/patterns/define.d.ts.map +1 -0
  378. package/dist/lib/patterns/index.cjs +42 -35
  379. package/dist/lib/patterns/index.d.ts +1 -0
  380. package/dist/lib/patterns/index.d.ts.map +1 -1
  381. package/dist/lib/presets/animation.cjs +2 -2
  382. package/dist/lib/primitive/marker.d.ts +7 -7
  383. package/dist/lib/primitive/marker.d.ts.map +1 -1
  384. package/dist/lib/primitive/paint.d.ts +1 -1
  385. package/dist/lib/primitive/path.d.ts +1 -1
  386. package/dist/lib/shapes/arc.cjs +26 -7
  387. package/dist/lib/shapes/arc.d.ts.map +1 -1
  388. package/dist/lib/shapes/{_contour.cjs → contour.cjs} +14 -1
  389. package/dist/{es/shapes/_contour.d.ts → lib/shapes/contour.d.ts} +6 -3
  390. package/dist/lib/shapes/contour.d.ts.map +1 -0
  391. package/dist/lib/shapes/ellipse.cjs +2 -2
  392. package/dist/lib/shapes/index.cjs +1 -1
  393. package/dist/lib/shapes/index.d.ts +1 -1
  394. package/dist/lib/shapes/index.d.ts.map +1 -1
  395. package/dist/lib/shapes/polygon.cjs +29 -24
  396. package/dist/lib/shapes/polygon.d.ts +1 -1
  397. package/dist/lib/shapes/polygon.d.ts.map +1 -1
  398. package/dist/lib/shapes/rectangle.cjs +12 -12
  399. package/dist/lib/shapes/sector.cjs +41 -33
  400. package/dist/lib/shapes/sector.d.ts.map +1 -1
  401. package/dist/lib/shapes/{_shared.cjs → shared.cjs} +12 -15
  402. package/dist/lib/shapes/{_shared.d.ts → shared.d.ts} +7 -10
  403. package/dist/lib/shapes/shared.d.ts.map +1 -0
  404. package/dist/lib/shapes/star.cjs +9 -18
  405. package/dist/lib/shapes/star.d.ts.map +1 -1
  406. package/dist/lib/shapes/types.d.ts +10 -3
  407. package/dist/lib/shapes/types.d.ts.map +1 -1
  408. package/dist/lib/types.d.ts +1 -1
  409. package/package.json +3 -4
  410. package/dist/es/compile/lowerComposites.d.ts.map +0 -1
  411. package/dist/es/geometry/_edge.d.ts.map +0 -1
  412. package/dist/es/geometry/_transform.d.ts.map +0 -1
  413. package/dist/es/geometry/roundedContour.d.ts.map +0 -1
  414. package/dist/es/parsers/parseNodeTarget.d.ts.map +0 -1
  415. package/dist/es/parsers/parseTargetSugar.d.ts.map +0 -1
  416. package/dist/es/parsers/parseWay.d.ts.map +0 -1
  417. package/dist/es/pathGenerators/define.d.ts.map +0 -1
  418. package/dist/es/pathGenerators/index.d.ts.map +0 -1
  419. package/dist/es/pathGenerators/types.d.ts.map +0 -1
  420. package/dist/es/shapes/_contour.d.ts.map +0 -1
  421. package/dist/es/shapes/_shared.d.ts.map +0 -1
  422. package/dist/lib/compile/lowerComposites.d.ts.map +0 -1
  423. package/dist/lib/geometry/_edge.d.ts.map +0 -1
  424. package/dist/lib/geometry/_transform.d.ts.map +0 -1
  425. package/dist/lib/geometry/roundedContour.d.ts.map +0 -1
  426. package/dist/lib/parsers/parseNodeTarget.d.ts.map +0 -1
  427. package/dist/lib/parsers/parseTargetSugar.d.ts.map +0 -1
  428. package/dist/lib/parsers/parseWay.d.ts.map +0 -1
  429. package/dist/lib/pathGenerators/define.d.ts.map +0 -1
  430. package/dist/lib/pathGenerators/index.d.ts.map +0 -1
  431. package/dist/lib/pathGenerators/types.d.ts.map +0 -1
  432. package/dist/lib/shapes/_contour.d.ts.map +0 -1
  433. package/dist/lib/shapes/_shared.d.ts.map +0 -1
  434. /package/dist/es/{pathGenerators → path-generators}/define.d.ts +0 -0
  435. /package/dist/es/{pathGenerators → path-generators}/index.d.ts +0 -0
  436. /package/dist/es/{pathGenerators → path-generators}/types.d.ts +0 -0
  437. /package/dist/lib/{pathGenerators → path-generators}/define.d.ts +0 -0
  438. /package/dist/lib/{pathGenerators → path-generators}/index.d.ts +0 -0
  439. /package/dist/lib/{pathGenerators → path-generators}/types.d.ts +0 -0
@@ -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, onUnresolved?: (failed: IRTransform) => void) => 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,EAC3C,eAAe,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,KAC3C,KAAK,CAAC,SAAS,CAAC,GAAG,IAoErB,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,UA+BF,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"}
@@ -1,14 +1,15 @@
1
1
  import { rect } from "../geometry/rect.js";
2
2
  import { BUILTIN_SHAPES } from "../shapes/index.js";
3
3
  import { resolvePosition } from "./position.js";
4
+ import { outerRectOf } from "./node.js";
4
5
  //#region src/compile/scope.ts
5
6
  /**
6
- * 把 IR 6 变体 transforms 展平为 Scene 3 变体(Cartesian translate / rotate / scale)
7
- * @description 4 个 translate 变体(translate / polar-translate / at-translate / offset-translate)
7
+ * 把 IR 7 变体 transforms 展平为 Scene 3 变体(Cartesian translate / rotate / scale)
8
+ * @description 5 个 translate 变体(translate / polar-translate / at-translate / offset-translate / between-translate
8
9
  * 各自构造对应 Position 字面量并调用 `resolvePosition` 拿到 Cartesian (x, y),再写成 Cartesian translate;
9
10
  * rotate / scale 直接透传。referent 未解析时返回 null(上游负责发 warn / throw)
10
11
  */
11
- var lowerScopeTransforms = (transforms, nameStack, nodeDistance) => {
12
+ var lowerScopeTransforms = (transforms, nameStack, nodeDistance, resolveBetweenGlobal, onUnresolved) => {
12
13
  const out = [];
13
14
  for (const t of transforms) switch (t.kind) {
14
15
  case "translate":
@@ -25,7 +26,10 @@ var lowerScopeTransforms = (transforms, nameStack, nodeDistance) => {
25
26
  };
26
27
  if (t.origin !== void 0) polar.origin = t.origin;
27
28
  const resolved = resolvePosition(polar, nameStack, nodeDistance);
28
- if (!resolved) return null;
29
+ if (!resolved) {
30
+ onUnresolved?.(t);
31
+ return null;
32
+ }
29
33
  out.push({
30
34
  kind: "translate",
31
35
  x: resolved[0],
@@ -40,7 +44,10 @@ var lowerScopeTransforms = (transforms, nameStack, nodeDistance) => {
40
44
  };
41
45
  if (t.distance !== void 0) at.distance = t.distance;
42
46
  const resolved = resolvePosition(at, nameStack, nodeDistance);
43
- if (!resolved) return null;
47
+ if (!resolved) {
48
+ onUnresolved?.(t);
49
+ return null;
50
+ }
44
51
  out.push({
45
52
  kind: "translate",
46
53
  x: resolved[0],
@@ -53,7 +60,26 @@ var lowerScopeTransforms = (transforms, nameStack, nodeDistance) => {
53
60
  of: t.of,
54
61
  offset: t.offset ?? [0, 0]
55
62
  }, nameStack, nodeDistance);
56
- if (!resolved) return null;
63
+ if (!resolved) {
64
+ onUnresolved?.(t);
65
+ return null;
66
+ }
67
+ out.push({
68
+ kind: "translate",
69
+ x: resolved[0],
70
+ y: resolved[1]
71
+ });
72
+ break;
73
+ }
74
+ case "between-translate": {
75
+ const resolved = resolvePosition({
76
+ between: t.between,
77
+ t: t.t
78
+ }, nameStack, nodeDistance, [], resolveBetweenGlobal);
79
+ if (!resolved) {
80
+ onUnresolved?.(t);
81
+ return null;
82
+ }
57
83
  out.push({
58
84
  kind: "translate",
59
85
  x: resolved[0],
@@ -159,7 +185,7 @@ var inverseTransformChain = (global, chain) => {
159
185
  * scale 乘进 rect.width / height / margin——这样 path 端点的 boundary clip 取的是与 SVG `<g>`
160
186
  * 实际渲染一致的视觉尺寸 / 朝向,跨 / 入 / 出 rotate / scale scope 的 path 都贴节点视觉边界。
161
187
  * 非均匀 scale 与 rotate 在 chain 中混合时,按"累加 rotate + 分量相乘 scale"近似(uniform scale 精确,
162
- * anisotropic + rotate 的剪切耦合不展开——alpha 阶段限制)。
188
+ * anisotropic + rotate 的剪切耦合不展开——当前投影模型限制)。
163
189
  */
164
190
  var projectLayoutToGlobal = (layout, chain) => {
165
191
  const [gx, gy] = applyTransformChain([layout.rect.x, layout.rect.y], chain);
@@ -176,13 +202,14 @@ var projectLayoutToGlobal = (layout, chain) => {
176
202
  x: gx,
177
203
  y: gy,
178
204
  rotate: (layout.rect.rotate ?? 0) + rotateAccumRad,
179
- width: layout.rect.width * scaleX,
180
- height: layout.rect.height * scaleY
205
+ width: layout.rect.width * Math.abs(scaleX),
206
+ height: layout.rect.height * Math.abs(scaleY)
181
207
  };
182
208
  const marginScale = Math.max(Math.abs(scaleX), Math.abs(scaleY));
183
209
  return {
184
210
  ...layout,
185
211
  rect: globalRect,
212
+ rotateDeg: layout.rotateDeg + rotateAccumRad * (180 / Math.PI),
186
213
  margin: layout.margin * marginScale
187
214
  };
188
215
  };
@@ -201,11 +228,12 @@ var computeScopeBoundingBox = (layouts) => {
201
228
  let maxX = -Infinity;
202
229
  let maxY = -Infinity;
203
230
  for (const layout of layouts) {
231
+ const outerRect = outerRectOf(layout);
204
232
  const corners = [
205
- rect.anchor(layout.rect, "north-west"),
206
- rect.anchor(layout.rect, "north-east"),
207
- rect.anchor(layout.rect, "south-west"),
208
- rect.anchor(layout.rect, "south-east")
233
+ rect.anchor(outerRect, "north-west"),
234
+ rect.anchor(outerRect, "north-east"),
235
+ rect.anchor(outerRect, "south-west"),
236
+ rect.anchor(outerRect, "south-east")
209
237
  ];
210
238
  for (const [cx, cy] of corners) {
211
239
  if (cx < minX) minX = cx;
@@ -227,7 +255,7 @@ var computeScopeBoundingBox = (layouts) => {
227
255
  * synthetic layout 完全复用 rectangle 路径:`scope.id.<keyword>` / `scope.id.<deg>` / `scope.id` 作为 referent
228
256
  * 走与普通 rectangle Node 完全一致的 anchorOf / boundaryPointOf / 中心点取值
229
257
  */
230
- var registerScopeAsLayout = (id, bbox, fallbackOrigin) => {
258
+ var registerScopeAsLayout = (id, bbox, fallbackOrigin, shapes = BUILTIN_SHAPES) => {
231
259
  const box = bbox ?? {
232
260
  x: fallbackOrigin[0],
233
261
  y: fallbackOrigin[1],
@@ -237,7 +265,7 @@ var registerScopeAsLayout = (id, bbox, fallbackOrigin) => {
237
265
  return {
238
266
  id,
239
267
  shapeName: "rectangle",
240
- shapeDef: BUILTIN_SHAPES.rectangle,
268
+ shapeDef: shapes.rectangle,
241
269
  rect: {
242
270
  x: box.x,
243
271
  y: box.y,
@@ -252,7 +280,7 @@ var registerScopeAsLayout = (id, bbox, fallbackOrigin) => {
252
280
  align: "middle",
253
281
  lineHeight: 0,
254
282
  fontSize: 0,
255
- shapes: BUILTIN_SHAPES
283
+ shapes
256
284
  };
257
285
  };
258
286
  //#endregion
@@ -6,7 +6,7 @@ import { IRArrowDetail, IRLabelDefault, IRNode, IRPath, IRScope } from '../ir';
6
6
  type CascadeState = Pick<IRScope, 'color' | 'stroke' | 'fill' | 'strokeWidth' | 'opacity' | 'fillOpacity' | 'drawOpacity'>;
7
7
  /**
8
8
  * 单层 scope 的样式 frame——compile 维护 frame 栈做 inside-out per-field 解析
9
- * @description 级联 graphic state + 四通道 every-X 默认 + resetStyle 屏障;从 IRScope 抽取(buildStyleFrame
9
+ * @description 级联 graphic state + 四通道 every-X 默认 + resetStyle 屏障;从 IRScope 抽取(createStyleFrame
10
10
  */
11
11
  export type StyleFrame = {
12
12
  /** 级联 graphic state(主色 + 跨类共享分项) */
@@ -26,7 +26,7 @@ export type StyleFrame = {
26
26
  * 从 IRScope 抽取样式 frame
27
27
  * @description 只摘样式相关字段(级联 graphic state + 四通道 + resetStyle);transforms / id / localNamespace 与样式正交,不进 frame
28
28
  */
29
- export declare const buildStyleFrame: (scope: IRScope) => StyleFrame;
29
+ export declare const createStyleFrame: (scope: IRScope) => StyleFrame;
30
30
  /**
31
31
  * 解析 node 最终样式——fold 外→内 frame 栈 + 元素显式
32
32
  * @description 优先级链(每分项就近 model A):元素显式分项 > 元素 color > nodeDefault 分项 > nodeDefault color
@@ -1 +1 @@
1
- {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../../src/compile/style.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EACd,MAAM,EACN,MAAM,EACN,OAAO,EAIR,MAAM,OAAO,CAAC;AAEf;;;GAGG;AACH,KAAK,YAAY,GAAG,IAAI,CACtB,OAAO,EACP,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,CACxF,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,oCAAoC;IACpC,OAAO,EAAE,YAAY,CAAC;IACtB,oBAAoB;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACrC,oBAAoB;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACrC,iDAAiD;IACjD,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,qBAAqB;IACrB,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,sBAAsB;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CACpC,CAAC;AAYF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,OAAO,KAAG,UAgBhD,CAAC;AAiEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EACZ,OAAO,aAAa,CAAC,UAAU,CAAC,KAC/B,MAYF,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,GAC9B,OAAO,aAAa,CAAC,UAAU,CAAC,KAC/B,cAOF,CAAC;AAyHF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,MAAM,EACZ,OAAO,aAAa,CAAC,UAAU,CAAC,KAC/B,MA2BF,CAAC"}
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../../src/compile/style.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EACd,MAAM,EACN,MAAM,EACN,OAAO,EAIR,MAAM,OAAO,CAAC;AAEf;;;GAGG;AACH,KAAK,YAAY,GAAG,IAAI,CACtB,OAAO,EACP,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,CACxF,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,oCAAoC;IACpC,OAAO,EAAE,YAAY,CAAC;IACtB,oBAAoB;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACrC,oBAAoB;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACrC,iDAAiD;IACjD,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,qBAAqB;IACrB,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,sBAAsB;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CACpC,CAAC;AAYF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,OAAO,KAAG,UAgBjD,CAAC;AAiEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EACZ,OAAO,aAAa,CAAC,UAAU,CAAC,KAC/B,MAYF,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,GAC9B,OAAO,aAAa,CAAC,UAAU,CAAC,KAC/B,cAOF,CAAC;AAyHF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,MAAM,EACZ,OAAO,aAAa,CAAC,UAAU,CAAC,KAC/B,MA2BF,CAAC"}
@@ -12,7 +12,7 @@ var pickDefinedKeys = (src) => {
12
12
  * 从 IRScope 抽取样式 frame
13
13
  * @description 只摘样式相关字段(级联 graphic state + 四通道 + resetStyle);transforms / id / localNamespace 与样式正交,不进 frame
14
14
  */
15
- var buildStyleFrame = (scope) => {
15
+ var createStyleFrame = (scope) => {
16
16
  const cascade = {};
17
17
  if (scope.color !== void 0) cascade.color = scope.color;
18
18
  if (scope.stroke !== void 0) cascade.stroke = scope.stroke;
@@ -256,4 +256,4 @@ var resolveEffectivePath = (path, stack) => {
256
256
  return effective;
257
257
  };
258
258
  //#endregion
259
- export { buildStyleFrame, resolveEffectivePath, resolveLabelDefault, resolveNodeStyle };
259
+ export { createStyleFrame, resolveEffectivePath, resolveLabelDefault, resolveNodeStyle };
@@ -27,7 +27,7 @@ export type TextMetrics = {
27
27
  export type TextMeasurer = (text: string, font: FontSpec) => TextMetrics;
28
28
  /**
29
29
  * 默认 fallback 度量:基于平均字宽估算,不准但保证可运行
30
- * @description size=0 → 退化返回 (0, 0)(与 text='' 一致);负 size NaN size → throw(非法输入早 fail,避免 NaN 噪音传播到 Scene)
30
+ * @description size=0 → 退化返回 (0, 0)(与 text='' 一致);负 size 或非有限(NaN / Infinity)size → throw(非法输入早 fail,避免 NaN / Infinity 传播到 Scene)
31
31
  */
32
32
  export declare const fallbackMeasurer: TextMeasurer;
33
33
  //# sourceMappingURL=text-metrics.d.ts.map
@@ -1,10 +1,10 @@
1
1
  //#region src/compile/text-metrics.ts
2
2
  /**
3
3
  * 默认 fallback 度量:基于平均字宽估算,不准但保证可运行
4
- * @description size=0 → 退化返回 (0, 0)(与 text='' 一致);负 size NaN size → throw(非法输入早 fail,避免 NaN 噪音传播到 Scene)
4
+ * @description size=0 → 退化返回 (0, 0)(与 text='' 一致);负 size 或非有限(NaN / Infinity)size → throw(非法输入早 fail,避免 NaN / Infinity 传播到 Scene)
5
5
  */
6
6
  var fallbackMeasurer = (text, font) => {
7
- if (Number.isNaN(font.size) || font.size < 0) throw new Error(`fallbackMeasurer: invalid font.size '${font.size}'; must be a non-negative finite number`);
7
+ if (!Number.isFinite(font.size) || font.size < 0) throw new Error(`fallbackMeasurer: invalid font.size '${font.size}'; must be a non-negative finite number`);
8
8
  return {
9
9
  width: text.length * font.size * .55,
10
10
  height: font.size * 1.2
@@ -0,0 +1,8 @@
1
+ import { CompositeDefinition } from './types';
2
+ /**
3
+ * 注册一个 Tier 2 composite(保留 `expand` 的强类型节点参数)
4
+ * @description domain 包用它注册:`expand` 的 node 自动推断为 `z.infer<typeof schema>`;返回值擦除泛型,
5
+ * 可放进 `CompileOptions.composites: Array<CompositeDefinition>`。对齐其他扩展面的 `define*` helper。
6
+ */
7
+ export declare const defineComposite: <T>(definition: CompositeDefinition<T>) => CompositeDefinition;
8
+ //# sourceMappingURL=define.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../../src/composites/define.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,YAAY,mBAAmB,CAAC,CAAC,CAAC,KAAG,mBACrC,CAAC"}
@@ -1,8 +1,8 @@
1
- //#region src/composites/types.ts
1
+ //#region src/composites/define.ts
2
2
  /**
3
3
  * 注册一个 Tier 2 composite(保留 `expand` 的强类型节点参数)
4
4
  * @description domain 包用它注册:`expand` 的 node 自动推断为 `z.infer<typeof schema>`;返回值擦除泛型,
5
- * 可放进 `CompileOptions.composites: Array<CompositeDefinition>`。对齐 `definePathGenerator`。
5
+ * 可放进 `CompileOptions.composites: Array<CompositeDefinition>`。对齐其他扩展面的 `define*` helper。
6
6
  */
7
7
  var defineComposite = (definition) => definition;
8
8
  //#endregion
@@ -1,3 +1,3 @@
1
- export { defineComposite } from './types';
1
+ export { defineComposite } from './define';
2
2
  export type { CompositeDefinition } from './types';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composites/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composites/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
@@ -12,10 +12,4 @@ export type CompositeDefinition<T = unknown> = {
12
12
  /** 把该 composite 节点展开成 Tier 1 IR 的纯函数;据节点字段不同产不同子树 */
13
13
  expand: (node: T) => IRChild | Array<IRChild>;
14
14
  };
15
- /**
16
- * 注册一个 Tier 2 composite(保留 `expand` 的强类型节点参数)
17
- * @description domain 包用它注册:`expand` 的 node 自动推断为 `z.infer<typeof schema>`;返回值擦除泛型,
18
- * 可放进 `CompileOptions.composites: Array<CompositeDefinition>`。对齐 `definePathGenerator`。
19
- */
20
- export declare const defineComposite: <T>(definition: CompositeDefinition<T>) => CompositeDefinition;
21
15
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/composites/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAErC;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,OAAO,IAAI;IAC7C,yEAAyE;IACzE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACnB,qDAAqD;IACrD,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;CAC/C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,YAAY,mBAAmB,CAAC,CAAC,CAAC,KAAG,mBACrC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/composites/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAErC;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,OAAO,IAAI;IAC7C,yEAAyE;IACzE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACnB,qDAAqD;IACrD,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;CAC/C,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { ValueOf } from '../types';
2
+ /** 9 个标准方位 anchor,采用 TikZ 语义作为 canonical 值。 */
3
+ export declare const CompassAnchor: {
4
+ readonly Center: "center";
5
+ readonly North: "north";
6
+ readonly South: "south";
7
+ readonly East: "east";
8
+ readonly West: "west";
9
+ readonly NorthEast: "north-east";
10
+ readonly NorthWest: "north-west";
11
+ readonly SouthEast: "south-east";
12
+ readonly SouthWest: "south-west";
13
+ };
14
+ export type CompassAnchorValue = ValueOf<typeof CompassAnchor>;
15
+ /** Web/CSS 心智下的方位 anchor 输入别名,编译前归一到 CompassAnchor。 */
16
+ export declare const WebAnchor: {
17
+ readonly Top: "top";
18
+ readonly Bottom: "bottom";
19
+ readonly Right: "right";
20
+ readonly Left: "left";
21
+ readonly TopRight: "top-right";
22
+ readonly TopLeft: "top-left";
23
+ readonly BottomRight: "bottom-right";
24
+ readonly BottomLeft: "bottom-left";
25
+ };
26
+ export type WebAnchorValue = ValueOf<typeof WebAnchor>;
27
+ export type AnchorInput = CompassAnchorValue | WebAnchorValue;
28
+ /**
29
+ * 标准化方位 anchor 名。
30
+ * @description TikZ canonical 名原样返回;Web alias(top / top-left 等)归一到 north / north-west 等。
31
+ */
32
+ export declare const normalizeCompassAnchor: (name: string) => CompassAnchorValue | undefined;
33
+ //# sourceMappingURL=anchor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anchor.d.ts","sourceRoot":"","sources":["../../../src/geometry/anchor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,+CAA+C;AAC/C,eAAO,MAAM,aAAa;;;;;;;;;;CAUhB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,OAAO,aAAa,CAAC,CAAC;AAE/D,uDAAuD;AACvD,eAAO,MAAM,SAAS;;;;;;;;;CASZ,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,SAAS,CAAC,CAAC;AAEvD,MAAM,MAAM,WAAW,GAAG,kBAAkB,GAAG,cAAc,CAAC;AAe9D;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,KAAG,kBAAkB,GAAG,SAG1E,CAAC"}
@@ -0,0 +1,45 @@
1
+ //#region src/geometry/anchor.ts
2
+ /** 9 个标准方位 anchor,采用 TikZ 语义作为 canonical 值。 */
3
+ var CompassAnchor = {
4
+ Center: "center",
5
+ North: "north",
6
+ South: "south",
7
+ East: "east",
8
+ West: "west",
9
+ NorthEast: "north-east",
10
+ NorthWest: "north-west",
11
+ SouthEast: "south-east",
12
+ SouthWest: "south-west"
13
+ };
14
+ /** Web/CSS 心智下的方位 anchor 输入别名,编译前归一到 CompassAnchor。 */
15
+ var WebAnchor = {
16
+ Top: "top",
17
+ Bottom: "bottom",
18
+ Right: "right",
19
+ Left: "left",
20
+ TopRight: "top-right",
21
+ TopLeft: "top-left",
22
+ BottomRight: "bottom-right",
23
+ BottomLeft: "bottom-left"
24
+ };
25
+ var CompassAnchorSet = new Set(Object.values(CompassAnchor));
26
+ var AnchorAliases = {
27
+ top: CompassAnchor.North,
28
+ bottom: CompassAnchor.South,
29
+ right: CompassAnchor.East,
30
+ left: CompassAnchor.West,
31
+ "top-right": CompassAnchor.NorthEast,
32
+ "top-left": CompassAnchor.NorthWest,
33
+ "bottom-right": CompassAnchor.SouthEast,
34
+ "bottom-left": CompassAnchor.SouthWest
35
+ };
36
+ /**
37
+ * 标准化方位 anchor 名。
38
+ * @description TikZ canonical 名原样返回;Web alias(top / top-left 等)归一到 north / north-west 等。
39
+ */
40
+ var normalizeCompassAnchor = (name) => {
41
+ if (CompassAnchorSet.has(name)) return name;
42
+ return AnchorAliases[name];
43
+ };
44
+ //#endregion
45
+ export { CompassAnchor, WebAnchor, normalizeCompassAnchor };
@@ -1,7 +1,7 @@
1
1
  import { Position } from './point';
2
2
  /**
3
3
  * cubic Bezier 拟合 from→to 的弧形 bend
4
- * @description apex offset = chord × tan(bendAngle/2);控制点取 chord 1/3 与 2/3 处沿法向偏移,让 cubic 在 t=0.5 穿过 apex 故 ctlOffset = 4/3 × apexOffset。法向(screen y-down):visual-left=(dy,-dx)/|chord|,visual-right=(-dy,dx)/|chord|。chord=0 时两控制点都返回 from
4
+ * @description apex offset =(chord/2)× tan(bendAngle/2),即弦切角为 bendAngle 的圆弧 sagitta;控制点取 chord 1/3 与 2/3 处沿法向偏移,让 cubic 在 t=0.5 穿过 apex 故 ctlOffset = 4/3 × apexOffset。法向(screen y-down):visual-left=(dy,-dx)/|chord|,visual-right=(-dy,dx)/|chord|。chord=0 时两控制点都返回 from
5
5
  */
6
6
  export declare const bendControlPoints: (from: Position, to: Position, direction: "left" | "right", bendAngle: number) => [Position, Position];
7
7
  /**
@@ -1,7 +1,7 @@
1
1
  //#region src/geometry/bend.ts
2
2
  /**
3
3
  * cubic Bezier 拟合 from→to 的弧形 bend
4
- * @description apex offset = chord × tan(bendAngle/2);控制点取 chord 1/3 与 2/3 处沿法向偏移,让 cubic 在 t=0.5 穿过 apex 故 ctlOffset = 4/3 × apexOffset。法向(screen y-down):visual-left=(dy,-dx)/|chord|,visual-right=(-dy,dx)/|chord|。chord=0 时两控制点都返回 from
4
+ * @description apex offset =(chord/2)× tan(bendAngle/2),即弦切角为 bendAngle 的圆弧 sagitta;控制点取 chord 1/3 与 2/3 处沿法向偏移,让 cubic 在 t=0.5 穿过 apex 故 ctlOffset = 4/3 × apexOffset。法向(screen y-down):visual-left=(dy,-dx)/|chord|,visual-right=(-dy,dx)/|chord|。chord=0 时两控制点都返回 from
5
5
  */
6
6
  var bendControlPoints = (from, to, direction, bendAngle) => {
7
7
  const dx = to[0] - from[0];
@@ -11,14 +11,14 @@ var bendControlPoints = (from, to, direction, bendAngle) => {
11
11
  const sign = direction === "left" ? 1 : -1;
12
12
  const nx = dy / chord * sign;
13
13
  const ny = -dx / chord * sign;
14
- const ctlOffset = 4 / 3 * (chord * Math.tan(bendAngle * Math.PI / 180 / 2));
14
+ const ctlOffset = 4 / 3 * (chord / 2 * Math.tan(bendAngle * Math.PI / 180 / 2));
15
15
  return [[from[0] + dx / 3 + ctlOffset * nx, from[1] + dy / 3 + ctlOffset * ny], [from[0] + 2 * dx / 3 + ctlOffset * nx, from[1] + 2 * dy / 3 + ctlOffset * ny]];
16
16
  };
17
17
  /** 默认 looseness(looseness 缺省时) */
18
18
  var DEFAULT_LOOSENESS = 1;
19
19
  /** self-loop(from==to)默认环大小(user units,受 looseness 缩放) */
20
20
  var DEFAULT_LOOP_SIZE = 1;
21
- /** 直边 cubic 控制点距离系数(chord 的几分之一) */
21
+ /** 直边 cubic 控制点距离系数(chord 的几分之一);retikz 取 1/3,TikZ 默认 looseness 对应 ≈0.3915,本库简化为 1/3 */
22
22
  var OUTIN_DISTANCE_FACTOR = 1 / 3;
23
23
  /** 角度(度)转单位方向向量(0°=+x,90°=+y screen-down,与 IR 角度约定一致) */
24
24
  var dirOf = (angleDeg) => {
@@ -1,6 +1,6 @@
1
- import { Side } from './_edge';
1
+ import { Side } from './edge';
2
+ import { CompassAnchorValue } from './anchor';
2
3
  import { Position } from './point';
3
- import { RectAnchor } from './rect';
4
4
  /** 圆形:几何中心 + 半径,预留旋转字段保持与 Rect 同形 API */
5
5
  export type Circle = {
6
6
  x: number;
@@ -16,8 +16,8 @@ export declare const circle: {
16
16
  center: (c: Circle) => Position;
17
17
  /** 判断点是否在圆内(含边界) */
18
18
  contains: (c: Circle, p: Position) => boolean;
19
- /** 9 个标准 anchor 之一的世界坐标 */
20
- anchor: (c: Circle, name: RectAnchor) => Position;
19
+ /** 9 个标准方位 anchor 之一的世界坐标 */
20
+ anchor: (c: Circle, name: CompassAnchorValue) => Position;
21
21
  /** 从圆心向 toward 方向射线与圆周交点(Path 端点贴 Node 边界用) */
22
22
  boundaryPoint: (c: Circle, toward: Position) => Position;
23
23
  /** 边上比例点:side 的 90° 周长弧段 t∈[0,1] 处(等角,落真实圆周;含旋转) */
@@ -1 +1 @@
1
- {"version":3,"file":"circle.d.ts","sourceRoot":"","sources":["../../../src/geometry/circle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAgB,MAAM,SAAS,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAIzC,yCAAyC;AACzC,MAAM,MAAM,MAAM,GAAG;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,SAAS;IACT,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAIF,eAAe;AACf,eAAO,MAAM,MAAM;IACjB,SAAS;gBACG,MAAM,KAAG,QAAQ;IAC7B,oBAAoB;kBACN,MAAM,KAAK,QAAQ,KAAG,OAAO;IAI3C,2BAA2B;gBACf,MAAM,QAAQ,UAAU,KAAG,QAAQ;IAsC/C,+CAA+C;uBAC5B,MAAM,UAAU,QAAQ,KAAG,QAAQ;IAOtD,oDAAoD;mBACrC,MAAM,QAAQ,IAAI,KAAK,MAAM,KAAG,QAAQ;CAIxD,CAAC"}
1
+ {"version":3,"file":"circle.d.ts","sourceRoot":"","sources":["../../../src/geometry/circle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAgB,MAAM,QAAQ,CAAC;AAEjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxC,yCAAyC;AACzC,MAAM,MAAM,MAAM,GAAG;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,SAAS;IACT,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAIF,eAAe;AACf,eAAO,MAAM,MAAM;IACjB,SAAS;gBACG,MAAM,KAAG,QAAQ;IAC7B,oBAAoB;kBACN,MAAM,KAAK,QAAQ,KAAG,OAAO;IAI3C,6BAA6B;gBACjB,MAAM,QAAQ,kBAAkB,KAAG,QAAQ;IAsCvD,+CAA+C;uBAC5B,MAAM,UAAU,QAAQ,KAAG,QAAQ;IAOtD,oDAAoD;mBACrC,MAAM,QAAQ,IAAI,KAAK,MAAM,KAAG,QAAQ;CAIxD,CAAC"}
@@ -1,5 +1,5 @@
1
- import { localToWorld, worldToLocal } from "./_transform.js";
2
- import { edgeAngleDeg } from "./_edge.js";
1
+ import { edgeAngleDeg } from "./edge.js";
2
+ import { localToWorld, worldToLocal } from "./transform.js";
3
3
  //#region src/geometry/circle.ts
4
4
  var DEG_TO_RAD = Math.PI / 180;
5
5
  var SQRT_HALF = Math.SQRT1_2;
@@ -12,7 +12,7 @@ var circle = {
12
12
  const [lx, ly] = worldToLocal(c, p);
13
13
  return lx * lx + ly * ly <= c.radius * c.radius;
14
14
  },
15
- /** 9 个标准 anchor 之一的世界坐标 */
15
+ /** 9 个标准方位 anchor 之一的世界坐标 */
16
16
  anchor: (c, name) => {
17
17
  const r = c.radius;
18
18
  let lx = 0;
@@ -47,7 +47,7 @@ export type ContourCommand = {
47
47
  * @description tangentInPoint = 前段被裁短到此点(前段新终点);tangentOutPoint = 后段从此点起(后段新起点);
48
48
  * filletArc 描述连接两切点的圆弧。clampedToZero=true 表示该角夹紧后 r→0,不倒角(保持尖角)。
49
49
  */
50
- type FilletSolution = {
50
+ export type FilletSolution = {
51
51
  /** 前段切点(前段新终点) */
52
52
  tangentInPoint: Position;
53
53
  /** 后段切点(后段新起点) */
@@ -76,13 +76,17 @@ export declare const filletContour: (segments: Array<ContourSegment>, cornerRadi
76
76
  * fillet 出点」走到「本接缝的 fillet 入点」(line 缩短 / arc 裁剪角度),接缝处插 fillet 弧。
77
77
  * 夹紧到 0 的角不插弧、按原尖角连接。
78
78
  */
79
- export declare const contourCommands: (segments: Array<ContourSegment>, cornerRadius?: number) => Array<ContourCommand>;
79
+ export declare const contourCommands: (segments: Array<ContourSegment>, cornerRadius?: number, fillets?: Array<FilletSolution>) => Array<ContourCommand>;
80
+ /** 调整 endAngle 使「start→end」沿给定扫描方向(ccw: 递减 / 否则递增),保持裁剪后弧方向不变 */
81
+ export declare const alignSweep: (start: number, end: number, ccw: boolean) => {
82
+ start: number;
83
+ end: number;
84
+ };
80
85
  /**
81
86
  * 从 rayOrigin 朝 toward 射线 ∩ fillet 后轮廓全部段,返回最近正向交点
82
87
  * @description rayOrigin 显式传(不假设中心);toward 是射线指向的目标点(方向 = toward − rayOrigin)。
83
88
  * 遍历 fillet 后的有效段(缩短 line / 裁剪 arc / fillet arc),对每段求 ray∩段、取最小正参数命中点。
84
89
  * cornerRadius 省略 / ≤0 → 走原尖角轮廓。无命中返回 undefined(调用方兜底)。
85
90
  */
86
- export declare const boundaryFromContour: (segments: Array<ContourSegment>, cornerRadius: number | undefined, rayOrigin: Position, toward: Position) => Position | undefined;
87
- export {};
88
- //# sourceMappingURL=roundedContour.d.ts.map
91
+ export declare const boundaryFromContour: (segments: Array<ContourSegment>, cornerRadius: number | undefined, rayOrigin: Position, toward: Position, fillets?: Array<FilletSolution>) => Position | undefined;
92
+ //# sourceMappingURL=contour.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contour.d.ts","sourceRoot":"","sources":["../../../src/geometry/contour.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAS,MAAM,SAAS,CAAC;AAkB/C,4BAA4B;AAC5B,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,gBAAgB;IAChB,EAAE,EAAE,QAAQ,CAAC;CACd,CAAC;AAEF,oDAAoD;AACpD,MAAM,MAAM,UAAU,GAAG;IACvB,YAAY;IACZ,IAAI,EAAE,KAAK,CAAC;IACZ,gBAAgB;IAChB,MAAM,EAAE,QAAQ,CAAC;IACjB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,6BAA6B;AAC7B,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,UAAU,CAAC;AAEtD,qFAAqF;AACrF,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,QAAQ,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,QAAQ,CAAA;CAAE,GAC9B;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GACD;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AA6BtB;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,kBAAkB;IAClB,cAAc,EAAE,QAAQ,CAAC;IACzB,kBAAkB;IAClB,eAAe,EAAE,QAAQ,CAAC;IAC1B,gBAAgB;IAChB,MAAM,EAAE,QAAQ,CAAC;IACjB,gBAAgB;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,8BAA8B;IAC9B,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAoTF;;;GAGG;AACH,eAAO,MAAM,aAAa,GACxB,UAAU,KAAK,CAAC,cAAc,CAAC,EAC/B,eAAe,MAAM,KACpB,KAAK,CAAC,cAAc,CAUtB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,KAAK,CAAC,cAAc,CAAC,EAC/B,eAAe,MAAM,EACrB,UAAS,KAAK,CAAC,cAAc,CAAyC,KACrE,KAAK,CAAC,cAAc,CAsCtB,CAAC;AA2BF,iEAAiE;AACjE,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,OAAO,KAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAUjG,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,KAAK,CAAC,cAAc,CAAC,EAC/B,cAAc,MAAM,GAAG,SAAS,EAChC,WAAW,QAAQ,EACnB,QAAQ,QAAQ,EAChB,UAAS,KAAK,CAAC,cAAc,CAAyC,KACrE,QAAQ,GAAG,SA0Eb,CAAC"}