@pixerate/editor 0.135.0 → 0.137.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 (164) hide show
  1. package/dist/animation-editor/index.cjs +63 -55
  2. package/dist/animation-editor/index.cjs.map +1 -1
  3. package/dist/animation-editor/index.d.cts +8 -5
  4. package/dist/animation-editor/index.d.ts +8 -5
  5. package/dist/animation-editor/index.js +10 -2
  6. package/dist/animation-editor/index.js.map +1 -1
  7. package/dist/{bezier-J8i4uqSH.d.cts → bezier-CZ2AhjID.d.cts} +1 -1
  8. package/dist/{bezier-lNEOp0Jx.d.ts → bezier-Dywv3Bw8.d.ts} +1 -1
  9. package/dist/blending-D7jCmjO6.d.cts +1026 -0
  10. package/dist/blending-NgF3qo3d.d.ts +1026 -0
  11. package/dist/brushes-CnvZSYYU.d.cts +744 -0
  12. package/dist/brushes-DJmUbIgz.d.ts +744 -0
  13. package/dist/{brushstrokeRender-SII6MG4R.js → brushstrokeRender-2FAXA3XC.js} +13 -16
  14. package/dist/{brushstrokeRender-SII6MG4R.js.map → brushstrokeRender-2FAXA3XC.js.map} +1 -1
  15. package/dist/{brushstrokeRender-JNHVEUFG.cjs → brushstrokeRender-IMFY3FF6.cjs} +16 -19
  16. package/dist/brushstrokeRender-IMFY3FF6.cjs.map +1 -0
  17. package/dist/canvas/index.cjs +10 -10
  18. package/dist/canvas/index.cjs.map +1 -1
  19. package/dist/canvas/index.d.cts +10 -7
  20. package/dist/canvas/index.d.ts +10 -7
  21. package/dist/canvas/index.js +4 -4
  22. package/dist/{chunk-W4LNKTHT.cjs → chunk-2XS6LTUP.cjs} +63 -63
  23. package/dist/{chunk-W4LNKTHT.cjs.map → chunk-2XS6LTUP.cjs.map} +1 -1
  24. package/dist/{chunk-HHTCDFZC.js → chunk-3D77LOBM.js} +234 -136
  25. package/dist/chunk-3D77LOBM.js.map +1 -0
  26. package/dist/{chunk-BR7EKQUP.js → chunk-3G6J7UFV.js} +322 -2
  27. package/dist/chunk-3G6J7UFV.js.map +1 -0
  28. package/dist/{chunk-62XUO5LB.js → chunk-3X6IAJUQ.js} +2 -2
  29. package/dist/{chunk-EM3FMJWE.js → chunk-5FSRTP6E.js} +320 -3
  30. package/dist/chunk-5FSRTP6E.js.map +1 -0
  31. package/dist/{chunk-Z2H7KECK.cjs → chunk-5OOIUXNJ.cjs} +345 -247
  32. package/dist/chunk-5OOIUXNJ.cjs.map +1 -0
  33. package/dist/{chunk-7RJ6P7MI.js → chunk-6S6362D2.js} +2 -2
  34. package/dist/chunk-A3BVTI3G.js +150 -0
  35. package/dist/chunk-A3BVTI3G.js.map +1 -0
  36. package/dist/{chunk-24ATT2PE.cjs → chunk-AEAAN4AD.cjs} +120 -120
  37. package/dist/{chunk-24ATT2PE.cjs.map → chunk-AEAAN4AD.cjs.map} +1 -1
  38. package/dist/chunk-ECCXGELC.cjs +727 -0
  39. package/dist/chunk-ECCXGELC.cjs.map +1 -0
  40. package/dist/{chunk-SVYE5HIM.js → chunk-EQQMGO42.js} +2 -2
  41. package/dist/{chunk-FHPVDTI2.cjs → chunk-F2Y4E4GU.cjs} +22 -22
  42. package/dist/{chunk-FHPVDTI2.cjs.map → chunk-F2Y4E4GU.cjs.map} +1 -1
  43. package/dist/{chunk-OXSV64JX.js → chunk-G6IKY6PL.js} +4 -4
  44. package/dist/{chunk-UYQUPUR6.js → chunk-HUO3TI4C.js} +3 -3
  45. package/dist/chunk-I52DRGGJ.js +727 -0
  46. package/dist/chunk-I52DRGGJ.js.map +1 -0
  47. package/dist/{chunk-DDSO4HS7.cjs → chunk-KEENUAFN.cjs} +2 -2
  48. package/dist/{chunk-DDSO4HS7.cjs.map → chunk-KEENUAFN.cjs.map} +1 -1
  49. package/dist/{chunk-2HC4DRF4.js → chunk-LLFHCSU2.js} +2 -2
  50. package/dist/{chunk-J5BA3BQ6.cjs → chunk-O7LUD7MH.cjs} +323 -3
  51. package/dist/chunk-O7LUD7MH.cjs.map +1 -0
  52. package/dist/{chunk-ILYFOJUN.js → chunk-OIBIRXRG.js} +3 -3
  53. package/dist/{chunk-FWEO3HSL.js → chunk-PQQF5KOW.js} +8 -8
  54. package/dist/{chunk-T6TV6HY6.cjs → chunk-PRSRYHQD.cjs} +36 -36
  55. package/dist/{chunk-T6TV6HY6.cjs.map → chunk-PRSRYHQD.cjs.map} +1 -1
  56. package/dist/chunk-Q6OUXEK3.cjs +150 -0
  57. package/dist/chunk-Q6OUXEK3.cjs.map +1 -0
  58. package/dist/{chunk-6GFRKLLS.cjs → chunk-QBWEH3IM.cjs} +429 -112
  59. package/dist/chunk-QBWEH3IM.cjs.map +1 -0
  60. package/dist/{chunk-ESIWZMMK.js → chunk-SYT2TLQF.js} +35 -37
  61. package/dist/{chunk-ESIWZMMK.js.map → chunk-SYT2TLQF.js.map} +1 -1
  62. package/dist/{chunk-YT3JL7YM.cjs → chunk-TLCTTQFF.cjs} +53 -53
  63. package/dist/{chunk-YT3JL7YM.cjs.map → chunk-TLCTTQFF.cjs.map} +1 -1
  64. package/dist/{chunk-P3RQ5UJE.cjs → chunk-UTQKC66X.cjs} +4 -4
  65. package/dist/{chunk-P3RQ5UJE.cjs.map → chunk-UTQKC66X.cjs.map} +1 -1
  66. package/dist/{chunk-J3B45HTA.cjs → chunk-XB25WOC2.cjs} +6 -6
  67. package/dist/{chunk-J3B45HTA.cjs.map → chunk-XB25WOC2.cjs.map} +1 -1
  68. package/dist/{chunk-YAFS2QFZ.cjs → chunk-XN2NBLV5.cjs} +313 -315
  69. package/dist/chunk-XN2NBLV5.cjs.map +1 -0
  70. package/dist/effects/index.d.cts +7 -4
  71. package/dist/effects/index.d.ts +7 -4
  72. package/dist/{export-DMeG6E06.d.ts → export-41rL6Cne.d.ts} +1 -1
  73. package/dist/{export-AZSwX087.d.cts → export-CyJdfP_Z.d.cts} +5 -4
  74. package/dist/{export-KzubBKo7.d.cts → export-D9mXp05Q.d.cts} +1 -1
  75. package/dist/{export-BDkyDNM8.d.ts → export-DwnZ_hvQ.d.ts} +5 -4
  76. package/dist/extensions/index.cjs +3 -3
  77. package/dist/extensions/index.cjs.map +1 -1
  78. package/dist/extensions/index.js +2 -2
  79. package/dist/generation/index.cjs +150 -945
  80. package/dist/generation/index.cjs.map +1 -1
  81. package/dist/generation/index.d.cts +3 -423
  82. package/dist/generation/index.d.ts +3 -423
  83. package/dist/generation/index.js +59 -854
  84. package/dist/generation/index.js.map +1 -1
  85. package/dist/grammar/index.cjs +3 -3
  86. package/dist/grammar/index.cjs.map +1 -1
  87. package/dist/grammar/index.js +2 -2
  88. package/dist/{helpers-Coa4e2j_.d.ts → helpers-C-RgeyvH.d.ts} +25 -8
  89. package/dist/{helpers-DHl28yLO.d.cts → helpers-v6GMazzg.d.cts} +25 -8
  90. package/dist/image-editor/index.cjs +986 -986
  91. package/dist/image-editor/index.cjs.map +1 -1
  92. package/dist/image-editor/index.d.cts +15 -11
  93. package/dist/image-editor/index.d.ts +15 -11
  94. package/dist/image-editor/index.js +94 -94
  95. package/dist/index.cjs +28 -28
  96. package/dist/index.cjs.map +1 -1
  97. package/dist/index.js +36 -36
  98. package/dist/{opentype-BWR7Qv8W.d.cts → opentype-KR_jj6b_.d.cts} +1 -1
  99. package/dist/{opentype-Dfcx6wFx.d.ts → opentype-a1KAW-qs.d.ts} +1 -1
  100. package/dist/paint/index.cjs +5 -8
  101. package/dist/paint/index.cjs.map +1 -1
  102. package/dist/paint/index.d.cts +4 -2
  103. package/dist/paint/index.d.ts +4 -2
  104. package/dist/paint/index.js +15 -18
  105. package/dist/paint-editor/index.cjs +405 -403
  106. package/dist/paint-editor/index.cjs.map +1 -1
  107. package/dist/paint-editor/index.d.cts +15 -748
  108. package/dist/paint-editor/index.d.ts +15 -748
  109. package/dist/paint-editor/index.js +79 -77
  110. package/dist/paint-editor/index.js.map +1 -1
  111. package/dist/{pathfinder-D8KQ6blQ.d.cts → pathfinder-BHS4vQNm.d.cts} +1 -1
  112. package/dist/{pathfinder-Celbi3e6.d.ts → pathfinder-BVvTIBMo.d.ts} +1 -1
  113. package/dist/{pool-8JZGWHvR.d.ts → pool-CZQOrSXZ.d.ts} +1 -1
  114. package/dist/{pool-BfuxBKTd.d.cts → pool-FjZZmZ80.d.cts} +1 -1
  115. package/dist/provenance-DmlcgdzT.d.cts +426 -0
  116. package/dist/provenance-uh5r2TQ8.d.ts +426 -0
  117. package/dist/rand-8xbUb6ur.d.ts +1118 -0
  118. package/dist/rand-Cw9VLrVC.d.cts +1118 -0
  119. package/dist/raster/index.cjs +17 -19
  120. package/dist/raster/index.cjs.map +1 -1
  121. package/dist/raster/index.js +9 -11
  122. package/dist/raster/index.js.map +1 -1
  123. package/dist/{svg-CxxqG3_W.d.ts → svg-CSz3mzkw.d.ts} +2 -2
  124. package/dist/{svg-pwXWq6s2.d.cts → svg-DTb40ICU.d.cts} +2 -2
  125. package/dist/{tools-y1M6O3UT.d.ts → tools-B0wXP5cF.d.ts} +1 -1
  126. package/dist/{tools-3EBjR91b.d.cts → tools-Ca0kI1qo.d.cts} +1 -1
  127. package/dist/vector/index.cjs +2698 -1674
  128. package/dist/vector/index.cjs.map +1 -1
  129. package/dist/vector/index.d.cts +390 -72
  130. package/dist/vector/index.d.ts +390 -72
  131. package/dist/vector/index.js +1665 -641
  132. package/dist/vector/index.js.map +1 -1
  133. package/dist/video-editor/index.d.cts +7 -4
  134. package/dist/video-editor/index.d.ts +7 -4
  135. package/dist/{warp-Ceqdz7kj.d.cts → warp-DTOp0lON.d.cts} +1 -1
  136. package/dist/{warp-C1gwu2G_.d.ts → warp-pd7hrH4T.d.ts} +1 -1
  137. package/package.json +1 -1
  138. package/skills/pixerate-vector/SKILL.md +22 -0
  139. package/dist/brushstrokeRender-JNHVEUFG.cjs.map +0 -1
  140. package/dist/chunk-64PYNEHJ.js +0 -340
  141. package/dist/chunk-64PYNEHJ.js.map +0 -1
  142. package/dist/chunk-6GFRKLLS.cjs.map +0 -1
  143. package/dist/chunk-7QN76ESJ.js +0 -323
  144. package/dist/chunk-7QN76ESJ.js.map +0 -1
  145. package/dist/chunk-BR7EKQUP.js.map +0 -1
  146. package/dist/chunk-DCLJNVZS.cjs +0 -323
  147. package/dist/chunk-DCLJNVZS.cjs.map +0 -1
  148. package/dist/chunk-EM3FMJWE.js.map +0 -1
  149. package/dist/chunk-HHTCDFZC.js.map +0 -1
  150. package/dist/chunk-J5BA3BQ6.cjs.map +0 -1
  151. package/dist/chunk-YAFS2QFZ.cjs.map +0 -1
  152. package/dist/chunk-Z2H7KECK.cjs.map +0 -1
  153. package/dist/chunk-Z6OUCS2K.cjs +0 -340
  154. package/dist/chunk-Z6OUCS2K.cjs.map +0 -1
  155. package/dist/rand-BszBST4s.d.ts +0 -2140
  156. package/dist/rand-DOH_aMvm.d.cts +0 -2140
  157. /package/dist/{chunk-62XUO5LB.js.map → chunk-3X6IAJUQ.js.map} +0 -0
  158. /package/dist/{chunk-7RJ6P7MI.js.map → chunk-6S6362D2.js.map} +0 -0
  159. /package/dist/{chunk-SVYE5HIM.js.map → chunk-EQQMGO42.js.map} +0 -0
  160. /package/dist/{chunk-OXSV64JX.js.map → chunk-G6IKY6PL.js.map} +0 -0
  161. /package/dist/{chunk-UYQUPUR6.js.map → chunk-HUO3TI4C.js.map} +0 -0
  162. /package/dist/{chunk-2HC4DRF4.js.map → chunk-LLFHCSU2.js.map} +0 -0
  163. /package/dist/{chunk-ILYFOJUN.js.map → chunk-OIBIRXRG.js.map} +0 -0
  164. /package/dist/{chunk-FWEO3HSL.js.map → chunk-PQQF5KOW.js.map} +0 -0
