@pixerate/editor 0.119.0 → 0.121.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 (74) hide show
  1. package/dist/animation-editor/index.cjs +54 -54
  2. package/dist/animation-editor/index.d.cts +3 -3
  3. package/dist/animation-editor/index.d.ts +3 -3
  4. package/dist/animation-editor/index.js +2 -2
  5. package/dist/{chunk-UMVW2Q66.js → chunk-4I54JSJ6.js} +2 -2
  6. package/dist/{chunk-N3467VD6.js → chunk-7QN76ESJ.js} +1 -179
  7. package/dist/chunk-7QN76ESJ.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-KGNUFO4T.cjs → chunk-DFLJHLKA.cjs} +36 -36
  11. package/dist/{chunk-KGNUFO4T.cjs.map → chunk-DFLJHLKA.cjs.map} +1 -1
  12. package/dist/{chunk-KZLQY4CD.js → chunk-E6N5KLMA.js} +12 -10
  13. package/dist/{chunk-KZLQY4CD.js.map → chunk-E6N5KLMA.js.map} +1 -1
  14. package/dist/{chunk-4S2AXNQF.cjs → chunk-GLOOH65Y.cjs} +236 -234
  15. package/dist/chunk-GLOOH65Y.cjs.map +1 -0
  16. package/dist/chunk-GX332W2C.js +181 -0
  17. package/dist/chunk-GX332W2C.js.map +1 -0
  18. package/dist/{chunk-TS5IEUW6.cjs → chunk-K7V27T72.cjs} +178 -3
  19. package/dist/chunk-K7V27T72.cjs.map +1 -0
  20. package/dist/{chunk-WMRIG4XQ.cjs → chunk-LL3RAN55.cjs} +17 -17
  21. package/dist/{chunk-WMRIG4XQ.cjs.map → chunk-LL3RAN55.cjs.map} +1 -1
  22. package/dist/chunk-MUUXNRU4.cjs +181 -0
  23. package/dist/chunk-MUUXNRU4.cjs.map +1 -0
  24. package/dist/{chunk-LI3KTY7K.cjs → chunk-VYW7JBTM.cjs} +72 -5
  25. package/dist/chunk-VYW7JBTM.cjs.map +1 -0
  26. package/dist/{chunk-TDQDMBUR.js → chunk-WAI6ATHC.js} +2 -2
  27. package/dist/{chunk-CSHEI3YT.js → chunk-WORWH5K5.js} +71 -4
  28. package/dist/chunk-WORWH5K5.js.map +1 -0
  29. package/dist/{chunk-YHW26LS2.js → chunk-ZZPGTNXJ.js} +177 -2
  30. package/dist/chunk-ZZPGTNXJ.js.map +1 -0
  31. package/dist/{export-Ds8Ccw0K.d.ts → export-D2D8hb_u.d.ts} +1 -1
  32. package/dist/{export-B_jO2PrH.d.cts → export-fP2hZYjm.d.cts} +1 -1
  33. package/dist/image-editor/index.cjs +789 -769
  34. package/dist/image-editor/index.cjs.map +1 -1
  35. package/dist/image-editor/index.d.cts +4 -4
  36. package/dist/image-editor/index.d.ts +4 -4
  37. package/dist/image-editor/index.js +32 -12
  38. package/dist/image-editor/index.js.map +1 -1
  39. package/dist/paint/index.cjs +22 -2
  40. package/dist/paint/index.cjs.map +1 -1
  41. package/dist/paint/index.d.cts +159 -1
  42. package/dist/paint/index.d.ts +159 -1
  43. package/dist/paint/index.js +21 -1
  44. package/dist/paint-editor/index.cjs +96 -95
  45. package/dist/paint-editor/index.cjs.map +1 -1
  46. package/dist/paint-editor/index.d.cts +2 -2
  47. package/dist/paint-editor/index.d.ts +2 -2
  48. package/dist/paint-editor/index.js +13 -12
  49. package/dist/paint-editor/index.js.map +1 -1
  50. package/dist/raster/index.cjs +5 -4
  51. package/dist/raster/index.cjs.map +1 -1
  52. package/dist/raster/index.js +11 -10
  53. package/dist/{svg-hK0WQc7-.d.cts → svg-S9zzvqaZ.d.cts} +1 -1
  54. package/dist/{svg-CTxrB5xO.d.ts → svg-leZpRsJB.d.ts} +1 -1
  55. package/dist/{types-TrSSh_RB.d.ts → types-BgwxFWvn.d.ts} +23 -9
  56. package/dist/{types-Dq-8qgoo.d.cts → types-DdRTDnza.d.cts} +23 -9
  57. package/dist/vector/index.cjs +887 -883
  58. package/dist/vector/index.cjs.map +1 -1
  59. package/dist/vector/index.d.cts +12 -5
  60. package/dist/vector/index.d.ts +12 -5
  61. package/dist/vector/index.js +14 -10
  62. package/dist/vector/index.js.map +1 -1
  63. package/package.json +1 -1
  64. package/skills/pixerate-vector/SKILL.md +1 -1
  65. package/skills/pixerate-vector/references/commands.md +1 -0
  66. package/dist/chunk-4S2AXNQF.cjs.map +0 -1
  67. package/dist/chunk-CSHEI3YT.js.map +0 -1
  68. package/dist/chunk-EJVDBITD.cjs.map +0 -1
  69. package/dist/chunk-LI3KTY7K.cjs.map +0 -1
  70. package/dist/chunk-N3467VD6.js.map +0 -1
  71. package/dist/chunk-TS5IEUW6.cjs.map +0 -1
  72. package/dist/chunk-YHW26LS2.js.map +0 -1
  73. /package/dist/{chunk-UMVW2Q66.js.map → chunk-4I54JSJ6.js.map} +0 -0
  74. /package/dist/{chunk-TDQDMBUR.js.map → chunk-WAI6ATHC.js.map} +0 -0
