@retikz/core 0.3.0-alpha.3 → 0.3.0-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/README.md +41 -41
  2. package/dist/es/compile/anchor-cache.d.ts +5 -3
  3. package/dist/es/compile/anchor-cache.d.ts.map +1 -1
  4. package/dist/es/compile/anchor-cache.js +14 -10
  5. package/dist/es/compile/boundary.d.ts +19 -0
  6. package/dist/es/compile/boundary.d.ts.map +1 -0
  7. package/dist/es/compile/boundary.js +64 -0
  8. package/dist/es/compile/compile.d.ts +1 -1
  9. package/dist/es/compile/compile.d.ts.map +1 -1
  10. package/dist/es/compile/compile.js +49 -5
  11. package/dist/es/compile/node.d.ts +26 -8
  12. package/dist/es/compile/node.d.ts.map +1 -1
  13. package/dist/es/compile/node.js +103 -16
  14. package/dist/es/compile/path/anchor.d.ts.map +1 -1
  15. package/dist/es/compile/path/anchor.js +7 -6
  16. package/dist/es/compile/path/index.d.ts.map +1 -1
  17. package/dist/es/compile/path/index.js +7 -3
  18. package/dist/es/compile/path/relative.js +1 -1
  19. package/dist/es/compile/scope.d.ts.map +1 -1
  20. package/dist/es/compile/scope.js +2 -1
  21. package/dist/es/geometry/arc.d.ts +14 -0
  22. package/dist/es/geometry/arc.d.ts.map +1 -1
  23. package/dist/es/geometry/arc.js +65 -9
  24. package/dist/es/geometry/index.d.ts +1 -0
  25. package/dist/es/geometry/index.d.ts.map +1 -1
  26. package/dist/es/geometry/rect.d.ts +2 -2
  27. package/dist/es/geometry/rect.d.ts.map +1 -1
  28. package/dist/es/geometry/rect.js +3 -3
  29. package/dist/es/geometry/roundedContour.d.ts +88 -0
  30. package/dist/es/geometry/roundedContour.d.ts.map +1 -0
  31. package/dist/es/geometry/roundedContour.js +417 -0
  32. package/dist/es/index.d.ts +9 -5
  33. package/dist/es/index.d.ts.map +1 -1
  34. package/dist/es/index.js +11 -6
  35. package/dist/es/ir/animation.d.ts +218 -0
  36. package/dist/es/ir/animation.d.ts.map +1 -0
  37. package/dist/es/ir/animation.js +118 -0
  38. package/dist/es/ir/boundary.d.ts +25 -0
  39. package/dist/es/ir/boundary.d.ts.map +1 -0
  40. package/dist/es/ir/boundary.js +14 -0
  41. package/dist/es/ir/index.d.ts +3 -0
  42. package/dist/es/ir/index.d.ts.map +1 -1
  43. package/dist/es/ir/node.d.ts +219 -27
  44. package/dist/es/ir/node.d.ts.map +1 -1
  45. package/dist/es/ir/node.js +10 -3
  46. package/dist/es/ir/path/arrow.d.ts +36 -36
  47. package/dist/es/ir/path/path.d.ts +702 -203
  48. package/dist/es/ir/path/path.d.ts.map +1 -1
  49. package/dist/es/ir/path/path.js +4 -0
  50. package/dist/es/ir/path/step.d.ts +674 -154
  51. package/dist/es/ir/path/step.d.ts.map +1 -1
  52. package/dist/es/ir/path/step.js +2 -2
  53. package/dist/es/ir/path/target.d.ts +43 -8
  54. package/dist/es/ir/path/target.d.ts.map +1 -1
  55. package/dist/es/ir/path/target.js +4 -5
  56. package/dist/es/ir/scene.d.ts +156 -0
  57. package/dist/es/ir/scene.d.ts.map +1 -1
  58. package/dist/es/ir/scene.js +3 -1
  59. package/dist/es/ir/scope.d.ts +1671 -424
  60. package/dist/es/ir/scope.d.ts.map +1 -1
  61. package/dist/es/ir/scope.js +10 -2
  62. package/dist/es/ir/shape.d.ts +14 -0
  63. package/dist/es/ir/shape.d.ts.map +1 -0
  64. package/dist/es/ir/shape.js +9 -0
  65. package/dist/es/parsers/parseNodeTarget.d.ts.map +1 -1
  66. package/dist/es/parsers/parseNodeTarget.js +4 -2
  67. package/dist/es/presets/animation.d.ts +123 -0
  68. package/dist/es/presets/animation.d.ts.map +1 -0
  69. package/dist/es/presets/animation.js +272 -0
  70. package/dist/es/presets/index.d.ts +3 -0
  71. package/dist/es/presets/index.d.ts.map +1 -0
  72. package/dist/es/primitive/ellipse.d.ts +6 -0
  73. package/dist/es/primitive/ellipse.d.ts.map +1 -1
  74. package/dist/es/primitive/group.d.ts +6 -0
  75. package/dist/es/primitive/group.d.ts.map +1 -1
  76. package/dist/es/primitive/path.d.ts +6 -0
  77. package/dist/es/primitive/path.d.ts.map +1 -1
  78. package/dist/es/primitive/rect.d.ts +6 -0
  79. package/dist/es/primitive/rect.d.ts.map +1 -1
  80. package/dist/es/primitive/scene.d.ts +3 -0
  81. package/dist/es/primitive/scene.d.ts.map +1 -1
  82. package/dist/es/primitive/text.d.ts +6 -0
  83. package/dist/es/primitive/text.d.ts.map +1 -1
  84. package/dist/es/shapes/_contour.d.ts +19 -0
  85. package/dist/es/shapes/_contour.d.ts.map +1 -0
  86. package/dist/es/shapes/_contour.js +60 -0
  87. package/dist/es/shapes/_shared.d.ts +54 -0
  88. package/dist/es/shapes/_shared.d.ts.map +1 -1
  89. package/dist/es/shapes/_shared.js +68 -1
  90. package/dist/es/shapes/arc.d.ts +8 -0
  91. package/dist/es/shapes/arc.d.ts.map +1 -0
  92. package/dist/es/shapes/arc.js +104 -0
  93. package/dist/es/shapes/define.d.ts +13 -0
  94. package/dist/es/shapes/define.d.ts.map +1 -0
  95. package/dist/es/shapes/define.js +13 -0
  96. package/dist/es/shapes/ellipse.d.ts +5 -4
  97. package/dist/es/shapes/ellipse.d.ts.map +1 -1
  98. package/dist/es/shapes/ellipse.js +15 -7
  99. package/dist/es/shapes/index.d.ts +9 -6
  100. package/dist/es/shapes/index.d.ts.map +1 -1
  101. package/dist/es/shapes/index.js +10 -5
  102. package/dist/es/shapes/polygon.d.ts +13 -0
  103. package/dist/es/shapes/polygon.d.ts.map +1 -0
  104. package/dist/es/shapes/polygon.js +104 -0
  105. package/dist/es/shapes/rectangle.d.ts +7 -5
  106. package/dist/es/shapes/rectangle.d.ts.map +1 -1
  107. package/dist/es/shapes/rectangle.js +37 -8
  108. package/dist/es/shapes/sector.d.ts +9 -0
  109. package/dist/es/shapes/sector.d.ts.map +1 -0
  110. package/dist/es/shapes/sector.js +143 -0
  111. package/dist/es/shapes/star.d.ts +15 -0
  112. package/dist/es/shapes/star.d.ts.map +1 -0
  113. package/dist/es/shapes/star.js +113 -0
  114. package/dist/es/shapes/types.d.ts +47 -14
  115. package/dist/es/shapes/types.d.ts.map +1 -1
  116. package/dist/lib/compile/anchor-cache.cjs +14 -10
  117. package/dist/lib/compile/anchor-cache.d.ts +5 -3
  118. package/dist/lib/compile/anchor-cache.d.ts.map +1 -1
  119. package/dist/lib/compile/boundary.cjs +65 -0
  120. package/dist/lib/compile/boundary.d.ts +19 -0
  121. package/dist/lib/compile/boundary.d.ts.map +1 -0
  122. package/dist/lib/compile/compile.cjs +49 -5
  123. package/dist/lib/compile/compile.d.ts +1 -1
  124. package/dist/lib/compile/compile.d.ts.map +1 -1
  125. package/dist/lib/compile/node.cjs +103 -16
  126. package/dist/lib/compile/node.d.ts +26 -8
  127. package/dist/lib/compile/node.d.ts.map +1 -1
  128. package/dist/lib/compile/path/anchor.cjs +7 -6
  129. package/dist/lib/compile/path/anchor.d.ts.map +1 -1
  130. package/dist/lib/compile/path/index.cjs +7 -3
  131. package/dist/lib/compile/path/index.d.ts.map +1 -1
  132. package/dist/lib/compile/path/relative.cjs +1 -1
  133. package/dist/lib/compile/scope.cjs +2 -1
  134. package/dist/lib/compile/scope.d.ts.map +1 -1
  135. package/dist/lib/geometry/arc.cjs +66 -8
  136. package/dist/lib/geometry/arc.d.ts +14 -0
  137. package/dist/lib/geometry/arc.d.ts.map +1 -1
  138. package/dist/lib/geometry/index.d.ts +1 -0
  139. package/dist/lib/geometry/index.d.ts.map +1 -1
  140. package/dist/lib/geometry/rect.cjs +3 -3
  141. package/dist/lib/geometry/rect.d.ts +2 -2
  142. package/dist/lib/geometry/rect.d.ts.map +1 -1
  143. package/dist/lib/geometry/roundedContour.cjs +418 -0
  144. package/dist/lib/geometry/roundedContour.d.ts +88 -0
  145. package/dist/lib/geometry/roundedContour.d.ts.map +1 -0
  146. package/dist/lib/index.cjs +41 -7
  147. package/dist/lib/index.d.ts +9 -5
  148. package/dist/lib/index.d.ts.map +1 -1
  149. package/dist/lib/ir/animation.cjs +127 -0
  150. package/dist/lib/ir/animation.d.ts +218 -0
  151. package/dist/lib/ir/animation.d.ts.map +1 -0
  152. package/dist/lib/ir/boundary.cjs +15 -0
  153. package/dist/lib/ir/boundary.d.ts +25 -0
  154. package/dist/lib/ir/boundary.d.ts.map +1 -0
  155. package/dist/lib/ir/index.d.ts +3 -0
  156. package/dist/lib/ir/index.d.ts.map +1 -1
  157. package/dist/lib/ir/node.cjs +10 -3
  158. package/dist/lib/ir/node.d.ts +219 -27
  159. package/dist/lib/ir/node.d.ts.map +1 -1
  160. package/dist/lib/ir/path/arrow.d.ts +36 -36
  161. package/dist/lib/ir/path/path.cjs +4 -0
  162. package/dist/lib/ir/path/path.d.ts +702 -203
  163. package/dist/lib/ir/path/path.d.ts.map +1 -1
  164. package/dist/lib/ir/path/step.cjs +2 -2
  165. package/dist/lib/ir/path/step.d.ts +674 -154
  166. package/dist/lib/ir/path/step.d.ts.map +1 -1
  167. package/dist/lib/ir/path/target.cjs +4 -5
  168. package/dist/lib/ir/path/target.d.ts +43 -8
  169. package/dist/lib/ir/path/target.d.ts.map +1 -1
  170. package/dist/lib/ir/scene.cjs +3 -1
  171. package/dist/lib/ir/scene.d.ts +156 -0
  172. package/dist/lib/ir/scene.d.ts.map +1 -1
  173. package/dist/lib/ir/scope.cjs +10 -2
  174. package/dist/lib/ir/scope.d.ts +1671 -424
  175. package/dist/lib/ir/scope.d.ts.map +1 -1
  176. package/dist/lib/ir/shape.cjs +9 -0
  177. package/dist/lib/ir/shape.d.ts +14 -0
  178. package/dist/lib/ir/shape.d.ts.map +1 -0
  179. package/dist/lib/parsers/parseNodeTarget.cjs +4 -2
  180. package/dist/lib/parsers/parseNodeTarget.d.ts.map +1 -1
  181. package/dist/lib/presets/animation.cjs +286 -0
  182. package/dist/lib/presets/animation.d.ts +123 -0
  183. package/dist/lib/presets/animation.d.ts.map +1 -0
  184. package/dist/lib/presets/index.d.ts +3 -0
  185. package/dist/lib/presets/index.d.ts.map +1 -0
  186. package/dist/lib/primitive/ellipse.d.ts +6 -0
  187. package/dist/lib/primitive/ellipse.d.ts.map +1 -1
  188. package/dist/lib/primitive/group.d.ts +6 -0
  189. package/dist/lib/primitive/group.d.ts.map +1 -1
  190. package/dist/lib/primitive/path.d.ts +6 -0
  191. package/dist/lib/primitive/path.d.ts.map +1 -1
  192. package/dist/lib/primitive/rect.d.ts +6 -0
  193. package/dist/lib/primitive/rect.d.ts.map +1 -1
  194. package/dist/lib/primitive/scene.d.ts +3 -0
  195. package/dist/lib/primitive/scene.d.ts.map +1 -1
  196. package/dist/lib/primitive/text.d.ts +6 -0
  197. package/dist/lib/primitive/text.d.ts.map +1 -1
  198. package/dist/lib/shapes/_contour.cjs +61 -0
  199. package/dist/lib/shapes/_contour.d.ts +19 -0
  200. package/dist/lib/shapes/_contour.d.ts.map +1 -0
  201. package/dist/lib/shapes/_shared.cjs +70 -0
  202. package/dist/lib/shapes/_shared.d.ts +54 -0
  203. package/dist/lib/shapes/_shared.d.ts.map +1 -1
  204. package/dist/lib/shapes/arc.cjs +104 -0
  205. package/dist/lib/shapes/arc.d.ts +8 -0
  206. package/dist/lib/shapes/arc.d.ts.map +1 -0
  207. package/dist/lib/shapes/define.cjs +13 -0
  208. package/dist/lib/shapes/define.d.ts +13 -0
  209. package/dist/lib/shapes/define.d.ts.map +1 -0
  210. package/dist/lib/shapes/ellipse.cjs +15 -7
  211. package/dist/lib/shapes/ellipse.d.ts +5 -4
  212. package/dist/lib/shapes/ellipse.d.ts.map +1 -1
  213. package/dist/lib/shapes/index.cjs +12 -6
  214. package/dist/lib/shapes/index.d.ts +9 -6
  215. package/dist/lib/shapes/index.d.ts.map +1 -1
  216. package/dist/lib/shapes/polygon.cjs +104 -0
  217. package/dist/lib/shapes/polygon.d.ts +13 -0
  218. package/dist/lib/shapes/polygon.d.ts.map +1 -0
  219. package/dist/lib/shapes/rectangle.cjs +37 -8
  220. package/dist/lib/shapes/rectangle.d.ts +7 -5
  221. package/dist/lib/shapes/rectangle.d.ts.map +1 -1
  222. package/dist/lib/shapes/sector.cjs +143 -0
  223. package/dist/lib/shapes/sector.d.ts +9 -0
  224. package/dist/lib/shapes/sector.d.ts.map +1 -0
  225. package/dist/lib/shapes/star.cjs +113 -0
  226. package/dist/lib/shapes/star.d.ts +15 -0
  227. package/dist/lib/shapes/star.d.ts.map +1 -0
  228. package/dist/lib/shapes/types.d.ts +47 -14
  229. package/dist/lib/shapes/types.d.ts.map +1 -1
  230. package/package.json +2 -2
  231. package/dist/es/shapes/circle.d.ts +0 -8
  232. package/dist/es/shapes/circle.d.ts.map +0 -1
  233. package/dist/es/shapes/circle.js +0 -34
  234. package/dist/es/shapes/diamond.d.ts +0 -8
  235. package/dist/es/shapes/diamond.d.ts.map +0 -1
  236. package/dist/es/shapes/diamond.js +0 -66
  237. package/dist/lib/shapes/circle.cjs +0 -34
  238. package/dist/lib/shapes/circle.d.ts +0 -8
  239. package/dist/lib/shapes/circle.d.ts.map +0 -1
  240. package/dist/lib/shapes/diamond.cjs +0 -66
  241. package/dist/lib/shapes/diamond.d.ts +0 -8
  242. package/dist/lib/shapes/diamond.d.ts.map +0 -1
