@pixerate/editor 0.115.0 → 0.116.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 (117) hide show
  1. package/THIRD_PARTY_NOTICES.md +3 -0
  2. package/dist/animation-editor/index.cjs +54 -54
  3. package/dist/animation-editor/index.d.cts +2 -2
  4. package/dist/animation-editor/index.d.ts +2 -2
  5. package/dist/animation-editor/index.js +2 -2
  6. package/dist/{chunk-DFQEX3AM.cjs → chunk-2UT4GXYA.cjs} +133 -8
  7. package/dist/chunk-2UT4GXYA.cjs.map +1 -0
  8. package/dist/{chunk-VXR7XWMF.js → chunk-7LNZAWSJ.js} +437 -41
  9. package/dist/chunk-7LNZAWSJ.js.map +1 -0
  10. package/dist/{chunk-LKCYANMW.js → chunk-ARQ7PQ6Q.js} +129 -4
  11. package/dist/chunk-ARQ7PQ6Q.js.map +1 -0
  12. package/dist/chunk-COAMRKVI.cjs +159 -0
  13. package/dist/chunk-COAMRKVI.cjs.map +1 -0
  14. package/dist/{chunk-C6C5PDKU.js → chunk-D53KSJUV.js} +3 -322
  15. package/dist/chunk-D53KSJUV.js.map +1 -0
  16. package/dist/chunk-D53VQGEJ.js +3262 -0
  17. package/dist/chunk-D53VQGEJ.js.map +1 -0
  18. package/dist/chunk-EJVDBITD.cjs +501 -0
  19. package/dist/chunk-EJVDBITD.cjs.map +1 -0
  20. package/dist/{chunk-LPLCWZTM.cjs → chunk-FODKPD44.cjs} +555 -159
  21. package/dist/chunk-FODKPD44.cjs.map +1 -0
  22. package/dist/chunk-HOCPSFGA.cjs +3262 -0
  23. package/dist/chunk-HOCPSFGA.cjs.map +1 -0
  24. package/dist/chunk-IPFRWILU.js +1908 -0
  25. package/dist/chunk-IPFRWILU.js.map +1 -0
  26. package/dist/{chunk-FV5AXTSF.cjs → chunk-JSSBHMMU.cjs} +36 -188
  27. package/dist/chunk-JSSBHMMU.cjs.map +1 -0
  28. package/dist/chunk-LF4WOZXZ.js +159 -0
  29. package/dist/chunk-LF4WOZXZ.js.map +1 -0
  30. package/dist/{chunk-26PGXHY7.cjs → chunk-M7O4BJRH.cjs} +36 -36
  31. package/dist/{chunk-26PGXHY7.cjs.map → chunk-M7O4BJRH.cjs.map} +1 -1
  32. package/dist/chunk-N3467VD6.js +501 -0
  33. package/dist/chunk-N3467VD6.js.map +1 -0
  34. package/dist/{chunk-ST7E3NEE.cjs → chunk-PAOWHJ5O.cjs} +18 -337
  35. package/dist/chunk-PAOWHJ5O.cjs.map +1 -0
  36. package/dist/{chunk-XICA4PVO.js → chunk-SEBYNBHW.js} +10 -10
  37. package/dist/chunk-SMJGE7HM.cjs +1908 -0
  38. package/dist/chunk-SMJGE7HM.cjs.map +1 -0
  39. package/dist/{chunk-MMVHBKMM.js → chunk-T2P5TIZ6.js} +2 -2
  40. package/dist/{chunk-FGW5OWJ4.js → chunk-VJUML33I.js} +4 -156
  41. package/dist/chunk-VJUML33I.js.map +1 -0
  42. package/dist/{chunk-I7FQBWMQ.cjs → chunk-ZYZGEILO.cjs} +239 -239
  43. package/dist/{chunk-I7FQBWMQ.cjs.map → chunk-ZYZGEILO.cjs.map} +1 -1
  44. package/dist/export/index.cjs +4 -2
  45. package/dist/export/index.cjs.map +1 -1
  46. package/dist/export/index.js +5 -3
  47. package/dist/{export-BJE8T0YA.d.cts → export-BXxSGBCq.d.cts} +2 -2
  48. package/dist/{export-Con3UKkm.d.ts → export-Dm44YUvS.d.ts} +2 -2
  49. package/dist/export-Dv0-ZVrV.d.cts +501 -0
  50. package/dist/export-Dv0-ZVrV.d.ts +501 -0
  51. package/dist/{retouch-Do6tBs2H.d.ts → flow-BMtHAmg4.d.ts} +561 -2
  52. package/dist/{retouch-Bxkuc0KH.d.cts → flow-COCB42TP.d.cts} +561 -2
  53. package/dist/image-editor/index.cjs +957 -795
  54. package/dist/image-editor/index.cjs.map +1 -1
  55. package/dist/image-editor/index.d.cts +6 -6
  56. package/dist/image-editor/index.d.ts +6 -6
  57. package/dist/image-editor/index.js +180 -18
  58. package/dist/image-editor/index.js.map +1 -1
  59. package/dist/index.cjs +4 -2
  60. package/dist/index.cjs.map +1 -1
  61. package/dist/index.js +5 -3
  62. package/dist/index.js.map +1 -1
  63. package/dist/kernel-wasm-WYCGNZR4.js +10 -0
  64. package/dist/kernel-wasm-WYCGNZR4.js.map +1 -0
  65. package/dist/kernel-wasm-YPVAEMVN.cjs +10 -0
  66. package/dist/kernel-wasm-YPVAEMVN.cjs.map +1 -0
  67. package/dist/paint/index.cjs +165 -3
  68. package/dist/paint/index.cjs.map +1 -1
  69. package/dist/paint/index.d.cts +225 -3
  70. package/dist/paint/index.d.ts +225 -3
  71. package/dist/paint/index.js +166 -4
  72. package/dist/paint-editor/index.cjs +4690 -845
  73. package/dist/paint-editor/index.cjs.map +1 -1
  74. package/dist/paint-editor/index.d.cts +1525 -277
  75. package/dist/paint-editor/index.d.ts +1525 -277
  76. package/dist/paint-editor/index.js +4560 -715
  77. package/dist/paint-editor/index.js.map +1 -1
  78. package/dist/raster/index.cjs +4 -3
  79. package/dist/raster/index.cjs.map +1 -1
  80. package/dist/raster/index.js +10 -9
  81. package/dist/{svg-BnRj0q8i.d.cts → svg-CVdFc80-.d.cts} +2 -2
  82. package/dist/{svg-CmmBFfGT.d.ts → svg-DlEuhwoX.d.ts} +2 -2
  83. package/dist/{types-1SUQKDAw.d.ts → types-CDLGhAZp.d.ts} +40 -2
  84. package/dist/{types-yINF17Ta.d.cts → types-Tfly4Aya.d.cts} +40 -2
  85. package/dist/vector/index.cjs +1897 -975
  86. package/dist/vector/index.cjs.map +1 -1
  87. package/dist/vector/index.d.cts +292 -32
  88. package/dist/vector/index.d.ts +292 -32
  89. package/dist/vector/index.js +928 -6
  90. package/dist/vector/index.js.map +1 -1
  91. package/dist/video-editor/index.cjs +502 -2165
  92. package/dist/video-editor/index.cjs.map +1 -1
  93. package/dist/video-editor/index.d.cts +3 -501
  94. package/dist/video-editor/index.d.ts +3 -501
  95. package/dist/video-editor/index.js +151 -1814
  96. package/dist/video-editor/index.js.map +1 -1
  97. package/package.json +1 -1
  98. package/skills/pixerate-image-editor/references/photoshop-files.md +7 -3
  99. package/skills/pixerate-vector/SKILL.md +3 -0
  100. package/dist/chunk-C6C5PDKU.js.map +0 -1
  101. package/dist/chunk-DFQEX3AM.cjs.map +0 -1
  102. package/dist/chunk-FGW5OWJ4.js.map +0 -1
  103. package/dist/chunk-FV5AXTSF.cjs.map +0 -1
  104. package/dist/chunk-GX332W2C.js +0 -181
  105. package/dist/chunk-GX332W2C.js.map +0 -1
  106. package/dist/chunk-LKCYANMW.js.map +0 -1
  107. package/dist/chunk-LPLCWZTM.cjs.map +0 -1
  108. package/dist/chunk-MUUXNRU4.cjs +0 -181
  109. package/dist/chunk-MUUXNRU4.cjs.map +0 -1
  110. package/dist/chunk-ST7E3NEE.cjs.map +0 -1
  111. package/dist/chunk-TCKIXI46.cjs +0 -1136
  112. package/dist/chunk-TCKIXI46.cjs.map +0 -1
  113. package/dist/chunk-UBIXVXPR.js +0 -1136
  114. package/dist/chunk-UBIXVXPR.js.map +0 -1
  115. package/dist/chunk-VXR7XWMF.js.map +0 -1
  116. /package/dist/{chunk-XICA4PVO.js.map → chunk-SEBYNBHW.js.map} +0 -0
  117. /package/dist/{chunk-MMVHBKMM.js.map → chunk-T2P5TIZ6.js.map} +0 -0