@@ -18,7 +18,7 @@ import {
18
18
  unionBounds,
19
19
  vectorGradientPoints,
20
20
  widthProfileAt
21
- } from "./chunk-CSHEI3YT.js";
21
+ } from "./chunk-WORWH5K5.js";
22
22
  import {
23
23
  segmentLength,
24
24
  segmentParamAtLength,
@@ -750,4 +750,4 @@ export {
750
750
  interpolateVectorPaths,
751
751
  evaluateVectorPathKeyframes
752
752
  };
753
- //# sourceMappingURL=chunk-TDQDMBUR.js.map
753
+ //# sourceMappingURL=chunk-WAI6ATHC.js.map
@@ -122,7 +122,7 @@ var VECTOR_TOOLS = [
122
122
  ];
123
123
  var VECTOR_TRANSFORM_HANDLES = ["nw", "n", "ne", "e", "se", "s", "sw", "w", "rotate"];
124
124
  var VECTOR_PATHFINDER_OPERATIONS = ["divide", "trim", "merge", "crop", "outline", "minusBack"];
125
- var VECTOR_EFFECT_TYPES = ["trim", "roundCorners", "puckerBloat", "twist", "zigzag", "wiggle", "offset", "merge", "repeater", "envelope", "contour"];
125
+ var VECTOR_EFFECT_TYPES = ["trim", "roundCorners", "puckerBloat", "twist", "zigzag", "wiggle", "offset", "merge", "repeater", "envelope", "contour", "blockShadow"];
126
126
  var VECTOR_MERGE_MODES = ["merge", "add", "subtract", "intersect", "exclude"];
127
127
  var VECTOR_FILTER_TYPES = ["dropShadow", "innerShadow", "outerGlow", "innerGlow", "layerBlur", "feather"];
128
128
 
@@ -2829,6 +2829,24 @@ function offsetPaths(paths, amount, join = "miter", miterLimit = 4, copies = 1,
2829
2829
  return out;
2830
2830
  });
2831
2831
  }