@@ -0,0 +1,418 @@
1
+ const require_arc = require("./arc.cjs");
2
+ //#region src/geometry/roundedContour.ts
3
+ var DEG_TO_RAD = Math.PI / 180;
4
+ var RAD_TO_DEG = 180 / Math.PI;
5
+ var EPSILON = 1e-9;
6
+ /** 向量长度 */
7
+ var length = (v) => Math.hypot(v[0], v[1]);
8
+ /** 归一化(零向量回退 [1, 0]) */
9
+ var normalize = (v) => {
10
+ const len = length(v);
11
+ if (len < EPSILON) return [1, 0];
12
+ return [v[0] / len, v[1] / len];
13
+ };
14
+ /** 二维叉积 a × b */
15
+ var cross = (a, b) => a[0] * b[1] - a[1] * b[0];
16
+ /** 点 + 角度(度)→ 圆周点 */
17
+ var arcPoint = (center, radius, angleDeg) => {
18
+ const rad = angleDeg * DEG_TO_RAD;
19
+ return [center[0] + Math.cos(rad) * radius, center[1] + Math.sin(rad) * radius];
20
+ };
21
+ /** 段起点 */
22
+ var segmentStart = (seg) => seg.kind === "line" ? seg.from : arcPoint(seg.center, seg.radius, seg.startAngle);
23
+ /** 段终点 */
24
+ var segmentEnd = (seg) => seg.kind === "line" ? seg.to : arcPoint(seg.center, seg.radius, seg.endAngle);
25
+ /**
26
+ * 段在某端的「行进切线」单位向量
27
+ * @description atStart=true 取起点处沿行进方向的切线,否则取终点处。line 两端切线相同;
28
+ * arc 切线垂直于半径,方向随 counterClockwise 翻转(CW: (-sinθ, cosθ),CCW: (sinθ, -cosθ))。
29
+ */
30
+ var tangentAt = (seg, atStart) => {
31
+ if (seg.kind === "line") return normalize([seg.to[0] - seg.from[0], seg.to[1] - seg.from[1]]);
32
+ const rad = (atStart ? seg.startAngle : seg.endAngle) * DEG_TO_RAD;
33
+ const sign = seg.counterClockwise ? -1 : 1;
34
+ return normalize([-Math.sin(rad) * sign, Math.cos(rad) * sign]);
35
+ };
36
+ /** arc 段的角跨度(带符号:CW 为正递增、CCW 为负),单位度 */
37
+ var arcSpan = (seg) => seg.endAngle - seg.startAngle;
38
+ /**
39
+ * 把一个点投影到段上、返回沿段的「已走比例」(line: t∈[0,1];arc: 已扫角 / 总跨度)
40
+ * @description 用于逐角夹紧:校验切点是否落在该段长度(弧用角度)内。返回 fraction 可能 <0 或 >1 表示越界。
41
+ */
42
+ var fractionAlong = (seg, p, fromStart) => {
43
+ if (seg.kind === "line") {
44
+ const ex = seg.to[0] - seg.from[0];
45
+ const ey = seg.to[1] - seg.from[1];
46
+ const len2 = ex * ex + ey * ey;
47
+ if (len2 < EPSILON) return 0;
48
+ const t = ((p[0] - seg.from[0]) * ex + (p[1] - seg.from[1]) * ey) / len2;
49
+ return fromStart ? t : 1 - t;
50
+ }
51
+ const angle = Math.atan2(p[1] - seg.center[1], p[0] - seg.center[0]) * RAD_TO_DEG;
52
+ const span = Math.abs(arcSpan(seg));
53
+ if (span < EPSILON) return 0;
54
+ const ccw = seg.counterClockwise ?? false;
55
+ const ref = fromStart ? seg.startAngle : seg.endAngle;
56
+ let swept = ((fromStart ? ccw : !ccw) ? ref - angle : angle - ref) % 360;
57
+ if (swept < 0) swept += 360;
58
+ if (swept > 180) swept -= 360;
59
+ return swept / span;
60
+ };
61
+ /**
62
+ * 段朝 fillet 圆心侧偏移 r:line→平行线、arc→同心圆。
63
+ * @description fillet 圆心所在侧由接缝转向 turnSign 决定(叉积 tIn×tOut):凸角圆心在轮廓内侧、
64
+ * 凹角(反向转)圆心在外侧(弧仍嵌入凹槽)。故偏移侧 = 行进方向左手 (-dy, dx) 乘 turnSign 符号。
65
+ * arc 同心偏移返回 radius−r 主候选;±r 两候选由 offsetSegmentAlt 补齐、求交后按真实距离校验择优。
66
+ */
67
+ var offsetSegment = (seg, r, turnSign, atEnd) => {
68
+ if (seg.kind === "line") {
69
+ const dir = tangentAt(seg, true);
70
+ const sign = turnSign >= 0 ? 1 : -1;
71
+ const normal = [-dir[1] * sign, dir[0] * sign];
72
+ const base = atEnd ? seg.to : seg.from;
73
+ return {
74
+ kind: "line",
75
+ point: [base[0] + normal[0] * r, base[1] + normal[1] * r],
76
+ dir
77
+ };
78
+ }
79
+ return {
80
+ kind: "circle",
81
+ center: seg.center,
82
+ radius: seg.radius - r
83
+ };
84
+ };
85
+ /** arc 段内侧偏移的另一候选(radius + r),与 offsetSegment 配合枚举 */
86
+ var offsetSegmentAlt = (seg, r) => ({
87
+ kind: "circle",
88
+ center: seg.center,
89
+ radius: seg.radius + r
90
+ });
91
+ /** 直线 ∩ 直线(各以 point + dir 表示),返回交点或 undefined(平行) */
92
+ var intersectLineLine = (a, b) => {
93
+ const det = cross(a.dir, b.dir);
94
+ if (Math.abs(det) < EPSILON) return void 0;
95
+ const dx = b.point[0] - a.point[0];
96
+ const dy = b.point[1] - a.point[1];
97
+ const t = (dx * b.dir[1] - dy * b.dir[0]) / det;
98
+ return [a.point[0] + a.dir[0] * t, a.point[1] + a.dir[1] * t];
99
+ };
100
+ /** 直线(point+dir)∩ 圆(center,radius),返回交点列(0/1/2 个) */
101
+ var intersectLineCircle = (line, circle) => {
102
+ const ox = line.point[0] - circle.center[0];
103
+ const oy = line.point[1] - circle.center[1];
104
+ const ux = line.dir[0];
105
+ const uy = line.dir[1];
106
+ const b = 2 * (ox * ux + oy * uy);
107
+ const c = ox * ox + oy * oy - circle.radius * circle.radius;
108
+ const disc = b * b - 4 * c;
109
+ if (disc < 0) return [];
110
+ const sq = Math.sqrt(disc);
111
+ const out = [];
112
+ for (const t of [(-b - sq) / 2, (-b + sq) / 2]) out.push([line.point[0] + ux * t, line.point[1] + uy * t]);
113
+ return out;
114
+ };
115
+ /** 圆 ∩ 圆,返回交点列(0/1/2 个) */
116
+ var intersectCircleCircle = (a, b) => {
117
+ const dx = b.center[0] - a.center[0];
118
+ const dy = b.center[1] - a.center[1];
119
+ const d = Math.hypot(dx, dy);
120
+ if (d < EPSILON || d > a.radius + b.radius + EPSILON || d < Math.abs(a.radius - b.radius) - EPSILON) return [];
121
+ const aa = (a.radius * a.radius - b.radius * b.radius + d * d) / (2 * d);
122
+ const h2 = a.radius * a.radius - aa * aa;
123
+ const h = h2 > 0 ? Math.sqrt(h2) : 0;
124
+ const mx = a.center[0] + aa * dx / d;
125
+ const my = a.center[1] + aa * dy / d;
126
+ const rx = -dy * h / d;
127
+ const ry = dx * h / d;
128
+ return [[mx + rx, my + ry], [mx - rx, my - ry]];
129
+ };
130
+ /** 点到直线(无限延长)的有符号垂足点 */
131
+ var footOnLine = (p, base, dir) => {
132
+ const t = (p[0] - base[0]) * dir[0] + (p[1] - base[1]) * dir[1];
133
+ return [base[0] + dir[0] * t, base[1] + dir[1] * t];
134
+ };
135
+ /**
136
+ * 解算一个接缝(segA 终点 = segB 起点)的 fillet
137
+ * @description segA / segB 至少一为 line(arc-arc 由调用方提前拒绝)。流程:
138
+ * 1. 取接缝点 corner、前段到达切线 tIn、后段离开切线 tOut,叉积 turnSign 定转向(含内侧)。
139
+ * 2. 由两段「内侧偏移 r」求 fillet 圆心:候选交点中挑离两段距离均≈r、且落在 corner 内侧的那个。
140
+ * 3. 圆心到两段的垂足 / 投影点 = 两切点。
141
+ * 4. 逐角夹紧:切点须落在两段剩余长度内(fraction∈[0,1]),越界则缩 r 重解;r→0 标记不倒。
142
+ */
143
+ var solveFillet = (segA, segB, r) => {
144
+ if (segA.kind === "arc" && segB.kind === "arc") throw new Error("filletContour: arc-arc seam fillet is not supported");
145
+ const corner = segmentEnd(segA);
146
+ const turnSign = cross(tangentAt(segA, false), tangentAt(segB, true));
147
+ const attempt = (radius) => {
148
+ if (radius <= EPSILON) return void 0;
149
+ const offA = offsetSegment(segA, radius, turnSign, true);
150
+ const offB = offsetSegment(segB, radius, turnSign, false);
151
+ const candidates = [];
152
+ const pushIntersections = (oa, ob) => {
153
+ if (oa.kind === "line" && ob.kind === "line") {
154
+ const p = intersectLineLine(oa, ob);
155
+ if (p) candidates.push(p);
156
+ } else if (oa.kind === "line" && ob.kind === "circle") candidates.push(...intersectLineCircle(oa, ob));
157
+ else if (oa.kind === "circle" && ob.kind === "line") candidates.push(...intersectLineCircle(ob, oa));
158
+ else if (oa.kind === "circle" && ob.kind === "circle") candidates.push(...intersectCircleCircle(oa, ob));
159
+ };
160
+ pushIntersections(offA, offB);
161
+ if (segA.kind === "arc") pushIntersections(offsetSegmentAlt(segA, radius), offB);
162
+ if (segB.kind === "arc") pushIntersections(offA, offsetSegmentAlt(segB, radius));
163
+ if (segA.kind === "arc" && segB.kind === "arc") pushIntersections(offsetSegmentAlt(segA, radius), offsetSegmentAlt(segB, radius));
164
+ let best;
165
+ let bestDist = Infinity;
166
+ for (const cand of candidates) {
167
+ const tInPt = tangentPointOn(segA, cand, radius);
168
+ const tOutPt = tangentPointOn(segB, cand, radius);
169
+ if (!tInPt || !tOutPt) continue;
170
+ const dA = distanceToAny(segA, cand);
171
+ const dB = distanceToAny(segB, cand);
172
+ if (Math.abs(dA - radius) > 1e-6 || Math.abs(dB - radius) > 1e-6) continue;
173
+ const inFrac = fractionAlong(segA, tInPt, false);
174
+ const outFrac = fractionAlong(segB, tOutPt, true);
175
+ if (inFrac < -1e-7 || inFrac > .5000001 || outFrac < -1e-7 || outFrac > .5000001) continue;
176
+ const d = Math.hypot(cand[0] - corner[0], cand[1] - corner[1]);
177
+ if (d < bestDist) {
178
+ bestDist = d;
179
+ best = {
180
+ center: cand,
181
+ tInPt,
182
+ tOutPt,
183
+ inFrac,
184
+ outFrac
185
+ };
186
+ }
187
+ }
188
+ if (!best) return void 0;
189
+ const startAngle = Math.atan2(best.tInPt[1] - best.center[1], best.tInPt[0] - best.center[0]) * RAD_TO_DEG;
190
+ const endAngle = Math.atan2(best.tOutPt[1] - best.center[1], best.tOutPt[0] - best.center[0]) * RAD_TO_DEG;
191
+ const counterClockwise = turnSign < 0;
192
+ const adjusted = alignSweep(startAngle, endAngle, counterClockwise);
193
+ return {
194
+ tangentInPoint: best.tInPt,
195
+ tangentOutPoint: best.tOutPt,
196
+ center: best.center,
197
+ radius,
198
+ startAngle: adjusted.start,
199
+ endAngle: adjusted.end,
200
+ counterClockwise,
201
+ clampedToZero: false
202
+ };
203
+ };
204
+ const direct = attempt(r);
205
+ if (direct) return direct;
206
+ let lo = 0;
207
+ let hi = r;
208
+ let bestSolution;
209
+ for (let iter = 0; iter < 48; iter++) {
210
+ const mid = (lo + hi) / 2;
211
+ const sol = attempt(mid);
212
+ if (sol) {
213
+ bestSolution = sol;
214
+ lo = mid;
215
+ } else hi = mid;
216
+ }
217
+ if (bestSolution) return bestSolution;
218
+ return {
219
+ tangentInPoint: corner,
220
+ tangentOutPoint: corner,
221
+ center: corner,
222
+ radius: 0,
223
+ startAngle: 0,
224
+ endAngle: 0,
225
+ counterClockwise: false,
226
+ clampedToZero: true
227
+ };
228
+ };
229
+ /** 点到段(line / arc 所在直线 / 圆)的距离 */
230
+ var distanceToAny = (seg, p) => {
231
+ if (seg.kind === "line") {
232
+ const dir = tangentAt(seg, true);
233
+ const foot = footOnLine(p, seg.from, dir);
234
+ return Math.hypot(p[0] - foot[0], p[1] - foot[1]);
235
+ }
236
+ const d = Math.hypot(p[0] - seg.center[0], p[1] - seg.center[1]);
237
+ return Math.abs(d - seg.radius);
238
+ };
239
+ /**
240
+ * fillet 圆心 → 段上切点
241
+ * @description line:圆心在直线上的垂足。arc:圆心与 arc 圆心连线 ∩ arc 圆周(朝 fillet 圆心一侧)。
242
+ * 切点须落在段几何上(line 在线上、arc 在弧角度区间内)才有效,否则返回 undefined。
243
+ */
244
+ var tangentPointOn = (seg, filletCenter, radius) => {
245
+ if (seg.kind === "line") {
246
+ const dir = tangentAt(seg, true);
247
+ return footOnLine(filletCenter, seg.from, dir);
248
+ }
249
+ const vx = filletCenter[0] - seg.center[0];
250
+ const vy = filletCenter[1] - seg.center[1];
251
+ const d = Math.hypot(vx, vy);
252
+ if (d < EPSILON) return void 0;
253
+ const ux = vx / d;
254
+ const uy = vy / d;
255
+ const candidates = [[seg.center[0] + ux * seg.radius, seg.center[1] + uy * seg.radius], [seg.center[0] - ux * seg.radius, seg.center[1] - uy * seg.radius]];
256
+ let best;
257
+ let bestErr = Infinity;
258
+ for (const cand of candidates) {
259
+ const angle = Math.atan2(cand[1] - seg.center[1], cand[0] - seg.center[0]) * RAD_TO_DEG;
260
+ if (!require_arc.arcAngleInRange(seg.startAngle, seg.endAngle, angle, 1e-6)) continue;
261
+ const err = Math.abs(Math.hypot(cand[0] - filletCenter[0], cand[1] - filletCenter[1]) - radius);
262
+ if (err < bestErr) {
263
+ bestErr = err;
264
+ best = cand;
265
+ }
266
+ }
267
+ return bestErr <= 1e-6 ? best : void 0;
268
+ };
269
+ /**
270
+ * 对闭合轮廓的每个接缝做 fillet,返回 fillet 解算列表(与接缝一一对应,下标 i = 段 i 终点接段 (i+1)%n 起点)
271
+ * @description cornerRadius 省略 / ≤0 → 返回空数组(调用方据此 passthrough 原段序列)。arc-arc 接缝抛错。
272
+ */
273
+ var filletContour = (segments, cornerRadius) => {
274
+ if (cornerRadius === void 0 || cornerRadius <= 0 || segments.length < 2) return [];
275
+ const n = segments.length;
276
+ const out = [];
277
+ for (let i = 0; i < n; i++) {
278
+ const segA = segments[i];
279
+ const segB = segments[(i + 1) % n];
280
+ out.push(solveFillet(segA, segB, cornerRadius));
281
+ }
282
+ return out;
283
+ };
284
+ /**
285
+ * 把闭合轮廓 + cornerRadius emit 成路径命令(move + 缩短 line + 裁剪原 arc + fillet arc + close)
286
+ * @description cornerRadius 省略 / ≤0 → 直接 emit 原始尖角轮廓(passthrough)。否则每段从「上一接缝的
287
+ * fillet 出点」走到「本接缝的 fillet 入点」(line 缩短 / arc 裁剪角度),接缝处插 fillet 弧。
288
+ * 夹紧到 0 的角不插弧、按原尖角连接。
289
+ */
290
+ var contourCommands = (segments, cornerRadius) => {
291
+ const n = segments.length;
292
+ if (n === 0) return [];
293
+ const fillets = filletContour(segments, cornerRadius);
294
+ if (fillets.length === 0) {
295
+ const cmds = [];
296
+ segments.forEach((seg, i) => {
297
+ if (i === 0) cmds.push({
298
+ kind: "move",
299
+ to: segmentStart(seg)
300
+ });
301
+ emitSegmentBody(seg, segmentStart(seg), segmentEnd(seg), cmds);
302
+ });
303
+ cmds.push({ kind: "close" });
304
+ return cmds;
305
+ }
306
+ const cmds = [];
307
+ for (let i = 0; i < n; i++) {
308
+ const seg = segments[i];
309
+ const prevFillet = fillets[(i - 1 + n) % n];
310
+ const thisFillet = fillets[i];
311
+ const start = prevFillet.clampedToZero ? segmentStart(seg) : prevFillet.tangentOutPoint;
312
+ const end = thisFillet.clampedToZero ? segmentEnd(seg) : thisFillet.tangentInPoint;
313
+ if (i === 0) cmds.push({
314
+ kind: "move",
315
+ to: start
316
+ });
317
+ emitSegmentBody(seg, start, end, cmds);
318
+ if (!thisFillet.clampedToZero) cmds.push({
319
+ kind: "arc",
320
+ center: thisFillet.center,
321
+ radius: thisFillet.radius,
322
+ startAngle: thisFillet.startAngle,
323
+ endAngle: thisFillet.endAngle,
324
+ counterClockwise: thisFillet.counterClockwise
325
+ });
326
+ }
327
+ cmds.push({ kind: "close" });
328
+ return cmds;
329
+ };
330
+ /** emit 单段主体(line → line 命令到 end;arc → 裁剪角度的 arc 命令到 end),起点由调用方先 move/前段给出 */
331
+ var emitSegmentBody = (seg, start, end, cmds) => {
332
+ if (seg.kind === "line") {
333
+ cmds.push({
334
+ kind: "line",
335
+ to: end
336
+ });
337
+ return;
338
+ }
339
+ const adjusted = alignSweep(Math.atan2(start[1] - seg.center[1], start[0] - seg.center[0]) * RAD_TO_DEG, Math.atan2(end[1] - seg.center[1], end[0] - seg.center[0]) * RAD_TO_DEG, seg.counterClockwise ?? false);
340
+ cmds.push({
341
+ kind: "arc",
342
+ center: seg.center,
343
+ radius: seg.radius,
344
+ startAngle: adjusted.start,
345
+ endAngle: adjusted.end,
346
+ counterClockwise: seg.counterClockwise
347
+ });
348
+ };
349
+ /** 调整 endAngle 使「start→end」沿给定扫描方向(ccw: 递减 / 否则递增),保持裁剪后弧方向不变 */
350
+ var alignSweep = (start, end, ccw) => {
351
+ let e = end;
352
+ if (ccw) {
353
+ while (e > start) e -= 360;
354
+ while (e <= start - 360) e += 360;
355
+ } else {
356
+ while (e < start) e += 360;
357
+ while (e >= start + 360) e -= 360;
358
+ }
359
+ return {
360
+ start,
361
+ end: e
362
+ };
363
+ };
364
+ /**
365
+ * 从 rayOrigin 朝 toward 射线 ∩ fillet 后轮廓全部段,返回最近正向交点
366
+ * @description rayOrigin 显式传(不假设中心);toward 是射线指向的目标点(方向 = toward − rayOrigin)。
367
+ * 遍历 fillet 后的有效段(缩短 line / 裁剪 arc / fillet arc),对每段求 ray∩段、取最小正参数命中点。
368
+ * cornerRadius 省略 / ≤0 → 走原尖角轮廓。无命中返回 undefined(调用方兜底)。
369
+ */
370
+ var boundaryFromContour = (segments, cornerRadius, rayOrigin, toward) => {
371
+ const dirRaw = [toward[0] - rayOrigin[0], toward[1] - rayOrigin[1]];
372
+ const dl = length(dirRaw);
373
+ if (dl < 1e-12) return void 0;
374
+ const dir = [dirRaw[0] / dl, dirRaw[1] / dl];
375
+ const n = segments.length;
376
+ const fillets = filletContour(segments, cornerRadius);
377
+ let best = Infinity;
378
+ const considerLine = (a, b) => {
379
+ const ex = b[0] - a[0];
380
+ const ey = b[1] - a[1];
381
+ const det = dir[0] * -ey - -ex * dir[1];
382
+ if (Math.abs(det) < 1e-12) return;
383
+ const ax = a[0] - rayOrigin[0];
384
+ const ay = a[1] - rayOrigin[1];
385
+ const s = (ax * -ey - -ex * ay) / det;
386
+ const t = (dir[0] * ay - ax * dir[1]) / det;
387
+ if (s <= 1e-9 || s >= best) return;
388
+ if (t >= -1e-9 && t <= 1.000000001) best = s;
389
+ };
390
+ const considerArc = (center, radius, startAngle, endAngle, ccw) => {
391
+ const aligned = alignSweep(startAngle, endAngle, ccw);
392
+ const hits = require_arc.rayArc(rayOrigin, dir, center, radius, aligned.start, aligned.end);
393
+ for (const s of hits) if (s > 1e-9 && s < best) best = s;
394
+ };
395
+ if (fillets.length === 0) for (let i = 0; i < n; i++) {
396
+ const seg = segments[i];
397
+ if (seg.kind === "line") considerLine(seg.from, seg.to);
398
+ else considerArc(seg.center, seg.radius, seg.startAngle, seg.endAngle, seg.counterClockwise ?? false);
399
+ }
400
+ else for (let i = 0; i < n; i++) {
401
+ const seg = segments[i];
402
+ const prevFillet = fillets[(i - 1 + n) % n];
403
+ const thisFillet = fillets[i];
404
+ const start = prevFillet.clampedToZero ? segmentStart(seg) : prevFillet.tangentOutPoint;
405
+ const end = thisFillet.clampedToZero ? segmentEnd(seg) : thisFillet.tangentInPoint;
406
+ if (seg.kind === "line") considerLine(start, end);
407
+ else {
408
+ const aligned = alignSweep(Math.atan2(start[1] - seg.center[1], start[0] - seg.center[0]) * RAD_TO_DEG, Math.atan2(end[1] - seg.center[1], end[0] - seg.center[0]) * RAD_TO_DEG, seg.counterClockwise ?? false);
409
+ considerArc(seg.center, seg.radius, aligned.start, aligned.end, seg.counterClockwise ?? false);
410
+ }
411
+ if (!thisFillet.clampedToZero) considerArc(thisFillet.center, thisFillet.radius, thisFillet.startAngle, thisFillet.endAngle, thisFillet.counterClockwise);
412
+ }
413
+ if (!Number.isFinite(best)) return void 0;
414
+ return [rayOrigin[0] + dir[0] * best, rayOrigin[1] + dir[1] * best];
415
+ };
416
+ //#endregion
417
+ exports.boundaryFromContour = boundaryFromContour;
418
+ exports.contourCommands = contourCommands;
@@ -0,0 +1,88 @@
1
+ import { Position } from './point';
2
+ /** 直线段:从 from 到 to 的有向线段 */
3
+ export type LineSegment = {
4
+ /** 鉴别字面量 */
5
+ kind: 'line';
6
+ /** 起点 [x, y] */
7
+ from: Position;
8
+ /** 终点 [x, y] */
9
+ to: Position;
10
+ };
11
+ /** 圆弧段:圆心 + 半径 + 起末角(度)+ 扫描方向,与 ir/path arc 同参数化 */
12
+ export type ArcSegment = {
13
+ /** 鉴别字面量 */
14
+ kind: 'arc';
15
+ /** 圆心 [x, y] */
16
+ center: Position;
17
+ /** 半径(user units) */
18
+ radius: number;
19
+ /** 起始角度(度,0=+x、90=+y 视觉下) */
20
+ startAngle: number;
21
+ /** 终止角度(度) */
22
+ endAngle: number;
23
+ /** 是否逆时针扫描;缺省 / false = CW(角度递增 / 屏幕顺时针) */
24
+ counterClockwise?: boolean;
25
+ };
26
+ /** 轮廓段:组成闭合轮廓的最小单元(直线或圆弧) */
27
+ export type ContourSegment = LineSegment | ArcSegment;
28
+ /** fillet 后用于 emit 的路径命令(与 primitive/path PathCommand 的 move/line/arc/close 子集对齐) */
29
+ export type ContourCommand = {
30
+ kind: 'move';
31
+ to: Position;
32
+ } | {
33
+ kind: 'line';
34
+ to: Position;
35
+ } | {
36
+ kind: 'arc';
37
+ center: Position;
38
+ radius: number;
39
+ startAngle: number;
40
+ endAngle: number;
41
+ counterClockwise?: boolean;
42
+ } | {
43
+ kind: 'close';
44
+ };
45
+ /**
46
+ * 一个接缝处 fillet 的解算结果
47
+ * @description tangentInPoint = 前段被裁短到此点(前段新终点);tangentOutPoint = 后段从此点起(后段新起点);
48
+ * filletArc 描述连接两切点的圆弧。clampedToZero=true 表示该角夹紧后 r→0,不倒角(保持尖角)。
49
+ */
50
+ type FilletSolution = {
51
+ /** 前段切点(前段新终点) */
52
+ tangentInPoint: Position;
53
+ /** 后段切点(后段新起点) */
54
+ tangentOutPoint: Position;
55
+ /** fillet 圆心 */
56
+ center: Position;
57
+ /** fillet 半径 */
58
+ radius: number;
59
+ /** fillet 弧起始角(度,从 center 看 tangentInPoint) */
60
+ startAngle: number;
61
+ /** fillet 弧终止角(度,从 center 看 tangentOutPoint) */
62
+ endAngle: number;
63
+ /** fillet 弧是否逆时针 */
64
+ counterClockwise: boolean;
65
+ /** 夹紧后 r→0,本角不倒(emit 走原尖角) */
66
+ clampedToZero: boolean;
67
+ };
68
+ /**
69
+ * 对闭合轮廓的每个接缝做 fillet,返回 fillet 解算列表(与接缝一一对应,下标 i = 段 i 终点接段 (i+1)%n 起点)
70
+ * @description cornerRadius 省略 / ≤0 → 返回空数组(调用方据此 passthrough 原段序列)。arc-arc 接缝抛错。
71
+ */
72
+ export declare const filletContour: (segments: Array<ContourSegment>, cornerRadius?: number) => Array<FilletSolution>;
73
+ /**
74
+ * 把闭合轮廓 + cornerRadius emit 成路径命令(move + 缩短 line + 裁剪原 arc + fillet arc + close)
75
+ * @description cornerRadius 省略 / ≤0 → 直接 emit 原始尖角轮廓(passthrough)。否则每段从「上一接缝的
76
+ * fillet 出点」走到「本接缝的 fillet 入点」(line 缩短 / arc 裁剪角度),接缝处插 fillet 弧。
77
+ * 夹紧到 0 的角不插弧、按原尖角连接。
78
+ */
79
+ export declare const contourCommands: (segments: Array<ContourSegment>, cornerRadius?: number) => Array<ContourCommand>;
80
+ /**
81
+ * 从 rayOrigin 朝 toward 射线 ∩ fillet 后轮廓全部段,返回最近正向交点
82
+ * @description rayOrigin 显式传(不假设中心);toward 是射线指向的目标点(方向 = toward − rayOrigin)。
83
+ * 遍历 fillet 后的有效段(缩短 line / 裁剪 arc / fillet arc),对每段求 ray∩段、取最小正参数命中点。
84
+ * cornerRadius 省略 / ≤0 → 走原尖角轮廓。无命中返回 undefined(调用方兜底)。
85
+ */
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roundedContour.d.ts","sourceRoot":"","sources":["../../../src/geometry/roundedContour.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAkBxC,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;AA6CtB;;;;GAIG;AACH,KAAK,cAAc,GAAG;IACpB,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;AAgTF;;;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,KACpB,KAAK,CAAC,cAAc,CAuCtB,CAAC;AAwCF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,KAAK,CAAC,cAAc,CAAC,EAC/B,cAAc,MAAM,GAAG,SAAS,EAChC,WAAW,QAAQ,EACnB,QAAQ,QAAQ,KACf,QAAQ,GAAG,SA2Eb,CAAC"}
@@ -3,12 +3,13 @@ const require_position = require("./ir/position/position.cjs");
3
3
  const require_polar_position = require("./ir/position/polar-position.cjs");
