@pixerate/editor 0.120.0 → 0.122.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 (64) hide show
  1. package/THIRD_PARTY_NOTICES.md +1 -1
  2. package/dist/{chunk-HTAFDTNR.cjs → chunk-4PUPGALM.cjs} +251 -156
  3. package/dist/chunk-4PUPGALM.cjs.map +1 -0
  4. package/dist/{chunk-N3467VD6.js → chunk-7QN76ESJ.js} +1 -179
  5. package/dist/chunk-7QN76ESJ.js.map +1 -0
  6. package/dist/{chunk-UMVW2Q66.js → chunk-CLTTLLWA.js} +1090 -982
  7. package/dist/chunk-CLTTLLWA.js.map +1 -0
  8. package/dist/{chunk-EJVDBITD.cjs → chunk-DCLJNVZS.cjs} +2 -180
  9. package/dist/chunk-DCLJNVZS.cjs.map +1 -0
  10. package/dist/{chunk-WMRIG4XQ.cjs → chunk-DFFBJV3U.cjs} +1855 -1747
  11. package/dist/chunk-DFFBJV3U.cjs.map +1 -0
  12. package/dist/chunk-GX332W2C.js +181 -0
  13. package/dist/chunk-GX332W2C.js.map +1 -0
  14. package/dist/{chunk-BOWUU4LJ.js → chunk-IX3YKUVK.js} +105 -10
  15. package/dist/chunk-IX3YKUVK.js.map +1 -0
  16. package/dist/{chunk-TS5IEUW6.cjs → chunk-K7V27T72.cjs} +178 -3
  17. package/dist/chunk-K7V27T72.cjs.map +1 -0
  18. package/dist/chunk-MUUXNRU4.cjs +181 -0
  19. package/dist/chunk-MUUXNRU4.cjs.map +1 -0
  20. package/dist/{chunk-YHW26LS2.js → chunk-ZZPGTNXJ.js} +177 -2
  21. package/dist/chunk-ZZPGTNXJ.js.map +1 -0
  22. package/dist/{render-B05K68_h.d.ts → deep-DLwKZDFr.d.ts} +143 -134
  23. package/dist/{render-DnAbIKcs.d.cts → deep-QS3ppbMX.d.cts} +143 -134
  24. package/dist/{export-D2D8hb_u.d.ts → export-VmTofKIk.d.ts} +11 -4
  25. package/dist/{export-fP2hZYjm.d.cts → export-jKKj8Fg8.d.cts} +11 -4
  26. package/dist/image-editor/index.cjs +760 -734
  27. package/dist/image-editor/index.cjs.map +1 -1
  28. package/dist/image-editor/index.d.cts +18 -6
  29. package/dist/image-editor/index.d.ts +18 -6
  30. package/dist/image-editor/index.js +37 -11
  31. package/dist/image-editor/index.js.map +1 -1
  32. package/dist/paint/index.cjs +22 -2
  33. package/dist/paint/index.cjs.map +1 -1
  34. package/dist/paint/index.d.cts +159 -1
  35. package/dist/paint/index.d.ts +159 -1
  36. package/dist/paint/index.js +21 -1
  37. package/dist/paint-editor/index.cjs +95 -94
  38. package/dist/paint-editor/index.cjs.map +1 -1
  39. package/dist/paint-editor/index.d.cts +2 -2
  40. package/dist/paint-editor/index.d.ts +2 -2
  41. package/dist/paint-editor/index.js +12 -11
  42. package/dist/paint-editor/index.js.map +1 -1
  43. package/dist/raster/index.cjs +5 -4
  44. package/dist/raster/index.cjs.map +1 -1
  45. package/dist/raster/index.d.cts +29 -7
  46. package/dist/raster/index.d.ts +29 -7
  47. package/dist/raster/index.js +11 -10
  48. package/dist/vector/index.cjs +14 -12
  49. package/dist/vector/index.cjs.map +1 -1
  50. package/dist/vector/index.js +7 -5
  51. package/dist/vector/index.js.map +1 -1
  52. package/package.json +1 -1
  53. package/skills/pixerate-canvas/SKILL.md +23 -1
  54. package/skills/pixerate-image-editor/SKILL.md +7 -1
  55. package/skills/pixerate-image-editor/references/photoshop-files.md +4 -3
  56. package/skills/pixerate-paint-editor/SKILL.md +32 -7
  57. package/dist/chunk-BOWUU4LJ.js.map +0 -1
  58. package/dist/chunk-EJVDBITD.cjs.map +0 -1
  59. package/dist/chunk-HTAFDTNR.cjs.map +0 -1
  60. package/dist/chunk-N3467VD6.js.map +0 -1
  61. package/dist/chunk-TS5IEUW6.cjs.map +0 -1
  62. package/dist/chunk-UMVW2Q66.js.map +0 -1
  63. package/dist/chunk-WMRIG4XQ.cjs.map +0 -1
  64. package/dist/chunk-YHW26LS2.js.map +0 -1