2832
+ function sweepPath(path, dx, dy, fillRule = "nonzero", tolerance = 0.25) {
2833
+ if (!path.length) return [];
2834
+ if (!Number.isFinite(dx) || !Number.isFinite(dy) || Math.hypot(dx, dy) < 1e-9) return path.slice();
2835
+ const bands = [];
2836
+ for (const contour of pathToContours(path)) {
2837
+ const ring = flattenChain(closeContour(contour, true), Math.max(1e-3, tolerance));
2838
+ for (let i = 0; i < ring.length; i++) {
2839
+ let p = ring[i];
2840
+ let q = ring[(i + 1) % ring.length];
2841
+ const turn2 = (q[0] - p[0]) * dy - (q[1] - p[1]) * dx;
2842
+ if (Math.abs(turn2) < 1e-9) continue;
2843
+ if (turn2 < 0) [p, q] = [q, p];
2844
+ bands.push({ type: "M", x: p[0], y: p[1] }, { type: "L", x: q[0], y: q[1] }, { type: "L", x: q[0] + dx, y: q[1] + dy }, { type: "L", x: p[0] + dx, y: p[1] + dy }, { type: "Z" });
2845
+ }
2846
+ }
2847
+ const moved = transformBezierPath(path, [1, 0, 0, 1, dx, dy]);
2848
+ return pathBoolean("union", [{ path, fillRule }, { path: moved, fillRule }, ...bands.length ? [{ path: bands, fillRule: "nonzero" }] : []]).path;
2849
+ }
2832
2850
  function twistPaths(paths, angle, center) {
2833
2851
  let rmax = 0;
2834
2852
  for (const p of paths) for (const c of p) if (c.type !== "Z") rmax = Math.max(rmax, Math.hypot(c.x - center.x, c.y - center.y));
@@ -6248,7 +6266,8 @@ var VECTOR_EFFECT_DEFAULTS = {
6248
6266
  composite: "below"
6249
6267
  },
6250
6268
  envelope: { style: "arc", bend: 50, horizontal: 0, vertical: 0, orientation: "horizontal", rows: 2, columns: 2, mesh: null },
6251
- contour: { direction: "inside", steps: 4, offset: 6, join: "round", miterLimit: 4, fillColor: "#ffffff", strokeColor: null, acceleration: 0 }
6269
+ contour: { direction: "inside", steps: 4, offset: 6, join: "round", miterLimit: 4, fillColor: "#ffffff", strokeColor: null, acceleration: 0 },
6270
+ blockShadow: { angle: 45, distance: 20, color: "#1e293b", opacity: 100, endOpacity: 100 }
6252
6271
  };
