@flighthq/path 0.3.0-next.906.07cea63 → 0.3.1-next.1041.35b950c

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 (45) hide show
  1. package/dist/contract.d.ts +4 -0
  2. package/dist/contract.d.ts.map +1 -1
  3. package/dist/contract.js +4 -0
  4. package/dist/contract.js.map +1 -1
  5. package/dist/explainPathMorphCreation.d.ts +4 -0
  6. package/dist/explainPathMorphCreation.d.ts.map +1 -0
  7. package/dist/explainPathMorphCreation.js +24 -0
  8. package/dist/explainPathMorphCreation.js.map +1 -0
  9. package/dist/explainStrokePathTessellation.d.ts +4 -0
  10. package/dist/explainStrokePathTessellation.d.ts.map +1 -0
  11. package/dist/explainStrokePathTessellation.js +26 -0
  12. package/dist/explainStrokePathTessellation.js.map +1 -0
  13. package/dist/index.d.ts +3 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/path.d.ts.map +1 -1
  18. package/dist/path.js +6 -6
  19. package/dist/path.js.map +1 -1
  20. package/dist/pathMorph.d.ts +5 -0
  21. package/dist/pathMorph.d.ts.map +1 -0
  22. package/dist/pathMorph.js +35 -0
  23. package/dist/pathMorph.js.map +1 -0
  24. package/dist/pathMorphGeometry.d.ts +14 -0
  25. package/dist/pathMorphGeometry.d.ts.map +1 -0
  26. package/dist/pathMorphGeometry.js +347 -0
  27. package/dist/pathMorphGeometry.js.map +1 -0
  28. package/dist/strokePath.d.ts.map +1 -1
  29. package/dist/strokePath.js +30 -451
  30. package/dist/strokePath.js.map +1 -1
  31. package/dist/strokePathGeometry.d.ts +23 -0
  32. package/dist/strokePathGeometry.d.ts.map +1 -0
  33. package/dist/strokePathGeometry.js +422 -0
  34. package/dist/strokePathGeometry.js.map +1 -0
  35. package/dist/tessellateStrokePath.d.ts +3 -0
  36. package/dist/tessellateStrokePath.d.ts.map +1 -0
  37. package/dist/tessellateStrokePath.js +66 -0
  38. package/dist/tessellateStrokePath.js.map +1 -0
  39. package/package.json +5 -2
  40. package/src/explainPathMorphCreation.test.ts +81 -0
  41. package/src/explainStrokePathTessellation.test.ts +39 -0
  42. package/src/pathMorph.test.ts +290 -0
  43. package/src/pathMorphGeometry.test.ts +18 -0
  44. package/src/strokePathGeometry.test.ts +27 -0
  45. package/src/tessellateStrokePath.test.ts +91 -0
