@pixerate/editor 0.124.1 → 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.
Files changed (97) hide show
  1. package/dist/agent/index.cjs +3 -3
  2. package/dist/agent/index.cjs.map +1 -1
  3. package/dist/agent/index.js +3 -3
  4. package/dist/animation-editor/index.cjs +424 -85
  5. package/dist/animation-editor/index.cjs.map +1 -1
  6. package/dist/animation-editor/index.d.cts +174 -7
  7. package/dist/animation-editor/index.d.ts +174 -7
  8. package/dist/animation-editor/index.js +348 -9
  9. package/dist/animation-editor/index.js.map +1 -1
  10. package/dist/chunk-FJ3324TZ.js +59 -0
  11. package/dist/chunk-FJ3324TZ.js.map +1 -0
  12. package/dist/{chunk-5EO2IXQE.js → chunk-FPRIUR4T.js} +1 -1
  13. package/dist/chunk-FPRIUR4T.js.map +1 -0
  14. package/dist/{chunk-ORHMVUR6.js → chunk-G6WXWS4Y.js} +5 -3
  15. package/dist/{chunk-ORHMVUR6.js.map → chunk-G6WXWS4Y.js.map} +1 -1
  16. package/dist/{chunk-CN4PJHUG.cjs → chunk-IOXKXQNW.cjs} +3 -59
  17. package/dist/chunk-IOXKXQNW.cjs.map +1 -0
  18. package/dist/{chunk-NGYD3AMN.js → chunk-MPQAO33O.js} +2 -2
  19. package/dist/{chunk-PEHYWUVV.cjs → chunk-O5RVCDEC.cjs} +82 -82
  20. package/dist/{chunk-PEHYWUVV.cjs.map → chunk-O5RVCDEC.cjs.map} +1 -1
  21. package/dist/{chunk-FHYDQOPC.cjs → chunk-QDJKUBWE.cjs} +5 -5
  22. package/dist/{chunk-FHYDQOPC.cjs.map → chunk-QDJKUBWE.cjs.map} +1 -1
  23. package/dist/{chunk-5XXMLBH4.cjs → chunk-QQKTOA4U.cjs} +1 -1
  24. package/dist/chunk-QQKTOA4U.cjs.map +1 -0
  25. package/dist/{chunk-QEG3GRN2.js → chunk-TGKT5QAB.js} +2 -58
  26. package/dist/chunk-TGKT5QAB.js.map +1 -0
  27. package/dist/{chunk-4QQZV5Y5.cjs → chunk-UXFI3CDZ.cjs} +11 -9
  28. package/dist/chunk-UXFI3CDZ.cjs.map +1 -0
  29. package/dist/{chunk-WE25VLCO.cjs → chunk-V5YGPRCZ.cjs} +36 -36
  30. package/dist/{chunk-WE25VLCO.cjs.map → chunk-V5YGPRCZ.cjs.map} +1 -1
  31. package/dist/chunk-W6QTLHZ3.cjs +59 -0
  32. package/dist/chunk-W6QTLHZ3.cjs.map +1 -0
  33. package/dist/{chunk-WATAQ2Z2.js → chunk-WUDPFWAN.js} +2 -2
  34. package/dist/{chunk-JRXJTPES.js → chunk-XZWOLXWA.js} +4 -4
  35. package/dist/{chunk-JRXJTPES.js.map → chunk-XZWOLXWA.js.map} +1 -1
  36. package/dist/effects/index.cjs +61 -33
  37. package/dist/effects/index.cjs.map +1 -1
  38. package/dist/effects/index.d.cts +4 -5
  39. package/dist/effects/index.d.ts +4 -5
  40. package/dist/effects/index.js +32 -4
  41. package/dist/effects/index.js.map +1 -1
  42. package/dist/{export-WmYoWmLM.d.cts → export-Bp7ji2r4.d.cts} +1 -2
  43. package/dist/{export-BdfY_lH0.d.ts → export-C1s4eolZ.d.ts} +1 -1
  44. package/dist/{export-BGtXgMJ3.d.ts → export-DAyPY94f.d.ts} +1 -2
  45. package/dist/{export-CbpjwxaI.d.cts → export-DVl4fWy5.d.cts} +1 -1
  46. package/dist/generation/index.cjs +3 -3
  47. package/dist/generation/index.cjs.map +1 -1
  48. package/dist/generation/index.js +3 -3
  49. package/dist/helpers-BBLlekuM.d.ts +2009 -0
  50. package/dist/helpers-i95Ob6Vi.d.cts +2009 -0
  51. package/dist/image-editor/index.cjs +629 -627
  52. package/dist/image-editor/index.cjs.map +1 -1
  53. package/dist/image-editor/index.d.cts +5 -7
  54. package/dist/image-editor/index.d.ts +5 -7
  55. package/dist/image-editor/index.js +15 -13
  56. package/dist/image-editor/index.js.map +1 -1
  57. package/dist/paint-editor/index.cjs +12 -11
  58. package/dist/paint-editor/index.cjs.map +1 -1
  59. package/dist/paint-editor/index.d.cts +3 -5
  60. package/dist/paint-editor/index.d.ts +3 -5
  61. package/dist/paint-editor/index.js +6 -5
  62. package/dist/paint-editor/index.js.map +1 -1
  63. package/dist/{svg-BDrjRnL1.d.cts → svg-BkRL-fZJ.d.cts} +1 -1
  64. package/dist/{svg-C-vZ3q50.d.ts → svg-DJKriJ4A.d.ts} +1 -1
  65. package/dist/tools/index.cjs +2 -2
  66. package/dist/tools/index.cjs.map +1 -1
  67. package/dist/tools/index.js +3 -3
  68. package/dist/{tools-C7JtLYzo.d.ts → tools-CM8Oe8F3.d.ts} +1 -1
  69. package/dist/{tools-DHKGHiSK.d.cts → tools-DZCv2kX1.d.cts} +1 -1
  70. package/dist/vector/index.cjs +1032 -883
  71. package/dist/vector/index.cjs.map +1 -1
  72. package/dist/vector/index.d.cts +61 -6
  73. package/dist/vector/index.d.ts +61 -6
  74. package/dist/vector/index.js +155 -6
  75. package/dist/vector/index.js.map +1 -1
  76. package/dist/video-editor/index.cjs +273 -272
  77. package/dist/video-editor/index.cjs.map +1 -1
  78. package/dist/video-editor/index.d.cts +4 -6
  79. package/dist/video-editor/index.d.ts +4 -6
  80. package/dist/video-editor/index.js +7 -6
  81. package/dist/video-editor/index.js.map +1 -1
  82. package/package.json +1 -1
  83. package/skills/pixerate-animation-editor/SKILL.md +24 -1
  84. package/skills/pixerate-vector/SKILL.md +15 -0
  85. package/dist/chunk-4QQZV5Y5.cjs.map +0 -1
  86. package/dist/chunk-5EO2IXQE.js.map +0 -1
  87. package/dist/chunk-5XXMLBH4.cjs.map +0 -1
  88. package/dist/chunk-CN4PJHUG.cjs.map +0 -1
  89. package/dist/chunk-QEG3GRN2.js.map +0 -1
  90. package/dist/flair-CxB3fOcU.d.ts +0 -739
  91. package/dist/flair-D7BxyBwL.d.cts +0 -739
  92. package/dist/helpers-777mC6dc.d.cts +0 -253
  93. package/dist/helpers-DX2_7L5t.d.ts +0 -253
  94. package/dist/types-BcX7sCsn.d.ts +0 -993
  95. package/dist/types-CznabG7m.d.cts +0 -993
  96. /package/dist/{chunk-NGYD3AMN.js.map → chunk-MPQAO33O.js.map} +0 -0
  97. /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-5EO2IXQE.js.map
10040
+ //# sourceMappingURL=chunk-FPRIUR4T.js.map