@@ -1,323 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
-
3
-
4
- var _chunk643B2HKCcjs = require('./chunk-643B2HKC.cjs');
5
-
6
- // src/raster/png.ts
7
- var SIGNATURE = [137, 80, 78, 71, 13, 10, 26, 10];
8
- var crcTable = null;
9
- function crc32(bytes, start, end) {
10
- if (!crcTable) {
11
- crcTable = new Uint32Array(256);
12
- for (let n = 0; n < 256; n++) {
13
- let c2 = n;
14
- for (let k = 0; k < 8; k++) c2 = c2 & 1 ? 3988292384 ^ c2 >>> 1 : c2 >>> 1;
15
- crcTable[n] = c2 >>> 0;
16
- }
17
- }
18
- let c = 4294967295;
19
- for (let i = start; i < end; i++) c = crcTable[(c ^ bytes[i]) & 255] ^ c >>> 8;
20
- return (c ^ 4294967295) >>> 0;
21
- }
22
- function paeth(a, b, c) {
23
- const p = a + b - c;
24
- const pa = Math.abs(p - a);
25
- const pb = Math.abs(p - b);
26
- const pc = Math.abs(p - c);
27
- return pa <= pb && pa <= pc ? a : pb <= pc ? b : c;
28
- }
29
- function encodePng(width, height, data, channels = 4) {
30
- const stride = width * channels;
31
- const raw = new Uint8Array((stride + 1) * height);
32
- const bpp = channels;
33
- const cand = [new Uint8Array(stride), new Uint8Array(stride), new Uint8Array(stride), new Uint8Array(stride), new Uint8Array(stride)];
34
- for (let y = 0; y < height; y++) {
35
- const row = y * stride;
36
- const prevRow = (y - 1) * stride;
37
- let best = 0;
38
- let bestScore = Infinity;
39
- for (let f = 0; f < 5; f++) {
40
- const out2 = cand[f];
41
- let score = 0;
42
- for (let x = 0; x < stride; x++) {
43
- const v = data[row + x];
44
- const a = x >= bpp ? data[row + x - bpp] : 0;
45
- const b = y > 0 ? data[prevRow + x] : 0;
46
- const c = x >= bpp && y > 0 ? data[prevRow + x - bpp] : 0;
47
- let r;
48
- switch (f) {
49
- case 0:
50
- r = v;
51
- break;
52
- case 1:
53
- r = v - a;
54
- break;
55
- case 2:
56
- r = v - b;
57
- break;
58
- case 3:
59
- r = v - (a + b >> 1);
60
- break;
61
- default:
62
- r = v - paeth(a, b, c);
63
- }
64
- r &= 255;
65
- out2[x] = r;
66
- score += r < 128 ? r : 256 - r;
67
- if (score >= bestScore) break;
68
- }
69
- if (score < bestScore) {
70
- bestScore = score;
71
- best = f;
72
- }
73
- }
74
- const o = y * (stride + 1);
75
- raw[o] = best;
76
- raw.set(cand[best], o + 1);
77
- }
78
- const idat = _chunk643B2HKCcjs.deflate.call(void 0, raw);
79
- const chunks = [];
80
- const ihdr = new Uint8Array(13);
81
- writeU32(ihdr, 0, width);
82
- writeU32(ihdr, 4, height);
83
- ihdr[8] = 8;
84
- ihdr[9] = channels === 1 ? 0 : 6;
85
- chunks.push(["IHDR", ihdr], ["IDAT", idat], ["IEND", new Uint8Array(0)]);
86
- let size = 8;
87
- for (const [, d] of chunks) size += 12 + d.length;
88
- const out = new Uint8Array(size);
89
- out.set(SIGNATURE, 0);
90
- let p = 8;
91
- for (const [type, d] of chunks) {
92
- writeU32(out, p, d.length);
93
- for (let i = 0; i < 4; i++) out[p + 4 + i] = type.charCodeAt(i);
94
- out.set(d, p + 8);
95
- writeU32(out, p + 8 + d.length, crc32(out, p + 4, p + 8 + d.length));
96
- p += 12 + d.length;
97
- }
98
- return out;
99
- }
100
- function writeU32(b, o, v) {
101
- b[o] = v >>> 24;
102
- b[o + 1] = v >>> 16 & 255;
103
- b[o + 2] = v >>> 8 & 255;
104
- b[o + 3] = v & 255;
105
- }
106
- function readU32(b, o) {
107
- return (b[o] << 24 | b[o + 1] << 16 | b[o + 2] << 8 | b[o + 3]) >>> 0;
108
- }
109
- function isPng(bytes) {
110
- return bytes.length > 8 && SIGNATURE.every((v, i) => bytes[i] === v);
111
- }
112
- function decodePng(bytes, options = {}) {
113
- if (!isPng(bytes)) throw new Error("Not a PNG image.");
114
- let p = 8;
115
- let width = 0;
116
- let height = 0;
117
- let depth = 0;
118
- let type = 0;
119
- let interlace = 0;
120
- let palette = null;
121
- let trns = null;
122
- const idat = [];
123
- while (p + 8 <= bytes.length) {
124
- const len = readU32(bytes, p);
125
- const t = String.fromCharCode(bytes[p + 4], bytes[p + 5], bytes[p + 6], bytes[p + 7]);
126
- const body = bytes.subarray(p + 8, p + 8 + len);
127
- if (p + 12 + len > bytes.length) throw new Error("Truncated PNG.");
128
- if (t === "IHDR") {
129
- width = readU32(body, 0);
130
- height = readU32(body, 4);
131
- depth = body[8];
132
- type = body[9];
133
- interlace = body[12];
134
- } else if (t === "PLTE") palette = body;
135
- else if (t === "tRNS") trns = body;
136
- else if (t === "IDAT") idat.push(body);
137
- else if (t === "IEND") break;
138
- p += 12 + len;
139
- }
140
- if (!width || !height) throw new Error("PNG has no image header.");
141
- if (interlace) throw new Error("Interlaced PNGs are not supported here; decode them with a canvas.");
142
- const maxPixels = _nullishCoalesce(options.maxPixels, () => ( 1 << 28));
143
- if (width * height > maxPixels) throw new Error(`PNG is too large (${width}\xD7${height}).`);
144
- const samples = type === 0 ? 1 : type === 2 ? 3 : type === 3 ? 1 : type === 4 ? 2 : type === 6 ? 4 : 0;
145
- if (!samples || ![1, 2, 4, 8, 16].includes(depth)) throw new Error(`Unsupported PNG format (type ${type}, depth ${depth}).`);
146
- let total = 0;
147
- for (const c of idat) total += c.length;
148
- const z = new Uint8Array(total);
149
- let o = 0;
150
- for (const c of idat) {
151
- z.set(c, o);
152
- o += c.length;
153
- }
154
- const bitsPerPixel = samples * depth;
155
- const stride = Math.ceil(width * bitsPerPixel / 8);
156
- const raw = _chunk643B2HKCcjs.inflate.call(void 0, z, { maxOutput: (stride + 1) * height, sizeHint: (stride + 1) * height });
157
- if (raw.length < (stride + 1) * height) throw new Error("PNG image data is truncated.");
158
- const bpp = Math.max(1, bitsPerPixel >> 3);
159
- const lines = new Uint8Array(stride * height);
160
- for (let y = 0; y < height; y++) {
161
- const f = raw[y * (stride + 1)];
162
- const src = y * (stride + 1) + 1;
163
- const dst = y * stride;
164
- const up = dst - stride;
165
- for (let x = 0; x < stride; x++) {
166
- const v = raw[src + x];
167
- const a = x >= bpp ? lines[dst + x - bpp] : 0;
168
- const b = y > 0 ? lines[up + x] : 0;
169
- const c = x >= bpp && y > 0 ? lines[up + x - bpp] : 0;
170
- let r;
171
- switch (f) {
172
- case 0:
173
- r = v;
174
- break;
175
- case 1:
176
- r = v + a;
177
- break;
178
- case 2:
179
- r = v + b;
180
- break;
181
- case 3:
182
- r = v + (a + b >> 1);
183
- break;
184
- case 4:
185
- r = v + paeth(a, b, c);
186
- break;
187
- default:
188
- throw new Error(`Invalid PNG filter ${f}.`);
189
- }
190
- lines[dst + x] = r & 255;
191
- }
192
- }
193
- const sample = (y, i) => {
194
- const row = y * stride;
195
- if (depth === 8) return lines[row + i];
196
- if (depth === 16) return lines[row + i * 2];
197
- const perByte = 8 / depth;
198
- const byte = lines[row + Math.floor(i / perByte)];
199
- const shift = 8 - depth * (i % perByte + 1);
200
- const v = byte >> shift & (1 << depth) - 1;
201
- return type === 3 ? v : Math.round(v * 255 / ((1 << depth) - 1));
202
- };
203
- const gray = options.keepGray && type === 0 && !trns;
204
- const channels = gray ? 1 : 4;
205
- const out = new Uint8ClampedArray(width * height * channels);
206
- const trnsGray = trns && type === 0 ? depth === 16 ? trns[0] : sample16(trns, 0, depth) : -1;
207
- const trnsRgb = trns && type === 2 ? [0, 1, 2].map((k) => depth === 16 ? trns[k * 2] : sample16(trns, k, depth)) : null;
208
- for (let y = 0; y < height; y++) {
209
- for (let x = 0; x < width; x++) {
210
- const d = (y * width + x) * channels;
211
- if (type === 0) {
212
- const v = sample(y, x);
213
- if (gray) out[d] = v;
214
- else {
215
- out[d] = out[d + 1] = out[d + 2] = v;
216
- out[d + 3] = v === trnsGray && trns ? 0 : 255;
217
- }
218
- } else if (type === 2) {
219
- const r = sample(y, x * 3);
220
- const g = sample(y, x * 3 + 1);
221
- const b = sample(y, x * 3 + 2);
222
- out[d] = r;
223
- out[d + 1] = g;
224
- out[d + 2] = b;
225
- out[d + 3] = trnsRgb && r === trnsRgb[0] && g === trnsRgb[1] && b === trnsRgb[2] ? 0 : 255;
226
- } else if (type === 3) {
227
- const i = sample(y, x);
228
- if (!palette || i * 3 + 2 >= palette.length) throw new Error("PNG palette index out of range.");
229
- out[d] = palette[i * 3];
230
- out[d + 1] = palette[i * 3 + 1];
231
- out[d + 2] = palette[i * 3 + 2];
232
- out[d + 3] = trns && i < trns.length ? trns[i] : 255;
233
- } else if (type === 4) {
234
- const v = sample(y, x * 2);
235
- out[d] = out[d + 1] = out[d + 2] = v;
236
- out[d + 3] = sample(y, x * 2 + 1);
237
- } else {
238
- out[d] = sample(y, x * 4);
239
- out[d + 1] = sample(y, x * 4 + 1);
240
- out[d + 2] = sample(y, x * 4 + 2);
241
- out[d + 3] = sample(y, x * 4 + 3);
242
- }
243
- }
244
- }
245
- return { width, height, channels, data: out };
246
- }
247
- function sample16(trns, k, depth) {
248
- const v = trns[k * 2] << 8 | trns[k * 2 + 1];
249
- if (depth === 8) return v & 255;
250
- return Math.round((v & (1 << depth) - 1) * 255 / ((1 << depth) - 1));
251
- }
252
- var B64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
253
- var B64_INV = null;
254
- function bytesToBase64(bytes) {
255
- const parts = [];
256
- const CHUNK = 3 * 4096;
257
- for (let start = 0; start < bytes.length; start += CHUNK) {
258
- const end = Math.min(bytes.length, start + CHUNK);
259
- let s = "";
260
- let i = start;
261
- for (; i + 2 < end; i += 3) {
262
- const n = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2];
263
- s += B64[n >> 18] + B64[n >> 12 & 63] + B64[n >> 6 & 63] + B64[n & 63];
264
- }
265
- if (i < end) {
266
- const n = bytes[i] << 16 | (i + 1 < end ? bytes[i + 1] << 8 : 0);
267
- s += B64[n >> 18] + B64[n >> 12 & 63] + (i + 1 < end ? B64[n >> 6 & 63] : "=") + "=";
268
- }
269
- parts.push(s);
270
- }
271
- return parts.join("");
272
- }
273
- function base64ToBytes(text) {
274
- if (!B64_INV) {
275
- B64_INV = new Int16Array(128).fill(-1);
276
- for (let i = 0; i < 64; i++) B64_INV[B64.charCodeAt(i)] = i;
277
- B64_INV["-".charCodeAt(0)] = 62;
278
- B64_INV["_".charCodeAt(0)] = 63;
279
- }
280
- const inv = B64_INV;
281
- const clean = text.replace(/[\s=]/g, "");
282
- const out = new Uint8Array(Math.floor(clean.length * 3 / 4));
283
- let bits = 0;
284
- let acc = 0;
285
- let o = 0;
286
- for (let i = 0; i < clean.length; i++) {
287
- const c = clean.charCodeAt(i);
288
- const v = c < 128 ? inv[c] : -1;
289
- if (v < 0) throw new Error("Invalid base64 data.");
290
- acc = acc << 6 | v;
291
- bits += 6;
292
- if (bits >= 8) {
293
- bits -= 8;
294
- out[o++] = acc >> bits & 255;
295
- }
296
- }
297
- return out.subarray(0, o);
298
- }
299
- function parseDataUrl(url) {
300
- const m = /^data:([^;,]*)((?:;[^;,]*)*?),/i.exec(url);
301
- if (!m) return null;
302
- const body = url.slice(m[0].length);
303
- const isBase64 = /;base64/i.test(m[2]);
304
- if (isBase64) return { mime: m[1] || "text/plain", bytes: base64ToBytes(body) };
305
- const text = decodeURIComponent(body);
306
- const bytes = new Uint8Array(text.length);
307
- for (let i = 0; i < text.length; i++) bytes[i] = text.charCodeAt(i) & 255;
308
- return { mime: m[1] || "text/plain", bytes };
309
- }
310
- function pngDataUrl(width, height, data, channels = 4) {
311
- return `data:image/png;base64,${bytesToBase64(encodePng(width, height, data, channels))}`;
312
- }
313
-
314
-
315
-
316
-
317
-
318
-
319
-
320
-
321
-
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
@@ -1 +0,0 @@
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"]}