@pixerate/editor 0.249.0 → 0.251.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 (158) hide show
  1. package/dist/agent/index.cjs +40 -41
  2. package/dist/agent/index.js +9 -10
  3. package/dist/animation/index.cjs +6 -7
  4. package/dist/animation/index.js +5 -6
  5. package/dist/animation-editor/index.cjs +124 -123
  6. package/dist/animation-editor/index.js +15 -14
  7. package/dist/brushes/index.cjs +1406 -0
  8. package/dist/brushes/index.d.cts +12 -0
  9. package/dist/brushes/index.d.ts +12 -0
  10. package/dist/brushes/index.js +1406 -0
  11. package/dist/brushes/migrate.d.cts +17 -0
  12. package/dist/brushes/migrate.d.ts +17 -0
  13. package/dist/brushes/normalize.d.cts +15 -0
  14. package/dist/brushes/normalize.d.ts +15 -0
  15. package/dist/brushes/presets.d.cts +12 -0
  16. package/dist/brushes/presets.d.ts +12 -0
  17. package/dist/brushes/resolve.d.cts +56 -0
  18. package/dist/brushes/resolve.d.ts +56 -0
  19. package/dist/brushes/schema.d.cts +29 -0
  20. package/dist/brushes/schema.d.ts +29 -0
  21. package/dist/brushes/types.d.cts +323 -0
  22. package/dist/brushes/types.d.ts +323 -0
  23. package/dist/{brushstrokeRender-T3JZST44.js → brushstrokeRender-5PYSKZIJ.js} +9 -8
  24. package/dist/{brushstrokeRender-GCKK7V2I.cjs → brushstrokeRender-7FLLSQEC.cjs} +15 -14
  25. package/dist/canvas/index.cjs +120 -65
  26. package/dist/canvas/index.d.cts +1 -0
  27. package/dist/canvas/index.d.ts +1 -0
  28. package/dist/canvas/index.js +88 -33
  29. package/dist/canvas/stickers.d.cts +35 -0
  30. package/dist/canvas/stickers.d.ts +35 -0
  31. package/dist/chart/index.cjs +159 -160
  32. package/dist/chart/index.js +9 -10
  33. package/dist/{chunk-RXZL4NG5.js → chunk-226QDRO3.js} +1 -1
  34. package/dist/{chunk-DOIU7VJG.js → chunk-2ZJ4DT3M.js} +1 -1
  35. package/dist/{chunk-XZNU4DUX.cjs → chunk-3NS5C7FB.cjs} +76 -76
  36. package/dist/{chunk-UTI5IITZ.cjs → chunk-4ZC5QJE2.cjs} +3 -3
  37. package/dist/{chunk-L3JFOTBQ.js → chunk-5E2Q7ZHI.js} +1 -1
  38. package/dist/{chunk-6BIDVPED.js → chunk-5JNA6LLY.js} +1 -1
  39. package/dist/{chunk-RD7RX52G.cjs → chunk-5UEFBM2M.cjs} +207 -18
  40. package/dist/{chunk-WA44NKPF.js → chunk-62Z5WLRA.js} +1 -1
  41. package/dist/{chunk-BVRRIW7F.js → chunk-6GRUVGKU.js} +3 -3
  42. package/dist/{chunk-QARCM66V.js → chunk-6ZZKRH7R.js} +3 -3
  43. package/dist/{chunk-BP6KSGVD.js → chunk-7272D3K2.js} +4 -6
  44. package/dist/{chunk-O75V4ZS3.js → chunk-7P6VF3FG.js} +2 -2
  45. package/dist/{chunk-AU6MWQKZ.js → chunk-ABL7IWFZ.js} +1 -1
  46. package/dist/{chunk-5RH3VXAK.js → chunk-APX63ILU.js} +4 -100
  47. package/dist/{chunk-W7L4HUT2.cjs → chunk-CJ6TBL2N.cjs} +16 -16
  48. package/dist/{chunk-7PT4RJL5.cjs → chunk-EUIDTZNQ.cjs} +111 -113
  49. package/dist/{chunk-CXXXAZ7H.js → chunk-F6R67I3A.js} +1 -1
  50. package/dist/{chunk-I7NJPHWV.cjs → chunk-FQPUF2W2.cjs} +35 -606
  51. package/dist/{chunk-D5KGAO4Z.js → chunk-GCVFEPJG.js} +2 -573
  52. package/dist/{chunk-LEQKZGQI.js → chunk-GOBOCZZI.js} +1 -1
  53. package/dist/{chunk-PZP2SZIZ.js → chunk-GYMMNCFT.js} +3 -3
  54. package/dist/{chunk-NUTMINJZ.cjs → chunk-H7ET2ISK.cjs} +52 -52
  55. package/dist/chunk-HS6QDWDF.cjs +1029 -0
  56. package/dist/{chunk-T7KQEMAE.cjs → chunk-HUAISCUX.cjs} +18 -18
  57. package/dist/{chunk-YGQVCQTG.js → chunk-ILP77UD6.js} +1 -1
  58. package/dist/{chunk-GHCSC2WP.cjs → chunk-ISIO63Q5.cjs} +21 -15
  59. package/dist/{chunk-S6OT6CTS.cjs → chunk-IWEVV63O.cjs} +31 -33
  60. package/dist/{chunk-OFH6Q67U.js → chunk-JA57JIT5.js} +9 -3
  61. package/dist/{chunk-LP2MCSBE.cjs → chunk-JFHBXNR2.cjs} +88 -88
  62. package/dist/{chunk-IOFVM3L3.cjs → chunk-JPEHXIB5.cjs} +10 -10
  63. package/dist/chunk-JSDND7DF.cjs +173 -0
  64. package/dist/{chunk-36ZTV7WO.js → chunk-L6Y7TSQ4.js} +1 -1
  65. package/dist/{chunk-KYX7NZ5V.cjs → chunk-LFMKWGFL.cjs} +1 -1
  66. package/dist/{chunk-V6DT2CDH.js → chunk-M2TPMYJE.js} +1 -1
  67. package/dist/{chunk-LJZRHVZV.cjs → chunk-M5GLQQWG.cjs} +2 -2
  68. package/dist/{chunk-JEGJP4OW.js → chunk-MHLU6GRJ.js} +196 -7
  69. package/dist/{chunk-KMPM5JM5.js → chunk-MONXNVZK.js} +4 -6
  70. package/dist/chunk-MTKY6K3Q.js +1029 -0
  71. package/dist/{chunk-MOW3JMNG.cjs → chunk-N76AMOKE.cjs} +42 -42
  72. package/dist/{chunk-75K3W4D6.cjs → chunk-NKGB64CW.cjs} +16 -16
  73. package/dist/{chunk-SGPIVHJB.js → chunk-P3K2JCJA.js} +3 -3
  74. package/dist/chunk-PXDIAYB6.cjs +594 -0
  75. package/dist/{chunk-UBRJOIR5.js → chunk-QC3OXRE4.js} +9 -9
  76. package/dist/{chunk-QOBCBGGI.cjs → chunk-QKXO6JPP.cjs} +14 -14
  77. package/dist/{chunk-WLJZZHUZ.cjs → chunk-QLSGTCYT.cjs} +23 -23
  78. package/dist/{chunk-7YW7T5TJ.js → chunk-RHPSE2YR.js} +2 -2
  79. package/dist/{chunk-44BMJJVA.cjs → chunk-RUONPPMC.cjs} +8 -8
  80. package/dist/{chunk-LJRCU3BJ.cjs → chunk-SABJMH6M.cjs} +150 -15
  81. package/dist/{chunk-XWOLPNBW.cjs → chunk-SOSBOS5T.cjs} +22 -22
  82. package/dist/chunk-SZTI6EER.js +13 -0
  83. package/dist/{chunk-PPFJHTW5.cjs → chunk-TFF2GTGN.cjs} +22 -24
  84. package/dist/{chunk-2SMMZDMG.cjs → chunk-TLOGFIIV.cjs} +37 -37
  85. package/dist/chunk-TXFWZ5ZJ.js +594 -0
  86. package/dist/chunk-U67EN7GG.cjs +13 -0
  87. package/dist/{chunk-GXAK6Q5J.js → chunk-UFEDHACQ.js} +2 -2
  88. package/dist/{chunk-GA4EU4P3.cjs → chunk-UXETV2NC.cjs} +4 -4
  89. package/dist/{chunk-N4DFDI73.js → chunk-WKMUBATU.js} +1 -1
  90. package/dist/{chunk-3R5P3DVY.cjs → chunk-WRZ6C4TU.cjs} +6 -6
  91. package/dist/{chunk-EJLRBS5Q.js → chunk-WZOGDKCQ.js} +137 -2
  92. package/dist/{chunk-6ADHGQ73.js → chunk-YBAPT7NL.js} +2 -4
  93. package/dist/{chunk-K5DS2JTA.cjs → chunk-Z3BRH4JK.cjs} +6 -6
  94. package/dist/{chunk-XNZFVYC2.cjs → chunk-ZBCT5MEA.cjs} +7 -7
  95. package/dist/color/index.cjs +4 -6
  96. package/dist/color/index.js +7 -9
  97. package/dist/effects/helpers.d.cts +6 -0
  98. package/dist/effects/helpers.d.ts +6 -0
  99. package/dist/effects/index.cjs +62 -60
  100. package/dist/effects/index.js +5 -3
  101. package/dist/effects/tools.d.cts +6 -0
  102. package/dist/effects/tools.d.ts +6 -0
  103. package/dist/export/index.cjs +7 -8
  104. package/dist/export/index.js +6 -7
  105. package/dist/extensions/index.cjs +10 -11
  106. package/dist/extensions/index.js +9 -10
  107. package/dist/gradient/index.cjs +33 -34
  108. package/dist/gradient/index.js +4 -5
  109. package/dist/image-editor/effects.d.cts +1 -1
  110. package/dist/image-editor/effects.d.ts +1 -1
  111. package/dist/image-editor/index.cjs +887 -863
  112. package/dist/image-editor/index.d.cts +1 -0
  113. package/dist/image-editor/index.d.ts +1 -0
  114. package/dist/image-editor/index.js +69 -45
  115. package/dist/image-editor/stickers.d.cts +9 -0
  116. package/dist/image-editor/stickers.d.ts +9 -0
  117. package/dist/index.cjs +16 -17
  118. package/dist/index.js +10 -11
  119. package/dist/paint/index.cjs +6 -4
  120. package/dist/paint/index.js +21 -19
  121. package/dist/paint-editor/brushes.d.cts +1 -2
  122. package/dist/paint-editor/brushes.d.ts +1 -2
  123. package/dist/paint-editor/index.cjs +2199 -699
  124. package/dist/paint-editor/index.js +1577 -77
  125. package/dist/paint-editor/mark-settings.d.cts +104 -0
  126. package/dist/paint-editor/mark-settings.d.ts +104 -0
  127. package/dist/paint-editor/procedural.d.cts +2 -75
  128. package/dist/paint-editor/procedural.d.ts +2 -75
  129. package/dist/paint-editor/stickers.d.cts +1 -22
  130. package/dist/paint-editor/stickers.d.ts +1 -22
  131. package/dist/raster/index.cjs +2 -2
  132. package/dist/raster/index.js +9 -9
  133. package/dist/stickers/index.cjs +22 -16
  134. package/dist/stickers/index.d.cts +1 -1
  135. package/dist/stickers/index.d.ts +1 -1
  136. package/dist/stickers/index.js +14 -8
  137. package/dist/stickers/tools.d.cts +57 -1
  138. package/dist/stickers/tools.d.ts +57 -1
  139. package/dist/tokens/index.cjs +3 -4
  140. package/dist/tokens/index.js +2 -3
  141. package/dist/typography/index.cjs +7 -8
  142. package/dist/typography/index.js +2 -3
  143. package/dist/vector/index.cjs +1011 -977
  144. package/dist/vector/index.d.cts +1 -0
  145. package/dist/vector/index.d.ts +1 -0
  146. package/dist/vector/index.js +47 -13
  147. package/dist/vector/stickers.d.cts +11 -0
  148. package/dist/vector/stickers.d.ts +11 -0
  149. package/dist/video-editor/index.cjs +349 -350
  150. package/dist/video-editor/index.js +9 -10
  151. package/package.json +11 -1
  152. package/skills/pixerate-image-editor/SKILL.md +1 -1
  153. package/skills/pixerate-stickers/SKILL.md +13 -1
  154. package/dist/chunk-7AHBW2CQ.cjs +0 -200
  155. package/dist/chunk-F67XMVDI.js +0 -200
  156. package/dist/chunk-H4AOUUBE.cjs +0 -2635
  157. package/dist/chunk-J7T5QZ45.js +0 -2635
  158. package/dist/chunk-ZEYMKDYS.cjs +0 -269
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class; var _class2;
2
2
 