@@ -3,169 +3,6 @@
3
3
 
4
4
  var _chunk643B2HKCcjs = require('./chunk-643B2HKC.cjs');
5
5
 
6
- // src/geom/homography.ts
7
- var IDENTITY_HOMOGRAPHY = [1, 0, 0, 0, 1, 0, 0, 0, 1];
8
- function solve8(rows) {
9
- const m = rows.map((r) => r.slice());
10
- for (let col = 0; col < 8; col++) {
11
- let pivot = col;
12
- for (let r = col + 1; r < 8; r++) if (Math.abs(m[r][col]) > Math.abs(m[pivot][col])) pivot = r;
13
- if (!(Math.abs(m[pivot][col]) >= 1e-12)) return null;
14
- [m[col], m[pivot]] = [m[pivot], m[col]];
15
- const p = m[col];
16
- for (let r = 0; r < 8; r++) {
17
- if (r === col) continue;
18
- const f = m[r][col] / p[col];
19
- if (f !== 0) for (let k = 0; k < 9; k++) m[r][k] -= f * p[k];
20
- }
21
- }
22
- const out = [];
23
- for (let i = 0; i < 8; i++) {
24
- const v = m[i][8] / m[i][i];
25
- if (!Number.isFinite(v)) return null;
26
- out.push(v);
27
- }
28
- return out;
29
- }
30
- function applyHomography(h, p) {
31
- const w = h[6] * p.x + h[7] * p.y + h[8];
32
- if (!Number.isFinite(w) || Math.abs(w) < 1e-12) return null;
33
- const x = (h[0] * p.x + h[1] * p.y + h[2]) / w;
34
- const y = (h[3] * p.x + h[4] * p.y + h[5]) / w;
35
- return Number.isFinite(x) && Number.isFinite(y) ? { x, y } : null;
36
- }
37
- function homographyW(h, p) {
38
- return h[6] * p.x + h[7] * p.y + h[8];
39
- }
40
- var finite = (p) => Number.isFinite(p.x) && Number.isFinite(p.y);
41
- function homographyFromPoints(from, to) {
42
- if (from.length !== 4 || to.length !== 4 || ![...from, ...to].every(finite)) return null;
43
- const rows = [];
44
- for (let i = 0; i < 4; i++) {
45
- const { x, y } = from[i];
46
- const { x: u, y: v } = to[i];
47
- rows.push([x, y, 1, 0, 0, 0, -u * x, -u * y, u]);
48
- rows.push([0, 0, 0, x, y, 1, -v * x, -v * y, v]);
49
- }
50
- const h = solve8(rows);
51
- if (!h) return null;
52
- const out = [h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7], 1];
53
- for (let i = 0; i < 4; i++) {
54
- const r = applyHomography(out, from[i]);
55
- const q = to[i];
56
- const scale = 1 + Math.max(Math.abs(q.x), Math.abs(q.y));
57
- if (!r || Math.abs(r.x - q.x) > 1e-6 * scale || Math.abs(r.y - q.y) > 1e-6 * scale) return null;
58
- }
59
- return out;
60
- }
61
- function homographyKeepsQuad(h, quad) {
62
- const ws = quad.map((p) => h[6] * p.x + h[7] * p.y + h[8]);
63
- return ws.every((w) => w > 1e-9) || ws.every((w) => w < -1e-9);
64
- }
65
- function orderQuad(points) {
66
- if (points.length !== 4 || !points.every(finite)) return null;
67
- const cx = points.reduce((s, p) => s + p.x, 0) / 4;
68
- const cy = points.reduce((s, p) => s + p.y, 0) / 4;
69
- const q = points.slice().sort((a, b) => Math.atan2(a.y - cy, a.x - cx) - Math.atan2(b.y - cy, b.x - cx));
70
- let first = 0;
71
- for (let i = 1; i < 4; i++) if (q[i].x + q[i].y < q[first].x + q[first].y) first = i;
72
- const ordered = [...q.slice(first), ...q.slice(0, first)];
73
- const cross = (o, a, b) => (a.x - o.x) * (b.y - o.y) - (a.y - o.y) * (b.x - o.x);
74
- const turns = ordered.map((_, i) => cross(ordered[i], ordered[(i + 1) % 4], ordered[(i + 2) % 4]));
75
- const area = turns.reduce((s, t) => s + t, 0) / 2;
76
- const xs = ordered.map((p) => p.x);
77
- const ys = ordered.map((p) => p.y);
78
- const size = Math.max(Math.max(...xs) - Math.min(...xs), Math.max(...ys) - Math.min(...ys));
79
- const convex = turns.every((t) => t > 1e-9 * size * size);
80
- return convex && area > 1e-6 * size * size ? ordered : null;
81
- }
82
- function multiplyHomographies(a, b) {
83
- const r = new Array(9);
84
- 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];
85
- return r;
86
- }
87
- function invertHomography(m) {
88
- const c = [
89
- m[4] * m[8] - m[5] * m[7],
90
- m[2] * m[7] - m[1] * m[8],
91
- m[1] * m[5] - m[2] * m[4],
92
- m[5] * m[6] - m[3] * m[8],
93
- m[0] * m[8] - m[2] * m[6],
94
- m[2] * m[3] - m[0] * m[5],
95
- m[3] * m[7] - m[4] * m[6],
96
- m[1] * m[6] - m[0] * m[7],
97
- m[0] * m[4] - m[1] * m[3]
98
- ];
99
- const det = m[0] * c[0] + m[1] * c[3] + m[2] * c[6];
100
- if (!(Math.abs(det) >= 1e-12) || !Number.isFinite(det)) return null;
101
- return c.map((v) => v / det);
102
- }
103
- function homographyFromAffine(m) {
104
- return [m[0], m[2], m[4], m[1], m[3], m[5], 0, 0, 1];
105
- }
106
- function affineFromHomography(h, eps = 1e-12) {
107
- if (Math.abs(h[6]) > eps * Math.abs(h[8]) || Math.abs(h[7]) > eps * Math.abs(h[8]) || !h[8]) return null;
108
- const w = h[8];
109
- return [h[0] / w, h[3] / w, h[1] / w, h[4] / w, h[2] / w, h[5] / w];
110
- }
111
- function isIdentityHomography(h, eps = 1e-9) {
112
- const w = h[8];
113
- if (Math.abs(w) < 1e-12) return false;
114
- const id = IDENTITY_HOMOGRAPHY;
115
- for (let i = 0; i < 8; i++) if (Math.abs(h[i] / w - id[i]) > eps) return false;
116
- return true;
117
- }
118
- function squareToQuad(q) {
119
- const [p0, p1, p2, p3] = q;
120
- const sx = p0.x - p1.x + p2.x - p3.x;
121
- const sy = p0.y - p1.y + p2.y - p3.y;
122
- if (Math.abs(sx) < 1e-12 && Math.abs(sy) < 1e-12) {
123
- return [p1.x - p0.x, p3.x - p0.x, p0.x, p1.y - p0.y, p3.y - p0.y, p0.y, 0, 0, 1];
124
- }
125
- const dx1 = p1.x - p2.x;
126
- const dx2 = p3.x - p2.x;
127
- const dy1 = p1.y - p2.y;
128
- const dy2 = p3.y - p2.y;
129
- const den = dx1 * dy2 - dx2 * dy1;
130
- if (Math.abs(den) < 1e-12) return null;
131
- const g = (sx * dy2 - dx2 * sy) / den;
132
- const h = (dx1 * sy - sx * dy1) / den;
133
- 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];
134
- }
135
- function rectToQuad(r, quad) {
136
- if (!(r.width > 0 && r.height > 0) || quad.length !== 4 || !quad.every(finite)) return null;
137
- const toUnit = [1 / r.width, 0, -r.x / r.width, 0, 1 / r.height, -r.y / r.height, 0, 0, 1];
138
- const sq = squareToQuad(quad);
139
- if (!sq) return null;
140
- const h = multiplyHomographies(toUnit, sq);
141
- return invertHomography(h) ? h : null;
142
- }
143
- function boxQuad(r) {
144
- return [
145
- { x: r.x, y: r.y },
146
- { x: r.x + r.width, y: r.y },
147
- { x: r.x + r.width, y: r.y + r.height },
148
- { x: r.x, y: r.y + r.height }
149
- ];
150
- }
151
- function homographyFrontSide(h, r) {
152
- const ahead = boxQuad(r).filter((p) => homographyW(h, p) > 0).length;
153
- if (ahead >= 3) return 1;
154
- if (ahead <= 1) return -1;
155
- return homographyW(h, { x: r.x + r.width / 2, y: r.y + r.height / 2 }) >= 0 ? 1 : -1;
156
- }
157
- var OUTPUT_LIMIT = 1 << 20;
158
- function cornerBounds(corners) {
159
- const lim = OUTPUT_LIMIT;
160
- const xs = corners.map((c) => c.x);
161
- const ys = corners.map((c) => c.y);
162
- const x0 = Math.floor(Math.max(-lim, Math.min(...xs))) - 1;
163
- const y0 = Math.floor(Math.max(-lim, Math.min(...ys))) - 1;
164
- const x1 = Math.ceil(Math.min(lim, Math.max(...xs))) + 1;
165
- const y1 = Math.ceil(Math.min(lim, Math.max(...ys))) + 1;
166
- return { x: x0, y: y0, width: x1 - x0, height: y1 - y0 };
167
- }
168
-
169
6
  // src/raster/png.ts