4
4
  const require_at_position = require("./ir/position/at-position.cjs");
5
5
  const require_offset_position = require("./ir/position/offset-position.cjs");
6
- const require__transform = require("./geometry/_transform.cjs");
7
- const require_rect = require("./geometry/rect.cjs");
6
+ const require_json = require("./ir/json.cjs");
7
+ const require_shape = require("./ir/shape.cjs");
8
+ const require_boundary = require("./ir/boundary.cjs");
8
9
  const require_target = require("./ir/path/target.cjs");
9
10
  const require_between_position = require("./ir/position/between-position.cjs");
10
11
  const require_font = require("./ir/font.cjs");
11
- const require_json = require("./ir/json.cjs");
12
+ const require_animation = require("./ir/animation.cjs");
12
13
  const require_paint = require("./ir/paint.cjs");
13
14
  const require_clip = require("./ir/clip.cjs");
14
15
  const require_text = require("./ir/text.cjs");
@@ -21,9 +22,10 @@ const require_transform = require("./ir/transform.cjs");
21
22
  const require_scope = require("./ir/scope.cjs");
22
23
  const require_composite = require("./ir/composite.cjs");
23
24
  const require_scene = require("./ir/scene.cjs");
24
- const require_circle = require("./geometry/circle.cjs");
25
+ const require__transform = require("./geometry/_transform.cjs");
26
+ const require_rect = require("./geometry/rect.cjs");
27
+ const require_define = require("./shapes/define.cjs");
25
28
  const require_ellipse = require("./geometry/ellipse.cjs");