6253
6272
  var VECTOR_EFFECT_LABELS = {
6254
6273
  trim: "Trim Paths",
@@ -6261,7 +6280,8 @@ var VECTOR_EFFECT_LABELS = {
6261
6280
  merge: "Merge Paths",
6262
6281
  repeater: "Repeater",
6263
6282
  envelope: "Envelope",
6264
- contour: "Contour"
6283
+ contour: "Contour",
6284
+ blockShadow: "Block Shadow"
6265
6285
  };
6266
6286
  var VECTOR_EFFECT_PARAM_SPECS = {
6267
6287
  trim: [
@@ -6356,6 +6376,13 @@ var VECTOR_EFFECT_PARAM_SPECS = {
6356
6376
  ]
6357
6377
  }
6358
6378
  ],
6379
+ blockShadow: [
6380
+ { key: "angle", label: "Angle \xB0", kind: "number", min: -360, max: 360, step: 1, slider: true },
6381
+ { key: "distance", label: "Distance", kind: "number", min: 0, max: 2e3, step: 1, slider: true },
6382
+ { key: "color", label: "Colour", kind: "color" },
6383
+ { key: "opacity", label: "Opacity %", kind: "number", min: 0, max: 100, step: 1, slider: true },
6384
+ { key: "endOpacity", label: "End opacity %", kind: "number", min: 0, max: 100, step: 1, slider: true }
6385
+ ],
6359
6386
  repeater: [
6360
6387
  { key: "copies", label: "Copies", kind: "number", min: 0, max: 50, step: 0.1, slider: true },
6361
6388
  { key: "offset", label: "Offset", kind: "number", min: -10, max: 10, step: 0.1, slider: true },
@@ -6636,6 +6663,42 @@ function contourShapes(shapes, c) {
6636
6663
  }
6637
6664
  return out;
6638
6665
  }
6666
+ function blockShadowShapes(shapes, b) {
6667
+ const rad2 = b.angle * Math.PI / 180;
6668
+ const u = { x: Math.cos(rad2), y: Math.sin(rad2) };
6669
+ const distance = Math.max(0, b.distance);
6670
+ const shadows = [];
6671
+ for (const s of shapes) {
6672
+ const color2 = b.color ?? (typeof s.source.fill === "string" && s.source.fill !== "none" ? s.source.fill : "#000000");
6673
+ const path = sweepPath(s.path, u.x * distance, u.y * distance, s.source.fillRule === "evenodd" ? "evenodd" : "nonzero");
6674
+ const box = bezierPathBounds(s.path);
6675
+ if (!path.length || !box) continue;
6676
+ let fill = color2;
6677
+ const near3 = Math.min(100, Math.max(0, b.opacity));
6678
+ const far = Math.min(100, Math.max(0, b.endOpacity));
6679
+ const top = Math.max(near3, far);
6680
+ if (near3 !== far && distance > 0) {
6681
+ const along2 = [box.minX * u.x + box.minY * u.y, box.maxX * u.x + box.minY * u.y, box.minX * u.x + box.maxY * u.y, box.maxX * u.x + box.maxY * u.y];
6682
+ const t0 = Math.min(...along2);
6683
+ const t1 = Math.max(...along2) + distance;
6684
+ const c = { x: (box.minX + box.maxX) / 2, y: (box.minY + box.maxY) / 2 };
6685
+ const k = c.x * u.x + c.y * u.y;
6686
+ fill = {
6687
+ type: "linear",
6688
+ units: "userSpaceOnUse",
6689
+ start: { x: c.x + u.x * (t0 - k), y: c.y + u.y * (t0 - k) },
6690
+ end: { x: c.x + u.x * (t1 - k), y: c.y + u.y * (t1 - k) },
6691
+ stops: [
6692
+ { offset: 0, color: color2, opacity: near3 / top },
6693
+ { offset: 1, color: color2, opacity: far / top }
6694
+ ]
6695
+ };
6696
+ }
6697
+ const source = { ...s.source, fill, stroke: null, fills: void 0, strokes: void 0, fillRule: "nonzero" };
6698
+ shadows.push({ source, path, opacity: s.opacity * top / 100, order: [0, ...s.order] });
6699
+ }
6700
+ return [...shadows, ...shapes.map((s) => ({ ...s, order: [1, ...s.order] }))];
6701
+ }
6639
6702
  function applyVectorEffects(shapes, effects) {
6640
6703
  let list = shapes.slice();
6641
6704
  for (const e of effects ?? []) {
@@ -6679,6 +6742,9 @@ function applyVectorEffects(shapes, effects) {
6679
6742
  case "contour":
6680
6743
  list = contourShapes(list, e.params);
6681
6744
  break;
6745
+ case "blockShadow":
6746
+ list = blockShadowShapes(list, e.params);
6747
+ break;
6682
6748
  case "repeater": {
6683
6749
  const r = e.params;
6684
6750
  const copies = repeatPaths(
@@ -9712,6 +9778,7 @@ export {
9712
9778
  puckerBloatPaths,
9713
9779
  roundCornerPaths,
9714
9780
  offsetPaths,
9781
+ sweepPath,
9715
9782
  twistPaths,
9716
9783
  zigzagPaths,
9717
9784
  wigglePaths,
@@ -9968,4 +10035,4 @@ export {
9968
10035
  lineSubpath,
9969
10036
  roundSubpaths
9970
10037
  };
9971
- //# sourceMappingURL=chunk-CSHEI3YT.js.map
10038
+ //# sourceMappingURL=chunk-WORWH5K5.js.map