@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-sugar.d.ts","sourceRoot":"","sources":["../../../src/parsers/target-sugar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAQtC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,OAAO,KAAG,QAkBjD,CAAC"}
@@ -1,7 +1,9 @@
1
- import { parseNodeTarget } from "./parseNodeTarget.js";
2
- //#region src/parsers/parseTargetSugar.ts
1
+ import { parseNodeTarget } from "./node-target.js";
2
+ //#region src/parsers/target-sugar.ts
3
3
  /** TikZ 风格相对偏移字面量正则:捕获 `+` / `++` 前缀 + dx / dy 数值 */
4
- var RELATIVE_OFFSET_RE = /^(\+{1,2})\s*(-?\d+(?:\.\d+)?)\s*,\s*(-?\d+(?:\.\d+)?)$/;
4
+ var RELATIVE_NUMBER = "-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?";
5
+ var RELATIVE_OFFSET_RE = new RegExp(`^(\\+{1,2})\\s*(${RELATIVE_NUMBER})\\s*,\\s*(${RELATIVE_NUMBER})$`);
6
+ var RELATIVE_LIKE_RE = /^\+.*,/;
5
7
  /**
6
8
  * Sugar 字符串解析:TikZ 风格字符串 shorthand → IR 对象(React DSL 层;core IR 只见对象)
7
9
  * @description `'+dx,dy'` → `{relative:[dx,dy]}`(TikZ `+`,不更新 prevEnd);`'++dx,dy'` → `{relativeAccumulate:[dx,dy]}`(TikZ `++`,累积);
@@ -11,7 +13,10 @@ var RELATIVE_OFFSET_RE = /^(\+{1,2})\s*(-?\d+(?:\.\d+)?)\s*,\s*(-?\d+(?:\.\d+)?)
11
13
  var parseTargetSugar = (input) => {
12
14
  if (typeof input !== "string") return input;
13
15
  const match = input.match(RELATIVE_OFFSET_RE);
14
- if (!match) return parseNodeTarget(input);
16
+ if (!match) {
17
+ if (RELATIVE_LIKE_RE.test(input)) throw new Error(`parseTargetSugar: invalid relative offset '${input}'; expected '+x,y' or '++x,y'`);
18
+ return parseNodeTarget(input);
19
+ }
15
20
  const plus = match[1];
16
21
  const dx = Number(match[2]);
17
22
  const dy = Number(match[3]);
@@ -82,7 +82,7 @@ export type WayItem = IRTarget | string | WayRelativeItem | WayVia | WayCycle |
82
82
  export type WayDSL = Array<WayItem>;
83
83
  /**
84
84
  * way 数组 → IRStep 序列
85
- * @description 首元素始终 moveway[0] 是算子时降级到原点 [0,0]);后续元素按各自规则:target/RelItem→line;Cycle→cycle;-|/|- 与下一项合并 fold;curve/cubic/bend 与下一项合并;arc/circle/ellipse 单独成 step;label 算子修饰下一段。连续 label/末尾 label/cycle 上的 label 抛错。纯函数,各框架 adapter Sugar 组件复用
85
+ * @description 首元素必须是 move 目标(way[0] 是算子 / label 算子时抛错,不降级);后续元素按各自规则:target/RelItem→line;Cycle→cycle;-|/|- 与下一项合并 fold;curve/cubic/bend 与下一项合并;arc/circle/ellipse 单独成 step;label 算子修饰下一段。连续 label/末尾 label/cycle 上的 label 抛错。纯函数,各框架 adapter Sugar 组件复用
86
86
  */
87
87
  export declare const parseWay: (way: WayDSL) => Array<IRStep>;