26
- const require_diamond = require("./geometry/diamond.cjs");
27
29
  const require_index = require("./shapes/index.cjs");
28
30
  const require_index$1 = require("./arrows/index.cjs");
29
31
  const require_index$2 = require("./patterns/index.cjs");
@@ -33,9 +35,12 @@ const require_compile = require("./compile/compile.cjs");
33
35
  const require_parseNodeTarget = require("./parsers/parseNodeTarget.cjs");
34
36
  const require_parseTargetSugar = require("./parsers/parseTargetSugar.cjs");
35
37
  const require_parseWay = require("./parsers/parseWay.cjs");
38
+ const require_animation$1 = require("./presets/animation.cjs");
36
39
  const require_polar = require("./geometry/polar.cjs");
37
40
  const require_point = require("./geometry/point.cjs");
38
- const require_define = require("./pathGenerators/define.cjs");
41
+ const require_circle = require("./geometry/circle.cjs");
42
+ const require_diamond = require("./geometry/diamond.cjs");
43
+ const require_define$1 = require("./pathGenerators/define.cjs");
39
44
  const require_types = require("./composites/types.cjs");
40
45
  exports.ARROW_MARKER_DEFAULT_SIZE = require_arrow.ARROW_MARKER_DEFAULT_SIZE;
41
46
  exports.ARROW_MARKER_HOLLOW_DEFAULT_LINE_WIDTH = require_arrow.ARROW_MARKER_HOLLOW_DEFAULT_LINE_WIDTH;