@@ -0,0 +1,347 @@
1
+ import { PathCommand } from '@flighthq/types/contract';
2
+ import { forEachPathSegment } from './forEachPathSegment';
3
+ export const PathMorphIssueNone = 0;
4
+ export const PathMorphIssueWindingMismatch = 1;
5
+ export const PathMorphIssueContourCountMismatch = 2;
6
+ export const PathMorphIssueContourClosednessMismatch = 3;
7
+ export const PathMorphIssueContourOrientationMismatch = 4;
8
+ // Shared preparation used by the production constructor and its separately importable diagnostic.
9
+ // Lines and quadratics are converted exactly to cubics, then the lower-segment endpoint is subdivided
10
+ // without changing its geometry. This is deliberately a one-time allocating step; sampling stays a
11
+ // flat coordinate loop.
12
+ export function buildPathMorph(start, end) {
13
+ if (start.winding !== end.winding) {
14
+ return { contour: null, issue: PathMorphIssueWindingMismatch, morph: null };
15
+ }
16
+ const startContours = decodeCubicContours(start);
17
+ const endContours = decodeCubicContours(end);
18
+ if (startContours.length !== endContours.length) {
19
+ return { contour: null, issue: PathMorphIssueContourCountMismatch, morph: null };
20
+ }
21
+ for (let i = 0; i < startContours.length; i++) {
22
+ if (startContours[i].closed !== endContours[i].closed) {
23
+ return { contour: i, issue: PathMorphIssueContourClosednessMismatch, morph: null };
24
+ }
25
+ }
26
+ const orientationMismatch = normalizeCubicContourOrientations(startContours, endContours, start.winding);
27
+ if (orientationMismatch !== null) {
28
+ return { contour: orientationMismatch, issue: PathMorphIssueContourOrientationMismatch, morph: null };
29
+ }
30
+ for (let i = 0; i < startContours.length; i++) {
31
+ const startContour = startContours[i];
32
+ const endContour = endContours[i];
33
+ equalizeCubicContourSegments(startContour, endContour);
34
+ alignClosedCubicContour(startContour, endContour);
35
+ }
36
+ const commands = [];
37
+ const startData = [];
38
+ const endData = [];
39
+ for (let i = 0; i < startContours.length; i++) {
40
+ appendCubicContourPair(commands, startData, endData, startContours[i], endContours[i]);
41
+ }
42
+ return {
43
+ contour: null,
44
+ issue: PathMorphIssueNone,
45
+ morph: { commands, endData, startData, winding: start.winding },
46
+ };
47
+ }
48
+ // Opposite traversal makes equally-authored closed shapes fold through themselves during coordinate
49
+ // interpolation. Even-odd paths may reverse each contour independently because direction has no fill
50
+ // meaning. Non-zero paths may only reverse the entire endpoint consistently: that negates every
51
+ // winding number without changing what is filled, while reversing a subset could turn a hole into a
52
+ // solid ring. Returns the first contour whose relationship prevents that safe normalization.
53
+ function normalizeCubicContourOrientations(start, end, winding) {
54
+ if (winding === 'evenOdd') {
55
+ for (let i = 0; i < start.length; i++) {
56
+ const startOrientation = getCubicContourOrientation(start[i]);
57
+ const endOrientation = getCubicContourOrientation(end[i]);
58
+ if (startOrientation !== 0 && endOrientation !== 0 && startOrientation !== endOrientation) {
59
+ reverseClosedCubicContour(end[i]);
60
+ }
61
+ }
62
+ return null;
63
+ }
64
+ let reverseEnd = null;
65
+ for (let i = 0; i < start.length; i++) {
66
+ const startOrientation = getCubicContourOrientation(start[i]);
67
+ const endOrientation = getCubicContourOrientation(end[i]);
68
+ if (startOrientation === 0 || endOrientation === 0)
69
+ continue;
70
+ const reversed = startOrientation !== endOrientation;
71
+ if (reverseEnd === null)
72
+ reverseEnd = reversed;
73
+ else if (reverseEnd !== reversed)
74
+ return i;
75
+ }
76
+ if (reverseEnd === true) {
77
+ for (let i = 0; i < end.length; i++) {
78
+ if (getCubicContourOrientation(end[i]) !== 0)
79
+ reverseClosedCubicContour(end[i]);
80
+ }
81
+ }
82
+ return null;
83
+ }
84
+ function getCubicContourOrientation(contour) {
85
+ if (!contour.closed)
86
+ return 0;
87
+ const area = getCubicContourSignedArea(contour);
88
+ return area < 0 ? -1 : area > 0 ? 1 : 0;
89
+ }
90
+ function reverseClosedCubicContour(contour) {
91
+ const reversed = [];
92
+ for (let i = contour.segments.length - 1; i >= 0; i--) {
93
+ const segment = contour.segments[i];
94
+ reversed.push({
95
+ control1X: segment.control2X,
96
+ control1Y: segment.control2Y,
97
+ control2X: segment.control1X,
98
+ control2Y: segment.control1Y,
99
+ x0: segment.x1,
100
+ x1: segment.x0,
101
+ y0: segment.y1,
102
+ y1: segment.y0,
103
+ });
104
+ }
105
+ contour.segments = reversed;
106
+ if (reversed.length > 0) {
107
+ contour.x = reversed[0].x0;
108
+ contour.y = reversed[0].y0;
109
+ }
110
+ contour.currentX = contour.x;
111
+ contour.currentY = contour.y;
112
+ }
113
+ // Exact Green's-theorem area integral over cubic power-basis coefficients. This avoids introducing a
114
+ // flattening tolerance into morph compatibility and handles curved contours as deterministically as
115
+ // polygonal ones.
116
+ function getCubicContourSignedArea(contour) {
117
+ let twiceArea = 0;
118
+ let extent = 0;
119
+ for (let i = 0; i < contour.segments.length; i++) {
120
+ const segment = contour.segments[i];
121
+ const x0 = segment.x0 - contour.x;
122
+ const control1X = segment.control1X - contour.x;
123
+ const control2X = segment.control2X - contour.x;
124
+ const x1 = segment.x1 - contour.x;
125
+ const y0 = segment.y0 - contour.y;
126
+ const control1Y = segment.control1Y - contour.y;
127
+ const control2Y = segment.control2Y - contour.y;
128
+ const y1 = segment.y1 - contour.y;
129
+ extent = Math.max(extent, Math.abs(x0), Math.abs(control1X), Math.abs(control2X), Math.abs(x1), Math.abs(y0), Math.abs(control1Y), Math.abs(control2Y), Math.abs(y1));
130
+ const x = getCubicPowerCoefficients(x0, control1X, control2X, x1);
131
+ const y = getCubicPowerCoefficients(y0, control1Y, control2Y, y1);
132
+ for (let xi = 0; xi < 4; xi++) {
133
+ for (let yi = 1; yi < 4; yi++) {
134
+ twiceArea += (x[xi] * yi * y[yi] - y[xi] * yi * x[yi]) / (xi + yi);
135
+ }
136
+ }
137
+ }
138
+ const area = twiceArea / 2;
139
+ const areaEpsilon = Math.max(1, extent * extent) * Number.EPSILON * 64;
140
+ return Math.abs(area) <= areaEpsilon ? 0 : area;
141
+ }
142
+ function getCubicPowerCoefficients(p0, p1, p2, p3) {
143
+ return [p0, 3 * (p1 - p0), 3 * (p0 - 2 * p1 + p2), -p0 + 3 * p1 - 3 * p2 + p3];
144
+ }
145
+ function alignClosedCubicContour(start, end) {
146
+ const count = start.segments.length;
147
+ if (!start.closed || count < 2)
148
+ return;
149
+ let bestOffset = 0;
150
+ let bestDistance = Infinity;
151
+ for (let offset = 0; offset < count; offset++) {
152
+ let distance = 0;
153
+ for (let i = 0; i < count; i++) {
154
+ const a = start.segments[i];
155
+ const b = end.segments[(i + offset) % count];
156
+ const dx = a.x0 - b.x0;
157
+ const dy = a.y0 - b.y0;
158
+ distance += dx * dx + dy * dy;
159
+ }
160
+ if (distance < bestDistance) {
161
+ bestDistance = distance;
162
+ bestOffset = offset;
163
+ }
164
+ }
165
+ if (bestOffset === 0)
166
+ return;
167
+ end.segments = end.segments.slice(bestOffset).concat(end.segments.slice(0, bestOffset));
168
+ end.x = end.segments[0].x0;
169
+ end.y = end.segments[0].y0;
170
+ }
171
+ function appendCubicContourPair(commands, startData, endData, start, end) {
172
+ commands.push(PathCommand.MOVE_TO);
173
+ startData.push(start.x, start.y);
174
+ endData.push(end.x, end.y);
175
+ for (let i = 0; i < start.segments.length; i++) {
176
+ const a = start.segments[i];
177
+ const b = end.segments[i];
178
+ commands.push(PathCommand.CUBIC_CURVE_TO);
179
+ startData.push(a.control1X, a.control1Y, a.control2X, a.control2Y, a.x1, a.y1);
180
+ endData.push(b.control1X, b.control1Y, b.control2X, b.control2Y, b.x1, b.y1);
181
+ }
182
+ if (start.closed)
183
+ commands.push(PathCommand.CLOSE);
184
+ }
185
+ function appendCubicSegment(contour, control1X, control1Y, control2X, control2Y, x, y) {
186
+ contour.segments.push({
187
+ control1X,
188
+ control1Y,
189
+ control2X,
190
+ control2Y,
191
+ x0: contour.currentX,
192
+ x1: x,
193
+ y0: contour.currentY,
194
+ y1: y,
195
+ });
196
+ contour.currentX = x;
197
+ contour.currentY = y;
198
+ }
199
+ function appendLineAsCubic(contour, x, y) {
200
+ const x0 = contour.currentX;
201
+ const y0 = contour.currentY;
202
+ appendCubicSegment(contour, x0 + (x - x0) / 3, y0 + (y - y0) / 3, x0 + ((x - x0) * 2) / 3, y0 + ((y - y0) * 2) / 3, x, y);
203
+ }
204
+ function appendQuadraticAsCubic(contour, controlX, controlY, x, y) {
205
+ const x0 = contour.currentX;
206
+ const y0 = contour.currentY;
207
+ appendCubicSegment(contour, x0 + ((controlX - x0) * 2) / 3, y0 + ((controlY - y0) * 2) / 3, x + ((controlX - x) * 2) / 3, y + ((controlY - y) * 2) / 3, x, y);
208
+ }
209
+ function closeCubicContour(contour) {
210
+ if (contour.currentX !== contour.x || contour.currentY !== contour.y) {
211
+ appendLineAsCubic(contour, contour.x, contour.y);
212
+ }
213
+ contour.closed = true;
214
+ }
215
+ function createCubicContour(x, y) {
216
+ return { closed: false, currentX: x, currentY: y, segments: [], x, y };
217
+ }
218
+ function cubicControlPolygonLength(segment) {
219
+ return (pointDistance(segment.x0, segment.y0, segment.control1X, segment.control1Y) +
220
+ pointDistance(segment.control1X, segment.control1Y, segment.control2X, segment.control2Y) +
221
+ pointDistance(segment.control2X, segment.control2Y, segment.x1, segment.y1));
222
+ }
223
+ function decodeCubicContours(path) {
224
+ const contours = [];
225
+ let contour = null;
226
+ const ensureContour = () => {
227
+ if (contour !== null)
228
+ return contour;
229
+ contour = createCubicContour(0, 0);
230
+ contours.push(contour);
231
+ return contour;
232
+ };
233
+ forEachPathSegment(path, (segment) => {
234
+ if (segment.kind === 'moveTo') {
235
+ contour = createCubicContour(segment.x, segment.y);
236
+ contours.push(contour);
237
+ }
238
+ else if (segment.kind === 'lineTo') {
239
+ appendLineAsCubic(ensureContour(), segment.x, segment.y);
240
+ }
241
+ else if (segment.kind === 'curveTo') {
242
+ appendQuadraticAsCubic(ensureContour(), segment.controlX, segment.controlY, segment.x, segment.y);
243
+ }
244
+ else if (segment.kind === 'cubicCurveTo') {
245
+ appendCubicSegment(ensureContour(), segment.control1X, segment.control1Y, segment.control2X, segment.control2Y, segment.x, segment.y);
246
+ }
247
+ else if (segment.kind === 'close' && contour !== null) {
248
+ closeCubicContour(contour);
249
+ contour = null;
250
+ }
251
+ });
252
+ return contours;
253
+ }
254
+ function equalizeCubicContourSegments(start, end) {
255
+ const targetCount = Math.max(start.segments.length, end.segments.length);
256
+ if (targetCount === 0)
257
+ return;
258
+ start.segments = subdivideCubicSegments(start.segments, targetCount, start.x, start.y);
259
+ end.segments = subdivideCubicSegments(end.segments, targetCount, end.x, end.y);
260
+ }
261
+ function pointDistance(x0, y0, x1, y1) {
262
+ const dx = x1 - x0;
263
+ const dy = y1 - y0;
264
+ return Math.sqrt(dx * dx + dy * dy);
265
+ }
266
+ function splitCubicSegment(segment, t) {
267
+ const x01 = segment.x0 + (segment.control1X - segment.x0) * t;
268
+ const y01 = segment.y0 + (segment.control1Y - segment.y0) * t;
269
+ const x12 = segment.control1X + (segment.control2X - segment.control1X) * t;
270
+ const y12 = segment.control1Y + (segment.control2Y - segment.control1Y) * t;
271
+ const x23 = segment.control2X + (segment.x1 - segment.control2X) * t;
272
+ const y23 = segment.control2Y + (segment.y1 - segment.control2Y) * t;
273
+ const x012 = x01 + (x12 - x01) * t;
274
+ const y012 = y01 + (y12 - y01) * t;
275
+ const x123 = x12 + (x23 - x12) * t;
276
+ const y123 = y12 + (y23 - y12) * t;
277
+ const x = x012 + (x123 - x012) * t;
278
+ const y = y012 + (y123 - y012) * t;
279
+ return [
280
+ {
281
+ control1X: x01,
282
+ control1Y: y01,
283
+ control2X: x012,
284
+ control2Y: y012,
285
+ x0: segment.x0,
286
+ x1: x,
287
+ y0: segment.y0,
288
+ y1: y,
289
+ },
290
+ {
291
+ control1X: x123,
292
+ control1Y: y123,
293
+ control2X: x23,
294
+ control2Y: y23,
295
+ x0: x,
296
+ x1: segment.x1,
297
+ y0: y,
298
+ y1: segment.y1,
299
+ },
300
+ ];
301
+ }
302
+ function subdivideCubicSegments(source, targetCount, pointX, pointY) {
303
+ if (source.length === targetCount)
304
+ return source.slice();
305
+ if (source.length === 0) {
306
+ const segments = [];
307
+ for (let i = 0; i < targetCount; i++) {
308
+ segments.push({
309
+ control1X: pointX,
310
+ control1Y: pointY,
311
+ control2X: pointX,
312
+ control2Y: pointY,
313
+ x0: pointX,
314
+ x1: pointX,
315
+ y0: pointY,
316
+ y1: pointY,
317
+ });
318
+ }
319
+ return segments;
320
+ }
321
+ const partCounts = new Array(source.length).fill(1);
322
+ const lengths = source.map(cubicControlPolygonLength);
323
+ for (let total = source.length; total < targetCount; total++) {
324
+ let best = 0;
325
+ let bestLength = -1;
326
+ for (let i = 0; i < source.length; i++) {
327
+ const partLength = lengths[i] / partCounts[i];
328
+ if (partLength > bestLength) {
329
+ best = i;
330
+ bestLength = partLength;
331
+ }
332
+ }
333
+ partCounts[best]++;
334
+ }
335
+ const segments = [];
336
+ for (let i = 0; i < source.length; i++) {
337
+ let remainder = source[i];
338
+ for (let parts = partCounts[i]; parts > 1; parts--) {
339
+ const split = splitCubicSegment(remainder, 1 / parts);
340
+ segments.push(split[0]);
341
+ remainder = split[1];
342
+ }
343
+ segments.push(remainder);
344
+ }
345
+ return segments;
346
+ }
347
+ //# sourceMappingURL=pathMorphGeometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathMorphGeometry.js","sourceRoot":"","sources":["../src/pathMorphGeometry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"strokePath.d.ts","sourceRoot":"","sources":["../src/strokePath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAKlE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAY5D,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,SAAO,GAAG,IAAI,CAsBrG"}
1
+ {"version":3,"file":"strokePath.d.ts","sourceRoot":"","sources":["../src/strokePath.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAKlE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAM5D,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,SAAO,GAAG,IAAI,CAKrG"}