88
- //# sourceMappingURL=parseWay.d.ts.map
88
+ //# sourceMappingURL=way.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"way.d.ts","sourceRoot":"","sources":["../../../src/parsers/way.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,cAAc,EAQd,MAAM,EACN,WAAW,EACX,QAAQ,EACT,MAAM,OAAO,CAAC;AAGf;;;GAGG;AACH,eAAO,MAAM,OAAO;IAClB,oDAAoD;;IAEpD,2BAA2B;;IAE3B,2BAA2B;;IAE3B,gDAAgD;;IAEhD,kDAAkD;;CAE1C,CAAC;AAEX,oBAAoB;AACpB,MAAM,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,EAAE,GAAG,OAAO,OAAO,CAAC,EAAE,CAAC;AAE3D,qBAAqB;AACrB,MAAM,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,KAAK,CAAC;AAE5C;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,IAAI,EAAE,OAAO,OAAO,CAAC,QAAQ,GAAG,OAAO,OAAO,CAAC,UAAU,CAAC;CAC3D,CAAC;AAOF,2DAA2D;AAC3D,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC;AAEnD,+CAA+C;AAC/C,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,CAAA;CAAE,CAAC;AAErE,qDAAqD;AACrD,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D,CAAC;AAEF,0CAA0C;AAC1C,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAEzD,iDAAiD;AACjD,MAAM,MAAM,YAAY,GAAG;IAAE,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE7E,0DAA0D;AAC1D,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;AAE5C;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,OAAO,GACf,QAAQ,GAER,MAAM,GACN,eAAe,GACf,MAAM,GACN,QAAQ,GACR,UAAU,GACV,UAAU,GACV,SAAS,GACT,QAAQ,GACR,WAAW,GACX,YAAY,GACZ,UAAU,CAAC;AAEf,+CAA+C;AAC/C,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;AA4EpC;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,KAAK,CAAC,MAAM,CAwKlD,CAAC"}
@@ -1,5 +1,5 @@
1
- import { parseTargetSugar } from "./parseTargetSugar.js";
2
- //#region src/parsers/parseWay.ts
1
+ import { parseTargetSugar } from "./target-sugar.js";
2
+ //#region src/parsers/way.ts
3
3
  /**
4
4
  * Sugar 层 way 数组的关键字常量
5
5
  * @description Cycle 闭合到 way 起点(底层字符串故意写丑避节点 id 冲突,只通过 DrawWay.Cycle 引用);Hv/Vh 折角算子(裸字面量 `-|`/`|-` 与常量等价);Relative/Accumulate 相对偏移 way item 的 type 鉴别值(Relative=TikZ `(+x,+y)` 不推进 prevEnd,Accumulate=TikZ `(++x,++y)` 累积更新)。用 const + as const 而非 TS enum 避免 reverse-mapping 与字面量不互通
@@ -35,7 +35,10 @@ var normalizeLabel = (l) => typeof l === "string" ? { text: l } : { ...l };
35
35
  /** sugar `{position,type}` → IR `{relative}|{relativeAccumulate}`;其它形态原样返回 */
36
36
  var desugarRelativeItem = (item) => {
37
37
  if (!isWayRelativeItem(item)) return item;
38
- return item.type === DrawWay.Accumulate ? { relativeAccumulate: item.position } : { relative: item.position };
38
+ const candidate = item;
39
+ if (candidate.type === DrawWay.Accumulate) return { relativeAccumulate: candidate.position };
40
+ if (candidate.type === DrawWay.Relative) return { relative: candidate.position };
41
+ throw new Error(`parseWay: WayRelativeItem.type must be DrawWay.Relative or DrawWay.Accumulate`);
39
42
  };
40
43
  /** WayItem 归约为"目标点",算子/关键字返回 null */