@@ -43,6 +48,12 @@ exports.ARROW_SHAPES = require_arrow.ARROW_SHAPES;
43
48
  exports.AT_DIRECTIONS = require_at_position.AT_DIRECTIONS;
44
49
  exports.AbsoluteTargetSchema = require_between_position.AbsoluteTargetSchema;
45
50
  exports.AnchorRefSchema = require_target.AnchorRefSchema;
51
+ exports.AnimationDirection = require_animation.AnimationDirection;
52
+ exports.AnimationEasing = require_animation.AnimationEasing;
53
+ exports.AnimationFill = require_animation.AnimationFill;
54
+ exports.AnimationProperty = require_animation.AnimationProperty;
55
+ exports.AnimationTrackSchema = require_animation.AnimationTrackSchema;
56
+ exports.AnimationTrigger = require_animation.AnimationTrigger;
46
57
  exports.ArcStepSchema = require_step.ArcStepSchema;
47
58
  exports.ArrowDefaultSchema = require_scope.ArrowDefaultSchema;
48
59
  exports.ArrowDetailSchema = require_arrow.ArrowDetailSchema;
@@ -53,6 +64,8 @@ exports.BUILTIN_PATTERNS = require_index$2.BUILTIN_PATTERNS;
53
64
  exports.BUILTIN_SHAPES = require_index.BUILTIN_SHAPES;