@@ -1,181 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/geom/homography.ts
2
- var IDENTITY_HOMOGRAPHY = [1, 0, 0, 0, 1, 0, 0, 0, 1];
3
- function solve8(rows) {
4
- const m = rows.map((r) => r.slice());
5
- for (let col = 0; col < 8; col++) {
6
- let pivot = col;
7
- for (let r = col + 1; r < 8; r++) if (Math.abs(m[r][col]) > Math.abs(m[pivot][col])) pivot = r;
8
- if (!(Math.abs(m[pivot][col]) >= 1e-12)) return null;
9
- [m[col], m[pivot]] = [m[pivot], m[col]];
10
- const p = m[col];
11
- for (let r = 0; r < 8; r++) {
12
- if (r === col) continue;
13
- const f = m[r][col] / p[col];
14
- if (f !== 0) for (let k = 0; k < 9; k++) m[r][k] -= f * p[k];
15
- }
16
- }
17
- const out = [];
18
- for (let i = 0; i < 8; i++) {
19
- const v = m[i][8] / m[i][i];
20
- if (!Number.isFinite(v)) return null;
21
- out.push(v);
22
- }
23
- return out;
24
- }
25
- function applyHomography(h, p) {
26
- const w = h[6] * p.x + h[7] * p.y + h[8];
27
- if (!Number.isFinite(w) || Math.abs(w) < 1e-12) return null;
28
- const x = (h[0] * p.x + h[1] * p.y + h[2]) / w;
29
- const y = (h[3] * p.x + h[4] * p.y + h[5]) / w;
30
- return Number.isFinite(x) && Number.isFinite(y) ? { x, y } : null;
31
- }
32
- function homographyW(h, p) {
33
- return h[6] * p.x + h[7] * p.y + h[8];
34
- }
35
- var finite = (p) => Number.isFinite(p.x) && Number.isFinite(p.y);
36
- function homographyFromPoints(from, to) {
37
- if (from.length !== 4 || to.length !== 4 || ![...from, ...to].every(finite)) return null;
38
- const rows = [];
39
- for (let i = 0; i < 4; i++) {
40
- const { x, y } = from[i];
41
- const { x: u, y: v } = to[i];
42
- rows.push([x, y, 1, 0, 0, 0, -u * x, -u * y, u]);
43
- rows.push([0, 0, 0, x, y, 1, -v * x, -v * y, v]);
44
- }
45
- const h = solve8(rows);
46
- if (!h) return null;
47
- const out = [h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7], 1];
48
- for (let i = 0; i < 4; i++) {
49
- const r = applyHomography(out, from[i]);
50
- const q = to[i];
51
- const scale = 1 + Math.max(Math.abs(q.x), Math.abs(q.y));
52
- if (!r || Math.abs(r.x - q.x) > 1e-6 * scale || Math.abs(r.y - q.y) > 1e-6 * scale) return null;
53
- }
54
- return out;
55
- }
56
- function homographyKeepsQuad(h, quad) {
57
- const ws = quad.map((p) => h[6] * p.x + h[7] * p.y + h[8]);
58
- return ws.every((w) => w > 1e-9) || ws.every((w) => w < -1e-9);
59
- }
60
- function orderQuad(points) {
61
- if (points.length !== 4 || !points.every(finite)) return null;
62
- const cx = points.reduce((s, p) => s + p.x, 0) / 4;
63
- const cy = points.reduce((s, p) => s + p.y, 0) / 4;
64
- const q = points.slice().sort((a, b) => Math.atan2(a.y - cy, a.x - cx) - Math.atan2(b.y - cy, b.x - cx));
65
- let first = 0;
66
- for (let i = 1; i < 4; i++) if (q[i].x + q[i].y < q[first].x + q[first].y) first = i;
67
- const ordered = [...q.slice(first), ...q.slice(0, first)];
68
- const cross = (o, a, b) => (a.x - o.x) * (b.y - o.y) - (a.y - o.y) * (b.x - o.x);
69
- const turns = ordered.map((_, i) => cross(ordered[i], ordered[(i + 1) % 4], ordered[(i + 2) % 4]));
70
- const area = turns.reduce((s, t) => s + t, 0) / 2;
71
- const xs = ordered.map((p) => p.x);
72
- const ys = ordered.map((p) => p.y);
73
- const size = Math.max(Math.max(...xs) - Math.min(...xs), Math.max(...ys) - Math.min(...ys));
74
- const convex = turns.every((t) => t > 1e-9 * size * size);
75
- return convex && area > 1e-6 * size * size ? ordered : null;
76
- }
77
- function multiplyHomographies(a, b) {
78
- const r = new Array(9);
79
- for (let i = 0; i < 3; i++) for (let j = 0; j < 3; j++) r[i * 3 + j] = b[i * 3] * a[j] + b[i * 3 + 1] * a[3 + j] + b[i * 3 + 2] * a[6 + j];
80
- return r;
81
- }
82
- function invertHomography(m) {
83
- const c = [
84
- m[4] * m[8] - m[5] * m[7],
85
- m[2] * m[7] - m[1] * m[8],
86
- m[1] * m[5] - m[2] * m[4],
87
- m[5] * m[6] - m[3] * m[8],
88
- m[0] * m[8] - m[2] * m[6],
89
- m[2] * m[3] - m[0] * m[5],
90
- m[3] * m[7] - m[4] * m[6],
91
- m[1] * m[6] - m[0] * m[7],
92
- m[0] * m[4] - m[1] * m[3]
93
- ];
94
- const det = m[0] * c[0] + m[1] * c[3] + m[2] * c[6];
95
- if (!(Math.abs(det) >= 1e-12) || !Number.isFinite(det)) return null;
96
- return c.map((v) => v / det);
97
- }
98
- function homographyFromAffine(m) {
99
- return [m[0], m[2], m[4], m[1], m[3], m[5], 0, 0, 1];
100
- }
101
- function affineFromHomography(h, eps = 1e-12) {
102
- if (Math.abs(h[6]) > eps * Math.abs(h[8]) || Math.abs(h[7]) > eps * Math.abs(h[8]) || !h[8]) return null;
103
- const w = h[8];
104
- return [h[0] / w, h[3] / w, h[1] / w, h[4] / w, h[2] / w, h[5] / w];
105
- }
106
- function isIdentityHomography(h, eps = 1e-9) {
107
- const w = h[8];
108
- if (Math.abs(w) < 1e-12) return false;
109
- const id = IDENTITY_HOMOGRAPHY;
110
- for (let i = 0; i < 8; i++) if (Math.abs(h[i] / w - id[i]) > eps) return false;
111
- return true;
112
- }
113
- function squareToQuad(q) {
114
- const [p0, p1, p2, p3] = q;
115
- const sx = p0.x - p1.x + p2.x - p3.x;
116
- const sy = p0.y - p1.y + p2.y - p3.y;
117
- if (Math.abs(sx) < 1e-12 && Math.abs(sy) < 1e-12) {
118
- return [p1.x - p0.x, p3.x - p0.x, p0.x, p1.y - p0.y, p3.y - p0.y, p0.y, 0, 0, 1];
119
- }
120
- const dx1 = p1.x - p2.x;
121
- const dx2 = p3.x - p2.x;
122
- const dy1 = p1.y - p2.y;
123
- const dy2 = p3.y - p2.y;
124
- const den = dx1 * dy2 - dx2 * dy1;
125
- if (Math.abs(den) < 1e-12) return null;
126
- const g = (sx * dy2 - dx2 * sy) / den;
127
- const h = (dx1 * sy - sx * dy1) / den;
128
- return [p1.x - p0.x + g * p1.x, p3.x - p0.x + h * p3.x, p0.x, p1.y - p0.y + g * p1.y, p3.y - p0.y + h * p3.y, p0.y, g, h, 1];
129
- }
130
- function rectToQuad(r, quad) {
131
- if (!(r.width > 0 && r.height > 0) || quad.length !== 4 || !quad.every(finite)) return null;
132
- const toUnit = [1 / r.width, 0, -r.x / r.width, 0, 1 / r.height, -r.y / r.height, 0, 0, 1];
133
- const sq = squareToQuad(quad);
134
- if (!sq) return null;
135
- const h = multiplyHomographies(toUnit, sq);
136
- return invertHomography(h) ? h : null;
137
- }
138
- function boxQuad(r) {
139
- return [
140
- { x: r.x, y: r.y },
141
- { x: r.x + r.width, y: r.y },
142
- { x: r.x + r.width, y: r.y + r.height },
143
- { x: r.x, y: r.y + r.height }
144
- ];
145
- }
146
- function homographyFrontSide(h, r) {
147
- const ahead = boxQuad(r).filter((p) => homographyW(h, p) > 0).length;
148
- if (ahead >= 3) return 1;
149
- if (ahead <= 1) return -1;
150
- return homographyW(h, { x: r.x + r.width / 2, y: r.y + r.height / 2 }) >= 0 ? 1 : -1;
151
- }
152
- var OUTPUT_LIMIT = 1 << 20;
153
- function cornerBounds(corners) {
154
- const lim = OUTPUT_LIMIT;
155
- const xs = corners.map((c) => c.x);
156
- const ys = corners.map((c) => c.y);
157
- const x0 = Math.floor(Math.max(-lim, Math.min(...xs))) - 1;
158
- const y0 = Math.floor(Math.max(-lim, Math.min(...ys))) - 1;
159
- const x1 = Math.ceil(Math.min(lim, Math.max(...xs))) + 1;
160
- const y1 = Math.ceil(Math.min(lim, Math.max(...ys))) + 1;
161
- return { x: x0, y: y0, width: x1 - x0, height: y1 - y0 };
162
- }
163
-
164
-
165
-
166
-
167
-
168
-
169
-
170
-
171
-
172
-
173
-
174
-
175
-
176
-
177
-
178
-
179
-
180
- exports.solve8 = solve8; exports.applyHomography = applyHomography; exports.homographyW = homographyW; exports.homographyFromPoints = homographyFromPoints; exports.homographyKeepsQuad = homographyKeepsQuad; exports.orderQuad = orderQuad; exports.multiplyHomographies = multiplyHomographies; exports.invertHomography = invertHomography; exports.homographyFromAffine = homographyFromAffine; exports.affineFromHomography = affineFromHomography; exports.isIdentityHomography = isIdentityHomography; exports.rectToQuad = rectToQuad; exports.boxQuad = boxQuad; exports.homographyFrontSide = homographyFrontSide; exports.cornerBounds = cornerBounds;
181
- //# sourceMappingURL=chunk-MUUXNRU4.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/editor/editor/packages/core/dist/chunk-MUUXNRU4.cjs","../src/geom/homography.ts"],"names":[],"mappings":"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","file":"/home/runner/work/editor/editor/packages/core/dist/chunk-MUUXNRU4.cjs","sourcesContent":[null,"/**\n * Perspective (projective) maps between quadrilaterals: Free Distort and Perspective in both the\n * vector and the image editor. Pure maths; degenerate or non-finite input gives `null` instead of\n * NaNs.\n *\n * Ported from ArtCraft (MIT OR Apache-2.0, © ArtCraft Team and contributors; see\n * THIRD_PARTY_NOTICES.md): pdfcraft `crates/geom/src/perspective.rs` (`Homography::from_points`,\n * `Homography::apply`, `solve8`, `order_quad`) and photocraft `crates/algo/src/transform.rs`\n * (`Homography::square_to_quad`, `rect_to_quad`, `inverse`, `mul`, `local_scale`, `front_side`,\n * `warp_output_bounds`, `convex_quad`).\n */\nimport type { AffineMatrix, Box, Homography, Quad, Vec2 } from './types';\n\nexport type { Homography };\n\nexport const IDENTITY_HOMOGRAPHY: Homography = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n\n/**\n * Gaussian elimination with partial pivoting on an 8×8 system (the 9th column of each row is the\n * right-hand side). Null when the system is singular.\n */\nexport function solve8(rows: readonly (readonly number[])[]): number[] | null {\n const m = rows.map((r) => r.slice());\n for (let col = 0; col < 8; col++) {\n let pivot = col;\n for (let r = col + 1; r < 8; r++) if (Math.abs(m[r][col]) > Math.abs(m[pivot][col])) pivot = r;\n if (!(Math.abs(m[pivot][col]) >= 1e-12)) return null;\n [m[col], m[pivot]] = [m[pivot], m[col]];\n const p = m[col];\n for (let r = 0; r < 8; r++) {\n if (r === col) continue;\n const f = m[r][col] / p[col];\n if (f !== 0) for (let k = 0; k < 9; k++) m[r][k] -= f * p[k];\n }\n }\n const out: number[] = [];\n for (let i = 0; i < 8; i++) {\n const v = m[i][8] / m[i][i];\n if (!Number.isFinite(v)) return null;\n out.push(v);\n }\n return out;\n}\n\n/** The image of `p`, or null where the map sends it to infinity. */\nexport function applyHomography(h: Homography, p: Vec2): Vec2 | null {\n const w = h[6] * p.x + h[7] * p.y + h[8];\n if (!Number.isFinite(w) || Math.abs(w) < 1e-12) return null;\n const x = (h[0] * p.x + h[1] * p.y + h[2]) / w;\n const y = (h[3] * p.x + h[4] * p.y + h[5]) / w;\n return Number.isFinite(x) && Number.isFinite(y) ? { x, y } : null;\n}\n\n/** The homogeneous `w` of `p`: its sign is the side of the horizon `p` maps to (0 on it). */\nexport function homographyW(h: Homography, p: Vec2): number {\n return h[6] * p.x + h[7] * p.y + h[8];\n}\n\nconst finite = (p: Vec2) => Number.isFinite(p.x) && Number.isFinite(p.y);\n\n/**\n * The projective map that takes each of `from` to the point at the same index of `to`. Null when\n * three of either set are collinear or a coordinate is not finite.\n */\nexport function homographyFromPoints(from: readonly Vec2[], to: readonly Vec2[]): Homography | null {\n if (from.length !== 4 || to.length !== 4 || ![...from, ...to].every(finite)) return null;\n // x' = (h0 x + h1 y + h2) / (h6 x + h7 y + 1), y' likewise with h3..h5: eight unknowns, two\n // equations per point pair.\n const rows: number[][] = [];\n for (let i = 0; i < 4; i++) {\n const { x, y } = from[i];\n const { x: u, y: v } = to[i];\n rows.push([x, y, 1, 0, 0, 0, -u * x, -u * y, u]);\n rows.push([0, 0, 0, x, y, 1, -v * x, -v * y, v]);\n }\n const h = solve8(rows);\n if (!h) return null;\n const out: Homography = [h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7], 1];\n // Collinear points can leave a solvable but singular system: check the map really takes the\n // four points where they should go.\n for (let i = 0; i < 4; i++) {\n const r = applyHomography(out, from[i]);\n const q = to[i];\n const scale = 1 + Math.max(Math.abs(q.x), Math.abs(q.y));\n if (!r || Math.abs(r.x - q.x) > 1e-6 * scale || Math.abs(r.y - q.y) > 1e-6 * scale) return null;\n }\n return out;\n}\n\n/**\n * Whether `h` maps the whole convex quad `quad` without sending any of it through infinity (the\n * denominator keeps one sign over it): what a usable distortion needs.\n */\nexport function homographyKeepsQuad(h: Homography, quad: readonly Vec2[]): boolean {\n const ws = quad.map((p) => h[6] * p.x + h[7] * p.y + h[8]);\n return ws.every((w) => w > 1e-9) || ws.every((w) => w < -1e-9);\n}\n\n/**\n * The four corners in reading order for a y-down space: top-left, top-right, bottom-right,\n * bottom-left, whatever order they come in. Null unless they form a convex quadrilateral with a\n * non-negligible area.\n */\nexport function orderQuad(points: readonly Vec2[]): Vec2[] | null {\n if (points.length !== 4 || !points.every(finite)) return null;\n const cx = points.reduce((s, p) => s + p.x, 0) / 4;\n const cy = points.reduce((s, p) => s + p.y, 0) / 4;\n // Ascending angle about the centre is clockwise on screen (y down).\n const q = points.slice().sort((a, b) => Math.atan2(a.y - cy, a.x - cx) - Math.atan2(b.y - cy, b.x - cx));\n let first = 0;\n for (let i = 1; i < 4; i++) if (q[i].x + q[i].y < q[first].x + q[first].y) first = i;\n const ordered = [...q.slice(first), ...q.slice(0, first)];\n const cross = (o: Vec2, a: Vec2, b: Vec2) => (a.x - o.x) * (b.y - o.y) - (a.y - o.y) * (b.x - o.x);\n const turns = ordered.map((_, i) => cross(ordered[i], ordered[(i + 1) % 4], ordered[(i + 2) % 4]));\n const area = turns.reduce((s, t) => s + t, 0) / 2;\n const xs = ordered.map((p) => p.x);\n const ys = ordered.map((p) => p.y);\n const size = Math.max(Math.max(...xs) - Math.min(...xs), Math.max(...ys) - Math.min(...ys));\n const convex = turns.every((t) => t > 1e-9 * size * size);\n return convex && area > 1e-6 * size * size ? ordered : null;\n}\n\n/** `a` then `b` (apply `a` first). */\nexport function multiplyHomographies(a: Homography, b: Homography): Homography {\n // Row-major column-vector maps: (b ∘ a) = B · A.\n const r = new Array<number>(9);\n for (let i = 0; i < 3; i++) for (let j = 0; j < 3; j++) r[i * 3 + j] = b[i * 3] * a[j] + b[i * 3 + 1] * a[3 + j] + b[i * 3 + 2] * a[6 + j];\n return r as unknown as Homography;\n}\n\n/** The inverse map, or null for a singular one. */\nexport function invertHomography(m: Homography): Homography | null {\n const c = [\n m[4] * m[8] - m[5] * m[7],\n m[2] * m[7] - m[1] * m[8],\n m[1] * m[5] - m[2] * m[4],\n m[5] * m[6] - m[3] * m[8],\n m[0] * m[8] - m[2] * m[6],\n m[2] * m[3] - m[0] * m[5],\n m[3] * m[7] - m[4] * m[6],\n m[1] * m[6] - m[0] * m[7],\n m[0] * m[4] - m[1] * m[3],\n ];\n const det = m[0] * c[0] + m[1] * c[3] + m[2] * c[6];\n if (!(Math.abs(det) >= 1e-12) || !Number.isFinite(det)) return null;\n return c.map((v) => v / det) as unknown as Homography;\n}\n\n/** An affine matrix (SVG order) as a homography. */\nexport function homographyFromAffine(m: AffineMatrix): Homography {\n return [m[0], m[2], m[4], m[1], m[3], m[5], 0, 0, 1];\n}\n\n/** The affine matrix of `h` when it is affine (no perspective part), else null. */\nexport function affineFromHomography(h: Homography, eps = 1e-12): AffineMatrix | null {\n if (Math.abs(h[6]) > eps * Math.abs(h[8]) || Math.abs(h[7]) > eps * Math.abs(h[8]) || !h[8]) return null;\n const w = h[8];\n return [h[0] / w, h[3] / w, h[1] / w, h[4] / w, h[2] / w, h[5] / w];\n}\n\nexport function isIdentityHomography(h: Homography, eps = 1e-9): boolean {\n const w = h[8];\n if (Math.abs(w) < 1e-12) return false;\n const id = IDENTITY_HOMOGRAPHY;\n for (let i = 0; i < 8; i++) if (Math.abs(h[i] / w - id[i]) > eps) return false;\n return true;\n}\n\n/** Unit square → quad (corners (0,0), (1,0), (1,1), (0,1) to TL, TR, BR, BL); null when degenerate. */\nfunction squareToQuad(q: readonly Vec2[]): Homography | null {\n const [p0, p1, p2, p3] = q;\n const sx = p0.x - p1.x + p2.x - p3.x;\n const sy = p0.y - p1.y + p2.y - p3.y;\n if (Math.abs(sx) < 1e-12 && Math.abs(sy) < 1e-12) {\n return [p1.x - p0.x, p3.x - p0.x, p0.x, p1.y - p0.y, p3.y - p0.y, p0.y, 0, 0, 1];\n }\n const dx1 = p1.x - p2.x;\n const dx2 = p3.x - p2.x;\n const dy1 = p1.y - p2.y;\n const dy2 = p3.y - p2.y;\n const den = dx1 * dy2 - dx2 * dy1;\n if (Math.abs(den) < 1e-12) return null;\n const g = (sx * dy2 - dx2 * sy) / den;\n const h = (dx1 * sy - sx * dy1) / den;\n return [p1.x - p0.x + g * p1.x, p3.x - p0.x + h * p3.x, p0.x, p1.y - p0.y + g * p1.y, p3.y - p0.y + h * p3.y, p0.y, g, h, 1];\n}\n\n/**\n * The map taking box `r`'s corners onto `quad` (TL, TR, BR, BL), exact for parallelograms (then\n * affine). Null for an empty box, a non-finite or degenerate quad, or a singular result.\n */\nexport function rectToQuad(r: Box, quad: readonly Vec2[]): Homography | null {\n if (!(r.width > 0 && r.height > 0) || quad.length !== 4 || !quad.every(finite)) return null;\n const toUnit: Homography = [1 / r.width, 0, -r.x / r.width, 0, 1 / r.height, -r.y / r.height, 0, 0, 1];\n const sq = squareToQuad(quad);\n if (!sq) return null;\n const h = multiplyHomographies(toUnit, sq);\n return invertHomography(h) ? h : null;\n}\n\n/** Box `r`'s corners as a quad (TL, TR, BR, BL). */\nexport function boxQuad(r: Box): Quad {\n return [\n { x: r.x, y: r.y },\n { x: r.x + r.width, y: r.y },\n { x: r.x + r.width, y: r.y + r.height },\n { x: r.x, y: r.y + r.height },\n ];\n}\n\n/** Approximate linear scale of the map near `p` (square root of the Jacobian determinant). */\nexport function homographyLocalScale(h: Homography, p: Vec2): number {\n const e = 0.5;\n const a = applyHomography(h, { x: p.x - e, y: p.y });\n const b = applyHomography(h, { x: p.x + e, y: p.y });\n const c = applyHomography(h, { x: p.x, y: p.y - e });\n const d = applyHomography(h, { x: p.x, y: p.y + e });\n if (!a || !b || !c || !d) return 0;\n const jx = { x: b.x - a.x, y: b.y - a.y };\n const jy = { x: d.x - c.x, y: d.y - c.y };\n return Math.sqrt(Math.abs(jx.x * jy.y - jx.y * jy.x));\n}\n\n/**\n * The side of the horizon (+1 or −1) most of box `r`'s corners map to (the centre's on a tie). A\n * Distort dragged past the horizon maps the rest of the source to the far side, where it would\n * show as a mirrored copy wrapped round infinity; resampling keeps to this side, as Photoshop does.\n */\nexport function homographyFrontSide(h: Homography, r: Box): 1 | -1 {\n const ahead = boxQuad(r).filter((p) => homographyW(h, p) > 0).length;\n if (ahead >= 3) return 1;\n if (ahead <= 1) return -1;\n return homographyW(h, { x: r.x + r.width / 2, y: r.y + r.height / 2 }) >= 0 ? 1 : -1;\n}\n\n/** Most pixels a side of a warped result may span (±2²⁰), as photocraft clamps. */\nconst OUTPUT_LIMIT = 1 << 20;\n\n/**\n * The integer box a warp of box `r` through `h` fills: the warped corners plus a pixel for filter\n * support, each side clamped to ±2²⁰. Null when a corner maps to infinity or `h` is singular.\n */\nexport function warpOutputBounds(r: Box, h: Homography): Box | null {\n if (!(r.width > 0 && r.height > 0) || !invertHomography(h)) return null;\n const corners = boxQuad(r).map((p) => applyHomography(h, p));\n if (corners.some((c) => !c)) return null;\n return cornerBounds(corners as Vec2[]);\n}\n\n/** The integer box around `corners`, grown by a pixel and clamped to ±2²⁰. */\nexport function cornerBounds(corners: readonly Vec2[]): Box {\n const lim = OUTPUT_LIMIT;\n const xs = corners.map((c) => c.x);\n const ys = corners.map((c) => c.y);\n const x0 = Math.floor(Math.max(-lim, Math.min(...xs))) - 1;\n const y0 = Math.floor(Math.max(-lim, Math.min(...ys))) - 1;\n const x1 = Math.ceil(Math.min(lim, Math.max(...xs))) + 1;\n const y1 = Math.ceil(Math.min(lim, Math.max(...ys))) + 1;\n return { x: x0, y: y0, width: x1 - x0, height: y1 - y0 };\n}\n\n/**\n * Whether `q` (TL, TR, BR, BL) is strictly convex with every corner turn above ~0.06°, wound\n * clockwise on screen (y down), finite and at least 1 px² in area.\n */\nexport function isConvexQuad(q: readonly Vec2[]): boolean {\n if (q.length !== 4 || !q.every(finite)) return false;\n let area2 = 0;\n for (let i = 0; i < 4; i++) {\n const a = q[i];\n const b = q[(i + 1) % 4];\n const c = q[(i + 2) % 4];\n const e1 = { x: b.x - a.x, y: b.y - a.y };\n const e2 = { x: c.x - b.x, y: c.y - b.y };\n const cross = e1.x * e2.y - e1.y * e2.x;\n if (!(cross > 1e-3 * Math.hypot(e1.x, e1.y) * Math.hypot(e2.x, e2.y))) return false;\n area2 += a.x * b.y - b.x * a.y;\n }\n return Number.isFinite(area2) && area2 >= 2;\n}\n"]}