@pixerate/editor 0.128.0 → 0.130.0

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 (65) hide show
  1. package/dist/animation-editor/index.cjs +55 -55
  2. package/dist/animation-editor/index.d.cts +5 -5
  3. package/dist/animation-editor/index.d.ts +5 -5
  4. package/dist/animation-editor/index.js +2 -2
  5. package/dist/{bezier-CvgQiYRg.d.cts → bezier-CdoGygwG.d.cts} +1 -1
  6. package/dist/{bezier-DP4NnJp3.d.ts → bezier-CigmusV_.d.ts} +1 -1
  7. package/dist/canvas/index.d.cts +7 -7
  8. package/dist/canvas/index.d.ts +7 -7
  9. package/dist/{chunk-BEGEWQHD.cjs → chunk-2PXRKMOH.cjs} +36 -36
  10. package/dist/{chunk-BEGEWQHD.cjs.map → chunk-2PXRKMOH.cjs.map} +1 -1
  11. package/dist/{chunk-F7Q2NE2Y.js → chunk-ERYGCA72.js} +2 -2
  12. package/dist/{chunk-A6KHMKI4.js → chunk-L5OTIYOO.js} +2 -2
  13. package/dist/{chunk-ORE334I6.cjs → chunk-LXGOYRPE.cjs} +366 -68
  14. package/dist/chunk-LXGOYRPE.cjs.map +1 -0
  15. package/dist/{chunk-XLUYXUBD.cjs → chunk-PMHPXCJC.cjs} +82 -82
  16. package/dist/{chunk-XLUYXUBD.cjs.map → chunk-PMHPXCJC.cjs.map} +1 -1
  17. package/dist/{chunk-ROZFX4QI.js → chunk-PRYMC442.js} +302 -4
  18. package/dist/chunk-PRYMC442.js.map +1 -0
  19. package/dist/effects/index.d.cts +4 -4
  20. package/dist/effects/index.d.ts +4 -4
  21. package/dist/{export-Cbr9IqpJ.d.cts → export-5WDKJqTy.d.cts} +1 -1
  22. package/dist/{export-DHrFJ8r_.d.ts → export-B4r8b9Ft.d.ts} +11 -4
  23. package/dist/{export-ClPKUB-v.d.ts → export-CU_ARP3A.d.ts} +1 -1
  24. package/dist/{export-BkYQvV56.d.cts → export-CejjC2iI.d.cts} +11 -4
  25. package/dist/{helpers-C5aAd44p.d.cts → helpers-CzZu51eI.d.cts} +33 -2
  26. package/dist/{helpers-CPWcK504.d.ts → helpers-X_rycLNJ.d.ts} +33 -2
  27. package/dist/image-editor/index.cjs +672 -621
  28. package/dist/image-editor/index.cjs.map +1 -1
  29. package/dist/image-editor/index.d.cts +8 -8
  30. package/dist/image-editor/index.d.ts +8 -8
  31. package/dist/image-editor/index.js +65 -14
  32. package/dist/image-editor/index.js.map +1 -1
  33. package/dist/{opentype-sQrF3Ry1.d.ts → opentype-CrHAsKh3.d.ts} +2 -2
  34. package/dist/{opentype-BOewaGQx.d.cts → opentype-DlRMYcCW.d.cts} +2 -2
  35. package/dist/paint-editor/index.cjs +7 -7
  36. package/dist/paint-editor/index.d.cts +5 -5
  37. package/dist/paint-editor/index.d.ts +5 -5
  38. package/dist/paint-editor/index.js +2 -2
  39. package/dist/{pathfinder-CnkW7zLI.d.cts → pathfinder-CKfKOVP4.d.cts} +1 -1
  40. package/dist/{pathfinder-BwJx0_zM.d.ts → pathfinder-Dlss70hL.d.ts} +1 -1
  41. package/dist/{pool-CTrtciaN.d.ts → pool-DDOo0xJH.d.ts} +1 -1
  42. package/dist/{pool-C7GtrL34.d.cts → pool-DKic69LD.d.cts} +1 -1
  43. package/dist/{svg-C4LlFnEw.d.cts → svg-BRaii3pI.d.cts} +2 -2
  44. package/dist/{svg-CUzZa0EO.d.ts → svg-BYVZeVo0.d.ts} +2 -2
  45. package/dist/{tools-BpCmUNxb.d.cts → tools-CtheDLDr.d.cts} +1 -1
  46. package/dist/{tools-AugT22z3.d.ts → tools-D8bZ-7YG.d.ts} +1 -1
  47. package/dist/vector/index.cjs +884 -874
  48. package/dist/vector/index.cjs.map +1 -1
  49. package/dist/vector/index.d.cts +53 -10
  50. package/dist/vector/index.d.ts +53 -10
  51. package/dist/vector/index.js +15 -5
  52. package/dist/vector/index.js.map +1 -1
  53. package/dist/video-editor/index.d.cts +4 -4
  54. package/dist/video-editor/index.d.ts +4 -4
  55. package/dist/{warp-D62N_5VK.d.cts → warp-BFoYxy_s.d.cts} +2 -2
  56. package/dist/{warp-CIsO617e.d.ts → warp-CZVC8pB5.d.ts} +2 -2
  57. package/package.json +1 -1
  58. package/skills/pixerate-image-editor/SKILL.md +1 -1
  59. package/skills/pixerate-image-editor/references/color-management.md +4 -3
  60. package/skills/pixerate-vector/SKILL.md +1 -1
  61. package/skills/pixerate-vector/references/commands.md +2 -0
  62. package/dist/chunk-ORE334I6.cjs.map +0 -1
  63. package/dist/chunk-ROZFX4QI.js.map +0 -1
  64. /package/dist/{chunk-F7Q2NE2Y.js.map → chunk-ERYGCA72.js.map} +0 -0
  65. /package/dist/{chunk-A6KHMKI4.js.map → chunk-L5OTIYOO.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/editor/editor/packages/core/dist/chunk-BEGEWQHD.cjs","../src/vector/blend.ts"],"names":["sx","ang","c","s"],"mappings":"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","file":"/home/runner/work/editor/editor/packages/core/dist/chunk-BEGEWQHD.cjs","sourcesContent":[null,"// Portions ported from effectcraft-main/crates/path/src/interp.rs, vectorcraft-main/crates/doc/src/blend.rs and deckcraft-main/crates/geom/src/morph.rs (MIT OR Apache-2.0, © ArtCraft Team and contributors). See THIRD_PARTY_NOTICES.md.\n/**\n * Morphing between vector paths: bring two shapes to matching anchors, then compute in-betweens.\n *\n * - **Contours** pair up in order. A contour without a partner grows out of (or shrinks into) a\n * point at the same place relative to the other shape's box. Straight segments become cubics\n * with handles at a third of the way, so a line bends smoothly into a curve.\n * - **Anchors** are inserted by arc length with de Casteljau splits, so both contours of a pair\n * keep their exact outline and get the same number of segments, spread over the segments in\n * proportion to their length.\n * - **Correspondence**: the closed side of each pair is turned to the cyclic start that costs\n * least — the position differences left after the best-fit rotation (both shapes centred and\n * scaled to unit size), a little for the turn, plus the χ² distance of log-polar\n * shape-context histograms (Belongie, Malik & Puzicha, PAMI 2002; angles taken from the\n * contour's direction) — and the winding is chosen once for all contours (the first closed\n * pair turns the same way), so a nonzero fill keeps its holes.\n * - **In-betweens** follow the shapes' best-fit rotation and scale (Procrustes), with the\n * leftover difference blended in linearly, so a turning shape turns instead of collapsing.\n * - **Paint**: colours mix in OKLab, gradients of one style resample their stops to a common\n * set, a missing paint fades from transparent; stroke width, opacity, dashes, arrowhead\n * scales and width profiles interpolate, and the rest switches halfway.\n * - **Transforms**: both shapes are blended in their parent's space; the in-between's rigid\n * `transform` interpolates as a rotation (the short way round) plus a translation.\n *\n * Live corners are cut into the geometry first, so rounded corners morph as curves.\n */\nimport type { Point } from '../canvas/types.js';\nimport { segmentLength, segmentParamAtLength, splitSegment } from '../canvas/pathops/bezier.js';\nimport { expandVectorGradientStops, explicitVectorGradient, hasExplicitGradientGeometry, isVectorGradient, sampleVectorGradient, sortedVectorGradientStops, vectorGradientPoints } from './gradient.js';\nimport { mixColorsOklab } from '../animation/color.js';\nimport { evaluateEasing, type AnimationEasing } from '../animation/easing.js';\nimport { expandVectorCorners } from './corners.js';\nimport {\n\tapplyMatrix,\n\thasPaint,\n\tIDENTITY_MATRIX,\n\tinferAnchorType,\n\tinvertMatrix,\n\tisIdentityMatrix,\n\tmultiplyMatrices,\n\tnodeMatrix,\n\tunionBounds,\n\ttype AffineMatrix\n} from './geometry.js';\nimport { reverseWidthProfile, widthProfileAt } from './width.js';\nimport { expandVectorAppearance } from './appearance.js';\nimport type { Vec2, VectorAnchor, VectorBounds, VectorGradient, VectorGradientStop, VectorGroupNode, VectorNode, VectorPaint, VectorPathNode, VectorStyle, VectorSubpath, VectorWidthPoint } from './types.js';\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nexport interface VectorMorphOptions {\n\t/**\n\t * Move anchors in straight lines instead of following the shapes' best-fit rotation and\n\t * scale. Default `false`.\n\t */\n\tlinear?: boolean;\n\t/** 0–1: how much the rotation-aware path outweighs the straight one (default 1). */\n\trigidity?: number;\n\t/** Fewest segments each contour pair gets (default 16). */\n\tminSegments?: number;\n\t/** At most this far apart (document units) along the longer contour, when set. */\n\tspacing?: number | null;\n\t/** Most segments a contour pair gets (default 400). */\n\tmaxSegments?: number;\n\t/** Search the start anchor of closed contours (default `true`); off keeps the stored starts. */\n\tmatchStart?: boolean;\n\t/** Compare shape-context histograms when choosing starts (default `true`). */\n\tshapeContext?: boolean;\n\t/**\n\t * The anchor each shape's first subpath starts from (the Blend tool's clicks). A closed\n\t * subpath turns round to it; an open one clicked at its last anchor runs backwards.\n\t */\n\tstarts?: readonly [number | null | undefined, number | null | undefined];\n\t/** Id of the in-between (default: the first shape's id). */\n\tid?: string;\n}\n\n/** Two shapes prepared once; `at(t)` interpolates (0 = `a`, 1 = `b`). */\nexport interface VectorMorph {\n\tat(t: number): VectorNode;\n}\n\n// ---------------------------------------------------------------------------\n// Point helpers\n// ---------------------------------------------------------------------------\n\nconst lerpN = (a: number, b: number, t: number) => a + (b - a) * t;\nconst lerpP = (a: Point, b: Point, t: number): Point => [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t];\nconst toP = (v: { x: number; y: number }): Point => [v.x, v.y];\nconst mapP = (m: AffineMatrix, p: Point): Point => [m[0] * p[0] + m[2] * p[1] + m[4], m[1] * p[0] + m[3] * p[1] + m[5]];\n\n// ---------------------------------------------------------------------------\n// Contours: a start anchor, then three points (handle, handle, anchor) per cubic segment\n// ---------------------------------------------------------------------------\n\n/** A subpath as cubics. A closed contour's last point repeats its first. */\nexport interface VectorMorphContour {\n\tclosed: boolean;\n\tpts: Point[];\n}\n\nconst curvesOf = (c: VectorMorphContour) => Math.max(0, (c.pts.length - 1) / 3) | 0;\n\n/** A subpath mapped by `m` as cubics (lines with handles at thirds), or null when empty. */\nexport function subpathToMorphContour(sp: VectorSubpath, m: AffineMatrix = IDENTITY_MATRIX): VectorMorphContour | null {\n\tconst n = sp.anchors.length;\n\tif (!n) return null;\n\tconst first = mapP(m, toP(sp.anchors[0]));\n\tconst pts: Point[] = [first];\n\tconst count = n < 2 ? 0 : sp.closed ? n : n - 1;\n\tfor (let i = 0; i < count; i++) {\n\t\tconst a = sp.anchors[i];\n\t\tconst b = sp.anchors[(i + 1) % n];\n\t\tconst pa = toP(a);\n\t\tconst pb = toP(b);\n\t\tconst straight = (!a.out || (a.out.x === a.x && a.out.y === a.y)) && (!b.in || (b.in.x === b.x && b.in.y === b.y));\n\t\tconst c1 = straight ? lerpP(pa, pb, 1 / 3) : toP(a.out ?? a);\n\t\tconst c2 = straight ? lerpP(pa, pb, 2 / 3) : toP(b.in ?? b);\n\t\tpts.push(mapP(m, c1), mapP(m, c2), i === count - 1 && sp.closed ? first : mapP(m, pb));\n\t}\n\treturn { closed: sp.closed && count > 0, pts };\n}\n\n/** Whether the cubic's handles lie on its chord (it draws a straight line). */\nfunction isStraight(p0: Point, p1: Point, p2: Point, p3: Point): boolean {\n\tconst dx = p3[0] - p0[0];\n\tconst dy = p3[1] - p0[1];\n\tconst len = Math.hypot(dx, dy);\n\tconst tol = Math.max(1e-7, len * 1e-7);\n\tif (len < 1e-12) return Math.hypot(p1[0] - p0[0], p1[1] - p0[1]) < tol && Math.hypot(p2[0] - p0[0], p2[1] - p0[1]) < tol;\n\tconst off = (p: Point) => Math.abs((p[0] - p0[0]) * dy - (p[1] - p0[1]) * dx) / len;\n\tconst along = (p: Point) => ((p[0] - p0[0]) * dx + (p[1] - p0[1]) * dy) / (len * len);\n\tconst u1 = along(p1);\n\tconst u2 = along(p2);\n\treturn off(p1) < tol && off(p2) < tol && u1 >= -1e-9 && u1 <= 1 + 1e-9 && u2 >= -1e-9 && u2 <= 1 + 1e-9;\n}\n\n/** A contour back to a subpath (`m` maps it out of the morph's space). Straight cubics become lines. */\nexport function morphContourToSubpath(c: VectorMorphContour, m: AffineMatrix = IDENTITY_MATRIX, closed = c.closed): VectorSubpath {\n\tconst pts = isIdentityMatrix(m) ? c.pts : c.pts.map((p) => mapP(m, p));\n\tconst curves = curvesOf(c);\n\t// A closed contour drops its repeated last anchor; one opened mid-morph keeps it.\n\tconst dropLast = closed && c.closed && curves > 0;\n\tconst count = dropLast ? curves : curves + 1;\n\tconst anchors: VectorAnchor[] = [];\n\tfor (let k = 0; k < count; k++) anchors.push({ x: pts[3 * k][0], y: pts[3 * k][1] });\n\tfor (let k = 0; k < curves; k++) {\n\t\tconst p0 = pts[3 * k];\n\t\tconst p1 = pts[3 * k + 1];\n\t\tconst p2 = pts[3 * k + 2];\n\t\tconst p3 = pts[3 * k + 3];\n\t\tif (isStraight(p0, p1, p2, p3)) continue;\n\t\tanchors[k].out = { x: p1[0], y: p1[1] };\n\t\tanchors[(k + 1) % count].in = { x: p2[0], y: p2[1] };\n\t}\n\tfor (const a of anchors) {\n\t\tconst type = inferAnchorType(a);\n\t\tif (type !== 'corner') a.type = type;\n\t}\n\tconst isClosed = closed && curves > 0;\n\treturn { anchors: dropCollinear(anchors, isClosed), closed: isClosed };\n}\n\n/** Anchors without the ones that sit inside a straight run (no handles, in line with both neighbours). */\nfunction dropCollinear(anchors: VectorAnchor[], closed: boolean): VectorAnchor[] {\n\tconst out = anchors.slice();\n\tconst min = closed ? 3 : 2;\n\tlet i = closed ? 0 : 1;\n\twhile (out.length > min && i < out.length - (closed ? 0 : 1)) {\n\t\tconst n = out.length;\n\t\tconst a = out[(i - 1 + n) % n];\n\t\tconst b = out[i];\n\t\tconst c = out[(i + 1) % n];\n\t\tconst plain = !b.in && !b.out && !a.out && !c.in;\n\t\tconst ux = b.x - a.x;\n\t\tconst uy = b.y - a.y;\n\t\tconst vx = c.x - b.x;\n\t\tconst vy = c.y - b.y;\n\t\tconst len = Math.hypot(ux, uy) + Math.hypot(vx, vy);\n\t\tif (plain && Math.abs(ux * vy - uy * vx) <= 1e-9 * Math.max(1, len * len) && ux * vx + uy * vy >= 0) out.splice(i, 1);\n\t\telse i++;\n\t}\n\treturn out;\n}\n\nconst segOf = (c: VectorMorphContour, k: number): Point[] => c.pts.slice(3 * k, 3 * k + 4);\n\n/**\n * Exactly the same outline with `segments` cubics (at least as many as it has), the new\n * anchors spread over its segments in proportion to their arc length (largest remainder)\n * and each segment split into pieces of equal arc length. Also returns where each original\n * anchor went.\n */\nexport function refineMorphContour(c: VectorMorphContour, segments: number): { contour: VectorMorphContour; anchors: number[] } {\n\tconst have = curvesOf(c);\n\tif (have === 0) return { contour: { closed: c.closed, pts: Array.from({ length: 1 + 3 * segments }, () => [c.pts[0][0], c.pts[0][1]] as Point) }, anchors: [0] };\n\tconst identity = Array.from({ length: c.closed ? have : have + 1 }, (_, i) => i);\n\tif (have >= segments) return { contour: c, anchors: identity };\n\tconst segs = Array.from({ length: have }, (_, k) => segOf(c, k));\n\tconst lens = segs.map((s) => segmentLength(s));\n\tconst sum = lens.reduce((a, b) => a + b, 0);\n\tconst extra = segments - have;\n\tconst want = lens.map((l) => (sum > 1e-12 ? (l / sum) * extra : extra / have));\n\tconst parts = want.map((w) => 1 + Math.floor(w));\n\tlet left = segments - parts.reduce((a, b) => a + b, 0);\n\t// Remainders that differ by rounding noise tie, so congruent shapes split alike.\n\tconst frac = want.map((w) => w - Math.floor(w));\n\tconst order = parts.map((_, i) => i).sort((a, b) => (Math.abs(frac[b] - frac[a]) > 1e-9 ? frac[b] - frac[a] : a - b));\n\tfor (let i = 0; left > 0; i = (i + 1) % order.length, left--) parts[order[i]]++;\n\tconst pts: Point[] = [c.pts[0]];\n\tconst anchors: number[] = [0];\n\tlet at = 0;\n\tsegs.forEach((seg, k) => {\n\t\tconst pieces = parts[k];\n\t\tlet rest: Point[] = seg.slice();\n\t\tlet t0 = 0;\n\t\tfor (let j = 1; j < pieces; j++) {\n\t\t\tconst t = segmentParamAtLength(seg, (lens[k] * j) / pieces, lens[k]);\n\t\t\tconst u = Math.min(1, Math.max(0, (t - t0) / (1 - t0 || 1)));\n\t\t\tconst [l, r] = splitSegment(rest, u);\n\t\t\tpts.push(l[1], l[2], l[3]);\n\t\t\trest = r;\n\t\t\tt0 = t;\n\t\t}\n\t\tpts.push(rest[1], rest[2], k === have - 1 && c.closed ? c.pts[0] : rest[3]);\n\t\tat += pieces;\n\t\tif (k < have - 1 || !c.closed) anchors.push(at);\n\t});\n\treturn { contour: { closed: c.closed, pts }, anchors };\n}\n\n/** The same contour run backwards (a closed one keeps its start anchor). */\nexport function reverseMorphContour(c: VectorMorphContour): VectorMorphContour {\n\treturn { closed: c.closed, pts: c.pts.slice().reverse() };\n}\n\n/** A closed contour starting at anchor `s` (deckcraft's `turn`). */\nexport function turnMorphContour(c: VectorMorphContour, s: number): VectorMorphContour {\n\tconst n = curvesOf(c);\n\tif (!c.closed || n === 0) return c;\n\tconst k = ((s % n) + n) % n;\n\tif (k === 0) return c;\n\tconst body = c.pts.slice(1);\n\treturn { closed: true, pts: [c.pts[3 * k], ...body.slice(3 * k), ...body.slice(0, 3 * k)] };\n}\n\n/** Anchor positions of a contour (a closed one without its repeated end). */\nfunction anchorPoints(c: VectorMorphContour): Point[] {\n\tconst n = curvesOf(c);\n\tconst count = c.closed ? n : n + 1;\n\treturn Array.from({ length: Math.max(1, count) }, (_, k) => c.pts[3 * k]);\n}\n\n/** Signed area of a contour's anchor polygon. */\nfunction polygonArea(pts: readonly Point[]): number {\n\tlet s = 0;\n\tfor (let i = 0; i < pts.length; i++) {\n\t\tconst a = pts[i];\n\t\tconst b = pts[(i + 1) % pts.length];\n\t\ts += a[0] * b[1] - b[0] * a[1];\n\t}\n\treturn s / 2;\n}\n\n// ---------------------------------------------------------------------------\n// Correspondence\n// ---------------------------------------------------------------------------\n\n/** Centroid and RMS radius. */\nfunction frame(v: readonly Point[]): { c: Point; r: number } {\n\tconst n = Math.max(1, v.length);\n\tlet cx = 0;\n\tlet cy = 0;\n\tfor (const p of v) {\n\t\tcx += p[0];\n\t\tcy += p[1];\n\t}\n\tcx /= n;\n\tcy /= n;\n\tlet s = 0;\n\tfor (const p of v) s += (p[0] - cx) ** 2 + (p[1] - cy) ** 2;\n\treturn { c: [cx, cy], r: Math.max(1e-9, Math.sqrt(s / n)) };\n}\n\nconst RBINS = 5;\nconst ABINS = 12;\n/** Weight of the turn a start implies: among starts that fit equally well, the least turning wins. */\nconst TURN_WEIGHT = 0.1;\n\n/**\n * Log-polar shape-context histograms of every point, distances normalised by the RMS radius and\n * angles measured from the contour's direction at the point, so turning a shape leaves them\n * unchanged (only the fit below decides how far it turns).\n */\nfunction shapeContexts(v: readonly Point[], closed: boolean): Float64Array[] {\n\tconst { r } = frame(v);\n\tconst n = v.length;\n\treturn v.map((p, i) => {\n\t\tconst prev = v[closed ? (i - 1 + n) % n : Math.max(0, i - 1)];\n\t\tconst next = v[closed ? (i + 1) % n : Math.min(n - 1, i + 1)];\n\t\tconst dir = Math.atan2(next[1] - prev[1], next[0] - prev[0]);\n\t\tconst h = new Float64Array(RBINS * ABINS);\n\t\tlet total = 0;\n\t\tfor (let j = 0; j < n; j++) {\n\t\t\tif (i === j) continue;\n\t\t\tconst dx = v[j][0] - p[0];\n\t\t\tconst dy = v[j][1] - p[1];\n\t\t\tconst d = Math.hypot(dx, dy) / r;\n\t\t\t// log radius in [1/8, 2] → five bins.\n\t\t\tconst lr = ((Math.log2(Math.max(d, 1e-6)) + 3) / 4) * RBINS;\n\t\t\tif (!(lr >= 0 && lr < RBINS)) continue;\n\t\t\tlet ang = Math.atan2(dy, dx) - dir;\n\t\t\tang = ((ang % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);\n\t\t\th[Math.floor(lr) * ABINS + Math.min(ABINS - 1, Math.floor((ang / (2 * Math.PI)) * ABINS))] += 1;\n\t\t\ttotal++;\n\t\t}\n\t\tif (total > 0) for (let k = 0; k < h.length; k++) h[k] /= total;\n\t\treturn h;\n\t});\n}\n\nfunction chi2(a: Float64Array, b: Float64Array): number {\n\tlet s = 0;\n\tfor (let k = 0; k < a.length; k++) {\n\t\tconst t = a[k] + b[k];\n\t\tif (t > 1e-12) s += ((a[k] - b[k]) * (a[k] - b[k])) / t;\n\t}\n\treturn s / 2;\n}\n\n/**\n * The cyclic start of the closed `free` contour that matches `fixed` best, and its cost. Both\n * shapes are centred and scaled to unit RMS radius (where and how big they are does not\n * matter); a start costs what is left after the best rotation maps one onto the other, plus a\n * little for how far that rotation turns, plus (optionally) the mean χ² shape-context\n * distance. So a turned copy of a shape matches by turning rather than by squashing.\n */\nfunction bestStart(fixed: VectorMorphContour, free: VectorMorphContour, useShapeContext: boolean): { start: number; cost: number } {\n\tconst fa = anchorPoints(fixed);\n\tconst ga = anchorPoints(free);\n\tconst n = ga.length;\n\tconst ff = frame(fa);\n\tconst gf = frame(ga);\n\tconst fn = fa.map((p): Point => [(p[0] - ff.c[0]) / ff.r, (p[1] - ff.c[1]) / ff.r]);\n\tconst gn = ga.map((p): Point => [(p[0] - gf.c[0]) / gf.r, (p[1] - gf.c[1]) / gf.r]);\n\tconst fsc = useShapeContext ? shapeContexts(fa, fixed.closed) : null;\n\tconst gsc = useShapeContext ? shapeContexts(ga, free.closed) : null;\n\tconst m = Math.max(1, fn.length);\n\tconst cost = (s: number) => {\n\t\tlet dot = 0;\n\t\tlet cross = 0;\n\t\tlet sc = 0;\n\t\tfor (let i = 0; i < fn.length; i++) {\n\t\t\tconst j = free.closed ? (i + s) % n : i;\n\t\t\tconst p = fn[i];\n\t\t\tconst q = gn[j];\n\t\t\tdot += p[0] * q[0] + p[1] * q[1];\n\t\t\tcross += p[0] * q[1] - p[1] * q[0];\n\t\t\tif (fsc && gsc) sc += chi2(fsc[i], gsc[j]);\n\t\t}\n\t\t// Unit RMS on both sides: what the best rotation and scale leave over, as a fraction.\n\t\tconst residual = Math.max(0, 1 - (dot * dot + cross * cross) / (m * m));\n\t\tconst turn = 1 - Math.cos(Math.atan2(cross, dot));\n\t\treturn residual + TURN_WEIGHT * turn + sc / m;\n\t};\n\tif (!free.closed) return { start: 0, cost: cost(0) };\n\t// Long contours: every few starts first, then the neighbours of the best.\n\tconst stride = n > 96 ? Math.ceil(n / 48) : 1;\n\tlet best = { start: 0, cost: Infinity };\n\tfor (let s = 0; s < n; s += stride) {\n\t\tconst c = cost(s);\n\t\tif (c < best.cost - 1e-12) best = { start: s, cost: c };\n\t}\n\tif (stride > 1) {\n\t\tconst s0 = best.start;\n\t\tfor (let d = 1; d < stride; d++)\n\t\t\tfor (const s of [(s0 + d) % n, (s0 - d + n) % n]) {\n\t\t\t\tconst c = cost(s);\n\t\t\t\tif (c < best.cost - 1e-12) best = { start: s, cost: c };\n\t\t\t}\n\t}\n\treturn best;\n}\n\n/** The spot a contour without partner grows from: the same place relative to the other shape's box. */\nfunction placeIn(c: VectorMorphContour, from: VectorBounds | null, to: VectorBounds | null): Point {\n\tconst b = unionBounds([boundsOfPoints(c.pts)]);\n\tconst p: Point = b ? [b.x + b.width / 2, b.y + b.height / 2] : c.pts[0];\n\tif (!from || !to) return p;\n\tconst fx = from.width > 0 ? (p[0] - from.x) / from.width : 0.5;\n\tconst fy = from.height > 0 ? (p[1] - from.y) / from.height : 0.5;\n\treturn [to.x + to.width * fx, to.y + to.height * fy];\n}\n\nfunction boundsOfPoints(pts: readonly Point[]): VectorBounds | null {\n\tif (!pts.length) return null;\n\tlet x0 = Infinity;\n\tlet y0 = Infinity;\n\tlet x1 = -Infinity;\n\tlet y1 = -Infinity;\n\tfor (const p of pts) {\n\t\tx0 = Math.min(x0, p[0]);\n\t\ty0 = Math.min(y0, p[1]);\n\t\tx1 = Math.max(x1, p[0]);\n\t\ty1 = Math.max(y1, p[1]);\n\t}\n\treturn { x: x0, y: y0, width: x1 - x0, height: y1 - y0 };\n}\n\n/** Two shapes' contours with matching structure: same count, and per pair the same segments. */\nexport interface VectorMorphCorrespondence {\n\ta: VectorMorphContour[];\n\tb: VectorMorphContour[];\n\t/** Whether `b` runs backwards relative to its stored direction. */\n\treversed: boolean;\n}\n\n/**\n * Gives two lists of contours the same structure with matching anchors (see the module notes).\n * Contours pair in order; one without a partner meets a point.\n */\nexport function correspondMorphContours(a: readonly VectorMorphContour[], b: readonly VectorMorphContour[], options: VectorMorphOptions = {}): VectorMorphCorrespondence {\n\tconst minSeg = Math.max(1, Math.round(options.minSegments ?? 16));\n\tconst maxSeg = Math.max(minSeg, Math.round(options.maxSegments ?? 400));\n\tconst spacing = options.spacing && options.spacing > 0 ? options.spacing : null;\n\tconst useSC = options.shapeContext !== false;\n\tconst match = options.matchStart !== false;\n\tconst ba = boundsOfPoints(a.flatMap((c) => c.pts));\n\tconst bb = boundsOfPoints(b.flatMap((c) => c.pts));\n\tconst contourLength = (c: VectorMorphContour) => {\n\t\tlet l = 0;\n\t\tfor (let k = 0; k < curvesOf(c); k++) l += segmentLength(segOf(c, k));\n\t\treturn l;\n\t};\n\ttype Pair = { x: VectorMorphContour; y: VectorMorphContour; point: boolean; startX: number | null; startY: number | null };\n\tconst pairs: Pair[] = [];\n\tconst [sa, sb] = options.starts ?? [];\n\tfor (let k = 0; k < Math.max(a.length, b.length); k++) {\n\t\tconst ca = a[k];\n\t\tconst cb = b[k];\n\t\tconst explicitA = k === 0 && sa !== null && sa !== undefined ? sa : null;\n\t\tconst explicitB = k === 0 && sb !== null && sb !== undefined ? sb : null;\n\t\tconst counts = [ca ? curvesOf(ca) : 0, cb ? curvesOf(cb) : 0];\n\t\tconst longest = Math.max(ca ? contourLength(ca) : 0, cb ? contourLength(cb) : 0);\n\t\tlet n = Math.max(counts[0], counts[1], minSeg, spacing ? Math.ceil(longest / spacing) : 0);\n\t\tn = Math.max(counts[0], counts[1], Math.min(n, maxSeg));\n\t\tconst point = (c: VectorMorphContour, from: VectorBounds | null, to: VectorBounds | null): VectorMorphContour => {\n\t\t\tconst p = placeIn(c, from, to);\n\t\t\treturn { closed: c.closed, pts: Array.from({ length: 1 + 3 * n }, () => [p[0], p[1]] as Point) };\n\t\t};\n\t\tif (ca && cb) {\n\t\t\tconst ra = refineMorphContour(ca, n);\n\t\t\tconst rb = refineMorphContour(cb, n);\n\t\t\tpairs.push({\n\t\t\t\tx: ra.contour,\n\t\t\t\ty: rb.contour,\n\t\t\t\tpoint: false,\n\t\t\t\tstartX: explicitA === null ? null : (ra.anchors[explicitA] ?? null),\n\t\t\t\tstartY: explicitB === null ? null : explicitB === rb.anchors.length - 1 && !cb.closed ? -1 : (rb.anchors[explicitB] ?? null)\n\t\t\t});\n\t\t\tif (explicitA !== null && !ca.closed && explicitA === ra.anchors.length - 1 && explicitA > 0) pairs[pairs.length - 1].startX = -1;\n\t\t} else if (ca) pairs.push({ x: refineMorphContour(ca, n).contour, y: point(ca, ba, bb), point: true, startX: null, startY: null });\n\t\telse if (cb) pairs.push({ x: point(cb, bb, ba), y: refineMorphContour(cb, n).contour, point: true, startX: null, startY: null });\n\t}\n\t// Explicit starts: closed contours turn to the clicked anchor; an open one clicked at its end runs backwards.\n\tconst startAt = (c: VectorMorphContour, s: number | null): VectorMorphContour => {\n\t\tif (s === null) return c;\n\t\tif (s === -1) return reverseMorphContour(c);\n\t\treturn c.closed ? turnMorphContour(c, s) : c;\n\t};\n\tconst explicit = pairs.length > 0 && (pairs[0].startX !== null || pairs[0].startY !== null);\n\t// Winding: closed shapes keep the same turning direction (effectcraft), judged on the first\n\t// pair of closed contours and applied to every contour so a nonzero fill keeps its holes;\n\t// open paths take whichever direction costs less (deckcraft), unless a click fixed it.\n\tconst ref = pairs.find((p) => !p.point && p.x.closed && p.y.closed);\n\tconst fixedBack = ref\n\t\t? Math.sign(polygonArea(anchorPoints(ref.x))) !== Math.sign(polygonArea(anchorPoints(ref.y))) && Math.abs(polygonArea(anchorPoints(ref.y))) > 1e-12\n\t\t: explicit\n\t\t\t? false\n\t\t\t: null;\n\tlet best: { xs: VectorMorphContour[]; ys: VectorMorphContour[]; cost: number; back: boolean } | null = null;\n\tfor (const back of fixedBack === null ? [false, true] : [fixedBack]) {\n\t\tconst xs: VectorMorphContour[] = [];\n\t\tconst ys: VectorMorphContour[] = [];\n\t\tlet cost = 0;\n\t\tpairs.forEach((p, k) => {\n\t\t\tlet x = k === 0 ? startAt(p.x, p.startX) : p.x;\n\t\t\tlet y = k === 0 ? startAt(p.y, p.startY) : p.y;\n\t\t\tif (back) y = reverseMorphContour(y);\n\t\t\tif (p.point) {\n\t\t\t\txs.push(x);\n\t\t\t\tys.push(y);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst pinned = k === 0 && explicit;\n\t\t\t// The closed side turns: `b` when it is closed, else `a`.\n\t\t\tconst turnX = !y.closed && x.closed;\n\t\t\tif (match && !pinned && (y.closed || turnX)) {\n\t\t\t\tconst r = turnX ? bestStart(y, x, useSC) : bestStart(x, y, useSC);\n\t\t\t\tif (turnX) x = turnMorphContour(x, r.start);\n\t\t\t\telse y = turnMorphContour(y, r.start);\n\t\t\t\tcost += r.cost;\n\t\t\t} else cost += bestStart(x, { ...y, closed: false }, useSC).cost;\n\t\t\txs.push(x);\n\t\t\tys.push(y);\n\t\t});\n\t\tif (!best || cost < best.cost - 1e-9) best = { xs, ys, cost, back };\n\t}\n\treturn best ? { a: best.xs, b: best.ys, reversed: best.back } : { a: [], b: [], reversed: false };\n}\n\n/**\n * How many pairs of straight anchor paths (from `a`'s anchor i to `b`'s anchor i) cross: a\n * sanity measure of a correspondence — good matches don't make anchors pass through each other.\n */\nexport function morphPathsCross(a: readonly VectorMorphContour[], b: readonly VectorMorphContour[]): number {\n\tlet count = 0;\n\tconst d = (p: Point, q: Point, r: Point) => (q[0] - p[0]) * (r[1] - p[1]) - (q[1] - p[1]) * (r[0] - p[0]);\n\tfor (let k = 0; k < Math.min(a.length, b.length); k++) {\n\t\tconst pa = anchorPoints(a[k]);\n\t\tconst pb = anchorPoints(b[k]);\n\t\tconst n = Math.min(pa.length, pb.length);\n\t\tfor (let i = 0; i < n; i++)\n\t\t\tfor (let j = i + 1; j < n; j++) {\n\t\t\t\tconst d1 = d(pa[j], pb[j], pa[i]);\n\t\t\t\tconst d2 = d(pa[j], pb[j], pb[i]);\n\t\t\t\tconst d3 = d(pa[i], pb[i], pa[j]);\n\t\t\t\tconst d4 = d(pa[i], pb[i], pb[j]);\n\t\t\t\tif (d1 * d2 < 0 && d3 * d4 < 0) count++;\n\t\t\t}\n\t}\n\treturn count;\n}\n\n// ---------------------------------------------------------------------------\n// In-betweens\n// ---------------------------------------------------------------------------\n\n/** The similarity (rotation θ, scale s, centroids) that best maps `a`'s anchors onto `b`'s. */\ninterface Similarity {\n\tca: Point;\n\tcb: Point;\n\ttheta: number;\n\ts: number;\n}\n\nfunction procrustes(a: readonly VectorMorphContour[], b: readonly VectorMorphContour[]): Similarity {\n\tconst pa = a.flatMap(anchorPoints);\n\tconst pb = b.flatMap(anchorPoints);\n\tconst ca = frame(pa).c;\n\tconst cb = frame(pb).c;\n\tlet ss = 0;\n\tlet dot = 0;\n\tlet cross = 0;\n\tfor (let i = 0; i < Math.min(pa.length, pb.length); i++) {\n\t\tconst p: Point = [pa[i][0] - ca[0], pa[i][1] - ca[1]];\n\t\tconst q: Point = [pb[i][0] - cb[0], pb[i][1] - cb[1]];\n\t\tss += p[0] * p[0] + p[1] * p[1];\n\t\tdot += p[0] * q[0] + p[1] * q[1];\n\t\tcross += p[0] * q[1] - p[1] * q[0];\n\t}\n\treturn { ca, cb, theta: Math.atan2(cross, dot), s: ss > 1e-12 ? Math.hypot(dot, cross) / ss : 1 };\n}\n\n/**\n * Corresponded contours at `u`: each point carried by the similarity interpolated to `u`\n * (rotation θu, scale sᵘ, centroid moving straight), plus `u` of what the full similarity\n * leaves over, blended with the straight path by `rigidity`.\n */\nexport function interpolateMorphContours(\n\ta: readonly VectorMorphContour[],\n\tb: readonly VectorMorphContour[],\n\tu: number,\n\toptions: Pick<VectorMorphOptions, 'linear' | 'rigidity'> & { similarity?: Similarity } = {}\n): VectorMorphContour[] {\n\tconst w = options.linear ? 0 : Math.min(1, Math.max(0, options.rigidity ?? 1));\n\tconst sim = w > 0 ? (options.similarity ?? procrustes(a, b)) : null;\n\tconst rot = (p: Point, ang: number, k: number): Point => {\n\t\tconst c = Math.cos(ang);\n\t\tconst s = Math.sin(ang);\n\t\treturn [k * (c * p[0] - s * p[1]), k * (s * p[0] + c * p[1])];\n\t};\n\tconst thetaU = sim ? sim.theta * u : 0;\n\tconst sU = sim ? Math.max(1e-9, sim.s) ** u : 1;\n\tconst cU = sim ? lerpP(sim.ca, sim.cb, u) : ([0, 0] as Point);\n\treturn a.map((ca, k) => {\n\t\tconst cb = b[k];\n\t\tconst pts = ca.pts.map((p, i) => {\n\t\t\tconst q = cb.pts[i] ?? p;\n\t\t\tconst linear = lerpP(p, q, u);\n\t\t\tif (!sim) return linear;\n\t\t\tconst d: Point = [p[0] - sim.ca[0], p[1] - sim.ca[1]];\n\t\t\tconst full = rot(d, sim.theta, sim.s);\n\t\t\tconst resid: Point = [q[0] - (full[0] + sim.cb[0]), q[1] - (full[1] + sim.cb[1])];\n\t\t\tconst part = rot(d, thetaU, sU);\n\t\t\tconst rigid: Point = [part[0] + cU[0] + resid[0] * u, part[1] + cU[1] + resid[1] * u];\n\t\t\treturn lerpP(linear, rigid, w);\n\t\t});\n\t\treturn { closed: ca.closed && cb.closed, pts };\n\t});\n}\n\n// ---------------------------------------------------------------------------\n// Transforms\n// ---------------------------------------------------------------------------\n\n/**\n * Interpolates two rigid matrices as a rotation (the shorter way round) plus a translation.\n * Any scale or skew is interpolated linearly in the rotated frame.\n */\nexport function interpolateRigidMatrix(a: AffineMatrix, b: AffineMatrix, t: number): AffineMatrix {\n\tconst decompose = (m: AffineMatrix) => {\n\t\tconst sx = Math.hypot(m[0], m[1]);\n\t\tconst ang = sx > 1e-12 ? Math.atan2(m[1], m[0]) : 0;\n\t\tconst c = Math.cos(ang);\n\t\tconst s = Math.sin(ang);\n\t\treturn { e: m[4], f: m[5], ang, sx, sh: c * m[2] + s * m[3], sy: -s * m[2] + c * m[3] };\n\t};\n\tconst p = decompose(a);\n\tconst q = decompose(b);\n\tlet turn = q.ang - p.ang;\n\tturn = ((((turn + Math.PI) % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI)) - Math.PI;\n\tconst ang = p.ang + turn * t;\n\tconst sx = lerpN(p.sx, q.sx, t);\n\tconst sh = lerpN(p.sh, q.sh, t);\n\tconst sy = lerpN(p.sy, q.sy, t);\n\tconst c = Math.cos(ang);\n\tconst s = Math.sin(ang);\n\treturn [c * sx, s * sx, c * sh - s * sy, s * sh + c * sy, lerpN(p.e, q.e, t), lerpN(p.f, q.f, t)];\n}\n\n// ---------------------------------------------------------------------------\n// Paint\n// ---------------------------------------------------------------------------\n\n/** Two colours mixed in OKLab (premultiplied alpha); unreadable colours switch halfway. */\nexport function interpolateVectorColor(a: string, b: string, t: number): string {\n\tif (t <= 0) return a;\n\tif (t >= 1) return b;\n\treturn mixColorsOklab(a, b, t) ?? (t < 0.5 ? a : b);\n}\n\n/**\n * A gradient's stops resampled at `offsets`, each painting what the gradient paints there (its\n * midpoints, smoothness and interpolation space included).\n */\nexport function resampleGradientStops(g: VectorGradient, offsets: readonly number[]): VectorGradientStop[] {\n\treturn offsets.map((offset) => {\n\t\tconst s = sampleVectorGradient(g, offset);\n\t\treturn s.opacity < 1 ? { offset, color: s.color, opacity: Math.round(s.opacity * 1e4) / 1e4 } : { offset, color: s.color };\n\t});\n}\n\nfunction lerpAngle(a: number, b: number, t: number): number {\n\tconst d = ((((b - a + 180) % 360) + 360) % 360) - 180;\n\treturn a + d * t;\n}\n\nconst lerpPoint = (a: Vec2, b: Vec2, t: number): Vec2 => ({ x: lerpN(a.x, b.x, t), y: lerpN(a.y, b.y, t) });\nconst sameColourModel = (a: VectorGradient, b: VectorGradient) => (a.interpolation ?? 'srgb') === (b.interpolation ?? 'srgb') && (a.smoothness ?? 0) === (b.smoothness ?? 0);\n\n/** Stops of two gradients mixed: stop by stop (midpoints too) when they match, else resampled to a common set. */\nfunction lerpStops(a: VectorGradient, b: VectorGradient, t: number): { stops: VectorGradientStop[]; resampled: boolean } {\n\tlet stopsA = sortedVectorGradientStops(a);\n\tlet stopsB = sortedVectorGradientStops(b);\n\tconst resampled = stopsA.length !== stopsB.length || !sameColourModel(a, b);\n\tif (resampled) {\n\t\t// Where either gradient bends (its own stops and the extra stops its midpoints and colour space need).\n\t\tconst offs = [...expandVectorGradientStops(a), ...expandVectorGradientStops(b), ...stopsA, ...stopsB].map((s) => s.offset).filter(Number.isFinite).sort((x, y) => x - y);\n\t\tconst common = offs.filter((o, i) => i === 0 || o - offs[i - 1] > 1e-4);\n\t\tstopsA = resampleGradientStops(a, common);\n\t\tstopsB = resampleGradientStops(b, common);\n\t}\n\tconst stops = stopsA.map((x, i) => {\n\t\tconst y = stopsB[i];\n\t\tconst opacity = lerpN(x.opacity ?? 1, y.opacity ?? 1, t);\n\t\tconst stop: VectorGradientStop = { offset: lerpN(x.offset, y.offset, t), color: interpolateVectorColor(x.color, y.color, t) };\n\t\tif (opacity < 1) stop.opacity = opacity;\n\t\tconst mid = lerpN(x.midpoint ?? 0.5, y.midpoint ?? 0.5, t);\n\t\tif (Math.abs(mid - 0.5) > 1e-6) stop.midpoint = mid;\n\t\treturn stop;\n\t});\n\treturn { stops, resampled };\n}\n\n/**\n * Two gradients of one style: stops mixed, then the placement — the shorthand angle / centre /\n * radius, or the start, end, aspect and focal points when both carry them in the same units\n * (one in the box and one in the node's space switch halfway). Null for different styles.\n */\nfunction lerpGradient(a: VectorGradient, b: VectorGradient, t: number): VectorGradient | null {\n\tif (a.type !== b.type) return null;\n\tconst { stops, resampled } = lerpStops(a, b, t);\n\tconst near = t < 0.5 ? a : b;\n\tconst out: VectorGradient = { type: a.type, stops };\n\tif (!resampled) {\n\t\tif (a.interpolation && a.interpolation !== 'srgb') out.interpolation = a.interpolation;\n\t\tif (a.smoothness) out.smoothness = a.smoothness;\n\t}\n\tif (near.spread && near.spread !== 'pad') out.spread = near.spread;\n\tif (near.strokeMode && near.strokeMode !== 'within') out.strokeMode = near.strokeMode;\n\tconst ea = hasExplicitGradientGeometry(a);\n\tconst eb = hasExplicitGradientGeometry(b);\n\tif (!ea && !eb) {\n\t\tif (a.angle !== undefined || b.angle !== undefined || a.type === 'linear' || a.type === 'reflected') {\n\t\t\tconst fallback = a.type === 'linear' || a.type === 'reflected' ? 180 : 90;\n\t\t\tout.angle = lerpAngle(a.angle ?? fallback, b.angle ?? fallback, t);\n\t\t}\n\t\tif (a.type !== 'linear' && a.type !== 'reflected') {\n\t\t\tout.cx = lerpN(a.cx ?? 0.5, b.cx ?? 0.5, t);\n\t\t\tout.cy = lerpN(a.cy ?? 0.5, b.cy ?? 0.5, t);\n\t\t\tout.r = lerpN(a.r ?? 0.5, b.r ?? 0.5, t);\n\t\t}\n\t\treturn out;\n\t}\n\tconst pa = vectorGradientPoints(a);\n\tconst pb = vectorGradientPoints(b);\n\tif (pa.units !== pb.units) {\n\t\tconst src = explicitVectorGradient(near);\n\t\treturn { ...src, stops: out.stops, ...(out.interpolation ? { interpolation: out.interpolation } : {}), ...(out.smoothness ? { smoothness: out.smoothness } : {}) };\n\t}\n\tout.start = lerpPoint(pa.start, pb.start, t);\n\tout.end = lerpPoint(pa.end, pb.end, t);\n\tout.width = lerpPoint(pa.width, pb.width, t);\n\tout.units = pa.units;\n\tif (a.type === 'radial') {\n\t\tif (pa.focal || pb.focal) out.focal = lerpPoint(pa.focal ?? pa.start, pb.focal ?? pb.start, t);\n\t\tconst fr = lerpN(pa.focalRadius, pb.focalRadius, t);\n\t\tif (fr > 0) out.focalRadius = fr;\n\t}\n\treturn out;\n}\n\n/** A gradient shaped like `like` painting one colour (or nothing). */\nfunction solidLike(color: string | null, like: VectorGradient): VectorGradient {\n\treturn { ...like, stops: like.stops.map((s) => (color === null ? { offset: s.offset, color: s.color, opacity: 0 } : { offset: s.offset, color })) };\n}\n\n/**\n * Interpolates paints: colours in OKLab, gradients of one kind with their stops resampled to a\n * common set, a colour and a gradient through a gradient of that colour, and a missing paint\n * fading from transparent. Gradients of different kinds switch halfway.\n */\nexport function interpolateVectorPaint(a: VectorPaint | undefined, b: VectorPaint | undefined, t: number): VectorPaint | undefined {\n\tif (t <= 0) return a;\n\tif (t >= 1) return b;\n\tconst pa = hasPaint(a);\n\tconst pb = hasPaint(b);\n\tif (!pa && !pb) return t < 0.5 ? a : b;\n\tif (typeof a === 'string' && pa && typeof b === 'string' && pb) return interpolateVectorColor(a, b, t);\n\tif (!pa && typeof b === 'string') return interpolateVectorColor('transparent', b, t);\n\tif (!pb && typeof a === 'string') return interpolateVectorColor(a, 'transparent', t);\n\tconst ga = pa && isVectorGradient(a) ? a : null;\n\tconst gb = pb && isVectorGradient(b) ? b : null;\n\tif (ga && gb) return lerpGradient(ga, gb, t) ?? (t < 0.5 ? a : b);\n\tif (gb) return lerpGradient(solidLike(pa ? (a as string) : null, gb), gb, t) ?? b;\n\tif (ga) return lerpGradient(ga, solidLike(pb ? (b as string) : null, ga), t) ?? a;\n\treturn t < 0.5 ? a : b;\n}\n\n/** Width profiles at every position either has a point (no profile is uniform). */\nexport function interpolateWidthProfiles(a: readonly VectorWidthPoint[] | null | undefined, b: readonly VectorWidthPoint[] | null | undefined, t: number): VectorWidthPoint[] | null {\n\tif (!a?.length && !b?.length) return null;\n\tconst at = [...(a ?? []), ...(b ?? []), { t: 0 }, { t: 1 }].map((p) => p.t).sort((x, y) => x - y);\n\tconst ts = at.filter((v, i) => i === 0 || v - at[i - 1] > 1e-6);\n\treturn ts.map((pos) => {\n\t\tconst x = widthProfileAt(a, pos);\n\t\tconst y = widthProfileAt(b, pos);\n\t\treturn { t: pos, left: lerpN(x.left, y.left, t), right: lerpN(x.right, y.right, t) };\n\t});\n}\n\n/** Dash patterns: equal lengths mix; a solid stroke counts as the other's pattern with its gaps closed. */\nfunction lerpDashes(a: number[] | undefined, b: number[] | undefined, t: number): number[] | undefined {\n\tconst dashed = (d: number[] | undefined) => !!d?.length && d.some((v) => v > 0);\n\tif (!dashed(a) && !dashed(b)) return t < 0.5 ? a : b;\n\tconst even = (p: number[]) => (p.length % 2 ? [...p, ...p] : p);\n\tconst solid = (p: number[]) => {\n\t\tconst e = even(p);\n\t\tconst out: number[] = [];\n\t\tfor (let i = 0; i < e.length; i += 2) out.push(e[i] + e[i + 1], 0);\n\t\treturn out;\n\t};\n\tconst x = dashed(a) ? even(a!) : solid(b!);\n\tconst y = dashed(b) ? even(b!) : solid(a!);\n\tif (x.length !== y.length) return t < 0.5 ? a : b;\n\treturn x.map((v, i) => lerpN(v, y[i], t));\n}\n\nconst SWITCHED_KEYS = ['strokeLinecap', 'strokeLinejoin', 'fillRule', 'strokeAlign', 'startArrow', 'endArrow', 'arrowAlign'] as const;\n\n/**\n * Interpolated style of two paths: paints, stroke width, dashes, arrowhead scales and width\n * profiles mix; caps, joins, the fill rule, alignment and arrowheads switch halfway.\n */\nexport function interpolateVectorStyle(a: VectorStyle, b: VectorStyle, t: number): VectorStyle {\n\tconst near = t < 0.5 ? a : b;\n\tconst out: VectorStyle = {};\n\tconst fill = interpolateVectorPaint(a.fill, b.fill, t);\n\tif (fill !== undefined) out.fill = fill;\n\tconst stroke = interpolateVectorPaint(a.stroke, b.stroke, t);\n\tif (stroke !== undefined) out.stroke = stroke;\n\tif (a.strokeWidth !== undefined || b.strokeWidth !== undefined) out.strokeWidth = lerpN(a.strokeWidth ?? 1, b.strokeWidth ?? 1, t);\n\tfor (const key of SWITCHED_KEYS) if (near[key] !== undefined && near[key] !== null) (out as Record<string, unknown>)[key] = near[key];\n\tfor (const key of ['startArrowScale', 'endArrowScale'] as const)\n\t\tif (a[key] !== undefined || b[key] !== undefined) out[key] = lerpN(a[key] ?? 1, b[key] ?? 1, t);\n\tconst dash = lerpDashes(a.strokeDasharray, b.strokeDasharray, t);\n\tif (dash?.length) out.strokeDasharray = dash;\n\tconst profile = interpolateWidthProfiles(a.strokeWidthProfile, b.strokeWidthProfile, t);\n\tif (profile) out.strokeWidthProfile = profile;\n\treturn out;\n}\n\n/** A path's style as seen running backwards: arrowheads swap ends and width profiles reverse. */\nfunction reversedStyle(s: VectorStyle): VectorStyle {\n\tconst out: VectorStyle = { ...s };\n\tout.startArrow = s.endArrow;\n\tout.endArrow = s.startArrow;\n\tout.startArrowScale = s.endArrowScale;\n\tout.endArrowScale = s.startArrowScale;\n\tif (s.strokeWidthProfile?.length) out.strokeWidthProfile = reverseWidthProfile(s.strokeWidthProfile);\n\tfor (const k of ['startArrow', 'endArrow', 'startArrowScale', 'endArrowScale'] as const) if (out[k] === undefined) delete out[k];\n\treturn out;\n}\n\nconst STYLE_KEYS = [\n\t'fill',\n\t'stroke',\n\t'strokeWidth',\n\t'strokeLinecap',\n\t'strokeLinejoin',\n\t'strokeDasharray',\n\t'fillRule',\n\t'strokeAlign',\n\t'startArrow',\n\t'endArrow',\n\t'arrowAlign',\n\t'startArrowScale',\n\t'endArrowScale',\n\t'strokeWidthProfile'\n] as const;\n\nfunction styleOf(n: VectorPathNode): VectorStyle {\n\tconst out: VectorStyle = {};\n\tfor (const k of STYLE_KEYS) if (n[k] !== undefined) (out as Record<string, unknown>)[k] = n[k];\n\treturn out;\n}\n\n// ---------------------------------------------------------------------------\n// Path and node morphs\n// ---------------------------------------------------------------------------\n\nfunction contoursOf(node: VectorPathNode, m: AffineMatrix): VectorMorphContour[] {\n\treturn expandVectorCorners(node.subpaths)\n\t\t.map((sp) => subpathToMorphContour(sp, m))\n\t\t.filter((c): c is VectorMorphContour => !!c);\n}\n\n/**\n * Two paths (each placed by `ma` / `mb` into a common space: by default their own\n * transforms, i.e. their parent's space) prepared for interpolation.\n */\nfunction preparePathMorph(\n\ta: VectorPathNode,\n\tb: VectorPathNode,\n\toptions: VectorMorphOptions,\n\tma: AffineMatrix = nodeMatrix(a),\n\tmb: AffineMatrix = nodeMatrix(b)\n): (t: number) => VectorPathNode {\n\tconst corr = correspondMorphContours(contoursOf(a, ma), contoursOf(b, mb), options);\n\tconst sim = procrustes(corr.a, corr.b);\n\tconst styleA = styleOf(a);\n\tconst styleB = corr.reversed ? reversedStyle(styleOf(b)) : styleOf(b);\n\tconst rigid = !isIdentityMatrix(ma) || !isIdentityMatrix(mb);\n\tconst id = options.id ?? a.id;\n\treturn (t) => {\n\t\tconst contours = interpolateMorphContours(corr.a, corr.b, t, { linear: options.linear, rigidity: options.rigidity, similarity: sim });\n\t\tconst m = rigid ? interpolateRigidMatrix(ma, mb, t) : IDENTITY_MATRIX;\n\t\tconst back = rigid ? invertMatrix(m) : IDENTITY_MATRIX;\n\t\tconst subpaths = contours.map((c, k) => {\n\t\t\t// A pair of one closed and one open contour is open in between and takes each key's state at the ends.\n\t\t\tconst closed = t <= 0 ? corr.a[k].closed : t >= 1 ? corr.b[k].closed : corr.a[k].closed && corr.b[k].closed;\n\t\t\treturn morphContourToSubpath({ closed: corr.a[k].closed && corr.b[k].closed, pts: c.pts }, back, closed);\n\t\t});\n\t\tconst node: VectorPathNode = { id, type: 'path', subpaths, ...interpolateVectorStyle(styleA, styleB, t) };\n\t\tconst opacity = lerpN(a.opacity ?? 1, b.opacity ?? 1, t);\n\t\tif (opacity < 1) node.opacity = opacity;\n\t\tif (rigid && !isIdentityMatrix(m)) node.transform = m;\n\t\treturn node;\n\t};\n}\n\n/** Path nodes of a subtree with their matrices into the subtree's parent space. */\nfunction flattenPaths(node: VectorNode, parent: AffineMatrix = IDENTITY_MATRIX): { path: VectorPathNode; m: AffineMatrix; opacity: number }[] {\n\tconst m = multiplyMatrices(nodeMatrix(node), parent);\n\tif (node.type === 'path') return [{ path: node, m, opacity: 1 }];\n\t// Text blends as its glyphs.\n\tif (node.type === 'text' || node.type === 'instance') return flattenPaths(expandVectorAppearance(node), parent);\n\tconst o = node.opacity ?? 1;\n\treturn node.children\n\t\t.filter((c) => c.visible !== false)\n\t\t.flatMap((c) => flattenPaths(c, m))\n\t\t.map((e) => ({ ...e, opacity: e.opacity * o }));\n}\n\n/** Bounds of a path placed by `m`. */\nconst placedBounds = (path: VectorPathNode, m: AffineMatrix) => boundsOfPoints(contoursOf(path, m).flatMap((c) => c.pts));\n\n/** A copy of `path` shrunk to the point that matches it in the other shape's box (placed by the identity). */\nfunction collapsedPath(path: VectorPathNode, m: AffineMatrix, from: VectorBounds | null, to: VectorBounds | null): VectorPathNode {\n\tconst own = placedBounds(path, m);\n\tconst c: Point = own ? [own.x + own.width / 2, own.y + own.height / 2] : [0, 0];\n\tconst fx = from && from.width > 0 ? (c[0] - from.x) / from.width : 0.5;\n\tconst fy = from && from.height > 0 ? (c[1] - from.y) / from.height : 0.5;\n\tconst p = to ? { x: to.x + to.width * fx, y: to.y + to.height * fy } : { x: c[0], y: c[1] };\n\tconst subpaths = path.subpaths.map((sp) => ({ closed: sp.closed, anchors: sp.anchors.map(() => ({ x: p.x, y: p.y })) }));\n\tconst { transform: _t, ...rest } = path;\n\treturn { ...rest, subpaths };\n}\n\n/**\n * Prepares two shapes for interpolation. Two paths morph directly; with a group on either side\n * the paths inside pair up in stacking order and those without a partner grow out of a point.\n * Shapes are blended in their parent's space.\n */\nexport function createVectorMorph(a: VectorNode, b: VectorNode, options: VectorMorphOptions = {}): VectorMorph {\n\tif (a.type === 'path' && b.type === 'path') {\n\t\tconst at = preparePathMorph(a, b, options);\n\t\treturn { at };\n\t}\n\tconst pa = flattenPaths(a);\n\tconst pb = flattenPaths(b);\n\tconst ba = unionBounds(pa.map((e) => placedBounds(e.path, e.m)));\n\tconst bb = unionBounds(pb.map((e) => placedBounds(e.path, e.m)));\n\tconst id = options.id ?? a.id;\n\tconst parts: ((t: number) => VectorPathNode)[] = [];\n\tconst opacities: [number, number][] = [];\n\tfor (let i = 0; i < Math.max(pa.length, pb.length); i++) {\n\t\tconst x = pa[i];\n\t\tconst y = pb[i];\n\t\tconst sub = { ...options, id: `${id}-${i}`, starts: undefined };\n\t\tif (x && y) {\n\t\t\tparts.push(preparePathMorph(x.path, y.path, sub, x.m, y.m));\n\t\t\topacities.push([x.opacity, y.opacity]);\n\t\t} else if (x) {\n\t\t\tparts.push(preparePathMorph(x.path, collapsedPath(x.path, x.m, ba, bb), sub, x.m, IDENTITY_MATRIX));\n\t\t\topacities.push([x.opacity, x.opacity]);\n\t\t} else if (y) {\n\t\t\tparts.push(preparePathMorph(collapsedPath(y.path, y.m, bb, ba), y.path, sub, IDENTITY_MATRIX, y.m));\n\t\t\topacities.push([y.opacity, y.opacity]);\n\t\t}\n\t}\n\treturn {\n\t\tat: (t) => {\n\t\t\tconst children = parts.map((p, i) => {\n\t\t\t\tconst n = p(t);\n\t\t\t\tconst o = lerpN(opacities[i][0], opacities[i][1], t) * (n.opacity ?? 1);\n\t\t\t\tif (o < 1) n.opacity = o;\n\t\t\t\telse delete n.opacity;\n\t\t\t\treturn n;\n\t\t\t});\n\t\t\tconst group: VectorGroupNode = { id, type: 'group', children };\n\t\t\treturn group;\n\t\t}\n\t};\n}\n\n/**\n * The in-between of two shapes at `t` (0 = `a`, 1 = `b`). Prepare once with\n * `createVectorMorph` when interpolating the same pair at many `t`.\n */\nexport function interpolateVectorPaths(a: VectorNode, b: VectorNode, t: number, options: VectorMorphOptions = {}): VectorNode {\n\treturn createVectorMorph(a, b, options).at(t);\n}\n\n/** A keyframe of a path track: a shape at a time (ms), with the easing of the segment leaving it. */\nexport interface VectorPathKeyframe {\n\ttime: number;\n\tvalue: VectorNode;\n\teasing?: AnimationEasing;\n}\n\nconst keyframeMorphs = new WeakMap<VectorNode, WeakMap<VectorNode, VectorMorph>>();\n\n/**\n * A path track's shape at `time`: before the first keyframe its shape, after the last the\n * last; in between the two keyframes morph (prepared once per pair and cached) at the eased\n * fraction. Easings that overshoot are clamped to the keys. `null` without keyframes.\n */\nexport function evaluateVectorPathKeyframes(keyframes: readonly VectorPathKeyframe[], time: number, options: VectorMorphOptions = {}): VectorNode | null {\n\tconst keys = keyframes.filter((k) => Number.isFinite(k.time)).sort((x, y) => x.time - y.time);\n\tif (!keys.length) return null;\n\tif (!(time > keys[0].time)) return keys[0].value;\n\tconst last = keys[keys.length - 1];\n\tif (time >= last.time) return last.value;\n\tlet i = 0;\n\twhile (i + 1 < keys.length && keys[i + 1].time <= time) i++;\n\tconst a = keys[i];\n\tconst b = keys[i + 1];\n\tif (time === a.time) return a.value;\n\tif (a.easing === 'hold') return a.value;\n\tconst span = b.time - a.time;\n\tconst u = Math.min(1, Math.max(0, evaluateEasing(a.easing, (time - a.time) / span, span)));\n\tlet inner = keyframeMorphs.get(a.value);\n\tif (!inner) keyframeMorphs.set(a.value, (inner = new WeakMap()));\n\tlet morph = inner.get(b.value);\n\tif (!morph) inner.set(b.value, (morph = createVectorMorph(a.value, b.value, options)));\n\treturn morph.at(u);\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/editor/editor/packages/core/dist/chunk-2PXRKMOH.cjs","../src/vector/blend.ts"],"names":["sx","ang","c","s"],"mappings":"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","file":"/home/runner/work/editor/editor/packages/core/dist/chunk-2PXRKMOH.cjs","sourcesContent":[null,"// Portions ported from effectcraft-main/crates/path/src/interp.rs, vectorcraft-main/crates/doc/src/blend.rs and deckcraft-main/crates/geom/src/morph.rs (MIT OR Apache-2.0, © ArtCraft Team and contributors). See THIRD_PARTY_NOTICES.md.\n/**\n * Morphing between vector paths: bring two shapes to matching anchors, then compute in-betweens.\n *\n * - **Contours** pair up in order. A contour without a partner grows out of (or shrinks into) a\n * point at the same place relative to the other shape's box. Straight segments become cubics\n * with handles at a third of the way, so a line bends smoothly into a curve.\n * - **Anchors** are inserted by arc length with de Casteljau splits, so both contours of a pair\n * keep their exact outline and get the same number of segments, spread over the segments in\n * proportion to their length.\n * - **Correspondence**: the closed side of each pair is turned to the cyclic start that costs\n * least — the position differences left after the best-fit rotation (both shapes centred and\n * scaled to unit size), a little for the turn, plus the χ² distance of log-polar\n * shape-context histograms (Belongie, Malik & Puzicha, PAMI 2002; angles taken from the\n * contour's direction) — and the winding is chosen once for all contours (the first closed\n * pair turns the same way), so a nonzero fill keeps its holes.\n * - **In-betweens** follow the shapes' best-fit rotation and scale (Procrustes), with the\n * leftover difference blended in linearly, so a turning shape turns instead of collapsing.\n * - **Paint**: colours mix in OKLab, gradients of one style resample their stops to a common\n * set, a missing paint fades from transparent; stroke width, opacity, dashes, arrowhead\n * scales and width profiles interpolate, and the rest switches halfway.\n * - **Transforms**: both shapes are blended in their parent's space; the in-between's rigid\n * `transform` interpolates as a rotation (the short way round) plus a translation.\n *\n * Live corners are cut into the geometry first, so rounded corners morph as curves.\n */\nimport type { Point } from '../canvas/types.js';\nimport { segmentLength, segmentParamAtLength, splitSegment } from '../canvas/pathops/bezier.js';\nimport { expandVectorGradientStops, explicitVectorGradient, hasExplicitGradientGeometry, isVectorGradient, sampleVectorGradient, sortedVectorGradientStops, vectorGradientPoints } from './gradient.js';\nimport { mixColorsOklab } from '../animation/color.js';\nimport { evaluateEasing, type AnimationEasing } from '../animation/easing.js';\nimport { expandVectorCorners } from './corners.js';\nimport {\n\tapplyMatrix,\n\thasPaint,\n\tIDENTITY_MATRIX,\n\tinferAnchorType,\n\tinvertMatrix,\n\tisIdentityMatrix,\n\tmultiplyMatrices,\n\tnodeMatrix,\n\tunionBounds,\n\ttype AffineMatrix\n} from './geometry.js';\nimport { reverseWidthProfile, widthProfileAt } from './width.js';\nimport { expandVectorAppearance } from './appearance.js';\nimport type { Vec2, VectorAnchor, VectorBounds, VectorGradient, VectorGradientStop, VectorGroupNode, VectorNode, VectorPaint, VectorPathNode, VectorStyle, VectorSubpath, VectorWidthPoint } from './types.js';\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nexport interface VectorMorphOptions {\n\t/**\n\t * Move anchors in straight lines instead of following the shapes' best-fit rotation and\n\t * scale. Default `false`.\n\t */\n\tlinear?: boolean;\n\t/** 0–1: how much the rotation-aware path outweighs the straight one (default 1). */\n\trigidity?: number;\n\t/** Fewest segments each contour pair gets (default 16). */\n\tminSegments?: number;\n\t/** At most this far apart (document units) along the longer contour, when set. */\n\tspacing?: number | null;\n\t/** Most segments a contour pair gets (default 400). */\n\tmaxSegments?: number;\n\t/** Search the start anchor of closed contours (default `true`); off keeps the stored starts. */\n\tmatchStart?: boolean;\n\t/** Compare shape-context histograms when choosing starts (default `true`). */\n\tshapeContext?: boolean;\n\t/**\n\t * The anchor each shape's first subpath starts from (the Blend tool's clicks). A closed\n\t * subpath turns round to it; an open one clicked at its last anchor runs backwards.\n\t */\n\tstarts?: readonly [number | null | undefined, number | null | undefined];\n\t/** Id of the in-between (default: the first shape's id). */\n\tid?: string;\n}\n\n/** Two shapes prepared once; `at(t)` interpolates (0 = `a`, 1 = `b`). */\nexport interface VectorMorph {\n\tat(t: number): VectorNode;\n}\n\n// ---------------------------------------------------------------------------\n// Point helpers\n// ---------------------------------------------------------------------------\n\nconst lerpN = (a: number, b: number, t: number) => a + (b - a) * t;\nconst lerpP = (a: Point, b: Point, t: number): Point => [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t];\nconst toP = (v: { x: number; y: number }): Point => [v.x, v.y];\nconst mapP = (m: AffineMatrix, p: Point): Point => [m[0] * p[0] + m[2] * p[1] + m[4], m[1] * p[0] + m[3] * p[1] + m[5]];\n\n// ---------------------------------------------------------------------------\n// Contours: a start anchor, then three points (handle, handle, anchor) per cubic segment\n// ---------------------------------------------------------------------------\n\n/** A subpath as cubics. A closed contour's last point repeats its first. */\nexport interface VectorMorphContour {\n\tclosed: boolean;\n\tpts: Point[];\n}\n\nconst curvesOf = (c: VectorMorphContour) => Math.max(0, (c.pts.length - 1) / 3) | 0;\n\n/** A subpath mapped by `m` as cubics (lines with handles at thirds), or null when empty. */\nexport function subpathToMorphContour(sp: VectorSubpath, m: AffineMatrix = IDENTITY_MATRIX): VectorMorphContour | null {\n\tconst n = sp.anchors.length;\n\tif (!n) return null;\n\tconst first = mapP(m, toP(sp.anchors[0]));\n\tconst pts: Point[] = [first];\n\tconst count = n < 2 ? 0 : sp.closed ? n : n - 1;\n\tfor (let i = 0; i < count; i++) {\n\t\tconst a = sp.anchors[i];\n\t\tconst b = sp.anchors[(i + 1) % n];\n\t\tconst pa = toP(a);\n\t\tconst pb = toP(b);\n\t\tconst straight = (!a.out || (a.out.x === a.x && a.out.y === a.y)) && (!b.in || (b.in.x === b.x && b.in.y === b.y));\n\t\tconst c1 = straight ? lerpP(pa, pb, 1 / 3) : toP(a.out ?? a);\n\t\tconst c2 = straight ? lerpP(pa, pb, 2 / 3) : toP(b.in ?? b);\n\t\tpts.push(mapP(m, c1), mapP(m, c2), i === count - 1 && sp.closed ? first : mapP(m, pb));\n\t}\n\treturn { closed: sp.closed && count > 0, pts };\n}\n\n/** Whether the cubic's handles lie on its chord (it draws a straight line). */\nfunction isStraight(p0: Point, p1: Point, p2: Point, p3: Point): boolean {\n\tconst dx = p3[0] - p0[0];\n\tconst dy = p3[1] - p0[1];\n\tconst len = Math.hypot(dx, dy);\n\tconst tol = Math.max(1e-7, len * 1e-7);\n\tif (len < 1e-12) return Math.hypot(p1[0] - p0[0], p1[1] - p0[1]) < tol && Math.hypot(p2[0] - p0[0], p2[1] - p0[1]) < tol;\n\tconst off = (p: Point) => Math.abs((p[0] - p0[0]) * dy - (p[1] - p0[1]) * dx) / len;\n\tconst along = (p: Point) => ((p[0] - p0[0]) * dx + (p[1] - p0[1]) * dy) / (len * len);\n\tconst u1 = along(p1);\n\tconst u2 = along(p2);\n\treturn off(p1) < tol && off(p2) < tol && u1 >= -1e-9 && u1 <= 1 + 1e-9 && u2 >= -1e-9 && u2 <= 1 + 1e-9;\n}\n\n/** A contour back to a subpath (`m` maps it out of the morph's space). Straight cubics become lines. */\nexport function morphContourToSubpath(c: VectorMorphContour, m: AffineMatrix = IDENTITY_MATRIX, closed = c.closed): VectorSubpath {\n\tconst pts = isIdentityMatrix(m) ? c.pts : c.pts.map((p) => mapP(m, p));\n\tconst curves = curvesOf(c);\n\t// A closed contour drops its repeated last anchor; one opened mid-morph keeps it.\n\tconst dropLast = closed && c.closed && curves > 0;\n\tconst count = dropLast ? curves : curves + 1;\n\tconst anchors: VectorAnchor[] = [];\n\tfor (let k = 0; k < count; k++) anchors.push({ x: pts[3 * k][0], y: pts[3 * k][1] });\n\tfor (let k = 0; k < curves; k++) {\n\t\tconst p0 = pts[3 * k];\n\t\tconst p1 = pts[3 * k + 1];\n\t\tconst p2 = pts[3 * k + 2];\n\t\tconst p3 = pts[3 * k + 3];\n\t\tif (isStraight(p0, p1, p2, p3)) continue;\n\t\tanchors[k].out = { x: p1[0], y: p1[1] };\n\t\tanchors[(k + 1) % count].in = { x: p2[0], y: p2[1] };\n\t}\n\tfor (const a of anchors) {\n\t\tconst type = inferAnchorType(a);\n\t\tif (type !== 'corner') a.type = type;\n\t}\n\tconst isClosed = closed && curves > 0;\n\treturn { anchors: dropCollinear(anchors, isClosed), closed: isClosed };\n}\n\n/** Anchors without the ones that sit inside a straight run (no handles, in line with both neighbours). */\nfunction dropCollinear(anchors: VectorAnchor[], closed: boolean): VectorAnchor[] {\n\tconst out = anchors.slice();\n\tconst min = closed ? 3 : 2;\n\tlet i = closed ? 0 : 1;\n\twhile (out.length > min && i < out.length - (closed ? 0 : 1)) {\n\t\tconst n = out.length;\n\t\tconst a = out[(i - 1 + n) % n];\n\t\tconst b = out[i];\n\t\tconst c = out[(i + 1) % n];\n\t\tconst plain = !b.in && !b.out && !a.out && !c.in;\n\t\tconst ux = b.x - a.x;\n\t\tconst uy = b.y - a.y;\n\t\tconst vx = c.x - b.x;\n\t\tconst vy = c.y - b.y;\n\t\tconst len = Math.hypot(ux, uy) + Math.hypot(vx, vy);\n\t\tif (plain && Math.abs(ux * vy - uy * vx) <= 1e-9 * Math.max(1, len * len) && ux * vx + uy * vy >= 0) out.splice(i, 1);\n\t\telse i++;\n\t}\n\treturn out;\n}\n\nconst segOf = (c: VectorMorphContour, k: number): Point[] => c.pts.slice(3 * k, 3 * k + 4);\n\n/**\n * Exactly the same outline with `segments` cubics (at least as many as it has), the new\n * anchors spread over its segments in proportion to their arc length (largest remainder)\n * and each segment split into pieces of equal arc length. Also returns where each original\n * anchor went.\n */\nexport function refineMorphContour(c: VectorMorphContour, segments: number): { contour: VectorMorphContour; anchors: number[] } {\n\tconst have = curvesOf(c);\n\tif (have === 0) return { contour: { closed: c.closed, pts: Array.from({ length: 1 + 3 * segments }, () => [c.pts[0][0], c.pts[0][1]] as Point) }, anchors: [0] };\n\tconst identity = Array.from({ length: c.closed ? have : have + 1 }, (_, i) => i);\n\tif (have >= segments) return { contour: c, anchors: identity };\n\tconst segs = Array.from({ length: have }, (_, k) => segOf(c, k));\n\tconst lens = segs.map((s) => segmentLength(s));\n\tconst sum = lens.reduce((a, b) => a + b, 0);\n\tconst extra = segments - have;\n\tconst want = lens.map((l) => (sum > 1e-12 ? (l / sum) * extra : extra / have));\n\tconst parts = want.map((w) => 1 + Math.floor(w));\n\tlet left = segments - parts.reduce((a, b) => a + b, 0);\n\t// Remainders that differ by rounding noise tie, so congruent shapes split alike.\n\tconst frac = want.map((w) => w - Math.floor(w));\n\tconst order = parts.map((_, i) => i).sort((a, b) => (Math.abs(frac[b] - frac[a]) > 1e-9 ? frac[b] - frac[a] : a - b));\n\tfor (let i = 0; left > 0; i = (i + 1) % order.length, left--) parts[order[i]]++;\n\tconst pts: Point[] = [c.pts[0]];\n\tconst anchors: number[] = [0];\n\tlet at = 0;\n\tsegs.forEach((seg, k) => {\n\t\tconst pieces = parts[k];\n\t\tlet rest: Point[] = seg.slice();\n\t\tlet t0 = 0;\n\t\tfor (let j = 1; j < pieces; j++) {\n\t\t\tconst t = segmentParamAtLength(seg, (lens[k] * j) / pieces, lens[k]);\n\t\t\tconst u = Math.min(1, Math.max(0, (t - t0) / (1 - t0 || 1)));\n\t\t\tconst [l, r] = splitSegment(rest, u);\n\t\t\tpts.push(l[1], l[2], l[3]);\n\t\t\trest = r;\n\t\t\tt0 = t;\n\t\t}\n\t\tpts.push(rest[1], rest[2], k === have - 1 && c.closed ? c.pts[0] : rest[3]);\n\t\tat += pieces;\n\t\tif (k < have - 1 || !c.closed) anchors.push(at);\n\t});\n\treturn { contour: { closed: c.closed, pts }, anchors };\n}\n\n/** The same contour run backwards (a closed one keeps its start anchor). */\nexport function reverseMorphContour(c: VectorMorphContour): VectorMorphContour {\n\treturn { closed: c.closed, pts: c.pts.slice().reverse() };\n}\n\n/** A closed contour starting at anchor `s` (deckcraft's `turn`). */\nexport function turnMorphContour(c: VectorMorphContour, s: number): VectorMorphContour {\n\tconst n = curvesOf(c);\n\tif (!c.closed || n === 0) return c;\n\tconst k = ((s % n) + n) % n;\n\tif (k === 0) return c;\n\tconst body = c.pts.slice(1);\n\treturn { closed: true, pts: [c.pts[3 * k], ...body.slice(3 * k), ...body.slice(0, 3 * k)] };\n}\n\n/** Anchor positions of a contour (a closed one without its repeated end). */\nfunction anchorPoints(c: VectorMorphContour): Point[] {\n\tconst n = curvesOf(c);\n\tconst count = c.closed ? n : n + 1;\n\treturn Array.from({ length: Math.max(1, count) }, (_, k) => c.pts[3 * k]);\n}\n\n/** Signed area of a contour's anchor polygon. */\nfunction polygonArea(pts: readonly Point[]): number {\n\tlet s = 0;\n\tfor (let i = 0; i < pts.length; i++) {\n\t\tconst a = pts[i];\n\t\tconst b = pts[(i + 1) % pts.length];\n\t\ts += a[0] * b[1] - b[0] * a[1];\n\t}\n\treturn s / 2;\n}\n\n// ---------------------------------------------------------------------------\n// Correspondence\n// ---------------------------------------------------------------------------\n\n/** Centroid and RMS radius. */\nfunction frame(v: readonly Point[]): { c: Point; r: number } {\n\tconst n = Math.max(1, v.length);\n\tlet cx = 0;\n\tlet cy = 0;\n\tfor (const p of v) {\n\t\tcx += p[0];\n\t\tcy += p[1];\n\t}\n\tcx /= n;\n\tcy /= n;\n\tlet s = 0;\n\tfor (const p of v) s += (p[0] - cx) ** 2 + (p[1] - cy) ** 2;\n\treturn { c: [cx, cy], r: Math.max(1e-9, Math.sqrt(s / n)) };\n}\n\nconst RBINS = 5;\nconst ABINS = 12;\n/** Weight of the turn a start implies: among starts that fit equally well, the least turning wins. */\nconst TURN_WEIGHT = 0.1;\n\n/**\n * Log-polar shape-context histograms of every point, distances normalised by the RMS radius and\n * angles measured from the contour's direction at the point, so turning a shape leaves them\n * unchanged (only the fit below decides how far it turns).\n */\nfunction shapeContexts(v: readonly Point[], closed: boolean): Float64Array[] {\n\tconst { r } = frame(v);\n\tconst n = v.length;\n\treturn v.map((p, i) => {\n\t\tconst prev = v[closed ? (i - 1 + n) % n : Math.max(0, i - 1)];\n\t\tconst next = v[closed ? (i + 1) % n : Math.min(n - 1, i + 1)];\n\t\tconst dir = Math.atan2(next[1] - prev[1], next[0] - prev[0]);\n\t\tconst h = new Float64Array(RBINS * ABINS);\n\t\tlet total = 0;\n\t\tfor (let j = 0; j < n; j++) {\n\t\t\tif (i === j) continue;\n\t\t\tconst dx = v[j][0] - p[0];\n\t\t\tconst dy = v[j][1] - p[1];\n\t\t\tconst d = Math.hypot(dx, dy) / r;\n\t\t\t// log radius in [1/8, 2] → five bins.\n\t\t\tconst lr = ((Math.log2(Math.max(d, 1e-6)) + 3) / 4) * RBINS;\n\t\t\tif (!(lr >= 0 && lr < RBINS)) continue;\n\t\t\tlet ang = Math.atan2(dy, dx) - dir;\n\t\t\tang = ((ang % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI);\n\t\t\th[Math.floor(lr) * ABINS + Math.min(ABINS - 1, Math.floor((ang / (2 * Math.PI)) * ABINS))] += 1;\n\t\t\ttotal++;\n\t\t}\n\t\tif (total > 0) for (let k = 0; k < h.length; k++) h[k] /= total;\n\t\treturn h;\n\t});\n}\n\nfunction chi2(a: Float64Array, b: Float64Array): number {\n\tlet s = 0;\n\tfor (let k = 0; k < a.length; k++) {\n\t\tconst t = a[k] + b[k];\n\t\tif (t > 1e-12) s += ((a[k] - b[k]) * (a[k] - b[k])) / t;\n\t}\n\treturn s / 2;\n}\n\n/**\n * The cyclic start of the closed `free` contour that matches `fixed` best, and its cost. Both\n * shapes are centred and scaled to unit RMS radius (where and how big they are does not\n * matter); a start costs what is left after the best rotation maps one onto the other, plus a\n * little for how far that rotation turns, plus (optionally) the mean χ² shape-context\n * distance. So a turned copy of a shape matches by turning rather than by squashing.\n */\nfunction bestStart(fixed: VectorMorphContour, free: VectorMorphContour, useShapeContext: boolean): { start: number; cost: number } {\n\tconst fa = anchorPoints(fixed);\n\tconst ga = anchorPoints(free);\n\tconst n = ga.length;\n\tconst ff = frame(fa);\n\tconst gf = frame(ga);\n\tconst fn = fa.map((p): Point => [(p[0] - ff.c[0]) / ff.r, (p[1] - ff.c[1]) / ff.r]);\n\tconst gn = ga.map((p): Point => [(p[0] - gf.c[0]) / gf.r, (p[1] - gf.c[1]) / gf.r]);\n\tconst fsc = useShapeContext ? shapeContexts(fa, fixed.closed) : null;\n\tconst gsc = useShapeContext ? shapeContexts(ga, free.closed) : null;\n\tconst m = Math.max(1, fn.length);\n\tconst cost = (s: number) => {\n\t\tlet dot = 0;\n\t\tlet cross = 0;\n\t\tlet sc = 0;\n\t\tfor (let i = 0; i < fn.length; i++) {\n\t\t\tconst j = free.closed ? (i + s) % n : i;\n\t\t\tconst p = fn[i];\n\t\t\tconst q = gn[j];\n\t\t\tdot += p[0] * q[0] + p[1] * q[1];\n\t\t\tcross += p[0] * q[1] - p[1] * q[0];\n\t\t\tif (fsc && gsc) sc += chi2(fsc[i], gsc[j]);\n\t\t}\n\t\t// Unit RMS on both sides: what the best rotation and scale leave over, as a fraction.\n\t\tconst residual = Math.max(0, 1 - (dot * dot + cross * cross) / (m * m));\n\t\tconst turn = 1 - Math.cos(Math.atan2(cross, dot));\n\t\treturn residual + TURN_WEIGHT * turn + sc / m;\n\t};\n\tif (!free.closed) return { start: 0, cost: cost(0) };\n\t// Long contours: every few starts first, then the neighbours of the best.\n\tconst stride = n > 96 ? Math.ceil(n / 48) : 1;\n\tlet best = { start: 0, cost: Infinity };\n\tfor (let s = 0; s < n; s += stride) {\n\t\tconst c = cost(s);\n\t\tif (c < best.cost - 1e-12) best = { start: s, cost: c };\n\t}\n\tif (stride > 1) {\n\t\tconst s0 = best.start;\n\t\tfor (let d = 1; d < stride; d++)\n\t\t\tfor (const s of [(s0 + d) % n, (s0 - d + n) % n]) {\n\t\t\t\tconst c = cost(s);\n\t\t\t\tif (c < best.cost - 1e-12) best = { start: s, cost: c };\n\t\t\t}\n\t}\n\treturn best;\n}\n\n/** The spot a contour without partner grows from: the same place relative to the other shape's box. */\nfunction placeIn(c: VectorMorphContour, from: VectorBounds | null, to: VectorBounds | null): Point {\n\tconst b = unionBounds([boundsOfPoints(c.pts)]);\n\tconst p: Point = b ? [b.x + b.width / 2, b.y + b.height / 2] : c.pts[0];\n\tif (!from || !to) return p;\n\tconst fx = from.width > 0 ? (p[0] - from.x) / from.width : 0.5;\n\tconst fy = from.height > 0 ? (p[1] - from.y) / from.height : 0.5;\n\treturn [to.x + to.width * fx, to.y + to.height * fy];\n}\n\nfunction boundsOfPoints(pts: readonly Point[]): VectorBounds | null {\n\tif (!pts.length) return null;\n\tlet x0 = Infinity;\n\tlet y0 = Infinity;\n\tlet x1 = -Infinity;\n\tlet y1 = -Infinity;\n\tfor (const p of pts) {\n\t\tx0 = Math.min(x0, p[0]);\n\t\ty0 = Math.min(y0, p[1]);\n\t\tx1 = Math.max(x1, p[0]);\n\t\ty1 = Math.max(y1, p[1]);\n\t}\n\treturn { x: x0, y: y0, width: x1 - x0, height: y1 - y0 };\n}\n\n/** Two shapes' contours with matching structure: same count, and per pair the same segments. */\nexport interface VectorMorphCorrespondence {\n\ta: VectorMorphContour[];\n\tb: VectorMorphContour[];\n\t/** Whether `b` runs backwards relative to its stored direction. */\n\treversed: boolean;\n}\n\n/**\n * Gives two lists of contours the same structure with matching anchors (see the module notes).\n * Contours pair in order; one without a partner meets a point.\n */\nexport function correspondMorphContours(a: readonly VectorMorphContour[], b: readonly VectorMorphContour[], options: VectorMorphOptions = {}): VectorMorphCorrespondence {\n\tconst minSeg = Math.max(1, Math.round(options.minSegments ?? 16));\n\tconst maxSeg = Math.max(minSeg, Math.round(options.maxSegments ?? 400));\n\tconst spacing = options.spacing && options.spacing > 0 ? options.spacing : null;\n\tconst useSC = options.shapeContext !== false;\n\tconst match = options.matchStart !== false;\n\tconst ba = boundsOfPoints(a.flatMap((c) => c.pts));\n\tconst bb = boundsOfPoints(b.flatMap((c) => c.pts));\n\tconst contourLength = (c: VectorMorphContour) => {\n\t\tlet l = 0;\n\t\tfor (let k = 0; k < curvesOf(c); k++) l += segmentLength(segOf(c, k));\n\t\treturn l;\n\t};\n\ttype Pair = { x: VectorMorphContour; y: VectorMorphContour; point: boolean; startX: number | null; startY: number | null };\n\tconst pairs: Pair[] = [];\n\tconst [sa, sb] = options.starts ?? [];\n\tfor (let k = 0; k < Math.max(a.length, b.length); k++) {\n\t\tconst ca = a[k];\n\t\tconst cb = b[k];\n\t\tconst explicitA = k === 0 && sa !== null && sa !== undefined ? sa : null;\n\t\tconst explicitB = k === 0 && sb !== null && sb !== undefined ? sb : null;\n\t\tconst counts = [ca ? curvesOf(ca) : 0, cb ? curvesOf(cb) : 0];\n\t\tconst longest = Math.max(ca ? contourLength(ca) : 0, cb ? contourLength(cb) : 0);\n\t\tlet n = Math.max(counts[0], counts[1], minSeg, spacing ? Math.ceil(longest / spacing) : 0);\n\t\tn = Math.max(counts[0], counts[1], Math.min(n, maxSeg));\n\t\tconst point = (c: VectorMorphContour, from: VectorBounds | null, to: VectorBounds | null): VectorMorphContour => {\n\t\t\tconst p = placeIn(c, from, to);\n\t\t\treturn { closed: c.closed, pts: Array.from({ length: 1 + 3 * n }, () => [p[0], p[1]] as Point) };\n\t\t};\n\t\tif (ca && cb) {\n\t\t\tconst ra = refineMorphContour(ca, n);\n\t\t\tconst rb = refineMorphContour(cb, n);\n\t\t\tpairs.push({\n\t\t\t\tx: ra.contour,\n\t\t\t\ty: rb.contour,\n\t\t\t\tpoint: false,\n\t\t\t\tstartX: explicitA === null ? null : (ra.anchors[explicitA] ?? null),\n\t\t\t\tstartY: explicitB === null ? null : explicitB === rb.anchors.length - 1 && !cb.closed ? -1 : (rb.anchors[explicitB] ?? null)\n\t\t\t});\n\t\t\tif (explicitA !== null && !ca.closed && explicitA === ra.anchors.length - 1 && explicitA > 0) pairs[pairs.length - 1].startX = -1;\n\t\t} else if (ca) pairs.push({ x: refineMorphContour(ca, n).contour, y: point(ca, ba, bb), point: true, startX: null, startY: null });\n\t\telse if (cb) pairs.push({ x: point(cb, bb, ba), y: refineMorphContour(cb, n).contour, point: true, startX: null, startY: null });\n\t}\n\t// Explicit starts: closed contours turn to the clicked anchor; an open one clicked at its end runs backwards.\n\tconst startAt = (c: VectorMorphContour, s: number | null): VectorMorphContour => {\n\t\tif (s === null) return c;\n\t\tif (s === -1) return reverseMorphContour(c);\n\t\treturn c.closed ? turnMorphContour(c, s) : c;\n\t};\n\tconst explicit = pairs.length > 0 && (pairs[0].startX !== null || pairs[0].startY !== null);\n\t// Winding: closed shapes keep the same turning direction (effectcraft), judged on the first\n\t// pair of closed contours and applied to every contour so a nonzero fill keeps its holes;\n\t// open paths take whichever direction costs less (deckcraft), unless a click fixed it.\n\tconst ref = pairs.find((p) => !p.point && p.x.closed && p.y.closed);\n\tconst fixedBack = ref\n\t\t? Math.sign(polygonArea(anchorPoints(ref.x))) !== Math.sign(polygonArea(anchorPoints(ref.y))) && Math.abs(polygonArea(anchorPoints(ref.y))) > 1e-12\n\t\t: explicit\n\t\t\t? false\n\t\t\t: null;\n\tlet best: { xs: VectorMorphContour[]; ys: VectorMorphContour[]; cost: number; back: boolean } | null = null;\n\tfor (const back of fixedBack === null ? [false, true] : [fixedBack]) {\n\t\tconst xs: VectorMorphContour[] = [];\n\t\tconst ys: VectorMorphContour[] = [];\n\t\tlet cost = 0;\n\t\tpairs.forEach((p, k) => {\n\t\t\tlet x = k === 0 ? startAt(p.x, p.startX) : p.x;\n\t\t\tlet y = k === 0 ? startAt(p.y, p.startY) : p.y;\n\t\t\tif (back) y = reverseMorphContour(y);\n\t\t\tif (p.point) {\n\t\t\t\txs.push(x);\n\t\t\t\tys.push(y);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst pinned = k === 0 && explicit;\n\t\t\t// The closed side turns: `b` when it is closed, else `a`.\n\t\t\tconst turnX = !y.closed && x.closed;\n\t\t\tif (match && !pinned && (y.closed || turnX)) {\n\t\t\t\tconst r = turnX ? bestStart(y, x, useSC) : bestStart(x, y, useSC);\n\t\t\t\tif (turnX) x = turnMorphContour(x, r.start);\n\t\t\t\telse y = turnMorphContour(y, r.start);\n\t\t\t\tcost += r.cost;\n\t\t\t} else cost += bestStart(x, { ...y, closed: false }, useSC).cost;\n\t\t\txs.push(x);\n\t\t\tys.push(y);\n\t\t});\n\t\tif (!best || cost < best.cost - 1e-9) best = { xs, ys, cost, back };\n\t}\n\treturn best ? { a: best.xs, b: best.ys, reversed: best.back } : { a: [], b: [], reversed: false };\n}\n\n/**\n * How many pairs of straight anchor paths (from `a`'s anchor i to `b`'s anchor i) cross: a\n * sanity measure of a correspondence — good matches don't make anchors pass through each other.\n */\nexport function morphPathsCross(a: readonly VectorMorphContour[], b: readonly VectorMorphContour[]): number {\n\tlet count = 0;\n\tconst d = (p: Point, q: Point, r: Point) => (q[0] - p[0]) * (r[1] - p[1]) - (q[1] - p[1]) * (r[0] - p[0]);\n\tfor (let k = 0; k < Math.min(a.length, b.length); k++) {\n\t\tconst pa = anchorPoints(a[k]);\n\t\tconst pb = anchorPoints(b[k]);\n\t\tconst n = Math.min(pa.length, pb.length);\n\t\tfor (let i = 0; i < n; i++)\n\t\t\tfor (let j = i + 1; j < n; j++) {\n\t\t\t\tconst d1 = d(pa[j], pb[j], pa[i]);\n\t\t\t\tconst d2 = d(pa[j], pb[j], pb[i]);\n\t\t\t\tconst d3 = d(pa[i], pb[i], pa[j]);\n\t\t\t\tconst d4 = d(pa[i], pb[i], pb[j]);\n\t\t\t\tif (d1 * d2 < 0 && d3 * d4 < 0) count++;\n\t\t\t}\n\t}\n\treturn count;\n}\n\n// ---------------------------------------------------------------------------\n// In-betweens\n// ---------------------------------------------------------------------------\n\n/** The similarity (rotation θ, scale s, centroids) that best maps `a`'s anchors onto `b`'s. */\ninterface Similarity {\n\tca: Point;\n\tcb: Point;\n\ttheta: number;\n\ts: number;\n}\n\nfunction procrustes(a: readonly VectorMorphContour[], b: readonly VectorMorphContour[]): Similarity {\n\tconst pa = a.flatMap(anchorPoints);\n\tconst pb = b.flatMap(anchorPoints);\n\tconst ca = frame(pa).c;\n\tconst cb = frame(pb).c;\n\tlet ss = 0;\n\tlet dot = 0;\n\tlet cross = 0;\n\tfor (let i = 0; i < Math.min(pa.length, pb.length); i++) {\n\t\tconst p: Point = [pa[i][0] - ca[0], pa[i][1] - ca[1]];\n\t\tconst q: Point = [pb[i][0] - cb[0], pb[i][1] - cb[1]];\n\t\tss += p[0] * p[0] + p[1] * p[1];\n\t\tdot += p[0] * q[0] + p[1] * q[1];\n\t\tcross += p[0] * q[1] - p[1] * q[0];\n\t}\n\treturn { ca, cb, theta: Math.atan2(cross, dot), s: ss > 1e-12 ? Math.hypot(dot, cross) / ss : 1 };\n}\n\n/**\n * Corresponded contours at `u`: each point carried by the similarity interpolated to `u`\n * (rotation θu, scale sᵘ, centroid moving straight), plus `u` of what the full similarity\n * leaves over, blended with the straight path by `rigidity`.\n */\nexport function interpolateMorphContours(\n\ta: readonly VectorMorphContour[],\n\tb: readonly VectorMorphContour[],\n\tu: number,\n\toptions: Pick<VectorMorphOptions, 'linear' | 'rigidity'> & { similarity?: Similarity } = {}\n): VectorMorphContour[] {\n\tconst w = options.linear ? 0 : Math.min(1, Math.max(0, options.rigidity ?? 1));\n\tconst sim = w > 0 ? (options.similarity ?? procrustes(a, b)) : null;\n\tconst rot = (p: Point, ang: number, k: number): Point => {\n\t\tconst c = Math.cos(ang);\n\t\tconst s = Math.sin(ang);\n\t\treturn [k * (c * p[0] - s * p[1]), k * (s * p[0] + c * p[1])];\n\t};\n\tconst thetaU = sim ? sim.theta * u : 0;\n\tconst sU = sim ? Math.max(1e-9, sim.s) ** u : 1;\n\tconst cU = sim ? lerpP(sim.ca, sim.cb, u) : ([0, 0] as Point);\n\treturn a.map((ca, k) => {\n\t\tconst cb = b[k];\n\t\tconst pts = ca.pts.map((p, i) => {\n\t\t\tconst q = cb.pts[i] ?? p;\n\t\t\tconst linear = lerpP(p, q, u);\n\t\t\tif (!sim) return linear;\n\t\t\tconst d: Point = [p[0] - sim.ca[0], p[1] - sim.ca[1]];\n\t\t\tconst full = rot(d, sim.theta, sim.s);\n\t\t\tconst resid: Point = [q[0] - (full[0] + sim.cb[0]), q[1] - (full[1] + sim.cb[1])];\n\t\t\tconst part = rot(d, thetaU, sU);\n\t\t\tconst rigid: Point = [part[0] + cU[0] + resid[0] * u, part[1] + cU[1] + resid[1] * u];\n\t\t\treturn lerpP(linear, rigid, w);\n\t\t});\n\t\treturn { closed: ca.closed && cb.closed, pts };\n\t});\n}\n\n// ---------------------------------------------------------------------------\n// Transforms\n// ---------------------------------------------------------------------------\n\n/**\n * Interpolates two rigid matrices as a rotation (the shorter way round) plus a translation.\n * Any scale or skew is interpolated linearly in the rotated frame.\n */\nexport function interpolateRigidMatrix(a: AffineMatrix, b: AffineMatrix, t: number): AffineMatrix {\n\tconst decompose = (m: AffineMatrix) => {\n\t\tconst sx = Math.hypot(m[0], m[1]);\n\t\tconst ang = sx > 1e-12 ? Math.atan2(m[1], m[0]) : 0;\n\t\tconst c = Math.cos(ang);\n\t\tconst s = Math.sin(ang);\n\t\treturn { e: m[4], f: m[5], ang, sx, sh: c * m[2] + s * m[3], sy: -s * m[2] + c * m[3] };\n\t};\n\tconst p = decompose(a);\n\tconst q = decompose(b);\n\tlet turn = q.ang - p.ang;\n\tturn = ((((turn + Math.PI) % (2 * Math.PI)) + 2 * Math.PI) % (2 * Math.PI)) - Math.PI;\n\tconst ang = p.ang + turn * t;\n\tconst sx = lerpN(p.sx, q.sx, t);\n\tconst sh = lerpN(p.sh, q.sh, t);\n\tconst sy = lerpN(p.sy, q.sy, t);\n\tconst c = Math.cos(ang);\n\tconst s = Math.sin(ang);\n\treturn [c * sx, s * sx, c * sh - s * sy, s * sh + c * sy, lerpN(p.e, q.e, t), lerpN(p.f, q.f, t)];\n}\n\n// ---------------------------------------------------------------------------\n// Paint\n// ---------------------------------------------------------------------------\n\n/** Two colours mixed in OKLab (premultiplied alpha); unreadable colours switch halfway. */\nexport function interpolateVectorColor(a: string, b: string, t: number): string {\n\tif (t <= 0) return a;\n\tif (t >= 1) return b;\n\treturn mixColorsOklab(a, b, t) ?? (t < 0.5 ? a : b);\n}\n\n/**\n * A gradient's stops resampled at `offsets`, each painting what the gradient paints there (its\n * midpoints, smoothness and interpolation space included).\n */\nexport function resampleGradientStops(g: VectorGradient, offsets: readonly number[]): VectorGradientStop[] {\n\treturn offsets.map((offset) => {\n\t\tconst s = sampleVectorGradient(g, offset);\n\t\treturn s.opacity < 1 ? { offset, color: s.color, opacity: Math.round(s.opacity * 1e4) / 1e4 } : { offset, color: s.color };\n\t});\n}\n\nfunction lerpAngle(a: number, b: number, t: number): number {\n\tconst d = ((((b - a + 180) % 360) + 360) % 360) - 180;\n\treturn a + d * t;\n}\n\nconst lerpPoint = (a: Vec2, b: Vec2, t: number): Vec2 => ({ x: lerpN(a.x, b.x, t), y: lerpN(a.y, b.y, t) });\nconst sameColourModel = (a: VectorGradient, b: VectorGradient) => (a.interpolation ?? 'srgb') === (b.interpolation ?? 'srgb') && (a.smoothness ?? 0) === (b.smoothness ?? 0);\n\n/** Stops of two gradients mixed: stop by stop (midpoints too) when they match, else resampled to a common set. */\nfunction lerpStops(a: VectorGradient, b: VectorGradient, t: number): { stops: VectorGradientStop[]; resampled: boolean } {\n\tlet stopsA = sortedVectorGradientStops(a);\n\tlet stopsB = sortedVectorGradientStops(b);\n\tconst resampled = stopsA.length !== stopsB.length || !sameColourModel(a, b);\n\tif (resampled) {\n\t\t// Where either gradient bends (its own stops and the extra stops its midpoints and colour space need).\n\t\tconst offs = [...expandVectorGradientStops(a), ...expandVectorGradientStops(b), ...stopsA, ...stopsB].map((s) => s.offset).filter(Number.isFinite).sort((x, y) => x - y);\n\t\tconst common = offs.filter((o, i) => i === 0 || o - offs[i - 1] > 1e-4);\n\t\tstopsA = resampleGradientStops(a, common);\n\t\tstopsB = resampleGradientStops(b, common);\n\t}\n\tconst stops = stopsA.map((x, i) => {\n\t\tconst y = stopsB[i];\n\t\tconst opacity = lerpN(x.opacity ?? 1, y.opacity ?? 1, t);\n\t\tconst stop: VectorGradientStop = { offset: lerpN(x.offset, y.offset, t), color: interpolateVectorColor(x.color, y.color, t) };\n\t\tif (opacity < 1) stop.opacity = opacity;\n\t\tconst mid = lerpN(x.midpoint ?? 0.5, y.midpoint ?? 0.5, t);\n\t\tif (Math.abs(mid - 0.5) > 1e-6) stop.midpoint = mid;\n\t\treturn stop;\n\t});\n\treturn { stops, resampled };\n}\n\n/**\n * Two gradients of one style: stops mixed, then the placement — the shorthand angle / centre /\n * radius, or the start, end, aspect and focal points when both carry them in the same units\n * (one in the box and one in the node's space switch halfway). Null for different styles.\n */\nfunction lerpGradient(a: VectorGradient, b: VectorGradient, t: number): VectorGradient | null {\n\tif (a.type !== b.type) return null;\n\tconst { stops, resampled } = lerpStops(a, b, t);\n\tconst near = t < 0.5 ? a : b;\n\tconst out: VectorGradient = { type: a.type, stops };\n\tif (!resampled) {\n\t\tif (a.interpolation && a.interpolation !== 'srgb') out.interpolation = a.interpolation;\n\t\tif (a.smoothness) out.smoothness = a.smoothness;\n\t}\n\tif (near.spread && near.spread !== 'pad') out.spread = near.spread;\n\tif (near.strokeMode && near.strokeMode !== 'within') out.strokeMode = near.strokeMode;\n\tconst ea = hasExplicitGradientGeometry(a);\n\tconst eb = hasExplicitGradientGeometry(b);\n\tif (!ea && !eb) {\n\t\tif (a.angle !== undefined || b.angle !== undefined || a.type === 'linear' || a.type === 'reflected') {\n\t\t\tconst fallback = a.type === 'linear' || a.type === 'reflected' ? 180 : 90;\n\t\t\tout.angle = lerpAngle(a.angle ?? fallback, b.angle ?? fallback, t);\n\t\t}\n\t\tif (a.type !== 'linear' && a.type !== 'reflected') {\n\t\t\tout.cx = lerpN(a.cx ?? 0.5, b.cx ?? 0.5, t);\n\t\t\tout.cy = lerpN(a.cy ?? 0.5, b.cy ?? 0.5, t);\n\t\t\tout.r = lerpN(a.r ?? 0.5, b.r ?? 0.5, t);\n\t\t}\n\t\treturn out;\n\t}\n\tconst pa = vectorGradientPoints(a);\n\tconst pb = vectorGradientPoints(b);\n\tif (pa.units !== pb.units) {\n\t\tconst src = explicitVectorGradient(near);\n\t\treturn { ...src, stops: out.stops, ...(out.interpolation ? { interpolation: out.interpolation } : {}), ...(out.smoothness ? { smoothness: out.smoothness } : {}) };\n\t}\n\tout.start = lerpPoint(pa.start, pb.start, t);\n\tout.end = lerpPoint(pa.end, pb.end, t);\n\tout.width = lerpPoint(pa.width, pb.width, t);\n\tout.units = pa.units;\n\tif (a.type === 'radial') {\n\t\tif (pa.focal || pb.focal) out.focal = lerpPoint(pa.focal ?? pa.start, pb.focal ?? pb.start, t);\n\t\tconst fr = lerpN(pa.focalRadius, pb.focalRadius, t);\n\t\tif (fr > 0) out.focalRadius = fr;\n\t}\n\treturn out;\n}\n\n/** A gradient shaped like `like` painting one colour (or nothing). */\nfunction solidLike(color: string | null, like: VectorGradient): VectorGradient {\n\treturn { ...like, stops: like.stops.map((s) => (color === null ? { offset: s.offset, color: s.color, opacity: 0 } : { offset: s.offset, color })) };\n}\n\n/**\n * Interpolates paints: colours in OKLab, gradients of one kind with their stops resampled to a\n * common set, a colour and a gradient through a gradient of that colour, and a missing paint\n * fading from transparent. Gradients of different kinds switch halfway.\n */\nexport function interpolateVectorPaint(a: VectorPaint | undefined, b: VectorPaint | undefined, t: number): VectorPaint | undefined {\n\tif (t <= 0) return a;\n\tif (t >= 1) return b;\n\tconst pa = hasPaint(a);\n\tconst pb = hasPaint(b);\n\tif (!pa && !pb) return t < 0.5 ? a : b;\n\tif (typeof a === 'string' && pa && typeof b === 'string' && pb) return interpolateVectorColor(a, b, t);\n\tif (!pa && typeof b === 'string') return interpolateVectorColor('transparent', b, t);\n\tif (!pb && typeof a === 'string') return interpolateVectorColor(a, 'transparent', t);\n\tconst ga = pa && isVectorGradient(a) ? a : null;\n\tconst gb = pb && isVectorGradient(b) ? b : null;\n\tif (ga && gb) return lerpGradient(ga, gb, t) ?? (t < 0.5 ? a : b);\n\tif (gb) return lerpGradient(solidLike(pa ? (a as string) : null, gb), gb, t) ?? b;\n\tif (ga) return lerpGradient(ga, solidLike(pb ? (b as string) : null, ga), t) ?? a;\n\treturn t < 0.5 ? a : b;\n}\n\n/** Width profiles at every position either has a point (no profile is uniform). */\nexport function interpolateWidthProfiles(a: readonly VectorWidthPoint[] | null | undefined, b: readonly VectorWidthPoint[] | null | undefined, t: number): VectorWidthPoint[] | null {\n\tif (!a?.length && !b?.length) return null;\n\tconst at = [...(a ?? []), ...(b ?? []), { t: 0 }, { t: 1 }].map((p) => p.t).sort((x, y) => x - y);\n\tconst ts = at.filter((v, i) => i === 0 || v - at[i - 1] > 1e-6);\n\treturn ts.map((pos) => {\n\t\tconst x = widthProfileAt(a, pos);\n\t\tconst y = widthProfileAt(b, pos);\n\t\treturn { t: pos, left: lerpN(x.left, y.left, t), right: lerpN(x.right, y.right, t) };\n\t});\n}\n\n/** Dash patterns: equal lengths mix; a solid stroke counts as the other's pattern with its gaps closed. */\nfunction lerpDashes(a: number[] | undefined, b: number[] | undefined, t: number): number[] | undefined {\n\tconst dashed = (d: number[] | undefined) => !!d?.length && d.some((v) => v > 0);\n\tif (!dashed(a) && !dashed(b)) return t < 0.5 ? a : b;\n\tconst even = (p: number[]) => (p.length % 2 ? [...p, ...p] : p);\n\tconst solid = (p: number[]) => {\n\t\tconst e = even(p);\n\t\tconst out: number[] = [];\n\t\tfor (let i = 0; i < e.length; i += 2) out.push(e[i] + e[i + 1], 0);\n\t\treturn out;\n\t};\n\tconst x = dashed(a) ? even(a!) : solid(b!);\n\tconst y = dashed(b) ? even(b!) : solid(a!);\n\tif (x.length !== y.length) return t < 0.5 ? a : b;\n\treturn x.map((v, i) => lerpN(v, y[i], t));\n}\n\nconst SWITCHED_KEYS = ['strokeLinecap', 'strokeLinejoin', 'fillRule', 'strokeAlign', 'startArrow', 'endArrow', 'arrowAlign'] as const;\n\n/**\n * Interpolated style of two paths: paints, stroke width, dashes, arrowhead scales and width\n * profiles mix; caps, joins, the fill rule, alignment and arrowheads switch halfway.\n */\nexport function interpolateVectorStyle(a: VectorStyle, b: VectorStyle, t: number): VectorStyle {\n\tconst near = t < 0.5 ? a : b;\n\tconst out: VectorStyle = {};\n\tconst fill = interpolateVectorPaint(a.fill, b.fill, t);\n\tif (fill !== undefined) out.fill = fill;\n\tconst stroke = interpolateVectorPaint(a.stroke, b.stroke, t);\n\tif (stroke !== undefined) out.stroke = stroke;\n\tif (a.strokeWidth !== undefined || b.strokeWidth !== undefined) out.strokeWidth = lerpN(a.strokeWidth ?? 1, b.strokeWidth ?? 1, t);\n\tfor (const key of SWITCHED_KEYS) if (near[key] !== undefined && near[key] !== null) (out as Record<string, unknown>)[key] = near[key];\n\tfor (const key of ['startArrowScale', 'endArrowScale'] as const)\n\t\tif (a[key] !== undefined || b[key] !== undefined) out[key] = lerpN(a[key] ?? 1, b[key] ?? 1, t);\n\tconst dash = lerpDashes(a.strokeDasharray, b.strokeDasharray, t);\n\tif (dash?.length) out.strokeDasharray = dash;\n\tconst profile = interpolateWidthProfiles(a.strokeWidthProfile, b.strokeWidthProfile, t);\n\tif (profile) out.strokeWidthProfile = profile;\n\treturn out;\n}\n\n/** A path's style as seen running backwards: arrowheads swap ends and width profiles reverse. */\nfunction reversedStyle(s: VectorStyle): VectorStyle {\n\tconst out: VectorStyle = { ...s };\n\tout.startArrow = s.endArrow;\n\tout.endArrow = s.startArrow;\n\tout.startArrowScale = s.endArrowScale;\n\tout.endArrowScale = s.startArrowScale;\n\tif (s.strokeWidthProfile?.length) out.strokeWidthProfile = reverseWidthProfile(s.strokeWidthProfile);\n\tfor (const k of ['startArrow', 'endArrow', 'startArrowScale', 'endArrowScale'] as const) if (out[k] === undefined) delete out[k];\n\treturn out;\n}\n\nconst STYLE_KEYS = [\n\t'fill',\n\t'stroke',\n\t'strokeWidth',\n\t'strokeLinecap',\n\t'strokeLinejoin',\n\t'strokeDasharray',\n\t'fillRule',\n\t'strokeAlign',\n\t'startArrow',\n\t'endArrow',\n\t'arrowAlign',\n\t'startArrowScale',\n\t'endArrowScale',\n\t'strokeWidthProfile'\n] as const;\n\nfunction styleOf(n: VectorPathNode): VectorStyle {\n\tconst out: VectorStyle = {};\n\tfor (const k of STYLE_KEYS) if (n[k] !== undefined) (out as Record<string, unknown>)[k] = n[k];\n\treturn out;\n}\n\n// ---------------------------------------------------------------------------\n// Path and node morphs\n// ---------------------------------------------------------------------------\n\nfunction contoursOf(node: VectorPathNode, m: AffineMatrix): VectorMorphContour[] {\n\treturn expandVectorCorners(node.subpaths)\n\t\t.map((sp) => subpathToMorphContour(sp, m))\n\t\t.filter((c): c is VectorMorphContour => !!c);\n}\n\n/**\n * Two paths (each placed by `ma` / `mb` into a common space: by default their own\n * transforms, i.e. their parent's space) prepared for interpolation.\n */\nfunction preparePathMorph(\n\ta: VectorPathNode,\n\tb: VectorPathNode,\n\toptions: VectorMorphOptions,\n\tma: AffineMatrix = nodeMatrix(a),\n\tmb: AffineMatrix = nodeMatrix(b)\n): (t: number) => VectorPathNode {\n\tconst corr = correspondMorphContours(contoursOf(a, ma), contoursOf(b, mb), options);\n\tconst sim = procrustes(corr.a, corr.b);\n\tconst styleA = styleOf(a);\n\tconst styleB = corr.reversed ? reversedStyle(styleOf(b)) : styleOf(b);\n\tconst rigid = !isIdentityMatrix(ma) || !isIdentityMatrix(mb);\n\tconst id = options.id ?? a.id;\n\treturn (t) => {\n\t\tconst contours = interpolateMorphContours(corr.a, corr.b, t, { linear: options.linear, rigidity: options.rigidity, similarity: sim });\n\t\tconst m = rigid ? interpolateRigidMatrix(ma, mb, t) : IDENTITY_MATRIX;\n\t\tconst back = rigid ? invertMatrix(m) : IDENTITY_MATRIX;\n\t\tconst subpaths = contours.map((c, k) => {\n\t\t\t// A pair of one closed and one open contour is open in between and takes each key's state at the ends.\n\t\t\tconst closed = t <= 0 ? corr.a[k].closed : t >= 1 ? corr.b[k].closed : corr.a[k].closed && corr.b[k].closed;\n\t\t\treturn morphContourToSubpath({ closed: corr.a[k].closed && corr.b[k].closed, pts: c.pts }, back, closed);\n\t\t});\n\t\tconst node: VectorPathNode = { id, type: 'path', subpaths, ...interpolateVectorStyle(styleA, styleB, t) };\n\t\tconst opacity = lerpN(a.opacity ?? 1, b.opacity ?? 1, t);\n\t\tif (opacity < 1) node.opacity = opacity;\n\t\tif (rigid && !isIdentityMatrix(m)) node.transform = m;\n\t\treturn node;\n\t};\n}\n\n/** Path nodes of a subtree with their matrices into the subtree's parent space. */\nfunction flattenPaths(node: VectorNode, parent: AffineMatrix = IDENTITY_MATRIX): { path: VectorPathNode; m: AffineMatrix; opacity: number }[] {\n\tconst m = multiplyMatrices(nodeMatrix(node), parent);\n\tif (node.type === 'path') return [{ path: node, m, opacity: 1 }];\n\t// Text blends as its glyphs.\n\tif (node.type === 'text' || node.type === 'instance') return flattenPaths(expandVectorAppearance(node), parent);\n\tconst o = node.opacity ?? 1;\n\treturn node.children\n\t\t.filter((c) => c.visible !== false)\n\t\t.flatMap((c) => flattenPaths(c, m))\n\t\t.map((e) => ({ ...e, opacity: e.opacity * o }));\n}\n\n/** Bounds of a path placed by `m`. */\nconst placedBounds = (path: VectorPathNode, m: AffineMatrix) => boundsOfPoints(contoursOf(path, m).flatMap((c) => c.pts));\n\n/** A copy of `path` shrunk to the point that matches it in the other shape's box (placed by the identity). */\nfunction collapsedPath(path: VectorPathNode, m: AffineMatrix, from: VectorBounds | null, to: VectorBounds | null): VectorPathNode {\n\tconst own = placedBounds(path, m);\n\tconst c: Point = own ? [own.x + own.width / 2, own.y + own.height / 2] : [0, 0];\n\tconst fx = from && from.width > 0 ? (c[0] - from.x) / from.width : 0.5;\n\tconst fy = from && from.height > 0 ? (c[1] - from.y) / from.height : 0.5;\n\tconst p = to ? { x: to.x + to.width * fx, y: to.y + to.height * fy } : { x: c[0], y: c[1] };\n\tconst subpaths = path.subpaths.map((sp) => ({ closed: sp.closed, anchors: sp.anchors.map(() => ({ x: p.x, y: p.y })) }));\n\tconst { transform: _t, ...rest } = path;\n\treturn { ...rest, subpaths };\n}\n\n/**\n * Prepares two shapes for interpolation. Two paths morph directly; with a group on either side\n * the paths inside pair up in stacking order and those without a partner grow out of a point.\n * Shapes are blended in their parent's space.\n */\nexport function createVectorMorph(a: VectorNode, b: VectorNode, options: VectorMorphOptions = {}): VectorMorph {\n\tif (a.type === 'path' && b.type === 'path') {\n\t\tconst at = preparePathMorph(a, b, options);\n\t\treturn { at };\n\t}\n\tconst pa = flattenPaths(a);\n\tconst pb = flattenPaths(b);\n\tconst ba = unionBounds(pa.map((e) => placedBounds(e.path, e.m)));\n\tconst bb = unionBounds(pb.map((e) => placedBounds(e.path, e.m)));\n\tconst id = options.id ?? a.id;\n\tconst parts: ((t: number) => VectorPathNode)[] = [];\n\tconst opacities: [number, number][] = [];\n\tfor (let i = 0; i < Math.max(pa.length, pb.length); i++) {\n\t\tconst x = pa[i];\n\t\tconst y = pb[i];\n\t\tconst sub = { ...options, id: `${id}-${i}`, starts: undefined };\n\t\tif (x && y) {\n\t\t\tparts.push(preparePathMorph(x.path, y.path, sub, x.m, y.m));\n\t\t\topacities.push([x.opacity, y.opacity]);\n\t\t} else if (x) {\n\t\t\tparts.push(preparePathMorph(x.path, collapsedPath(x.path, x.m, ba, bb), sub, x.m, IDENTITY_MATRIX));\n\t\t\topacities.push([x.opacity, x.opacity]);\n\t\t} else if (y) {\n\t\t\tparts.push(preparePathMorph(collapsedPath(y.path, y.m, bb, ba), y.path, sub, IDENTITY_MATRIX, y.m));\n\t\t\topacities.push([y.opacity, y.opacity]);\n\t\t}\n\t}\n\treturn {\n\t\tat: (t) => {\n\t\t\tconst children = parts.map((p, i) => {\n\t\t\t\tconst n = p(t);\n\t\t\t\tconst o = lerpN(opacities[i][0], opacities[i][1], t) * (n.opacity ?? 1);\n\t\t\t\tif (o < 1) n.opacity = o;\n\t\t\t\telse delete n.opacity;\n\t\t\t\treturn n;\n\t\t\t});\n\t\t\tconst group: VectorGroupNode = { id, type: 'group', children };\n\t\t\treturn group;\n\t\t}\n\t};\n}\n\n/**\n * The in-between of two shapes at `t` (0 = `a`, 1 = `b`). Prepare once with\n * `createVectorMorph` when interpolating the same pair at many `t`.\n */\nexport function interpolateVectorPaths(a: VectorNode, b: VectorNode, t: number, options: VectorMorphOptions = {}): VectorNode {\n\treturn createVectorMorph(a, b, options).at(t);\n}\n\n/** A keyframe of a path track: a shape at a time (ms), with the easing of the segment leaving it. */\nexport interface VectorPathKeyframe {\n\ttime: number;\n\tvalue: VectorNode;\n\teasing?: AnimationEasing;\n}\n\nconst keyframeMorphs = new WeakMap<VectorNode, WeakMap<VectorNode, VectorMorph>>();\n\n/**\n * A path track's shape at `time`: before the first keyframe its shape, after the last the\n * last; in between the two keyframes morph (prepared once per pair and cached) at the eased\n * fraction. Easings that overshoot are clamped to the keys. `null` without keyframes.\n */\nexport function evaluateVectorPathKeyframes(keyframes: readonly VectorPathKeyframe[], time: number, options: VectorMorphOptions = {}): VectorNode | null {\n\tconst keys = keyframes.filter((k) => Number.isFinite(k.time)).sort((x, y) => x.time - y.time);\n\tif (!keys.length) return null;\n\tif (!(time > keys[0].time)) return keys[0].value;\n\tconst last = keys[keys.length - 1];\n\tif (time >= last.time) return last.value;\n\tlet i = 0;\n\twhile (i + 1 < keys.length && keys[i + 1].time <= time) i++;\n\tconst a = keys[i];\n\tconst b = keys[i + 1];\n\tif (time === a.time) return a.value;\n\tif (a.easing === 'hold') return a.value;\n\tconst span = b.time - a.time;\n\tconst u = Math.min(1, Math.max(0, evaluateEasing(a.easing, (time - a.time) / span, span)));\n\tlet inner = keyframeMorphs.get(a.value);\n\tif (!inner) keyframeMorphs.set(a.value, (inner = new WeakMap()));\n\tlet morph = inner.get(b.value);\n\tif (!morph) inner.set(b.value, (morph = createVectorMorph(a.value, b.value, options)));\n\treturn morph.at(u);\n}\n"]}
@@ -125,7 +125,7 @@ import {
125
125
  textRectPath,
126
126
  translateMatrix,
127
127
  warpPresetMesh
128
- } from "./chunk-ROZFX4QI.js";
128
+ } from "./chunk-PRYMC442.js";
129
129
  import {
130
130
  bezierPathBounds,
131
131
  outlineStroke,
@@ -11736,4 +11736,4 @@ export {
11736
11736
  smartContentsFile,
11737
11737
  exportPsd
11738
11738
  };
11739
- //# sourceMappingURL=chunk-F7Q2NE2Y.js.map
11739
+ //# sourceMappingURL=chunk-ERYGCA72.js.map
@@ -18,7 +18,7 @@ import {
18
18
  unionBounds,
19
19
  vectorGradientPoints,
20
20
  widthProfileAt
21
- } from "./chunk-ROZFX4QI.js";
21
+ } from "./chunk-PRYMC442.js";
22
22
  import {
23
23
  segmentLength,
24
24
  segmentParamAtLength,
@@ -750,4 +750,4 @@ export {
750
750
  interpolateVectorPaths,
751
751
  evaluateVectorPathKeyframes
752
752
  };
753
- //# sourceMappingURL=chunk-A6KHMKI4.js.map
753
+ //# sourceMappingURL=chunk-L5OTIYOO.js.map