54
65
  exports.BendStepSchema = require_step.BendStepSchema;
55
66
  exports.BetweenPositionSchema = require_between_position.BetweenPositionSchema;
67
+ exports.Boundary = require_boundary.Boundary;
68
+ exports.BoundarySchema = require_boundary.BoundarySchema;
56
69
  exports.CURRENT_IR_VERSION = require_scene.CURRENT_IR_VERSION;
57
70
  exports.ChildSchema = require_scene.ChildSchema;
58
71
  exports.CirclePathStepSchema = require_step.CirclePathStepSchema;
@@ -65,6 +78,7 @@ exports.CurveStepSchema = require_step.CurveStepSchema;
65
78
  exports.CycleStepSchema = require_step.CycleStepSchema;
66
79
  exports.DEFAULT_ARROW_SHAPE = require_arrow.DEFAULT_ARROW_SHAPE;
67
80
  exports.DrawWay = require_parseWay.DrawWay;
81
+ exports.EasingSchema = require_animation.EasingSchema;
68
82
  exports.EllipsePathStepSchema = require_step.EllipsePathStepSchema;
69
83
  exports.FoldStepSchema = require_step.FoldStepSchema;
70
84
  exports.FontSchema = require_font.FontSchema;
@@ -73,6 +87,7 @@ exports.GradientStopSchema = require_paint.GradientStopSchema;
73
87
  exports.HOLLOW_ARROW_SHAPES = require_arrow.HOLLOW_ARROW_SHAPES;