3
- var _chunkH4AOUUBEcjs = require('./chunk-H4AOUUBE.cjs');
3
+ var _chunkHS6QDWDFcjs = require('./chunk-HS6QDWDF.cjs');
4
4
 
5
5
 
6
6
  var _chunkCVFAAZXEcjs = require('./chunk-CVFAAZXE.cjs');
@@ -47,11 +47,11 @@ var _chunkNM3G4VQTcjs = require('./chunk-NM3G4VQT.cjs');
47
47
 
48
48
 
49
49
 
50
- var _chunkI7NJPHWVcjs = require('./chunk-I7NJPHWV.cjs');
50
+ var _chunkPXDIAYB6cjs = require('./chunk-PXDIAYB6.cjs');
51
51
 
52
52
 
53
53
 
54
- var _chunkUTI5IITZcjs = require('./chunk-UTI5IITZ.cjs');
54
+ var _chunk4ZC5QJE2cjs = require('./chunk-4ZC5QJE2.cjs');
55
55
 
56
56
 
57
57
 
@@ -192,7 +192,7 @@ var toGamma = (c) => {
192
192
  function intoSpace(space, [r, g, b]) {
193
193
  if (space === "linear") return [toLinear(r), toLinear(g), toLinear(b)];
194
194
  if (space === "oklab") {
195
- const c = _chunkUTI5IITZcjs.rgbToOklab.call(void 0, r, g, b);
195
+ const c = _chunk4ZC5QJE2cjs.rgbToOklab.call(void 0, r, g, b);
196
196
  return [c.l, c.a, c.b];
197
197
  }
198
198
  return [r, g, b];
@@ -200,7 +200,7 @@ function intoSpace(space, [r, g, b]) {
200
200
  function outOfSpace(space, [x, y, z]) {
201
201
  if (space === "linear") return [toGamma(x), toGamma(y), toGamma(z)];
202
202
  if (space === "oklab") {
203
- const c = _chunkUTI5IITZcjs.oklabToRgb.call(void 0, { l: x, a: y, b: z, alpha: 1 });
203
+ const c = _chunk4ZC5QJE2cjs.oklabToRgb.call(void 0, { l: x, a: y, b: z, alpha: 1 });
204
204
  return [c.r, c.g, c.b];
205
205
  }
206
206
  return [clamp(x, 0, 1), clamp(y, 0, 1), clamp(z, 0, 1)];
@@ -2527,7 +2527,7 @@ function vectorExtrudeFaces(path, params) {
2527
2527
  // src/vector/brushstroke.ts
2528
2528
  var VECTOR_BRUSHSTROKE_SCALE = 2;
2529
2529
  function vectorBrushstrokeBrushes() {
2530
- return _chunkH4AOUUBEcjs.BUILTIN_BRUSHES.filter((b) => _chunkI7NJPHWVcjs.isBrushstrokeBrush.call(void 0, b));
2530
+ return _chunkHS6QDWDFcjs.BUILTIN_BRUSHES.filter((b) => _chunkPXDIAYB6cjs.isBrushstrokeBrush.call(void 0, b));
2531
2531
  }
2532
2532
  function vectorBrushstrokeBrush(id) {
2533
2533
  return _nullishCoalesce(vectorBrushstrokeBrushes().find((b) => b.id === id), () => ( null));
@@ -2558,7 +2558,7 @@ function sanitizeVectorBrushstrokePaper(value) {
2558
2558
  if (!value || typeof value !== "object") return null;
2559
2559
  const r = value;
2560
2560
  const out = {};
2561
- if (typeof r.pattern === "string" && _chunkI7NJPHWVcjs.GRAIN_PATTERNS.includes(r.pattern)) out.pattern = r.pattern;
2561
+ if (typeof r.pattern === "string" && _chunkPXDIAYB6cjs.GRAIN_PATTERNS.includes(r.pattern)) out.pattern = r.pattern;
2562
2562
  const seed = sanitizeSeed(r.seed);
2563
2563
  if (seed !== void 0) out.seed = seed;
2564
2564
  if (finite2(r.scale) && r.scale > 0) out.scale = Math.min(8, Math.max(0.25, r.scale));
@@ -2573,7 +2573,7 @@ function vectorBrushstrokeCharacterError(brush) {
2573
2573
  const r = paper;
2574
2574
  const extra = Object.keys(r).filter((k) => !["pattern", "seed", "scale", "depth"].includes(k));
2575
2575
  if (extra.length) return `paper has unknown field ${extra.map((k) => `"${k}"`).join(", ")}: use pattern, seed, scale, depth.`;
2576
- if (r.pattern !== void 0 && !_chunkI7NJPHWVcjs.GRAIN_PATTERNS.includes(r.pattern)) return `Unknown paper pattern "${String(r.pattern)}": use one of ${_chunkI7NJPHWVcjs.GRAIN_PATTERNS.join(", ")}.`;
2576
+ if (r.pattern !== void 0 && !_chunkPXDIAYB6cjs.GRAIN_PATTERNS.includes(r.pattern)) return `Unknown paper pattern "${String(r.pattern)}": use one of ${_chunkPXDIAYB6cjs.GRAIN_PATTERNS.join(", ")}.`;
2577
2577
  if (r.seed !== void 0 && !(Number.isInteger(r.seed) && r.seed >= 0 && r.seed <= VECTOR_BRUSHSTROKE_MAX_SEED)) return `paper.seed must be an integer from 0 to ${VECTOR_BRUSHSTROKE_MAX_SEED}.`;
2578
2578
  if (r.scale !== void 0 && !(finite2(r.scale) && r.scale >= 0.25 && r.scale <= 8)) return "paper.scale must be from 0.25 to 8 (1 is the pattern's natural size).";
2579
2579
  if (r.depth !== void 0 && !(finite2(r.depth) && r.depth >= 0 && r.depth <= 1)) return "paper.depth must be from 0 to 1.";
@@ -2589,7 +2589,7 @@ function vectorBrushstrokeReach(layer) {
2589
2589
  if (!isVectorBrushstrokeLayer(layer)) return 0;
2590
2590
  return (_nullishCoalesce(layer.brush.size, () => ( vectorBrushstrokeBrush(layer.brush.brushId).tip.size))) / 2;
2591
2591
  }
2592
- var cache = new (0, _chunkI7NJPHWVcjs.BrushstrokeCache)(256);
2592
+ var cache = new (0, _chunkPXDIAYB6cjs.BrushstrokeCache)(256);
2593
2593
  var urls = /* @__PURE__ */ new WeakMap();
2594
2594
  var layerCache = /* @__PURE__ */ new WeakMap();
2595
2595
  function vectorBrushstrokeImages(node, layer) {
@@ -2614,7 +2614,7 @@ function vectorBrushstrokeImages(node, layer) {
2614
2614
  const stroke = cache.render({ points: ring.map(([x, y]) => ({ x, y })), ...layer.brush.pressure ? { pressure: layer.brush.pressure } : {} }, brush, { scale: VECTOR_BRUSHSTROKE_SCALE, color: color2, maxPixels: 2048 * 2048, ...character });
2615
2615
  if (!stroke.bounds) continue;
2616
2616
  let href = urls.get(stroke);
2617
- if (!href) urls.set(stroke, href = _chunkI7NJPHWVcjs.brushstrokeDataUrl.call(void 0, stroke));
2617
+ if (!href) urls.set(stroke, href = _chunkPXDIAYB6cjs.brushstrokeDataUrl.call(void 0, stroke));
2618
2618
  out.push({ href, ...stroke.bounds });
2619
2619
  }
2620
2620
  }
@@ -0,0 +1,173 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
2
+
3
+ var _chunkU67EN7GGcjs = require('./chunk-U67EN7GG.cjs');
4
+
5
+
6
+ var _chunk3K6HWEXZcjs = require('./chunk-3K6HWEXZ.cjs');
7
+
8
+ // src/stickers/stamps.ts
9
+ var STAMP_KINDS = ["dot", "star", "heart", "leaf", "flower", "confetti", "splat", "sparkle", "ring"];
10
+ function stampCoverage(kind, u, v, t) {
11
+ const r = Math.hypot(u, v);
12
+ const a = Math.atan2(v, u);
13
+ const edge = (d) => Math.min(1, Math.max(0, d * 24 + 0.5));
14
+ switch (kind) {
15
+ case "dot":
16
+ return edge(0.95 - r);
17
+ case "ring":
18
+ return edge(Math.min(0.95 - r, r - 0.6));
19
+ case "star": {
20
+ const f = (a + Math.PI / 2) * 5 / (2 * Math.PI) % 1;
21
+ const notch = Math.min(f < 0 ? f + 1 : f, 1 - (f < 0 ? f + 1 : f)) * 2;
22
+ return edge(0.95 - 0.55 * notch - r);
23
+ }
24
+ case "sparkle": {
25
+ const q = Math.pow(Math.abs(u) / 0.95, 0.6) + Math.pow(Math.abs(v) / 0.95, 0.6);
26
+ return edge((1 - q) * 0.4);
27
+ }
28
+ case "heart": {
29
+ const x = u * 1.1;
30
+ const y = -v * 1.1 + 0.15;
31
+ const q = x * x + y * y - 0.55;
32
+ return edge(-(q * q * q - x * x * y * y * y) * 3);
33
+ }
34
+ case "leaf": {
35
+ const w = 0.42 * Math.sqrt(Math.max(0, 1 - u * u));
36
+ const inside = edge(w - Math.abs(v + 0.15 * u * u));
37
+ const rib = Math.abs(v + 0.15 * u * u) < 0.03 && Math.abs(u) < 0.85 ? 0.65 : 1;
38
+ return inside * rib;
39
+ }
40
+ case "flower": {
41
+ const petals = 0.6 + 0.35 * Math.abs(Math.cos(2.5 * a));
42
+ const body = edge(petals - r);
43
+ return r < 0.22 ? Math.max(body, 1) * 0.85 : body;
44
+ }
45
+ case "confetti": {
46
+ return edge(Math.min(0.9 - Math.abs(u), 0.35 - Math.abs(v)));
47
+ }
48
+ case "splat": {
49
+ let rr = 0.55;
50
+ for (let k = 1; k <= 3; k++) rr += 0.08 * Math.sin(a * (k + 2) + _chunk3K6HWEXZcjs.hash2.call(void 0, k, 1, t) * 6.28) / k;
51
+ let c = edge(rr - r);
52
+ for (let k = 0; k < 4; k++) {
53
+ const ang = _chunk3K6HWEXZcjs.hash2.call(void 0, k, 7, t) * Math.PI * 2;
54
+ const dist = 0.72 + 0.2 * _chunk3K6HWEXZcjs.hash2.call(void 0, k, 9, t);
55
+ const dx = u - Math.cos(ang) * dist;
56
+ const dy = v - Math.sin(ang) * dist;
57
+ c = Math.max(c, edge(0.08 + 0.06 * _chunk3K6HWEXZcjs.hash2.call(void 0, k, 11, t) - Math.hypot(dx, dy)));
58
+ }
59
+ return c;
60
+ }
61
+ }
62
+ }
63
+
64
+ // src/stickers/helpers.ts
65
+ var DEFAULT_STICKER_PAGE = 24;
66
+ var MAX_STICKER_PAGE = 100;
67
+ var EDITOR_STICKERS_ID = "editor";
68
+ function checkStickerSearchOptions(options = {}) {
69
+ if (options.limit !== void 0 && !(Number.isInteger(options.limit) && options.limit >= 1 && options.limit <= MAX_STICKER_PAGE)) {
70
+ throw new (0, _chunkU67EN7GGcjs.StickerError)("invalid_argument", `limit must be a whole number from 1 to ${MAX_STICKER_PAGE}, got ${options.limit}.`);
71
+ }
72
+ if (options.after !== void 0 && !/^\d+$/.test(options.after)) throw new (0, _chunkU67EN7GGcjs.StickerError)("invalid_argument", `after "${options.after}" is not a cursor from this provider; pass the next value of the previous page.`);
73
+ }
74
+ var words = (s) => s.toLowerCase().split(/[^\p{L}\p{N}]+/u).filter(Boolean);
75
+ function stickerPage(items, options = {}, query = "") {
76
+ checkStickerSearchOptions(options);
77
+ const q = words(query);
78
+ const tags = (_nullishCoalesce(options.tags, () => ( []))).map((t) => t.toLowerCase());
79
+ const matches = items.filter((s) => {
80
+ if (options.category && s.category !== options.category) return false;
81
+ if (tags.length && !tags.every((t) => (_nullishCoalesce(s.tags, () => ( []))).some((x) => x.toLowerCase() === t))) return false;
82
+ if (_optionalChain([options, 'access', _2 => _2.licence, 'optionalAccess', _3 => _3.commercial]) === true && !s.licence.commercial) return false;
83
+ if (!q.length) return true;
84
+ const text = new Set(words([s.name, s.category, _nullishCoalesce(s.description, () => ( "")), ..._nullishCoalesce(s.tags, () => ( []))].join(" ")));
85
+ return q.every((w) => [...text].some((t) => t.startsWith(w)));
86
+ });
87
+ const start = options.after ? Number(options.after) : 0;
88
+ const limit = _nullishCoalesce(options.limit, () => ( DEFAULT_STICKER_PAGE));
89
+ const page = matches.slice(start, start + limit);
90
+ return { items: page, total: matches.length, ...start + limit < matches.length ? { next: String(start + limit) } : {} };
91
+ }
92
+ function parseStickerRef(ref) {
93
+ if (typeof ref !== "string" || !ref) throw new (0, _chunkU67EN7GGcjs.StickerError)("invalid_argument", 'A sticker ref is a "provider:id" string, e.g. "editor:star" (find_stickers lists them).');
94
+ const i = ref.indexOf(":");
95
+ if (i === -1) {
96
+ if (STAMP_KINDS.includes(ref)) return { provider: EDITOR_STICKERS_ID, id: ref };
97
+ throw new (0, _chunkU67EN7GGcjs.StickerError)("invalid_argument", `"${ref}" is not a sticker ref; refs are "provider:id" (e.g. "editor:${STAMP_KINDS[1]}"); find_stickers lists them.`);
98
+ }
99
+ if (i === 0 || i === ref.length - 1) throw new (0, _chunkU67EN7GGcjs.StickerError)("invalid_argument", `"${ref}" is not a sticker ref; refs are "provider:id".`);
100
+ return { provider: ref.slice(0, i), id: ref.slice(i + 1) };
101
+ }
102
+ function normalizeStickerRef(ref) {
103
+ const { provider, id } = parseStickerRef(ref);
104
+ return `${provider}:${id}`;
105
+ }
106
+ function editorStampOf(ref) {
107
+ const { provider, id } = parseStickerRef(ref);
108
+ return provider === EDITOR_STICKERS_ID && STAMP_KINDS.includes(id) ? id : null;
109
+ }
110
+ function stickerRefOf(provider, id) {
111
+ return provider.namespaced ? id : `${provider.id}:${id}`;
112
+ }
113
+ function stickerIdFor(provider, ref) {
114
+ const { provider: owner, id } = parseStickerRef(ref);
115
+ if (provider.namespaced) return `${owner}:${id}`;
116
+ return owner === provider.id ? id : null;
117
+ }
118
+ function closestStickerRefs(wanted, candidates, n = 3) {
119
+ const w = wanted.toLowerCase();
120
+ const dist = (a, b) => {
121
+ const d = Array.from({ length: b.length + 1 }, (_, j) => j);
122
+ for (let i = 1; i <= a.length; i++) {
123
+ let prev = d[0];
124
+ d[0] = i;
125
+ for (let j = 1; j <= b.length; j++) {
126
+ const tmp = d[j];
127
+ d[j] = Math.min(d[j] + 1, d[j - 1] + 1, prev + (a[i - 1] === b[j - 1] ? 0 : 1));
128
+ prev = tmp;
129
+ }
130
+ }
131
+ return d[b.length];
132
+ };
133
+ return [...candidates].sort((a, b) => dist(w, a.toLowerCase()) - dist(w, b.toLowerCase()) || a.localeCompare(b)).slice(0, n);
134
+ }
135
+ var StickersSlot = (_class = class {
136
+ constructor(fallback) {;_class.prototype.__init.call(this);
137
+ this.fallback = fallback;
138
+ this.current = fallback;
139
+ }
140
+
141
+
142
+ __init() {this.listeners = /* @__PURE__ */ new Set()}
143
+ get provider() {
144
+ return this.current;
145
+ }
146
+ set(provider) {
147
+ const next = _nullishCoalesce(provider, () => ( this.fallback));
148
+ if (next === this.current) return;
149
+ this.current = next;
150
+ for (const l of [...this.listeners]) l(next);
151
+ }
152
+ subscribe(listener) {
153
+ this.listeners.add(listener);
154
+ return () => this.listeners.delete(listener);
155
+ }
156
+ }, _class);
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+ exports.STAMP_KINDS = STAMP_KINDS; exports.stampCoverage = stampCoverage; exports.DEFAULT_STICKER_PAGE = DEFAULT_STICKER_PAGE; exports.MAX_STICKER_PAGE = MAX_STICKER_PAGE; exports.EDITOR_STICKERS_ID = EDITOR_STICKERS_ID; exports.checkStickerSearchOptions = checkStickerSearchOptions; exports.stickerPage = stickerPage; exports.parseStickerRef = parseStickerRef; exports.normalizeStickerRef = normalizeStickerRef; exports.editorStampOf = editorStampOf; exports.stickerRefOf = stickerRefOf; exports.stickerIdFor = stickerIdFor; exports.closestStickerRefs = closestStickerRefs; exports.StickersSlot = StickersSlot;
@@ -8,7 +8,7 @@ import {
8
8
  isCartesianChart,
9
9
  normalizeChartSpec,
10
10
  parseChartColor
11
- } from "./chunk-QARCM66V.js";
11
+ } from "./chunk-6ZZKRH7R.js";
12
12
 
13
13
  // src/chart/ooxml.ts
14
14
  var CHART_OOXML_NS = "http://schemas.openxmlformats.org/drawingml/2006/chart";
@@ -74,7 +74,7 @@ function profileAlongPolyline(points, values, count = 32) {
74
74
  var round3 = (v) => Math.round(v * 1e3) / 1e3;
75
75
  var loading = null;
76
76
  function loadCanvasBrushstrokeRenderer() {
77
- loading ??= Promise.resolve().then(() => _interopRequireWildcard(require("./brushstrokeRender-GCKK7V2I.cjs"))).catch((error) => {
77
+ loading ??= Promise.resolve().then(() => _interopRequireWildcard(require("./brushstrokeRender-7FLLSQEC.cjs"))).catch((error) => {
78
78
  loading = null;
79
79
  throw error;
80
80
  });
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  oklabToRgb,
8
8
  rgbToOklab
9
- } from "./chunk-F67XMVDI.js";
9
+ } from "./chunk-MHLU6GRJ.js";
10
10
 
11
11
  // src/animation/color.ts
12
12
  function rgbToOklab2(r, g, b, alpha = 1) {
@@ -4,7 +4,7 @@
4
4
  var _chunkDWJJI6RTcjs = require('./chunk-DWJJI6RT.cjs');
5
5
 
6
6
 
7
- var _chunkUTI5IITZcjs = require('./chunk-UTI5IITZ.cjs');
7
+ var _chunk4ZC5QJE2cjs = require('./chunk-4ZC5QJE2.cjs');
8
8
 
9
9
  // src/animation/keyframes.ts
10
10
  var ANIMATION_TIME_EPSILON = 1e-6;
@@ -46,7 +46,7 @@ function interpolateAnimationValue(from, to, t, type = "number") {
46
46
  if (t <= 0) return from;
47
47
  if (t >= 1) return to;
48
48
  if (type === "color" || typeof from === "string" && typeof to === "string") {
49
- const mixed = _chunkUTI5IITZcjs.mixColorsOklab.call(void 0, from, to, t);
49
+ const mixed = _chunk4ZC5QJE2cjs.mixColorsOklab.call(void 0, from, to, t);
50
50
  if (mixed !== null) return mixed;
51
51
  }
52
52
  return from;
@@ -1,11 +1,188 @@
1
1
  import {
2
- displayP3ToLinearSrgb,
3
- hslToRgb,
4
- linearToSrgb,
5
- oklabToRgb,
6
- oklchToOklab,
7
- srgbToLinear
8
- } from "./chunk-F67XMVDI.js";
2
+ D65_XY,
3
+ apply,
4
+ invert,
5
+ mul,
6
+ rgbToXyzMatrix,
7
+ xyToXyz
8
+ } from "./chunk-6ONMQ6WF.js";
9
+
10
+ // src/color/convert.ts
11
+ function srgbToLinear(v) {
12
+ const sign = Math.sign(v);
13
+ const abs = Math.abs(v);
14
+ return sign * (abs <= 0.04045 ? abs / 12.92 : ((abs + 0.055) / 1.055) ** 2.4);
15
+ }
16
+ function linearToSrgb(v) {
17
+ const sign = Math.sign(v);
18
+ const abs = Math.abs(v);
19
+ return sign * (abs <= 31308e-7 ? 12.92 * abs : 1.055 * abs ** (1 / 2.4) - 0.055);
20
+ }
21
+ function rgbToHsl(rgba) {
22
+ const { r, g, b, a } = rgba;
23
+ const max = Math.max(r, g, b);
24
+ const min = Math.min(r, g, b);
25
+ const d = max - min;
26
+ const l = (max + min) / 2;
27
+ let h = 0;
28
+ if (d > 0) {
29
+ if (max === r) h = 60 * ((g - b) / d % 6);
30
+ else if (max === g) h = 60 * ((b - r) / d + 2);
31
+ else h = 60 * ((r - g) / d + 4);
32
+ }
33
+ if (h < 0) h += 360;
34
+ const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
35
+ return { h, s, l, alpha: a };
36
+ }
37
+ function hslToRgb(hsla) {
38
+ const { h, s, l, alpha } = hsla;
39
+ const hh = (h % 360 + 360) % 360 / 60;
40
+ const c = (1 - Math.abs(2 * l - 1)) * s;
41
+ const x = c * (1 - Math.abs(hh % 2 - 1));
42
+ const m = l - c / 2;
43
+ let r = 0;
44
+ let g = 0;
45
+ let b = 0;
46
+ if (hh < 1) {
47
+ r = c;
48
+ g = x;
49
+ b = 0;
50
+ } else if (hh < 2) {
51
+ r = x;
52
+ g = c;
53
+ b = 0;
54
+ } else if (hh < 3) {
55
+ r = 0;
56
+ g = c;
57
+ b = x;
58
+ } else if (hh < 4) {
59
+ r = 0;
60
+ g = x;
61
+ b = c;
62
+ } else if (hh < 5) {
63
+ r = x;
64
+ g = 0;
65
+ b = c;
66
+ } else {
67
+ r = c;
68
+ g = 0;
69
+ b = x;
70
+ }
71
+ return { r: r + m, g: g + m, b: b + m, a: alpha };
72
+ }
73
+ function rgbToHsv(rgba) {
74
+ const { r, g, b, a } = rgba;
75
+ const max = Math.max(r, g, b);
76
+ const min = Math.min(r, g, b);
77
+ const d = max - min;
78
+ let h = 0;
79
+ if (d > 0) {
80
+ if (max === r) h = 60 * ((g - b) / d % 6);
81
+ else if (max === g) h = 60 * ((b - r) / d + 2);
82
+ else h = 60 * ((r - g) / d + 4);
83
+ }
84
+ if (h < 0) h += 360;
85
+ const s = max === 0 ? 0 : d / max;
86
+ return { h, s, v: max, alpha: a };
87
+ }
88
+ function hsvToRgb(hsva) {
89
+ const { h, s, v, alpha } = hsva;
90
+ const hh = (h % 360 + 360) % 360 / 60;
91
+ const c = v * s;
92
+ const x = c * (1 - Math.abs(hh % 2 - 1));
93
+ const m = v - c;
94
+ let r = 0;
95
+ let g = 0;
96
+ let b = 0;
97
+ if (hh < 1) {
98
+ r = c;
99
+ g = x;
100
+ b = 0;
101
+ } else if (hh < 2) {
102
+ r = x;
103
+ g = c;
104
+ b = 0;
105
+ } else if (hh < 3) {
106
+ r = 0;
107
+ g = c;
108
+ b = x;
109
+ } else if (hh < 4) {
110
+ r = 0;
111
+ g = x;
112
+ b = c;
113
+ } else if (hh < 5) {
114
+ r = x;
115
+ g = 0;
116
+ b = c;
117
+ } else {
118
+ r = c;
119
+ g = 0;
120
+ b = x;
121
+ }
122
+ return { r: r + m, g: g + m, b: b + m, a: alpha };
123
+ }
124
+ function rgbToOklab(rgba) {
125
+ const lr = srgbToLinear(rgba.r);
126
+ const lg = srgbToLinear(rgba.g);
127
+ const lb = srgbToLinear(rgba.b);
128
+ const l = Math.cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb);
129
+ const m = Math.cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb);
130
+ const s = Math.cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb);
131
+ return {
132
+ l: 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,
133
+ a: 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,
134
+ b: 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s,
135
+ alpha: rgba.a
136
+ };
137
+ }
138
+ function oklabToRgb(lab) {
139
+ const l_ = lab.l + 0.3963377774 * lab.a + 0.2158037573 * lab.b;
140
+ const m_ = lab.l - 0.1055613458 * lab.a - 0.0638541728 * lab.b;
141
+ const s_ = lab.l - 0.0894841775 * lab.a - 1.291485548 * lab.b;
142
+ const l = l_ ** 3;
143
+ const m = m_ ** 3;
144
+ const s = s_ ** 3;
145
+ return {
146
+ r: linearToSrgb(4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s),
147
+ g: linearToSrgb(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s),
148
+ b: linearToSrgb(-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s),
149
+ a: lab.alpha
150
+ };
151
+ }
152
+ function oklabToOklch(lab) {
153
+ const c = Math.hypot(lab.a, lab.b);
154
+ let h = 0;
155
+ if (c >= 1e-6) {
156
+ h = Math.atan2(lab.b, lab.a) * 180 / Math.PI;
157
+ if (h < 0) h += 360;
158
+ if (h >= 360) h -= 360;
159
+ }
160
+ return { l: lab.l, c, h, alpha: lab.alpha };
161
+ }
162
+ function oklchToOklab(lch) {
163
+ const rad = lch.h * Math.PI / 180;
164
+ return {
165
+ l: lch.l,
166
+ a: lch.c * Math.cos(rad),
167
+ b: lch.c * Math.sin(rad),
168
+ alpha: lch.alpha
169
+ };
170
+ }
171
+ var D65_XYZ = xyToXyz(D65_XY);
172
+ var SRGB_TO_XYZ = rgbToXyzMatrix([0.64, 0.33], [0.3, 0.6], [0.15, 0.06], D65_XYZ);
173
+ var P3_TO_XYZ = rgbToXyzMatrix([0.68, 0.32], [0.265, 0.69], [0.15, 0.06], D65_XYZ);
174
+ var XYZ_TO_SRGB = invert(SRGB_TO_XYZ);
175
+ var XYZ_TO_P3 = invert(P3_TO_XYZ);
176
+ var P3_TO_SRGB_MAT = mul(XYZ_TO_SRGB, P3_TO_XYZ);
177
+ var SRGB_TO_P3_MAT = mul(XYZ_TO_P3, SRGB_TO_XYZ);
178
+ function linearSrgbToDisplayP3(rgb) {
179
+ const out = apply(SRGB_TO_P3_MAT, [rgb.r, rgb.g, rgb.b]);
180
+ return { r: out[0], g: out[1], b: out[2], a: rgb.a };
181
+ }
182
+ function displayP3ToLinearSrgb(rgb) {
183
+ const out = apply(P3_TO_SRGB_MAT, [rgb.r, rgb.g, rgb.b]);
184
+ return { r: out[0], g: out[1], b: out[2], a: rgb.a };
185
+ }
9
186
 
10
187
  // src/color/named.ts
11
188
  var NAMED_COLORS = {
@@ -433,6 +610,18 @@ function readableTextColor(background, candidates = [BLACK, WHITE]) {
433
610
  }
434
611
 
435
612
  export {
613
+ srgbToLinear,
614
+ linearToSrgb,
615
+ rgbToHsl,
616
+ hslToRgb,
617
+ rgbToHsv,
618
+ hsvToRgb,
619
+ rgbToOklab,
620
+ oklabToRgb,
621
+ oklabToOklch,
622
+ oklchToOklab,
623
+ linearSrgbToDisplayP3,
624
+ displayP3ToLinearSrgb,
436
625
  NAMED_COLORS,
437
626
  parseColor,
438
627
  isColor,
@@ -4,20 +4,18 @@ import {
4
4
  mixColors,
5
5
  normalizeDualColor,
6
6
  resolveColor
7
- } from "./chunk-BP6KSGVD.js";
7
+ } from "./chunk-7272D3K2.js";
8
8
  import {
9
9
  deltaEOK,
10
10
  formatHex,
11
11
  inSrgbGamut
12
- } from "./chunk-6ADHGQ73.js";
12
+ } from "./chunk-YBAPT7NL.js";
13
13
  import {
14
14
  contrastRatio,
15
- parseColor
16
- } from "./chunk-JEGJP4OW.js";
17
- import {
18
15
  oklabToRgb,
16
+ parseColor,
19
17
  rgbToOklab
20
- } from "./chunk-F67XMVDI.js";
18
+ } from "./chunk-MHLU6GRJ.js";
21
19
 
22
20
  // src/gradient/model.ts
23
21
  function clamp(v, min, max) {