170
7
  var SIGNATURE = [137, 80, 78, 71, 13, 10, 26, 10];
171
8
  var crcTable = null;
@@ -482,20 +319,5 @@ function pngDataUrl(width, height, data, channels = 4) {
482
319
 
483
320
 
484
321
 
485
-
486
-
487
-
488
-
489
-
490
-
491
-
492
-
493
-
494
-
495
-
496
-
497
-
498
-
499
-
500
- 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; exports.encodePng = encodePng; exports.isPng = isPng; exports.decodePng = decodePng; exports.bytesToBase64 = bytesToBase64; exports.base64ToBytes = base64ToBytes; exports.parseDataUrl = parseDataUrl; exports.pngDataUrl = pngDataUrl;
501
- //# sourceMappingURL=chunk-EJVDBITD.cjs.map
322
+ exports.encodePng = encodePng; exports.isPng = isPng; exports.decodePng = decodePng; exports.bytesToBase64 = bytesToBase64; exports.base64ToBytes = base64ToBytes; exports.parseDataUrl = parseDataUrl; exports.pngDataUrl = pngDataUrl;
323
+ //# sourceMappingURL=chunk-DCLJNVZS.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/editor/editor/packages/core/dist/chunk-DCLJNVZS.cjs","../src/raster/png.ts"],"names":["c","out"],"mappings":"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","file":"/home/runner/work/editor/editor/packages/core/dist/chunk-DCLJNVZS.cjs","sourcesContent":[null,"/**\n * Dependency-free, synchronous PNG encode / decode for layer pixels and masks, plus base64 and\n * data-URL helpers. Canvas `toDataURL` is lossy for partly transparent pixels (it goes through\n * premultiplied alpha), so layer assets use this codec and round-trip exactly.\n *\n * Encodes 8-bit greyscale (masks) or RGBA (layers). Decodes non-interlaced 1/2/4/8/16-bit\n * greyscale, RGB, palette, grey + alpha and RGBA, always to 8-bit RGBA or grey.\n */\n\nimport { deflate, inflate } from './zlib';\n\nconst SIGNATURE = [137, 80, 78, 71, 13, 10, 26, 10];\n\nlet crcTable: Uint32Array | null = null;\nfunction crc32(bytes: Uint8Array, start: number, end: number): number {\n if (!crcTable) {\n crcTable = new Uint32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n crcTable[n] = c >>> 0;\n }\n }\n let c = 0xffffffff;\n for (let i = start; i < end; i++) c = crcTable[(c ^ bytes[i]) & 255] ^ (c >>> 8);\n return (c ^ 0xffffffff) >>> 0;\n}\n\nexport interface DecodedPng {\n width: number;\n height: number;\n /** 4 for RGBA output, 1 for greyscale without alpha when `keepGray` was asked for. */\n channels: 1 | 4;\n data: Uint8ClampedArray;\n}\n\nfunction paeth(a: number, b: number, c: number): number {\n const p = a + b - c;\n const pa = Math.abs(p - a);\n const pb = Math.abs(p - b);\n const pc = Math.abs(p - c);\n return pa <= pb && pa <= pc ? a : pb <= pc ? b : c;\n}\n\n/** PNG bytes for `width × height` pixels of 1 (grey) or 4 (RGBA) bytes each. */\nexport function encodePng(width: number, height: number, data: ArrayLike<number>, channels: 1 | 4 = 4): Uint8Array {\n const stride = width * channels;\n const raw = new Uint8Array((stride + 1) * height);\n const bpp = channels;\n const cand = [new Uint8Array(stride), new Uint8Array(stride), new Uint8Array(stride), new Uint8Array(stride), new Uint8Array(stride)];\n for (let y = 0; y < height; y++) {\n const row = y * stride;\n const prevRow = (y - 1) * stride;\n // Try each filter and keep the one with the smallest sum of signed residues.\n let best = 0;\n let bestScore = Infinity;\n for (let f = 0; f < 5; f++) {\n const out = cand[f];\n let score = 0;\n for (let x = 0; x < stride; x++) {\n const v = data[row + x];\n const a = x >= bpp ? data[row + x - bpp] : 0;\n const b = y > 0 ? data[prevRow + x] : 0;\n const c = x >= bpp && y > 0 ? data[prevRow + x - bpp] : 0;\n let r: number;\n switch (f) {\n case 0: r = v; break;\n case 1: r = v - a; break;\n case 2: r = v - b; break;\n case 3: r = v - ((a + b) >> 1); break;\n default: r = v - paeth(a, b, c);\n }\n r &= 255;\n out[x] = r;\n score += r < 128 ? r : 256 - r;\n if (score >= bestScore) break;\n }\n if (score < bestScore) {\n bestScore = score;\n best = f;\n }\n }\n const o = y * (stride + 1);\n raw[o] = best;\n // Only a filter whose scoring loop ran to the end can win, so its row is complete.\n raw.set(cand[best], o + 1);\n }\n const idat = deflate(raw);\n const chunks: Array<[string, Uint8Array]> = [];\n const ihdr = new Uint8Array(13);\n writeU32(ihdr, 0, width);\n writeU32(ihdr, 4, height);\n ihdr[8] = 8;\n ihdr[9] = channels === 1 ? 0 : 6;\n chunks.push(['IHDR', ihdr], ['IDAT', idat], ['IEND', new Uint8Array(0)]);\n let size = 8;\n for (const [, d] of chunks) size += 12 + d.length;\n const out = new Uint8Array(size);\n out.set(SIGNATURE, 0);\n let p = 8;\n for (const [type, d] of chunks) {\n writeU32(out, p, d.length);\n for (let i = 0; i < 4; i++) out[p + 4 + i] = type.charCodeAt(i);\n out.set(d, p + 8);\n writeU32(out, p + 8 + d.length, crc32(out, p + 4, p + 8 + d.length));\n p += 12 + d.length;\n }\n return out;\n}\n\nfunction writeU32(b: Uint8Array, o: number, v: number): void {\n b[o] = v >>> 24;\n b[o + 1] = (v >>> 16) & 255;\n b[o + 2] = (v >>> 8) & 255;\n b[o + 3] = v & 255;\n}\n\nfunction readU32(b: Uint8Array, o: number): number {\n return ((b[o] << 24) | (b[o + 1] << 16) | (b[o + 2] << 8) | b[o + 3]) >>> 0;\n}\n\nexport function isPng(bytes: Uint8Array): boolean {\n return bytes.length > 8 && SIGNATURE.every((v, i) => bytes[i] === v);\n}\n\n/**\n * Decodes a PNG. Output is RGBA (4 channels) unless `keepGray` is set and the image is\n * greyscale without alpha, in which case it is one byte per pixel.\n */\nexport function decodePng(bytes: Uint8Array, options: { keepGray?: boolean; maxPixels?: number } = {}): DecodedPng {\n if (!isPng(bytes)) throw new Error('Not a PNG image.');\n let p = 8;\n let width = 0;\n let height = 0;\n let depth = 0;\n let type = 0;\n let interlace = 0;\n let palette: Uint8Array | null = null;\n let trns: Uint8Array | null = null;\n const idat: Uint8Array[] = [];\n while (p + 8 <= bytes.length) {\n const len = readU32(bytes, p);\n const t = String.fromCharCode(bytes[p + 4], bytes[p + 5], bytes[p + 6], bytes[p + 7]);\n const body = bytes.subarray(p + 8, p + 8 + len);\n if (p + 12 + len > bytes.length) throw new Error('Truncated PNG.');\n if (t === 'IHDR') {\n width = readU32(body, 0);\n height = readU32(body, 4);\n depth = body[8];\n type = body[9];\n interlace = body[12];\n } else if (t === 'PLTE') palette = body;\n else if (t === 'tRNS') trns = body;\n else if (t === 'IDAT') idat.push(body);\n else if (t === 'IEND') break;\n p += 12 + len;\n }\n if (!width || !height) throw new Error('PNG has no image header.');\n if (interlace) throw new Error('Interlaced PNGs are not supported here; decode them with a canvas.');\n const maxPixels = options.maxPixels ?? 1 << 28;\n if (width * height > maxPixels) throw new Error(`PNG is too large (${width}×${height}).`);\n const samples = type === 0 ? 1 : type === 2 ? 3 : type === 3 ? 1 : type === 4 ? 2 : type === 6 ? 4 : 0;\n if (!samples || ![1, 2, 4, 8, 16].includes(depth)) throw new Error(`Unsupported PNG format (type ${type}, depth ${depth}).`);\n let total = 0;\n for (const c of idat) total += c.length;\n const z = new Uint8Array(total);\n let o = 0;\n for (const c of idat) {\n z.set(c, o);\n o += c.length;\n }\n const bitsPerPixel = samples * depth;\n const stride = Math.ceil((width * bitsPerPixel) / 8);\n const raw = inflate(z, { maxOutput: (stride + 1) * height, sizeHint: (stride + 1) * height });\n if (raw.length < (stride + 1) * height) throw new Error('PNG image data is truncated.');\n const bpp = Math.max(1, bitsPerPixel >> 3);\n const lines = new Uint8Array(stride * height);\n for (let y = 0; y < height; y++) {\n const f = raw[y * (stride + 1)];\n const src = y * (stride + 1) + 1;\n const dst = y * stride;\n const up = dst - stride;\n for (let x = 0; x < stride; x++) {\n const v = raw[src + x];\n const a = x >= bpp ? lines[dst + x - bpp] : 0;\n const b = y > 0 ? lines[up + x] : 0;\n const c = x >= bpp && y > 0 ? lines[up + x - bpp] : 0;\n let r: number;\n switch (f) {\n case 0: r = v; break;\n case 1: r = v + a; break;\n case 2: r = v + b; break;\n case 3: r = v + ((a + b) >> 1); break;\n case 4: r = v + paeth(a, b, c); break;\n default: throw new Error(`Invalid PNG filter ${f}.`);\n }\n lines[dst + x] = r & 255;\n }\n }\n const sample = (y: number, i: number): number => {\n // The i-th sample of row y, scaled to 8 bits.\n const row = y * stride;\n if (depth === 8) return lines[row + i];\n if (depth === 16) return lines[row + i * 2];\n const perByte = 8 / depth;\n const byte = lines[row + Math.floor(i / perByte)];\n const shift = 8 - depth * ((i % perByte) + 1);\n const v = (byte >> shift) & ((1 << depth) - 1);\n return type === 3 ? v : Math.round((v * 255) / ((1 << depth) - 1));\n };\n const gray = options.keepGray && type === 0 && !trns;\n const channels: 1 | 4 = gray ? 1 : 4;\n const out = new Uint8ClampedArray(width * height * channels);\n const trnsGray = trns && type === 0 ? (depth === 16 ? trns[0] : sample16(trns, 0, depth)) : -1;\n const trnsRgb = trns && type === 2 ? [0, 1, 2].map((k) => (depth === 16 ? trns![k * 2] : sample16(trns!, k, depth))) : null;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const d = (y * width + x) * channels;\n if (type === 0) {\n const v = sample(y, x);\n if (gray) out[d] = v;\n else {\n out[d] = out[d + 1] = out[d + 2] = v;\n out[d + 3] = v === trnsGray && trns ? 0 : 255;\n }\n } else if (type === 2) {\n const r = sample(y, x * 3);\n const g = sample(y, x * 3 + 1);\n const b = sample(y, x * 3 + 2);\n out[d] = r;\n out[d + 1] = g;\n out[d + 2] = b;\n out[d + 3] = trnsRgb && r === trnsRgb[0] && g === trnsRgb[1] && b === trnsRgb[2] ? 0 : 255;\n } else if (type === 3) {\n const i = sample(y, x);\n if (!palette || i * 3 + 2 >= palette.length) throw new Error('PNG palette index out of range.');\n out[d] = palette[i * 3];\n out[d + 1] = palette[i * 3 + 1];\n out[d + 2] = palette[i * 3 + 2];\n out[d + 3] = trns && i < trns.length ? trns[i] : 255;\n } else if (type === 4) {\n const v = sample(y, x * 2);\n out[d] = out[d + 1] = out[d + 2] = v;\n out[d + 3] = sample(y, x * 2 + 1);\n } else {\n out[d] = sample(y, x * 4);\n out[d + 1] = sample(y, x * 4 + 1);\n out[d + 2] = sample(y, x * 4 + 2);\n out[d + 3] = sample(y, x * 4 + 3);\n }\n }\n }\n return { width, height, channels, data: out };\n}\n\n/** A tRNS sample (stored as 16-bit big endian) scaled like the image samples. */\nfunction sample16(trns: Uint8Array, k: number, depth: number): number {\n const v = (trns[k * 2] << 8) | trns[k * 2 + 1];\n if (depth === 8) return v & 255;\n return Math.round(((v & ((1 << depth) - 1)) * 255) / ((1 << depth) - 1));\n}\n\n// ---------------------------------------------------------------------------\n// Base64 / data URLs\n// ---------------------------------------------------------------------------\n\nconst B64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nlet B64_INV: Int16Array | null = null;\n\nexport function bytesToBase64(bytes: Uint8Array): string {\n const parts: string[] = [];\n const CHUNK = 3 * 4096;\n for (let start = 0; start < bytes.length; start += CHUNK) {\n const end = Math.min(bytes.length, start + CHUNK);\n let s = '';\n let i = start;\n for (; i + 2 < end; i += 3) {\n const n = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n s += B64[n >> 18] + B64[(n >> 12) & 63] + B64[(n >> 6) & 63] + B64[n & 63];\n }\n if (i < end) {\n const n = (bytes[i] << 16) | (i + 1 < end ? bytes[i + 1] << 8 : 0);\n s += B64[n >> 18] + B64[(n >> 12) & 63] + (i + 1 < end ? B64[(n >> 6) & 63] : '=') + '=';\n }\n parts.push(s);\n }\n return parts.join('');\n}\n\nexport function base64ToBytes(text: string): Uint8Array {\n if (!B64_INV) {\n B64_INV = new Int16Array(128).fill(-1);\n for (let i = 0; i < 64; i++) B64_INV[B64.charCodeAt(i)] = i;\n B64_INV['-'.charCodeAt(0)] = 62;\n B64_INV['_'.charCodeAt(0)] = 63;\n }\n const inv = B64_INV;\n const clean = text.replace(/[\\s=]/g, '');\n const out = new Uint8Array(Math.floor((clean.length * 3) / 4));\n let bits = 0;\n let acc = 0;\n let o = 0;\n for (let i = 0; i < clean.length; i++) {\n const c = clean.charCodeAt(i);\n const v = c < 128 ? inv[c] : -1;\n if (v < 0) throw new Error('Invalid base64 data.');\n acc = (acc << 6) | v;\n bits += 6;\n if (bits >= 8) {\n bits -= 8;\n out[o++] = (acc >> bits) & 255;\n }\n }\n return out.subarray(0, o);\n}\n\n/** The bytes and MIME type of a `data:` URL (base64 or percent-encoded). */\nexport function parseDataUrl(url: string): { mime: string; bytes: Uint8Array } | null {\n const m = /^data:([^;,]*)((?:;[^;,]*)*?),/i.exec(url);\n if (!m) return null;\n const body = url.slice(m[0].length);\n const isBase64 = /;base64/i.test(m[2]);\n if (isBase64) return { mime: m[1] || 'text/plain', bytes: base64ToBytes(body) };\n const text = decodeURIComponent(body);\n const bytes = new Uint8Array(text.length);\n for (let i = 0; i < text.length; i++) bytes[i] = text.charCodeAt(i) & 255;\n return { mime: m[1] || 'text/plain', bytes };\n}\n\nexport function pngDataUrl(width: number, height: number, data: ArrayLike<number>, channels: 1 | 4 = 4): string {\n return `data:image/png;base64,${bytesToBase64(encodePng(width, height, data, channels))}`;\n}\n"]}