74
88
  exports.JsonObjectSchema = require_json.JsonObjectSchema;
75
89
  exports.JsonValueSchema = require_json.JsonValueSchema;
90
+ exports.KeyframeSchema = require_animation.KeyframeSchema;
76
91
  exports.LabelDefaultSchema = require_scope.LabelDefaultSchema;
77
92
  exports.LineSpecSchema = require_text.LineSpecSchema;
78
93
  exports.LineStepSchema = require_step.LineStepSchema;
@@ -84,6 +99,7 @@ exports.NodeLabelSchema = require_node.NodeLabelSchema;
84
99
  exports.NodeSchema = require_node.NodeSchema;
85
100
  exports.NodeTargetSchema = require_target.NodeTargetSchema;
86
101
  exports.OffsetPositionSchema = require_offset_position.OffsetPositionSchema;
102
+ exports.OriginSchema = require_animation.OriginSchema;
87
103
  exports.PATTERN_SHAPES = require_paint.PATTERN_SHAPES;
88
104
  exports.PaintSpecSchema = require_paint.PaintSpecSchema;
89
105
  exports.PathDefaultSchema = require_scope.PathDefaultSchema;
@@ -96,25 +112,43 @@ exports.RelativeAccumulateTargetSchema = require_target.RelativeAccumulateTarget
96
112
  exports.RelativeTargetSchema = require_target.RelativeTargetSchema;
