@pixerate/editor 0.124.0 → 0.125.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.
- package/dist/agent/index.cjs +3 -3
- package/dist/agent/index.cjs.map +1 -1
- package/dist/agent/index.js +3 -3
- package/dist/animation-editor/index.cjs +424 -85
- package/dist/animation-editor/index.cjs.map +1 -1
- package/dist/animation-editor/index.d.cts +174 -7
- package/dist/animation-editor/index.d.ts +174 -7
- package/dist/animation-editor/index.js +348 -9
- package/dist/animation-editor/index.js.map +1 -1
- package/dist/chunk-FJ3324TZ.js +59 -0
- package/dist/chunk-FJ3324TZ.js.map +1 -0
- package/dist/{chunk-5EO2IXQE.js → chunk-FPRIUR4T.js} +1 -1
- package/dist/chunk-FPRIUR4T.js.map +1 -0
- package/dist/{chunk-YVVSTD3B.js → chunk-G6WXWS4Y.js} +9 -18
- package/dist/chunk-G6WXWS4Y.js.map +1 -0
- package/dist/{chunk-NGYD3AMN.js → chunk-MPQAO33O.js} +2 -2
- package/dist/{chunk-PEHYWUVV.cjs → chunk-O5RVCDEC.cjs} +82 -82
- package/dist/{chunk-PEHYWUVV.cjs.map → chunk-O5RVCDEC.cjs.map} +1 -1
- package/dist/{chunk-TK53AB4Q.cjs → chunk-QDJKUBWE.cjs} +3 -3
- package/dist/{chunk-TK53AB4Q.cjs.map → chunk-QDJKUBWE.cjs.map} +1 -1
- package/dist/{chunk-5XXMLBH4.cjs → chunk-QQKTOA4U.cjs} +1 -1
- package/dist/chunk-QQKTOA4U.cjs.map +1 -0
- package/dist/{chunk-IWSMDQE5.cjs → chunk-UXFI3CDZ.cjs} +13 -22
- package/dist/chunk-UXFI3CDZ.cjs.map +1 -0
- package/dist/{chunk-WE25VLCO.cjs → chunk-V5YGPRCZ.cjs} +36 -36
- package/dist/{chunk-WE25VLCO.cjs.map → chunk-V5YGPRCZ.cjs.map} +1 -1
- package/dist/chunk-W6QTLHZ3.cjs +59 -0
- package/dist/chunk-W6QTLHZ3.cjs.map +1 -0
- package/dist/{chunk-WATAQ2Z2.js → chunk-WUDPFWAN.js} +2 -2
- package/dist/{chunk-VFAKN46Z.js → chunk-XZWOLXWA.js} +3 -3
- package/dist/{chunk-VFAKN46Z.js.map → chunk-XZWOLXWA.js.map} +1 -1
- package/dist/effects/index.cjs +51 -6
- package/dist/effects/index.cjs.map +1 -1
- package/dist/effects/index.d.cts +39 -8
- package/dist/effects/index.d.ts +39 -8
- package/dist/effects/index.js +48 -3
- package/dist/effects/index.js.map +1 -1
- package/dist/{export-TqXMOlDt.d.cts → export-Bp7ji2r4.d.cts} +4 -3
- package/dist/{export-BzSRXyH6.d.cts → export-C1s4eolZ.d.ts} +5 -3
- package/dist/{export-8RnlngAv.d.ts → export-DAyPY94f.d.ts} +4 -3
- package/dist/{export-DM3h7QEI.d.ts → export-DVl4fWy5.d.cts} +5 -3
- package/dist/generation/index.cjs +3 -3
- package/dist/generation/index.cjs.map +1 -1
- package/dist/generation/index.js +3 -3
- package/dist/helpers-BBLlekuM.d.ts +2009 -0
- package/dist/helpers-i95Ob6Vi.d.cts +2009 -0
- package/dist/image-editor/index.cjs +712 -721
- package/dist/image-editor/index.cjs.map +1 -1
- package/dist/image-editor/index.d.cts +5 -7
- package/dist/image-editor/index.d.ts +5 -7
- package/dist/image-editor/index.js +19 -28
- package/dist/image-editor/index.js.map +1 -1
- package/dist/paint-editor/index.cjs +12 -11
- package/dist/paint-editor/index.cjs.map +1 -1
- package/dist/paint-editor/index.d.cts +3 -5
- package/dist/paint-editor/index.d.ts +3 -5
- package/dist/paint-editor/index.js +6 -5
- package/dist/paint-editor/index.js.map +1 -1
- package/dist/{svg-BDrjRnL1.d.cts → svg-BkRL-fZJ.d.cts} +1 -1
- package/dist/{svg-C-vZ3q50.d.ts → svg-DJKriJ4A.d.ts} +1 -1
- package/dist/tools/index.cjs +2 -2
- package/dist/tools/index.cjs.map +1 -1
- package/dist/tools/index.js +3 -3
- package/dist/{tools-C7JtLYzo.d.ts → tools-CM8Oe8F3.d.ts} +1 -1
- package/dist/{tools-DHKGHiSK.d.cts → tools-DZCv2kX1.d.cts} +1 -1
- package/dist/vector/index.cjs +1032 -883
- package/dist/vector/index.cjs.map +1 -1
- package/dist/vector/index.d.cts +61 -6
- package/dist/vector/index.d.ts +61 -6
- package/dist/vector/index.js +155 -6
- package/dist/vector/index.js.map +1 -1
- package/dist/video-editor/index.cjs +271 -270
- package/dist/video-editor/index.cjs.map +1 -1
- package/dist/video-editor/index.d.cts +4 -6
- package/dist/video-editor/index.d.ts +4 -6
- package/dist/video-editor/index.js +6 -5
- package/dist/video-editor/index.js.map +1 -1
- package/package.json +1 -1
- package/skills/pixerate-animation-editor/SKILL.md +24 -1
- package/skills/pixerate-vector/SKILL.md +15 -0
- package/dist/chunk-5EO2IXQE.js.map +0 -1
- package/dist/chunk-5XXMLBH4.cjs.map +0 -1
- package/dist/chunk-IWSMDQE5.cjs.map +0 -1
- package/dist/chunk-YVVSTD3B.js.map +0 -1
- package/dist/flair-CxB3fOcU.d.ts +0 -739
- package/dist/flair-D7BxyBwL.d.cts +0 -739
- package/dist/helpers-777mC6dc.d.cts +0 -253
- package/dist/helpers-DX2_7L5t.d.ts +0 -253
- package/dist/types-BcX7sCsn.d.ts +0 -993
- package/dist/types-CznabG7m.d.cts +0 -993
- /package/dist/{chunk-NGYD3AMN.js.map → chunk-MPQAO33O.js.map} +0 -0
- /package/dist/{chunk-WATAQ2Z2.js.map → chunk-WUDPFWAN.js.map} +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// src/effects/pool.ts
|
|
2
|
+
var EffectRendererPool = class {
|
|
3
|
+
entries = /* @__PURE__ */ new Map();
|
|
4
|
+
maxRenderers;
|
|
5
|
+
constructor(options = {}) {
|
|
6
|
+
this.maxRenderers = Math.max(1, options.maxRenderers ?? 4);
|
|
7
|
+
}
|
|
8
|
+
/** Live renderers now. */
|
|
9
|
+
get size() {
|
|
10
|
+
return this.entries.size;
|
|
11
|
+
}
|
|
12
|
+
/** Renders `request` with the provider's renderer for this effect, size and depth (made on first use). */
|
|
13
|
+
render(provider, id, size, request) {
|
|
14
|
+
const depth = size.depth ?? 8;
|
|
15
|
+
const key = `${provider.id}:${id}@${size.width}x${size.height}x${depth}`;
|
|
16
|
+
let entry = this.entries.get(key);
|
|
17
|
+
if (entry) {
|
|
18
|
+
this.entries.delete(key);
|
|
19
|
+
this.entries.set(key, entry);
|
|
20
|
+
} else {
|
|
21
|
+
const renderer = Promise.resolve().then(() => provider.createRenderer(id, { width: size.width, height: size.height, depth }));
|
|
22
|
+
renderer.catch(() => {
|
|
23
|
+
if (this.entries.get(key)?.renderer === renderer) this.entries.delete(key);
|
|
24
|
+
});
|
|
25
|
+
entry = { renderer, queue: Promise.resolve() };
|
|
26
|
+
this.entries.set(key, entry);
|
|
27
|
+
this.evict();
|
|
28
|
+
}
|
|
29
|
+
const e = entry;
|
|
30
|
+
const next = e.queue.then(() => e.renderer).then((r) => r.render(request));
|
|
31
|
+
e.queue = next.catch(() => void 0);
|
|
32
|
+
return next;
|
|
33
|
+
}
|
|
34
|
+
/** Disposes the least recently used renderers over the limit, after their queued renders. */
|
|
35
|
+
evict() {
|
|
36
|
+
while (this.entries.size > this.maxRenderers) {
|
|
37
|
+
const [key, entry] = this.entries.entries().next().value;
|
|
38
|
+
this.entries.delete(key);
|
|
39
|
+
dispose(entry);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** Disposes every renderer (after its queued renders). */
|
|
43
|
+
clear() {
|
|
44
|
+
for (const entry of this.entries.values()) dispose(entry);
|
|
45
|
+
this.entries.clear();
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
function dispose(entry) {
|
|
49
|
+
entry.queue.then(() => entry.renderer).then(
|
|
50
|
+
(r) => r.dispose(),
|
|
51
|
+
() => {
|
|
52
|
+
}
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export {
|
|
57
|
+
EffectRendererPool
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=chunk-FJ3324TZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/effects/pool.ts"],"sourcesContent":["/**\n * `EffectRendererPool`: keeps a few live renderers, reused per effect, size and depth.\n *\n * GPU providers hold one graphics context per renderer, and browsers allow only about sixteen\n * WebGL contexts at a time (the oldest is lost after that). So the pool keeps at most\n * `maxRenderers` renderers. It disposes the least recently used one once its renders finish, and it\n * runs one render at a time per renderer, as the contract requires.\n */\n\nimport type { EffectPixels, EffectProvider, EffectRenderer, EffectRenderRequest } from './types.js';\n\ninterface PoolEntry {\n\trenderer: Promise<EffectRenderer>;\n\t/** The last render queued on it. */\n\tqueue: Promise<unknown>;\n}\n\nexport interface EffectRendererPoolOptions {\n\t/** Most live renderers (default 4). */\n\tmaxRenderers?: number;\n}\n\nexport class EffectRendererPool {\n\tprivate readonly entries = new Map<string, PoolEntry>();\n\tprivate readonly maxRenderers: number;\n\n\tconstructor(options: EffectRendererPoolOptions = {}) {\n\t\tthis.maxRenderers = Math.max(1, options.maxRenderers ?? 4);\n\t}\n\n\t/** Live renderers now. */\n\tget size(): number {\n\t\treturn this.entries.size;\n\t}\n\n\t/** Renders `request` with the provider's renderer for this effect, size and depth (made on first use). */\n\trender(provider: EffectProvider, id: string, size: { width: number; height: number; depth?: 8 | 16 | 32 }, request: EffectRenderRequest): Promise<EffectPixels> {\n\t\tconst depth = size.depth ?? 8;\n\t\tconst key = `${provider.id}:${id}@${size.width}x${size.height}x${depth}`;\n\t\tlet entry = this.entries.get(key);\n\t\tif (entry) {\n\t\t\tthis.entries.delete(key);\n\t\t\tthis.entries.set(key, entry);\n\t\t} else {\n\t\t\tconst renderer = Promise.resolve().then(() => provider.createRenderer(id, { width: size.width, height: size.height, depth }));\n\t\t\trenderer.catch(() => {\n\t\t\t\tif (this.entries.get(key)?.renderer === renderer) this.entries.delete(key);\n\t\t\t});\n\t\t\tentry = { renderer, queue: Promise.resolve() };\n\t\t\tthis.entries.set(key, entry);\n\t\t\tthis.evict();\n\t\t}\n\t\tconst e = entry;\n\t\tconst next = e.queue.then(() => e.renderer).then((r) => r.render(request));\n\t\te.queue = next.catch(() => undefined);\n\t\treturn next;\n\t}\n\n\t/** Disposes the least recently used renderers over the limit, after their queued renders. */\n\tprivate evict(): void {\n\t\twhile (this.entries.size > this.maxRenderers) {\n\t\t\tconst [key, entry] = this.entries.entries().next().value!;\n\t\t\tthis.entries.delete(key);\n\t\t\tdispose(entry);\n\t\t}\n\t}\n\n\t/** Disposes every renderer (after its queued renders). */\n\tclear(): void {\n\t\tfor (const entry of this.entries.values()) dispose(entry);\n\t\tthis.entries.clear();\n\t}\n}\n\nfunction dispose(entry: PoolEntry) {\n\tentry.queue\n\t\t.then(() => entry.renderer)\n\t\t.then(\n\t\t\t(r) => r.dispose(),\n\t\t\t() => {}\n\t\t);\n}\n"],"mappings":";AAsBO,IAAM,qBAAN,MAAyB;AAAA,EACd,UAAU,oBAAI,IAAuB;AAAA,EACrC;AAAA,EAEjB,YAAY,UAAqC,CAAC,GAAG;AACpD,SAAK,eAAe,KAAK,IAAI,GAAG,QAAQ,gBAAgB,CAAC;AAAA,EAC1D;AAAA;AAAA,EAGA,IAAI,OAAe;AAClB,WAAO,KAAK,QAAQ;AAAA,EACrB;AAAA;AAAA,EAGA,OAAO,UAA0B,IAAY,MAA8D,SAAqD;AAC/J,UAAM,QAAQ,KAAK,SAAS;AAC5B,UAAM,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,IAAI,KAAK,KAAK,IAAI,KAAK,MAAM,IAAI,KAAK;AACtE,QAAI,QAAQ,KAAK,QAAQ,IAAI,GAAG;AAChC,QAAI,OAAO;AACV,WAAK,QAAQ,OAAO,GAAG;AACvB,WAAK,QAAQ,IAAI,KAAK,KAAK;AAAA,IAC5B,OAAO;AACN,YAAM,WAAW,QAAQ,QAAQ,EAAE,KAAK,MAAM,SAAS,eAAe,IAAI,EAAE,OAAO,KAAK,OAAO,QAAQ,KAAK,QAAQ,MAAM,CAAC,CAAC;AAC5H,eAAS,MAAM,MAAM;AACpB,YAAI,KAAK,QAAQ,IAAI,GAAG,GAAG,aAAa,SAAU,MAAK,QAAQ,OAAO,GAAG;AAAA,MAC1E,CAAC;AACD,cAAQ,EAAE,UAAU,OAAO,QAAQ,QAAQ,EAAE;AAC7C,WAAK,QAAQ,IAAI,KAAK,KAAK;AAC3B,WAAK,MAAM;AAAA,IACZ;AACA,UAAM,IAAI;AACV,UAAM,OAAO,EAAE,MAAM,KAAK,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO,CAAC;AACzE,MAAE,QAAQ,KAAK,MAAM,MAAM,MAAS;AACpC,WAAO;AAAA,EACR;AAAA;AAAA,EAGQ,QAAc;AACrB,WAAO,KAAK,QAAQ,OAAO,KAAK,cAAc;AAC7C,YAAM,CAAC,KAAK,KAAK,IAAI,KAAK,QAAQ,QAAQ,EAAE,KAAK,EAAE;AACnD,WAAK,QAAQ,OAAO,GAAG;AACvB,cAAQ,KAAK;AAAA,IACd;AAAA,EACD;AAAA;AAAA,EAGA,QAAc;AACb,eAAW,SAAS,KAAK,QAAQ,OAAO,EAAG,SAAQ,KAAK;AACxD,SAAK,QAAQ,MAAM;AAAA,EACpB;AACD;AAEA,SAAS,QAAQ,OAAkB;AAClC,QAAM,MACJ,KAAK,MAAM,MAAM,QAAQ,EACzB;AAAA,IACA,CAAC,MAAM,EAAE,QAAQ;AAAA,IACjB,MAAM;AAAA,IAAC;AAAA,EACR;AACF;","names":[]}
|
|
@@ -10037,4 +10037,4 @@ export {
|
|
|
10037
10037
|
lineSubpath,
|
|
10038
10038
|
roundSubpaths
|
|
10039
10039
|
};
|
|
10040
|
-
//# sourceMappingURL=chunk-
|
|
10040
|
+
//# sourceMappingURL=chunk-FPRIUR4T.js.map
|