41
44
  var targetOf = (item) => {
@@ -44,7 +47,7 @@ var targetOf = (item) => {
44
47
  };
45
48
  /**
46
49
  * way 数组 → IRStep 序列
47
- * @description 首元素始终 moveway[0] 是算子时降级到原点 [0,0]);后续元素按各自规则:target/RelItem→line;Cycle→cycle;-|/|- 与下一项合并 fold;curve/cubic/bend 与下一项合并;arc/circle/ellipse 单独成 step;label 算子修饰下一段。连续 label/末尾 label/cycle 上的 label 抛错。纯函数,各框架 adapter Sugar 组件复用
50
+ * @description 首元素必须是 move 目标(way[0] 是算子 / label 算子时抛错,不降级);后续元素按各自规则:target/RelItem→line;Cycle→cycle;-|/|- 与下一项合并 fold;curve/cubic/bend 与下一项合并;arc/circle/ellipse 单独成 step;label 算子修饰下一段。连续 label/末尾 label/cycle 上的 label 抛错。纯函数,各框架 adapter Sugar 组件复用
48
51
  */
49
52
  var parseWay = (way) => {
50
53
  if (way.length < 2) throw new Error("parseWay: way must contain at least 2 items");
@@ -58,10 +61,11 @@ var parseWay = (way) => {
58
61
  };
59
62
  if (isWayLabelOp(way[0])) throw new Error(`parseWay: way[0] must be a target (move start), got label operator`);
60
63
  const rawMove = targetOf(way[0]);
64
+ if (rawMove === null) throw new Error(`parseWay: way[0] must be a target (move start), got operator`);
61
65
  const moveStep = {
62
66
  type: "step",
63
67
  kind: "move",
64
- to: rawMove === null ? [0, 0] : parseTargetSugar(rawMove)
68
+ to: parseTargetSugar(rawMove)
65
69
  };
66
70
  out.push(moveStep);
67
71
  for (let i = 1; i < way.length; i++) {
@@ -85,7 +89,7 @@ var parseWay = (way) => {
85
89
  if (isWayOperator(next)) throw new Error(`parseWay: via operator '${item}' must be followed by a target, got '${String(next)}'`);
86
90
  const fold = {
87
91
  type: "step",
88
- kind: "step",
92
+ kind: "fold",
89
93
  via: item,
90
94
  to: parseTargetSugar(desugarRelativeItem(next))
91
95
  };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../../src/path-generators/define.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEvD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,GAC9B,KAAK,uBAAuB,KAC3B,uBAwBF,CAAC"}
@@ -1,4 +1,4 @@
1
- //#region src/pathGenerators/define.ts
1
+ //#region src/path-generators/define.ts
2
2
  /**
3
3
  * 注册一个 path generator(注册时 best-effort 元校验)
4
4
  * @description 直通返回 def,并在注册时做轻量早报错——确认 `paramsSchema` 是个可用的 zod schema、
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/path-generators/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/path-generators/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,oCAAoC;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,uDAAuD;IACvD,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,uDAAuD;IACvD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1C,8CAA8C;IAC9C,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,8DAA8D;IAC9D,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACpC,qEAAqE;IACrE,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,6EAA6E;IAC7E,QAAQ,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC;CAC7D,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { PatternDefinition } from './types';
2
+ /**
3
+ * 定义一个 pattern motif 注册项
4
+ * @description 与 `defineShape` / `definePathGenerator` 对齐的定义点 helper;当前不做额外运行时校验,
5
+ * 只保留 `PatternDefinition` 形态并让第三方扩展面写法一致。
6
+ * @returns 原样返回的 def(便于 `export const cross = definePattern({ ... })`)
7
+ */
8
+ export declare const definePattern: (def: PatternDefinition) => PatternDefinition;
9
+ //# sourceMappingURL=define.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../../src/patterns/define.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,KAAK,iBAAiB,KAAG,iBAAwB,CAAC"}
@@ -0,0 +1,10 @@
1
+ //#region src/patterns/define.ts
2
+ /**
3
+ * 定义一个 pattern motif 注册项
4
+ * @description 与 `defineShape` / `definePathGenerator` 对齐的定义点 helper;当前不做额外运行时校验,
5
+ * 只保留 `PatternDefinition` 形态并让第三方扩展面写法一致。
6
+ * @returns 原样返回的 def(便于 `export const cross = definePattern({ ... })`)
7
+ */
8
+ var definePattern = (def) => def;
9
+ //#endregion
10
+ export { definePattern };
@@ -7,4 +7,5 @@ import { PatternDefinition } from './types';
7
7
  */
8
8
  export declare const BUILTIN_PATTERNS: Record<BuiltinPatternName, PatternDefinition>;
9
9
  export type { PatternDefinition, PatternEmitContext } from './types';
10
+ export { definePattern } from './define';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/patterns/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,KAAK,EAAE,iBAAiB,EAAsB,MAAM,SAAS,CAAC;AAwBrE;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,kBAAkB,EAAE,iBAAiB,CA4C1E,CAAC;AAEF,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/patterns/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,KAAK,EAAE,iBAAiB,EAAsB,MAAM,SAAS,CAAC;AAwBrE;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,kBAAkB,EAAE,iBAAiB,CAmD1E,CAAC;AAEF,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -1,3 +1,4 @@
1
+ import "./define.js";
1
2
  //#region src/patterns/index.ts
2
3
  /** 内置 3 motif 默认 tile 周期(user units);用户 `pattern.size` 覆盖 */
3
4
  var DEFAULT_PATTERN_SIZE = 8;
@@ -24,44 +25,50 @@ var withBackground = (ctx, motif) => ctx.background === void 0 ? [...motif] : [{
24
25
  var BUILTIN_PATTERNS = {
25
26
  lines: {
26
27
  defaultSize: DEFAULT_PATTERN_SIZE,
27
- emit: (ctx) => withBackground(ctx, [{
28
- type: "path",
29
- commands: [{
30
- kind: "move",
31
- to: [0, 0]
32
- }, {
33
- kind: "line",
34
- to: [ctx.size, 0]
35
- }],
36
- stroke: ctx.color,
37
- strokeWidth: ctx.lineWidth ?? DEFAULT_STROKE_WIDTH
38
- }])
28
+ emit: (ctx) => {
29
+ const half = ctx.round(ctx.size / 2);
30
+ return withBackground(ctx, [{
31
+ type: "path",
32
+ commands: [{
33
+ kind: "move",
34
+ to: [0, half]
35
+ }, {
36
+ kind: "line",
37
+ to: [ctx.size, half]
38
+ }],
39
+ stroke: ctx.color,
40
+ strokeWidth: ctx.lineWidth ?? DEFAULT_STROKE_WIDTH
41
+ }]);
42
+ }
39
43
  },
40
44
  grid: {
41
45
  defaultSize: DEFAULT_PATTERN_SIZE,
42
- emit: (ctx) => withBackground(ctx, [{
43
- type: "path",
44
- commands: [
45
- {
46
- kind: "move",
47
- to: [0, 0]
48
- },
49
- {
50
- kind: "line",
51
- to: [ctx.size, 0]
52
- },
53
- {
54
- kind: "move",
55
- to: [0, 0]
56
- },
57
- {
58
- kind: "line",
59
- to: [0, ctx.size]
60
- }
61
- ],
62
- stroke: ctx.color,
63
- strokeWidth: ctx.lineWidth ?? DEFAULT_STROKE_WIDTH
64
- }])
46
+ emit: (ctx) => {
47
+ const half = ctx.round(ctx.size / 2);
48
+ return withBackground(ctx, [{
49
+ type: "path",
50
+ commands: [
51
+ {
52
+ kind: "move",
53
+ to: [0, half]
54
+ },
55
+ {
56
+ kind: "line",
57
+ to: [ctx.size, half]
58
+ },
59
+ {
60
+ kind: "move",
61
+ to: [half, 0]
62
+ },
63
+ {
64
+ kind: "line",
65
+ to: [half, ctx.size]
66
+ }
67
+ ],
68
+ stroke: ctx.color,
69
+ strokeWidth: ctx.lineWidth ?? DEFAULT_STROKE_WIDTH
70
+ }]);
71
+ }
65
72
  },
66
73
  dots: {
67
74
  defaultSize: DEFAULT_PATTERN_SIZE,
@@ -97,7 +97,7 @@ var slideIn = (opts = {}) => ({
97
97
  /** 变色:`fill|stroke` from→to(oklch 插值,由 renderer 端处理) */
98
98
  var colorShift = (opts) => {
99
99
  const { from, to } = opts;
100
- if (from === void 0 || to === void 0) throw new Error("colorShift: `from` and `to` colors are required.");
100
+ if (from == null || to == null) throw new Error("colorShift: `from` and `to` colors are required.");
101
101
  return {
102
102
  property: (opts.channel ?? "fill") === "stroke" ? AnimationProperty.Stroke : AnimationProperty.Fill,
103
103
  keyframes: [{
@@ -116,7 +116,7 @@ var colorShift = (opts) => {
116
116
  /** 镜头:scene 根 `viewBox` from→to(挂 `<Layout animations>` / IR 根 `animations`) */
117
117
  var cameraTo = (opts) => {
118
118
  const { from, to } = opts;
119
- if (from === void 0 || to === void 0) throw new Error("cameraTo: `from` and `to` viewBox [x, y, w, h] are required.");
119
+ if (from == null || to == null) throw new Error("cameraTo: `from` and `to` viewBox [x, y, w, h] are required.");
120
120
  return {
121
121
  property: AnimationProperty.ViewBox,
122
122
  keyframes: [{
@@ -24,8 +24,8 @@ export type MarkerPathPrim = {
24
24
  fillOpacity?: number;
25
25
  /** 填充规则:`nonzero`(默认)/ `evenodd`(环形 / 孔洞场景) */
26
26
  fillRule?: 'nonzero' | 'evenodd';
27
- /** 描边色(纯色 CSS / `context-stroke` adapter 映射) */
28
- stroke?: string;
27
+ /** 描边色:纯色 CSS `{ kind: 'contextStroke' }`(继承所在元素描边);与 fill 同词汇,core 不持 SVG 裸关键字 */
28
+ stroke?: MarkerFill;
29
29
  /** 描边透明度 0~1 */
30
30
  strokeOpacity?: number;
31
31
  /** 描边宽度(marker 局部坐标) */
@@ -97,8 +97,8 @@ export type MarkerEllipsePrim = {
97
97
  fill?: MarkerFill;
98
98
  /** 填充透明度 0~1 */
99
99
  fillOpacity?: number;
100
- /** 描边色 */
101
- stroke?: string;
100
+ /** 描边色:纯色 CSS 或 `{ kind: 'contextStroke' }` */
101
+ stroke?: MarkerFill;
102
102
  /** 描边透明度 0~1 */
103
103
  strokeOpacity?: number;
104
104
  /** 描边宽度 */
@@ -125,8 +125,8 @@ export type MarkerRectPrim = {
125
125
  fill?: MarkerFill;
126
126
  /** 填充透明度 0~1 */
127
127
  fillOpacity?: number;
128
- /** 描边色 */
129
- stroke?: string;
128
+ /** 描边色:纯色 CSS 或 `{ kind: 'contextStroke' }` */
129
+ stroke?: MarkerFill;
130
130
  /** 描边透明度 0~1 */
131
131
  strokeOpacity?: number;
132
132
  /** 描边宽度 */
@@ -154,7 +154,7 @@ export type MarkerGroupPrim = {
154
154
  * @description renderer-agnostic:core 只产此结构(局部 baseSize 坐标系),react adapter 把它嵌进
155
155
  * `<marker>`。相对 `ScenePrimitive` 的收窄——禁 `TextPrim`、禁 `arrowStart`/`arrowEnd`、禁外部
156
156
  * `resourceRef`、禁 `clip`;`fill` 限 `MarkerFill`。这条收窄兜住"marker 内递归引用 marker / clip /
157
- * 文本布局"的复杂度(见 ADR-01 选项 C 的反例)。
157
+ * 文本布局"的复杂度。
158
158
  */
159
159
  export type MarkerPrimitive = MarkerPathPrim | MarkerEllipsePrim | MarkerRectPrim | MarkerGroupPrim;
160
160
  //# sourceMappingURL=marker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"marker.d.ts","sourceRoot":"","sources":["../../../src/primitive/marker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"marker.d.ts","sourceRoot":"","sources":["../../../src/primitive/marker.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import { MarkerPrimitive } from './marker';
5
5
  * paint 属性取值词汇表(可用于 fill / stroke,不绑定单一属性)
6
6
  * @description 渲染无关:`string` 纯色(含 var() 由 adapter 走 inline style);`{ kind:'resourceRef' }` 指向
7
7
  * `Scene.resources` 里的 paint server(gradient / 后续 pattern·image);`{ kind:'contextStroke' }` 继承所在元素描边
8
- * (adapter → SVG context-stroke,alpha.8 arrow 用)。
8
+ * (adapter → SVG context-stroke)。
9
9
  */
10
10
  export type PaintValue = string | {
11
11
  kind: 'resourceRef';
@@ -91,7 +91,7 @@ export type PathCommand = MovePathCommand | LinePathCommand | QuadPathCommand |
91
91
  * markerHeight>`,不再 switch、不调 emit、不需要 arrows 注册表。纯 JSON 数据(无函数)。
92
92
  */
93
93
  export type ArrowEndSpec = {
94
- /** 形状名:内置 7 或经 `CompileOptions.arrows` 注册的扩展名;标识 / 调试用,已解析后渲染不依赖(保留) */
94
+ /** 形状名:内置 8 或经 `CompileOptions.arrows` 注册的扩展名;标识 / 调试用,已解析后渲染不依赖(保留) */
95
95
  shape: ArrowShapeName;
96
96
  /** marker viewBox 边长(`def.baseSize ?? 10`);adapter 据此推 viewBox `0 0 baseSize baseSize` 与 refY = baseSize/2 */
97
97
  baseSize: number;
@@ -1 +1 @@
1
- {"version":3,"file":"arc.d.ts","sourceRoot":"","sources":["../../../src/shapes/arc.ts"],"names":[],"mappings":"AA8DA;;;;;GAKG;AACH,eAAO,MAAM,GAAG,mCA8Ed,CAAC"}
1
+ {"version":3,"file":"arc.d.ts","sourceRoot":"","sources":["../../../src/shapes/arc.ts"],"names":[],"mappings":"AA4EA;;;;;GAKG;AACH,eAAO,MAAM,GAAG,mCAyFd,CAAC"}
@@ -1,11 +1,12 @@
1
- import { localToWorld } from "../geometry/_transform.js";
1
+ import { localToWorld, worldToLocal } from "../geometry/transform.js";
2
2
  import { arcBoundingPoints, arcEndPoint } from "../geometry/arc.js";
3
3
  import { defineShape } from "./define.js";
4
- import { normalizeAngularRange } from "./_shared.js";
4
+ import { normalizeAngularRange } from "./shared.js";
5
5
  import { z } from "zod";
6
6
  //#region src/shapes/arc.ts
7
+ var RAD_TO_DEG = 180 / Math.PI;
7
8
  /** arc 的派生几何:圆心局部系 AABB + 圆心相对 AABB 中心偏移 */
8
- var arcGeometry = (params) => {
9
+ var computeArcGeometry = (params) => {
9
10
  const { radius } = params;
10
11
  const range = normalizeAngularRange(params.startAngle, params.endAngle);
11
12
  const points = arcBoundingPoints([0, 0], radius, range.start, range.end);
@@ -29,6 +30,15 @@ var arcGeometry = (params) => {
29
30
  centerOffset: [-aabbCenter[0], -aabbCenter[1]]
30
31
  };
31
32
  };
33
+ /** params → 派生几何的 WeakMap 缓存(同 sector:同一 params 实例多次取几何只算一次,纯性能、行为不变) */
34
+ var arcGeometryCache = /* @__PURE__ */ new WeakMap();
35
+ var arcGeometry = (params) => {
36
+ const cached = arcGeometryCache.get(params);
37
+ if (cached !== void 0) return cached;
38
+ const geo = computeArcGeometry(params);
39
+ arcGeometryCache.set(params, geo);
40
+ return geo;
41
+ };
32
42
  /** 圆心局部点(相对圆心)→ 世界系(+centerOffset 到相对 AABB 中心后经 rect 投影) */
33
43
  var arcLocalToWorld = (rect, centerOffset, localFromCenter) => localToWorld(rect, [localFromCenter[0] + centerOffset[0], localFromCenter[1] + centerOffset[1]]);
34
44
  /**
@@ -49,9 +59,18 @@ var arc = defineShape({
49
59
  const { centerOffset } = arcGeometry(params);
50
60
  return [-centerOffset[0], -centerOffset[1]];
51
61
  },
52
- boundaryPoint: (rect, _toward, params) => {
62
+ boundaryPoint: (rect, toward, params) => {
53
63
  const geo = arcGeometry(params);
54
- return arcLocalToWorld(rect, geo.centerOffset, arcEndPoint([0, 0], params.radius, geo.range.mid));
64
+ const { radius } = params;
65
+ const { start, end } = geo.range;
66
+ const local = worldToLocal(rect, toward);
67
+ const fx = local[0] - geo.centerOffset[0];
68
+ const fy = local[1] - geo.centerOffset[1];
69
+ let theta = Math.atan2(fy, fx) * RAD_TO_DEG;
70
+ while (theta < start) theta += 360;
71
+ while (theta >= start + 360) theta -= 360;
72
+ const angle = theta <= end ? theta : theta - end <= start + 360 - theta ? end : start;
73
+ return arcLocalToWorld(rect, geo.centerOffset, arcEndPoint([0, 0], radius, angle));
55
74
  },
56
75
  anchor: (rect, name, params) => {
57
76
  const geo = arcGeometry(params);
@@ -1,6 +1,7 @@
1
1
  import { Position } from '../geometry/point';
2
- import { ContourCommand, LineSegment } from '../geometry/roundedContour';
3
- import { PathCommand } from '../primitive';
2
+ import { ContourCommand, LineSegment } from '../geometry/contour';
3
+ import { PathCommand, PathPrim } from '../primitive';
4
+ import { ShapeStyle } from './types';
4
5
  /**
5
6
  * 由顶点环构造闭合折线段序列(接缝顺序同顶点顺序)
6
7
  * @description 第 i 段 from = 顶点 i、to = 顶点 (i+1)%n;供 polygon / star 的 emit / boundaryPoint
@@ -16,4 +17,6 @@ export declare const verticesToSegments: (verts: Array<Position>) => Array<LineS
16
17
  * polygon / star 共用此映射器(单一实现)。
17
18
  */
18
19
  export declare const contourToPathCommands: (commands: Array<ContourCommand>, round: (n: number) => number) => Array<PathCommand>;
19
- //# sourceMappingURL=_contour.d.ts.map
20
+ /** contour shape 共用的 path primitive 样式落地。 */
21
+ export declare const contourToPathPrimitive: (commands: Array<PathCommand>, style: ShapeStyle) => PathPrim;
22
+ //# sourceMappingURL=contour.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contour.d.ts","sourceRoot":"","sources":["../../../src/shapes/contour.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAG,KAAK,CAAC,WAAW,CACQ,CAAC;AAEtF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAChC,UAAU,KAAK,CAAC,cAAc,CAAC,EAC/B,OAAO,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAC3B,KAAK,CAAC,WAAW,CAqCnB,CAAC;AAEF,6CAA6C;AAC7C,eAAO,MAAM,sBAAsB,GACjC,UAAU,KAAK,CAAC,WAAW,CAAC,EAC5B,OAAO,UAAU,KAChB,QAUD,CAAC"}
@@ -1,4 +1,4 @@
1
- //#region src/shapes/_contour.ts
1
+ //#region src/shapes/contour.ts
2
2
  /**
3
3
  * 由顶点环构造闭合折线段序列(接缝顺序同顶点顺序)
4
4
  * @description 第 i 段 from = 顶点 i、to = 顶点 (i+1)%n;供 polygon / star 的 emit / boundaryPoint
@@ -56,5 +56,17 @@ var contourToPathCommands = (commands, round) => {
56
56
  });
57
57
  return out;
58
58
  };
59
+ /** contour shape 共用的 path primitive 样式落地。 */
60
+ var contourToPathPrimitive = (commands, style) => ({
61
+ type: "path",
62
+ commands,
63
+ fill: style.fill ?? "transparent",
64
+ fillOpacity: style.fillOpacity,
65
+ stroke: style.stroke ?? "currentColor",
66
+ strokeOpacity: style.strokeOpacity,
67
+ strokeWidth: style.strokeWidth ?? 1,
68
+ dashPattern: style.dashPattern,
69
+ opacity: style.opacity
70
+ });
59
71
  //#endregion
60
- export { contourToPathCommands, verticesToSegments };
72
+ export { contourToPathCommands, contourToPathPrimitive, verticesToSegments };
@@ -1,6 +1,6 @@
1
1
  import { defineShape } from "./define.js";
2
- import { asRectAnchor } from "./_shared.js";
3
2
  import { ellipse as ellipse$1 } from "../geometry/ellipse.js";
3
+ import { normalizeCompassAnchor } from "../geometry/anchor.js";
4
4
  import { z } from "zod";
5
5
  //#region src/shapes/ellipse.ts
6
6
  /** 外接框 Rect → Ellipse(rx/ry = 半宽/半高) */
@@ -29,7 +29,7 @@ var ellipse = defineShape({
29
29
  },
30
30
  boundaryPoint: (r, toward) => ellipse$1.boundaryPoint(toEllipse(r), toward),
31
31
  anchor: (r, name) => {
32
- const a = asRectAnchor(name);
32
+ const a = normalizeCompassAnchor(name);
33
33
  return a ? ellipse$1.anchor(toEllipse(r), a) : void 0;
34
34
  },
35
35
  edgePoint: (r, side, t) => ellipse$1.edgePoint(toEllipse(r), side, t),
@@ -13,5 +13,5 @@ export { rectangle, ellipse, polygon, sector, arc, star, defineShape };
13
13
  export type { ShapeDefinition, ShapeDefinitionInput, ShapeStyle } from './types';
14
14
  export type { Rect } from '../geometry/rect';
15
15
  export type { Position } from '../geometry/point';
16
- export { worldToLocal, localToWorld } from '../geometry/_transform';
16
+ export { worldToLocal, localToWorld } from '../geometry/transform';
17
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shapes/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,2FAA2F;AAC3F,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,GAAG,SAAS,CAAC,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,EAAE,eAAe,CAO3I,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AACvE,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEjF,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shapes/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,2FAA2F;AAC3F,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,GAAG,SAAS,CAAC,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,EAAE,eAAe,CAO3I,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AACvE,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEjF,YAAY,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,4 +1,4 @@
1
- import "../geometry/_transform.js";
1
+ import "../geometry/transform.js";
2
2
  import "./define.js";
3
3
  import { arc } from "./arc.js";
4
4
  import { ellipse } from "./ellipse.js";
@@ -7,7 +7,7 @@
7
7
  * (多边形关于中心对称,AABB 中心 = 形心 = node position)。命名 anchor 走外接 AABB 的 9 名 rect anchor(不随
8
8
  * cornerRadius 移);self-rotate(params.rotate)与 Node.rotate 叠加。scaleParams:cornerRadius 是长度随 scale
9
9
  * 缩(几何均值因子),sides 计数 / rotate 角度不缩。
10
- * diamond ≡ `{ type: 'polygon', params: { sides: 4, rotate: 45 } }`,由 compile 规范化。
10
+ * diamond ≡ `{ type: 'polygon', params: { sides: 4, rotate: 0 } }`,由 compile 规范化。
11
11
  */
12
12
  export declare const polygon: import('./types').ShapeDefinition;
13
13
  //# sourceMappingURL=polygon.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"polygon.d.ts","sourceRoot":"","sources":["../../../src/shapes/polygon.ts"],"names":[],"mappings":"AA8EA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,OAAO,mCAiElB,CAAC"}
1
+ {"version":3,"file":"polygon.d.ts","sourceRoot":"","sources":["../../../src/shapes/polygon.ts"],"names":[],"mappings":"AAqFA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,OAAO,mCA6DlB,CAAC"}
@@ -1,12 +1,13 @@
1
- import { localToWorld } from "../geometry/_transform.js";
1
+ import { localToWorld } from "../geometry/transform.js";
2
2
  import { rect } from "../geometry/rect.js";
3
3
  import { defineShape } from "./define.js";
4
- import { asRectAnchor } from "./_shared.js";
5
- import { boundaryFromContour, contourCommands } from "../geometry/roundedContour.js";
6
- import { contourToPathCommands, verticesToSegments } from "./_contour.js";
4
+ import { normalizeCompassAnchor } from "../geometry/anchor.js";
5
+ import { boundaryFromContour, contourCommands } from "../geometry/contour.js";
6
+ import { contourToPathCommands, contourToPathPrimitive, verticesToSegments } from "./contour.js";
7
7
  import { z } from "zod";
8
8
  //#region src/shapes/polygon.ts
9
9
  var DEG_TO_RAD = Math.PI / 180;
10
+ var MAX_POLYGON_SIDES = 1024;
10
11
  /** 顶点角集合(度):第 k 个顶点角 = rotate + k·(360/sides) */
11
12
  var vertexAngles = (params) => {
12
13
  const startDeg = params.rotate ?? 0;
@@ -16,7 +17,14 @@ var vertexAngles = (params) => {
16
17
  return out;
17
18
  };
18
19
  /** 顶点角的 |cos| 最大值(恒 >0,sides≥3 时至少一个顶点不在 ±y 轴上);用于由 AABB 半宽反推外接半径 */
19
- var maxAbsCos = (params) => Math.max(...vertexAngles(params).map((a) => Math.abs(Math.cos(a * DEG_TO_RAD))));
20
+ var maxAbsCos = (params) => {
21
+ let max = 0;
22
+ for (const angle of vertexAngles(params)) {
23
+ const value = Math.abs(Math.cos(angle * DEG_TO_RAD));
24
+ if (value > max) max = value;
25
+ }
26
+ return max;
27
+ };
20
28
  /**
21
29
  * 能容纳内框(半轴 hw/hh)的正 sides 边形外接圆半径
22
30
  * @description rectangle / polygon 是文本容器——尺寸由内框(text + padding)驱动,circumscribe 从内框推外接。
@@ -57,20 +65,27 @@ var polygonVertices = (rect, radius, params) => vertexAngles(params).map((deg) =
57
65
  * (多边形关于中心对称,AABB 中心 = 形心 = node position)。命名 anchor 走外接 AABB 的 9 名 rect anchor(不随
58
66
  * cornerRadius 移);self-rotate(params.rotate)与 Node.rotate 叠加。scaleParams:cornerRadius 是长度随 scale
59
67
  * 缩(几何均值因子),sides 计数 / rotate 角度不缩。
60
- * diamond ≡ `{ type: 'polygon', params: { sides: 4, rotate: 45 } }`,由 compile 规范化。
68
+ * diamond ≡ `{ type: 'polygon', params: { sides: 4, rotate: 0 } }`,由 compile 规范化。
61
69
  */
62
70
  var polygon = defineShape({
63
71
  paramsSchema: z.strictObject({
64
- sides: z.number().int().min(3).describe("Number of sides of the regular polygon (>= 3)."),
72
+ sides: z.number().int().min(3).max(MAX_POLYGON_SIDES).describe(`Number of sides of the regular polygon (3..${MAX_POLYGON_SIDES}).`),
65
73
  rotate: z.number().finite().optional().describe("Shape self-rotation in degrees (vertex start direction); default 0. Composes with Node.rotate."),
66
74
  cornerRadius: z.number().finite().nonnegative().optional().describe("Corner radius in user units; 0 / omitted = sharp corners. Clamped per corner to the largest non-self-intersecting fillet.")
67
75
  }),
68
76
  circumscribe: (hw, hh, params) => {
69
77
  const radius = circumradiusFor(hw, hh, params);
70
78
  const angles = vertexAngles(params);
79
+ let halfWidth = 0;
80
+ let halfHeight = 0;
81
+ for (const angle of angles) {
82
+ const rad = angle * DEG_TO_RAD;
83
+ halfWidth = Math.max(halfWidth, Math.abs(radius * Math.cos(rad)));
84
+ halfHeight = Math.max(halfHeight, Math.abs(radius * Math.sin(rad)));
85
+ }
71
86
  return {
72
- halfWidth: Math.max(...angles.map((a) => Math.abs(radius * Math.cos(a * DEG_TO_RAD)))),
73
- halfHeight: Math.max(...angles.map((a) => Math.abs(radius * Math.sin(a * DEG_TO_RAD))))
87
+ halfWidth,
88
+ halfHeight
74
89
  };
75
90
  },
76
91
  boundaryPoint: (rect, toward, params) => {
@@ -79,21 +94,11 @@ var polygon = defineShape({
79
94
  return boundaryFromContour(segments, params.cornerRadius, center, toward) ?? center;
80
95
  },
81
96
  anchor: (rect$1, name, params) => {
82
- const a = asRectAnchor(name);
97
+ const a = normalizeCompassAnchor(name);
83
98
  return a ? rect.anchor(rect$1, a) : void 0;
84
99
  },
85
100
  *emit(rect, style, round, params) {
86
- yield {
87
- type: "path",
88
- commands: contourToPathCommands(contourCommands(verticesToSegments(polygonVertices(rect, circumradiusFromRect(rect, params), params)), params.cornerRadius), round),
89
- fill: style.fill ?? "transparent",
90
- fillOpacity: style.fillOpacity,
91
- stroke: style.stroke ?? "currentColor",
92
- strokeOpacity: style.strokeOpacity,
93
- strokeWidth: style.strokeWidth ?? 1,
94
- dashPattern: style.dashPattern,
95
- opacity: style.opacity
96
- };
101
+ yield contourToPathPrimitive(contourToPathCommands(contourCommands(verticesToSegments(polygonVertices(rect, circumradiusFromRect(rect, params), params)), params.cornerRadius), round), style);
97
102
  },
98
103
  scaleParams: (params, sx, sy) => params.cornerRadius === void 0 ? params : {
99
104
  ...params,