97
113
  exports.SceneSchema = require_scene.SceneSchema;
98
114
  exports.ScopeSchema = require_scope.ScopeSchema;
115
+ exports.ShapeRefSchema = require_shape.ShapeRefSchema;
99
116
  exports.StepLabelSchema = require_step.StepLabelSchema;
100
117
  exports.StepSchema = require_step.StepSchema;
101
118
  exports.TargetSchema = require_target.TargetSchema;
102
119
  exports.TextBlockSchema = require_text.TextBlockSchema;
103
120
  exports.TransformSchema = require_transform.TransformSchema;
121
+ exports.TriggerSchema = require_animation.TriggerSchema;
104
122
  exports.ViewBoxSchema = require_scene.ViewBoxSchema;
123
+ exports.blink = require_animation$1.blink;
124
+ exports.cameraTo = require_animation$1.cameraTo;
105
125
  exports.circle = require_circle.circle;
126
+ exports.colorShift = require_animation$1.colorShift;
106
127
  exports.compileToScene = require_compile.compileToScene;
107
128
  exports.computeLayout = require_layout.computeLayout;
108
129
  exports.defineComposite = require_types.defineComposite;
109
- exports.definePathGenerator = require_define.definePathGenerator;
130
+ exports.definePathGenerator = require_define$1.definePathGenerator;
131
+ exports.defineShape = require_define.defineShape;
110
132
  exports.diamond = require_diamond.diamond;
133
+ exports.drawOn = require_animation$1.drawOn;
111
134
  exports.ellipse = require_ellipse.ellipse;
135
+ exports.fadeIn = require_animation$1.fadeIn;
112
136
  exports.fallbackMeasurer = require_text_metrics.fallbackMeasurer;
137
+ exports.flash = require_animation$1.flash;
138
+ exports.grow = require_animation$1.grow;
139
+ exports.growUp = require_animation$1.growUp;
113
140
  exports.localToWorld = require__transform.localToWorld;
141
+ exports.loop = require_animation$1.loop;
114
142
  exports.parseNodeTarget = require_parseNodeTarget.parseNodeTarget;
115
143
  exports.parseTargetSugar = require_parseTargetSugar.parseTargetSugar;
116
144
  exports.parseWay = require_parseWay.parseWay;
117
145
  exports.point = require_point.point;
118
146
  exports.polar = require_polar.polar;
147
+ exports.pulse = require_animation$1.pulse;
119
148
  exports.rect = require_rect.rect;
149
+ exports.scaleIn = require_animation$1.scaleIn;
150
+ exports.slideIn = require_animation$1.slideIn;
151
+ exports.spin = require_animation$1.spin;
152
+ exports.stagger = require_animation$1.stagger;
153
+ exports.wiggle = require_animation$1.wiggle;
120
154
  exports.worldToLocal = require__transform.worldToLocal;